【工程截图】
【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*/@Testpublic 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)*/@Testpublic 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)*/@Testpublic 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)*/@Testpublic 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*/@Testpublic void test5() throws Exception{Class clazz=Class.forName("com.Higgin.reflect.Person");Person p=(Person)clazz.newInstance(); //本质就是反射类的无参构造方法反射对象 p.sayHello();}
【运行结果】