作為一個Java開發工程師,在面試的過程中,反射機制也是經常會被問到的一個問題。例如Spring的IOC實現機制,其底層都是依賴於java的反射機制,因此,這是一個非常重要的知識點。對於初學java的同學來說,掌握其使用方法很有必要。
什麼是java中的反射?在JVM運行狀態下,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠訪問其屬性、調用其方法,並可操作類或對象的內部屬性;這種動態獲取、動態調用對象的方法稱為Java的反射機制。
讀過生硬的文字解釋,讓我們用代碼來解讀反射機制到底是怎麼一回事。首先看常規方法如何操作一個類。

再讓我們看看反射機制是如何操作一個類,如下。

有些同學會疑問,這個代碼看起來更加複雜,的確,反射機制的一系列操作會消耗一定的資源,如果不需要動態地創建一個對象就不要用反射,在一些基礎的代碼框架或業務上,應用比較少,但想要學習一些架構的知識,反射機制的應用必不可少。讓我們看一下反射機制提供了哪些操作。




反射機制允許程序在運行時取得任何一個已知名稱的class的內部信息,包括其修飾符(modifiers),屬性(fields),方法(methods)等,並可在運行時訪問其屬性或調用其方法。反射機制提供了一種更靈活的編碼方式,代碼可以在運行時裝配,無需在組件之間進行原始碼連結,降低代碼的耦合度、動態代理的實現、Spring的IOC等等。但是,反射使用不當會造成很高的資源消耗,我們需要通過更多的實踐掌握反射機制的運用方法。