java反射機制——獲取位元組碼對應類的物件
阿新 • • 發佈:2018-11-09
package cn.itcast.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import cn.itcast.bean.demo.Person; public class ReflectDemo2 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, Exception, Exception, IllegalArgumentException, InvocationTargetException { // 獲取person物件的方法 // creatNewObject_1(); creatNewObject_2(); } public static void creatNewObject_2() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { // 早期: // Person person=new Person("三胖",5); // 如今: // 當獲取指定名稱對應類中的所體現的物件時, // 而該物件初始化不使用空引數建構函式怎麼辦? // 既然是通過指定的建構函式進行物件的初始化, // 所以應該先獲取到該建構函式,通過位元組碼檔案物件即可完成 // 該方法是:getConstructor(paramterType); String classname="cn.itcast.bean.demo.Person"; // 尋找該名稱類檔案,並載入進記憶體,併產生Class物件 Class class1=Class.forName(classname); // 獲取指定構造器的物件 Constructor constructor=class1.getConstructor(String.class,int.class); // 通過該構造器物件的newInstance方法進行物件初始化 Object object=constructor.newInstance("三胖",5); } public static void creatNewObject_1() throws ClassNotFoundException, InstantiationException, IllegalAccessException { // 早期:new的時候,先根據被new的類的名稱尋找該類的位元組碼檔案,並載入進記憶體 // 並建立該位元組碼檔案的物件,並接著建立該位元組碼檔案的對應的Person物件。 Person person=new Person(); // 現在: String classname="cn.itcast.bean.demo.Person"; // 尋找該名稱類檔案,並載入進記憶體,併產生Class物件 Class class1=Class.forName(classname); // 產生該類的物件 Object ob1=class1.newInstance(); } }