java-反射與代理要理解Class類(lèi)class方法getClass_第1頁(yè)
java-反射與代理要理解Class類(lèi)class方法getClass_第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

要理解:Class類(lèi)、.class方法、getClass()方法、Method類(lèi)、Field類(lèi)、invoke()ProxyProxy提供用于創(chuàng)建動(dòng)態(tài)類(lèi)和實(shí)例的靜態(tài)方法它還是由這些方法創(chuàng)建的所有動(dòng)態(tài)類(lèi)的超類(lèi)。動(dòng)態(tài)類(lèi)(以下簡(jiǎn)稱為類(lèi))是一個(gè)實(shí)現(xiàn)在創(chuàng)建類(lèi)時(shí)在運(yùn)行時(shí)指定的接口列表的類(lèi),該類(lèi)具有下面描述的行為。接口是類(lèi)實(shí)現(xiàn)的一個(gè)接口。代理實(shí)例是類(lèi)的一個(gè)實(shí)例。每個(gè)實(shí)例都有一個(gè)關(guān)聯(lián)的調(diào)用處理程序?qū)ο螅梢詫?shí)現(xiàn)接口InvocationHandler。通過(guò)其中一個(gè)接口的實(shí)例上的方法調(diào)用將被指派到實(shí)例的調(diào)用處理程序的Invoke方法,并傳遞實(shí)例、識(shí)別調(diào)用方法的java.lang.reflect.Method對(duì)象以及包含參數(shù)的Object類(lèi)將作為實(shí)例上方法調(diào)用的結(jié)果返回。 類(lèi)是公共的、最終的,而不是抽象的應(yīng)該為類(lèi)保留。類(lèi)擴(kuò)展java.lang.reflect.Proxy,則類(lèi)的包也是未指定的。注意,包密封將不類(lèi)在運(yùn)行時(shí)在特定包中的成功定義也不會(huì)相同類(lèi)加載器和帶有特定簽名的包所定,由于類(lèi)將實(shí)現(xiàn)所有在其創(chuàng)建時(shí)指定的接口,所以對(duì)其Class對(duì)象調(diào)getInterfaces(按其創(chuàng)建時(shí)指定的順序),ClassgetMethodsMethodgetMethod將會(huì)在如果Proxy.isProxyClass方法傳遞類(lèi)(由Proxy.getProxyClass返回true,否則返回false。類(lèi)的java.security.Protection與由引導(dǎo)類(lèi)加載器(如系統(tǒng)代碼生成。此保護(hù)域通常被授予java.security.AllPermission。每個(gè)類(lèi)都有一個(gè)可以帶一個(gè)參(接口InvocationHandler的實(shí)現(xiàn))的公共構(gòu)造方法,用于設(shè)置實(shí)例的調(diào)用處理程序。并非必須使用反射API才能公共構(gòu)造方法,通過(guò)調(diào)用Proxy.newInstance方法(將調(diào)用Proxy.getProxyClass的操作和調(diào)用帶有調(diào)用處理程序的構(gòu)造方法結(jié) 每個(gè)實(shí)例都有一個(gè)關(guān)聯(lián)的調(diào)用處理程序它會(huì)被傳遞到其構(gòu)造方法中。靜態(tài)Proxy.getInvocationHandler方法將返回與作為其參數(shù)傳遞的代調(diào)用處理程序的Invoke方法。在實(shí)例上的java.lang.Object中的hashCode、equals或toString編碼,并被指派到調(diào)用處理程序的invoke方法,如上所述。傳遞到invoke的Method對(duì)象的類(lèi)是java.lang.Object類(lèi)不重寫(xiě)從java.lang.Object繼承的實(shí)例的其他公共方法,所以這些方法的調(diào)用行為與其對(duì)java.lang.Object實(shí)例的操作一樣。在多接口中重復(fù)的方當(dāng)類(lèi)的兩個(gè)或多個(gè)接口包含一個(gè)具有相同名稱和參數(shù)簽名的方法時(shí),類(lèi)的接口順序變得非常重要。在實(shí)例上調(diào)用重復(fù)方法時(shí),傳遞到調(diào)用處理程序的Method對(duì)象沒(méi)有必要成為其類(lèi)可以從接(通過(guò)該接口調(diào)用方法)的類(lèi)型指派的對(duì)象。此限制存在的原因是,生成的類(lèi)中的相應(yīng)方法實(shí)現(xiàn)無(wú)法確定它通過(guò)哪一個(gè)接口調(diào)用。因此,在Method對(duì)象包含接口的類(lèi)列表中的方法(直接或通過(guò)超級(jí)接口繼承),該對(duì)象會(huì)傳遞到調(diào)用處理程序的invoke方法無(wú)論該方法調(diào)用通過(guò)哪一種類(lèi)型發(fā)生。如果接口包含某一方法,它的名稱和參數(shù)簽名與java.lang.Object的hashCode、equals或toString方法相同,那么在實(shí)例上調(diào)用這樣的方法時(shí),傳遞到調(diào)用處理程序的Method對(duì)象將使非最終方法理論上在所有接口之前以便確定哪一個(gè)Method對(duì)象傳還要注意,當(dāng)重復(fù)方法被指派到調(diào)用處理程序時(shí),invoke出經(jīng)過(guò)檢查的異常類(lèi)型,該異常類(lèi)型可以使用所有接口(可以通過(guò)它調(diào)用)throwsinvoke個(gè)檢查的UndeclaredThrowableException。此限制表示并非所有的invokeMethodgetExceptionTypes的異常類(lèi)型都可以由invoke方法成功拋出。newProxyInstance()方publicstaticObject InvocationHandlerh)throws返回一個(gè)指定接口的類(lèi)實(shí)例該接口可以將方法調(diào)用指派到指定的調(diào)Proxy.getProxyClass(loader,interfaces).newInstance(newObject[]{handler});Proxy.newProxyInstanceIllegalArgumentException,原因與Proxy.getProxyClass相同。參數(shù)loader-定義類(lèi)的類(lèi)加載器interfaces-類(lèi)要實(shí)現(xiàn)的接口列表h-指派方法調(diào)用的調(diào)用處理程序返回一個(gè)帶有類(lèi)的指定調(diào)用處理程序的實(shí)例它由指定的類(lèi)加載器定Class類(lèi)型參數(shù)T-由此Class對(duì)象建模的類(lèi)的類(lèi)型。例如,String.class的類(lèi)型是Class<String>Class<?>publicfinalclassClass<T>extendsObjectimplementsSerializable,GenericDeclaration,Type,Class類(lèi)的實(shí)例表示正在運(yùn)行的Java應(yīng)用程序中的類(lèi)和接口。枚舉是一種類(lèi),注釋是一種接口。每個(gè)數(shù)組屬于被為Class對(duì)象的一個(gè)類(lèi),所有具有相同ClassJava(booleanbyte、charshortintlongfloat和double)和關(guān)鍵字void也表示為Class對(duì)ClassClassJava用類(lèi)加載器中的defineClass方法自動(dòng)構(gòu)造的。以下示例使用ClassvoidprintClassName(Objectobj){System.out.prin

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論