1.反射機制定義
反射的概念是由Smith在1982年首次提出的徐裸,主要是指程序可以訪問遣鼓、檢測和修改其本身狀態(tài)或行為的一種能力。
在Java環(huán)境中倦逐,反射機制允許程序在執(zhí)行時獲取某個類自身的定義信息譬正,例如熟悉和方法等也可以實現(xiàn)動態(tài)創(chuàng)建 類的對象、變更屬性的內(nèi)容或執(zhí)行特定的方法的功能檬姥。從而使Java具有動態(tài)語言的特性曾我,增強了程序的靈活性和可移植性。
2.反射機制的作用
Java反射機制主要用于實現(xiàn)以下功能健民。
(1)在運行時判斷任意一個對象所屬的類型抒巢。
(2)在運行時構(gòu)造任意一個類的對象。
(3)在運行時判斷任意一個類所具有的成員變量和方法秉犹。
(4)在運行時調(diào)用任意一個對象的方法蛉谜,甚至可以調(diào)用private方法。
注意:上述功能都是在運行時環(huán)境中崇堵,而不是在編譯時環(huán)境中型诚。
3.Java反射機制API
實現(xiàn)Java反射機制的API在Java.lang.reflect包下,具有以下幾點鸳劳。
(1)Class類:代表一個類狰贯。
(2)Filed類:代表類的成員變量。
(3)Method類:代表類的方法赏廓。
(4)Constructor類:代表類的構(gòu)造方法涵紊。
(5)Array類:提供了動態(tài)創(chuàng)建數(shù)組及訪問數(shù)組元素的靜態(tài)方法。該類中的所有方法都是靜態(tài)的幔摸。
4.應(yīng)用示例
(1)根據(jù)類名獲取類中定義的所有屬性和方法摸柄,實例代碼如下:
Student類的定義如下
Java語言反射提供一種動態(tài)鏈接程序組件的多功能方法。它允許程序創(chuàng)建和控制任何類的對象既忆, 無需提前硬編碼目標(biāo)類驱负。這些特性使得反射特別適用于創(chuàng)建以普通方式與對象協(xié)作的庫嗦玖。
反射在性能方面會有一定的損耗,用于字段和方法接入時反射要遠(yuǎn)慢于直接寫代碼电媳。如果它作為程序 運行中相對很少涉及的部分將不會造成影響踏揣,因為即使測試最壞情況下的計時圖顯示的反射操作也只耗用幾微秒。