天天看點

反射

加載完類之後,在堆記憶體的方法區中就産生了一個Class類型的對象(一個類隻有一個Class對象),這個對象就包含了完整的類的結構資訊。我們可以通過這個對象看到類的結構。這個對象就像一面鏡子,透過這個鏡子看到類的結構,是以,我們形象的稱之為:反射。

在一個類的外部,是不能通過類的執行個體化對象調用私有化的屬性和方法。

通過反射可以調用類的私有化屬性和方法。

Q:通過直接new對象和反射的方式都可以調用公共結構,開發中用哪個?

A:建議直接使用new的方式。在編譯中無法确定需要new誰的對象,則使用反射的方式。

Q:反射和封裝是否沖突?

A:不沖突。反射的特征:動态性。可以将<code>封裝</code>視為一種提示,提示你需要調用私有化屬性或方法時,可以調用公共的屬性和方法來代替直接調用它。反射表示的是一種能力,表示能不能調用屬性和方法。

類的加載過程:

程式經過<code>javac.exe</code>指令以後,會生成一個或多個位元組碼檔案(.class結尾)。

接着我們使用<code>java.exe</code>指令對某個位元組碼檔案進行解釋運作。相當于将某個位元組碼檔案加載到記憶體中。此過程就稱為類的加載。加載到記憶體中的類,我們就稱為運作時類,此運作時類,就作為<code>CLass</code>的一個執行個體。

擷取Class的執行個體