• 01_反射_02_反射类的构造方法


    【工程截图】

    【Person.java】 //将要被反射的类

    package com.Higgin.reflect;
    import java.util.List;
    
    public class Person {
        private String name="NULL";
        private int age=0;
        
        public Person(){
            System.out.println("构造方法:Person()");
        }
        
        public Person(String name){
            System.out.println("构造方法:Person(String name)");
            this.name=name;
        }
        
        public Person(String name,int age){
            this.name=name;
            this.age=age;
            System.out.println("构造方法:Person(String name,int age)");
        }
        
        /**
         * 注意:是private 私有的!!!!!!!!
         */
        private Person(List list){
            System.out.println("构造方法:Person(List list)");
            System.out.println("list.get(0):"+list.get(0));
        }
    
        public void sayHello(){
            System.out.println(name+" say: hello world!");
            System.out.println("I'm "+age+" years old");
        }
    }

    【情况一】

    【Demo01.java】测试反射无参构造方法Person()

    /*
         * 反射Person类的 Person()构造方法,创建类的对象
         * @throws Exception
         */
        @Test
        public void test1() throws Exception{
            
            Class clazz=Class.forName("com.Higgin.reflect.Person");
            //反射构造方法:public Person()
            Constructor c=clazz.getConstructor(null); 
            
            Person p=(Person)c.newInstance(null);
            p.sayHello();
        }

    【运行结果】

    【情况二】

    【Demo01.java】测试反射有参构造方法Person(Strng name)

    /*
         * 反射构造方法:public Person(String name)
         */
        @Test
        public void test2() throws  Exception{
            Class clazz=new Person().getClass();  //注意,这里其实已经先创建了一个对象(因为new Person())
            //反射构造方法:public Person(String name)
            Constructor c=clazz.getConstructor(String.class);
            Person p=(Person) c.newInstance("Jack");
            p.sayHello();
        }

    【运行结果】

    【情况三】

    【Demo01.java】测试Person(String name,int age)的情况

    /*
         * 反射构造方法:public Person(String name,int age)
         */
        @Test
        public void test3() throws  Exception{
            Class clazz=Person.class;
            //反射构造方法:public Person(String name,int age)
            Constructor c=clazz.getConstructor(String.class,int.class);
            Person p=(Person) c.newInstance("Jack",18);
            p.sayHello();
        }

    【运行结果】

     【情况三】

    【Dem01.java】测试private Person(List list)的i情况,注意是私有的

    /*
         * 注意是私有的
         * 反射构造方法:private Person(List list)
         */
        @Test
        public void test4() throws  Exception{
            Class clazz=Person.class;
            //反射构造方法:private Person(List list)
            Constructor c=clazz.getDeclaredConstructor(List.class);
            c.setAccessible(true);    //暴力反射,没有这句会出错的!!!!!!!!
            List list=new ArrayList();
            list.add("6666666");
            Person p=(Person) c.newInstance(list);
            p.sayHello();
        }

    【运行结果】

    【创建对象的另外一种写法】等同于test1()的测试方法

        /**
         * 创建对象的另外一种方式
         * @throws Exception
         */
        @Test
        public void test5() throws  Exception{
            Class clazz=Class.forName("com.Higgin.reflect.Person");
            Person p=(Person)clazz.newInstance();  //本质就是反射类的无参构造方法反射对象
            p.sayHello();
        }

    【运行结果】

  • 相关阅读:
    mysql合并数据
    java协变类型返回
    OSI网络七层模型理解
    mysql性能优化学习
    redis lock 和 tryLock 实际使用区别
    多字段关联同一张表
    第一个Mabits程序
    Mybatis使用Map来实现传递多个参数及Mybati实现模糊查询
    使用Mybatis框架的步骤
    sql小技巧
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5767098.html
Copyright © 2020-2023  润新知