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