- 創建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);
}
}