1. 程式人生 > >4、獲取Class中的建構函式

4、獲取Class中的建構函式

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