java反射機制75516

java反射機制75516

ID:19536458

大?。?7.50 KB

頁數(shù):14頁

時間:2018-10-03

java反射機制75516_第1頁
java反射機制75516_第2頁
java反射機制75516_第3頁
java反射機制75516_第4頁
java反射機制75516_第5頁
資源描述:

《java反射機制75516》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、JAVA反射機制定義:  JAVA反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制?! ava反射機制主要提供了以下功能:在運行時判斷任意一個對象所屬的類;在運行時構(gòu)造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生成動態(tài)代理?! ∮袝r候我們說某個語言具有很強的動態(tài)性,有時候我們會區(qū)分動態(tài)和靜態(tài)的不同技術(shù)與作法。我們朗朗

2、上口動態(tài)綁定(dynamicbinding)、動態(tài)鏈接(dynamiclinking)、動態(tài)加載(dynamicloading)等。然而“動態(tài)”一詞其實沒有絕對而普遍適用的嚴(yán)格定義,有時候甚至像對象導(dǎo)向當(dāng)初被導(dǎo)入編程領(lǐng)域一樣,一人一把號,各吹各的調(diào)。  一般而言,開發(fā)者社群說到動態(tài)語言,大致認(rèn)同的一個定義是:“程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言”。從這個觀點看,Perl,Python,Ruby是動態(tài)語言,C++,Java,C#不是動態(tài)語言?! ”M管在這樣的定義與分類下Java不是動態(tài)語言

3、,它卻有著一個非常突出的動態(tài)相關(guān)機制:Reflection。這個字的意思是“反射、映象、倒影”,用在Java身上指的是我們可以于運行時加載、探知、使用編譯期間完全未知的classes。換句話說,Java程序可以加載一個運行時才得知名稱的class,獲悉其完整構(gòu)造(但不包括methods定義),并生成其對象實體、或?qū)ζ鋐ields設(shè)值、或喚起其methods1。這種“看透class”的能力(theabilityoftheprogramtoexamineitself)被稱為introspection(內(nèi)省、內(nèi)觀、反省

4、)。Reflection和introspection是常被并提的兩個術(shù)語?! ava如何能夠做出上述的動態(tài)特性呢?這是一個深遠(yuǎn)話題,本文對此只簡單介紹一些概念。整個篇幅最主要還是介紹ReflectionAPIs,也就是讓讀者知道如何探索class的結(jié)構(gòu)、如何對某個“運行時才獲知名稱的class”生成一份實體、為其fields設(shè)值、調(diào)用其methods。本文將談到j(luò)ava.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes?!癈las

5、s”cla  眾所周知Java有個Objectclass,是所有Javaclasses的繼承根源,其內(nèi)聲明了數(shù)個應(yīng)該在所有Javaclass中被改寫的methods:hashCode()、equals()、clone()、toString()、getClass()等。其中g(shù)etClass()返回一個Classobject。  Classclass十分特殊。它和一般classes一樣繼承自O(shè)bject,其實體用以表達(dá)Java程序運行時的classes和interfaces,也用來表達(dá)enum、array、primi

6、tiveJavatypes(boolean,byte,char,short,int,long,float,double)以及關(guān)鍵詞void。當(dāng)一個class被加載,或當(dāng)加載器(classloader)的defineClass()被JVM調(diào)用,JVM便自動產(chǎn)生一個Classobject。如果您想借由“修改Java標(biāo)準(zhǔn)庫源碼”來觀察Classobject的實際生成時機(例如在Class的constructor內(nèi)添加一個println()),不能夠!因為Class并沒有publicconstructor(見圖1)。本文

7、最后我會撥一小塊篇幅順帶談?wù)凧ava標(biāo)準(zhǔn)庫源碼的改動辦法?! lass是Reflection故事起源。針對任何您想探勘的class,唯有先為它產(chǎn)生一個Classobject,接下來才能經(jīng)由后者喚起為數(shù)十多個的ReflectionAPIs。這些APIs將在稍后的探險活動中一一亮相。  #001publicfinal  #002classClassimplementsSerializable,  #003java.lang.reflect.GenericDeclaration,  #004java.lang.

8、reflect.Type,  #005java.lang.reflect.AnnotatedElement{  #006privateClass(){}  #007publicStringtoString(){  #008return(isInterface()?"interface":  #009(isPrimitive()?"":"class"))  #010+get

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。