- 创建java project,建包package cn.itcast.reflect,在包里创建Person类:
package cn.itcast.reflect;
public class Person {
public Person(){//无参构造函数
System.out.println("Hello");
}
public Person(String name){//public 有参构造函数
System.out.println("Hello"+name);
}
private Person(int k){//private 有参构造函数
System.out.println("Hello"+k);
}
}
- 在包package cn.itcast.reflect中建Demo测试类
package cn.itcast.reflect;
import java.lang.reflect.Constructor;
public class Demo {
/*加载类字节码,通过反射创建类的对象*/
public static void main(String args[]) throws Exception{
/*通过无参构造函数加载Person类
* 1.得到cn.itcast.reflect.Person对应的class对象
* Class clazz=Class.forName("cn.itcast.reflect.Person");
* 2.得到clazz类的所有构造方法,此处clazz代表Person类
Constructor con=clazz.getConstructor();
* 3. 根据构造函数new一个实例对象
Person per=(Person) con.newInstance();
*/
/*
* 通过有参构造函数加载Person类
* Class clazz=Class.forName("cn.itcast.reflect.Person");
Constructor con=clazz.getConstructor(String.class); //构造函数参数为String类型
Person per=(Person) con.newInstance("sun");
*/
Class clazz=Class.forName("cn.itcast.reflect.Person");
Constructor con=clazz.getDeclaredConstructor(int.class);//构造函数参数为int类型
con.setAccessible(true);//强制要求可访问私有构造函数
Person per=(Person) con.newInstance(666);
}
}