反射的用途及实现
反射的核心是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()
四、注意:
由于反射會額外消耗一定的系統資源,因此如果不需要動態地創建一個對象,那么就不需要用反射。
另外,反射調用方法時可以忽略權限檢查,因此可能會破壞封裝性而導致安全問題。
總結
- 上一篇: 分布式系统监控系统zipkin入门
- 下一篇: Kafka设计解析(六)- Kafka高