1. 程式人生 > >反射的用途及實現

反射的用途及實現

反射的核心是JVM在執行時才動態載入類或呼叫方法/訪問屬性,它不需要事先(寫程式碼的時候或編譯期)知道執行物件是誰。

一、Java反射框架主要提供以下功能:

1.在執行時判斷任意一個物件所屬的類;

2.在執行時構造任意一個類的物件;

3.在執行時判斷任意一個類所具有的成員變數和方法(通過反射甚至可以呼叫private方法);

4.在執行時呼叫任意一個物件的方法

二、主要用途 :

1、反射最重要的用途就是開發各種通用框架。

三、基本反射功能的實現(反射相關的類一般都在java.lang.relfect包裡):

1、獲得Class物件

使用Class類的forName靜態方法

直接獲取某一個物件的class

呼叫某個物件的getClass()方法

2、判斷是否為某個類的例項

用instanceof關鍵字來判斷是否為某個類的例項

3、建立例項

使用Class物件的newInstance()方法來建立Class物件對應類的例項。

先通過Class物件獲取指定的Constructor物件,再呼叫Constructor物件的newInstance()方法來建立例項。

4、獲取方法

getDeclaredMethods()

5、獲取構造器資訊

getDeclaredMethods()

getMethods()

getMethod()

6、獲取類的成員變數(欄位)資訊

getFiled: 訪問公有的成員變數

getDeclaredField:所有已宣告的成員變數。但不能得到其父類的成員變數

getFileds和getDeclaredFields用法

7、呼叫方法

invoke()

8、利用反射建立陣列

Array.newInstance()

四、注意:

由於反射會額外消耗一定的系統資源,因此如果不需要動態地建立一個物件,那麼就不需要用反射。

另外,反射呼叫方法時可以忽略許可權檢查,因此可能會破壞封裝性而導致安全問題。