杜叔強
摘 要:反射是Java語言中的一種重要的編程機制;總結了Java語言中反射的原理,以及反射相關類的獲取方式,并總結了反射機制的幾點應用。
關鍵詞:反射機制 Class Constructor Field Method
1反射的概念
Java反射是Java被視為動態(或準動態)語言的一個關鍵性質。這個機制允許程序在運行時通過反射API取得任何一個已知名稱的類的內部信息,包括其訪問修飾符、父類、實現的接口,也包括屬性和方法的所有信息,并可在運行時改變屬性值或進行方法調用。Java反射機制容許程序在運行時加載、探知、使用編譯期間完全未知的類。也就是說,Java可以加載一個運行時才得知名稱的類,并且獲得其完整結構信息,這種動態獲取信息以及動態調用對象的成員的功能稱為java語言的反射機制[1]。
2反射的原理
Java反射機制的實現要借助于4個類:Class,Constructor,Field,Method;其中Class代表的是類對象,Constructor是類的構造器對象,Field是類的屬性對象,Method是類的方法對象,通過這四個對象我們可以粗略的看到一個類的各個組成部分。其中最核心的就是Class類,它是實現反射的基礎。Class類的實例就是某個類的描述信息。Class類的實例表示正在運行的Java應用程序中的類和接口。
Class沒有公共構造方法。Class對象是在加載類時由Java虛擬機以及通過調用類加載器中的defineClass方法自動構造的。JVM在程序第一次主動使用某個類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序所有的類都加載到內存中,而是到用的時候才把它加載進來,而且只加載一次。當JVM加載某個類時,會到本地磁盤去找到這個類的字節碼文件,然后將這個字節碼文件加載到JVM內存中,并且在內存堆區創建這個類的Class對象。……