Java反射機制
導語:最近研究java研究得很給力,主要以看博文為學習方式。以下是小編對java的反射機制所產(chǎn)生的一些感悟,希望各位同學看到失誤之處不吝指出!
1.何謂反射機制
根據(jù)網(wǎng)文,java中的反射機制可以如此定義:
JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。
2.反射機制如何實現(xiàn)
談到反射機制,最誘人的莫過于“動態(tài)”二字了。接觸過C語言的童鞋們都知道,C語言中也有個和“動態(tài)”搭上邊的函數(shù):malloc()函數(shù)。其實這里的兩個動態(tài)是一個意思,都指的是非編譯時處理,抑或運行時處理。這種機制,可以讓程序的彈性增加不少,因為借由此機制,客戶可以在程序運行時改變一些他關(guān)心的性質(zhì):分配內(nèi)存(當然他可能 完全不知道這么做了),調(diào)用某個類(當然他還是被蒙在鼓里)等。
下面我們就聊聊java中動態(tài)機制是如何實現(xiàn)的。
上一篇文章中提到了java的類的加載問題,但沒有更深入地解釋其運行機制,在這里就先談?wù)勥@個問題。
首先不得不提到的是java.lang.Class這個類。
有這么一段話:
Java程序在運行時,Java運行時系統(tǒng)一直對所有的對象進行所謂的運行時類型標識。這項信息紀錄了每個對象所屬的類。虛擬機通常使用運行時類型信息選準正確方法去執(zhí)行,用來保存這些類型信息的類是Class類。
也就是說,ClassLoader找到了需要調(diào)用的類時(java為了調(diào)控內(nèi)存的調(diào)用消耗,類的加載都在需要時再進行,很摳但是很有效),就會加載它,然后根據(jù).class文件內(nèi)記載的類信息來產(chǎn)生一個與該類相聯(lián)系的獨一無二的Class對象。該Class對象記載了該類的字段,方法等等信息。以后jvm要產(chǎn)生該類的實例,就是根據(jù)內(nèi)存中存在的該Class類所記載的信息(Class對象應(yīng)該和我所了解的其他類一樣會在堆內(nèi)存內(nèi)產(chǎn)生、消亡)來進行。
而java中的Class類對象是可以人工自然性的(也就是說開放的)得到的(雖然你無法像其他類一樣運用構(gòu)造器來得到它的實例,因為
Class對象都是jvm產(chǎn)生的。不過話說回來,客戶產(chǎn)生的話也是無意義的),而且,更偉大的是,基于這個基礎(chǔ),java實現(xiàn)了反射機制。
【Java反射機制】相關(guān)文章:
java中反射機制05-26
Java反射機制學習總結(jié)05-19
Java反射機制應(yīng)用實踐05-31
關(guān)于Java 反射的簡介05-12
java的緩存機制07-29
深入理解java的反射07-16
java使用反射技術(shù)示例06-18
java的緩存機制簡介12-17
java ClassLoader機制講解07-31