當前位置:學者齋 >

計算機 >java語言 >

Java反射機制

Java反射機制

導語:最近研究java研究得很給力,主要以看博文為學習方式。以下是小編對java的反射機制所產生的一些感悟,希望各位同學看到失誤之處不吝指出!

Java反射機制

  1.何謂反射機制

根據網文,java中的反射機制可以如此定義:

JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法;這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。

  2.反射機制如何實現

談到反射機制,最誘人的莫過於“動態”二字了。接觸過C語言的童鞋們都知道,C語言中也有個和“動態”搭上邊的函式:malloc()函式。其實這裡的兩個動態是一個意思,都指的是非編譯時處理,抑或執行時處理。這種機制,可以讓程式的彈性增加不少,因為藉由此機制,客戶可以在程式執行時改變一些他關心的性質:分配記憶體(當然他可能 完全不知道這麼做了),呼叫某個類(當然他還是被矇在鼓裡)等。

下面我們就聊聊java中動態機制是如何實現的。

上一篇文章中提到了java的類的載入問題,但沒有更深入地解釋其執行機制,在這裡就先談談這個問題。

首先不得不提到的是s這個類。

有這麼一段話:

Java程式在執行時,Java執行時系統一直對所有的物件進行所謂的執行時型別標識。這項資訊紀錄了每個物件所屬的類。虛擬機器通常使用執行時型別資訊選準正確方法去執行,用來儲存這些型別資訊的類是Class類。

也就是說,ClassLoader找到了需要呼叫的類時(java為了調控記憶體的呼叫消耗,類的載入都在需要時再進行,很摳但是很有效),就會載入它,然後根據s檔案內記載的類資訊來產生一個與該類相聯絡的獨一無二的Class物件。該Class物件記載了該類的欄位,方法等等資訊。以後jvm要產生該類的例項,就是根據記憶體中存在的該Class類所記載的`資訊(Class物件應該和我所瞭解的其他類一樣會在堆記憶體內產生、消亡)來進行。

而java中的Class類物件是可以人工自然性的(也就是說開放的)得到的(雖然你無法像其他類一樣運用構造器來得到它的例項,因為

Class物件都是jvm產生的。不過話說回來,客戶產生的話也是無意義的),而且,更偉大的是,基於這個基礎,java實現了反射機制。

標籤: JAVA 機制
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/java/zxxdn.html