1. 程式人生 > >Java基礎之反射

Java基礎之反射

實例 編譯 ring 反序列化 ons 信息 method api 反射

Java反射是指運行時獲取類信息,進而在運行時動態構造對象、調用對象方法及修改對象屬性的機制。百度百科的定義:“JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

一、反射的用途

Java的反射機制可以做3件事:運行時創建對象、運行時調用方法、運行時讀寫屬性。進而實現以下功能:
調用一些私有方法,實現黑科技。比如雙卡短信發送、設置狀態欄顏色、自動掛電話等。

實現序列化與反序列化,比如PO的ORM,Json解析等。

實現跨平臺兼容,比如JDK中的SocketImpl的實現。

通過xml或註解,實現依賴註入(DI),註解處理,動態代理,單元測試等功能。比如Retrofit、Spring或者Dagger。

二、Java反射的優缺點

優點:

(1)能夠運行時動態獲取類的實例,大大提高系統的靈活性和擴展性。
(2)與Java動態編譯相結合,可以實現無比強大的功能

缺點:
(1)使用反射的性能較低
(2)使用反射相對來說不安全
(3)破壞了類的封裝性,可以通過反射獲取這個類的私有方法和屬性

三、Java反射的用法

主要反射API,用來生成在當前JAVA虛擬機中的類、接口或者對象的信息。

●Class類:反射的核心類,可以獲取類的屬性,方法等內容信息。

●Field類:Java.lang.reflect.表示類的屬性,可以獲取和設置類的中屬性值。

●Method類:Java.lang.reflect。表示類的方法,它可以用來獲取類中方法的信息或者執行方法

Construcor類:Java.lang.reflect。表示類的構造方法。

使用步驟:

●獲得想操作類的Java.lang.Class對象
●調用Class的方法
●使用反射API來操作這些信息

Java基礎之反射