標籤:
下面我會通過代碼形式進行講解:
1 package cn.itcast_02; 2 3 import java.lang.reflect.Constructor; 4 5 import cn.itcast_01.Person; 6 7 /* 8 * 通過反射擷取構造方法並使用。 9 */10 public class ReflectDemo {11 public static void main(String[] args) throws Exception {12 // 擷取位元組碼檔案對象13 Class c = Class.forName("cn.itcast_01.Person");//這裡紅色字型的是設定檔,將來我們只要改一下設定檔,就載入另一個類構造,方便14 15 // 擷取構造方法16 // public Constructor[] getConstructors():所有公用構造方法17 // public Constructor[] getDeclaredConstructors():所有構造方法18 // Constructor[] cons = c.getDeclaredConstructors();19 // for (Constructor con : cons) {20 // System.out.println(con);21 // }22 23 // 擷取單個構造方法24 // public Constructor<T> getConstructor(Class<?>... parameterTypes)25 // 參數表示的是:你要擷取的構造方法的構造參數個數及資料類型的class位元組碼檔案對象26 Constructor con = c.getConstructor();// 返回的是構造方法對象27 28 // Person p = new Person();29 // System.out.println(p);30 // public T newInstance(Object... initargs)31 // 使用此 Constructor 對象表示的構造方法來建立該構造方法的聲明類的新執行個體,並用指定的初始化參數初始化該執行個體。32 Object obj = con.newInstance();33 System.out.println(obj);34 35 // Person p = (Person)obj;36 // p.show();37 }38 }
(1)使用public Constructor[] getConstructors(),然後利用增強for迴圈進行遍曆,然後得知如下結果:我們發現只能遍曆公用構造方法。
(2)使用public Constructor[] getDeclaredConstructors():然後利用增強for迴圈進行遍曆,然後得知如下結果:我們發現可以遍曆所有構造方法。
(3)使用public Constructor[] getDeclaredConstructors():我們在原來的Person類中添加一個private構造,然後利用增強for迴圈進行遍曆,然後得知如下結果:我們發現可以遍曆所有構造方法。包括剛剛我們定義的private的構造,是不是感覺很牛逼!!!
Android(java)學習筆記107:通過反射獲得構造方法並且使用