java 利用反射建立執行時類的物件
阿新 • • 發佈:2018-12-18
java 利用反射建立執行時類的物件
1. java 利用反射建立執行時類的物件
1.1. 建立類的物件:呼叫Class物件的newInstance()方法
要 求:
- 類必須有一個無引數的構造器。(預設無參,指定呼叫有參的構造器)
- 類的構造器的訪問許可權需要足夠。
難道沒有無參的構造器就不能建立物件了嗎?
不是!只要在操作的時候明確的呼叫類中的構造方法,並將引數傳遞進去之後,才可以例項化操作。步驟如下:
- 通過Class類的getDeclaredConstructor(Class … parameterTypes)取得本類的指定形參型別的構造器
- 向構造器的形參中傳遞一個物件陣列進去,裡面包含了構造器中所需的各個引數。
- 在Constructor類中存在一個方法
public T newInstance(Object … initargs)
注:以上為反射最常用的和用的最多的地方了。
2.例子demo
- 程式碼
@Test public void test1() throws Exception { String className = "testReflection.Person"; Class clazz = Class.forName(className); //建立對應的執行時類的物件.使用newInstance(),實際就是呼叫了執行時類的空參的構造器 //要想能夠建立承購:①要求對應的執行時類要有空參的構造器 //②構造器的許可權修飾符的許可權要足夠 Object obj = clazz.newInstance(); Person p = (Person)obj; System.out.println(p); }
- 總結
- 建立類的時候,儘量保留空參的構造器
好處:- 有可能我們要通過Java反射機制去建立類物件
- 子類例項化的時候,會呼叫父類的空參構造器,如果沒有空參構造器,會報錯
3. 反射建立物件和正常物件的底層理解
- 其實兩種方法都是通過呼叫類的構造器(Constructor)建立物件的,只是反射的方法,是先有一個大的Class類,再去找到其對應的構造器,然後建立。
- 正常方式的建立物件是當我們new 的時候,就已經呼叫的構造器去建立物件了。