面試題:什么是reflection?其他語言有這種特點嗎?
答案:Java中的反射是一種強大的工具,它能夠創建靈活的代碼,這些代碼可以在運行時裝配,無需在組件之間進行鏈接。反射允許在編寫與執行時,使程序代碼能夠接入裝載到JVM中的類的內部信息,而不是源代碼中選定的類協作的代碼。這使反射成為構建靈活應用的主要工具。需要注意的是,如果使用不當,發射的成本會很高。
Java中的類發射reflection是Java程序開發語言的特征之一,它允許運行中的Java程序對自身進行檢查,或者說“自審”,并能直接操作程序的內部屬性。Java的這一能力在實際應用中也許用的不是很多,但是在其他程序語言中根本就不存在這一特性,例如,Pascal、C、或者C++中就沒有辦法在程序中獲得與函數定義相關的信息。
拓展知識
反射主要是指程序可以訪問,檢測和修改它本身的狀態或行為的一種能力。這一概念的提出很快引發了計算機科學領域相關應用反射性的研究。它首先被程序語言的設計領域所應用,并在LISP和面向對象方面取得了成績,其中LEAD/LEAD++、OpenC++、MetaXa和OpenJava等就是基于反射機制的語言。最近,反射機制也被應用到了視窗系統、操作系統和文件系統中。
反射本身并不是一個新概念,他可能會被聯想到光學中的反射概念,盡管計算機科學賦予了反射概念新的含義,但是從現象上來說,它們能夠自描述和自控制。也就是說,這類應用通過采用某種機制來實現對自己行為的描述和監測,并能根據自身行為的狀態和結果,調整或修改應用所描述行為的狀態和相關的語義。可以看出,與一般的反射概念相比,計算機科學領域的反射不單單指反射本身,還包括堆發射結果所采取的措施。所有采用發反射機制的系統都希望使系統的實現更開放。可以說,實現了反射機制的系統都具有開放性,但具有開放性的系統并不一定采用了反射機制,開放性是反射系統的必要條件。一般來說,反射系統除了滿足開放性條件外,還必須滿足原因連接。所謂原因連接,是指對反射系統自描述的改變能夠立即反映到系統底層的實際狀態和行為上的情況,反之亦然。開放性和原因連接是反射系統的兩大基本要素。
更多Java知識,Java視頻,Java教程盡在動力節點Java培訓,關注動力節點官方微信,獲得一手Java面試題。