4、獲取Class中的建構函式
阿新 • • 發佈:2018-11-30
4、獲取Class中的建構函式
4.1 早期建立物件
- 早期建立物件,先根據被new的類的名稱找尋該類的位元組碼檔案,並載入進記憶體,並建立該位元組碼檔案物件,並接著建立該接檔案的對應的Person物件
com.hw.bean.Person p = new com.hw.bean.Person();
4.2 現在建立物件
- 找尋該名稱類檔案,並載入進記憶體,呼叫newInstance() 建立由此 類物件表示的類的新例項。
@Test public void createNewObject_1() throws Exception { // 早期建立物件,先根據被new的類的名稱找尋該類的位元組碼檔案,並載入進記憶體, // 並建立該位元組碼檔案物件,並接著建立該接檔案的對應的Person物件 com.hw.bean.Person p = new com.hw.bean.Person(); // 現在 String name = "com.hw.bean.Person"; // 找尋該名稱類檔案,並載入進記憶體,併產生Class物件 Class clazz = Class.forName(name); // 通過空參構造器獲取例項 Object obj = clazz.newInstance(); }
- 當獲取指定名稱對應類中的所體現的物件時,而該物件初始化不是用空引數構造該怎麼辦呢?
- 既然是通過指定的建構函式,進行物件的初始化,所以應該先獲取到建構函式。
4.3 獲取Class中的建構函式
4.3.1 getConstructor(類<?>... parameterTypes)
- 返回一個 Constructor物件,該物件反映 Constructor物件表示的類的指定的公共 類函式。
- parameterTypes引數是以宣告順序標識建構函式的形式引數型別的類物件的陣列。
- 如果此類物件表示在非靜態上下文中宣告的內部類,則形式引數型別將顯式包圍例項作為第一個引數。
- 反映的構造是這樣表示的類的公共構造類物件,其形式引數型別匹配那些由指定的parameterTypes 。
@Test public void createNewObject_2() throws Exception { String name = "com.hw.bean.Person"; Class clazz = Class.forName(name); // 獲取指定方法引數的構造物件 Constructor constructor = clazz.getConstructor(String.class, int.class); System.out.println(constructor); // 通過該構造器物件的newInstance()方法進行物件的初始化 Object obj = constructor.newInstance("小明", 22); }
執行
本章節原始碼: ReflectDemo2