版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JavaJava類裝載體系中的隔離性類裝載體系中的隔離性Java中類的查找與裝載出現(xiàn)的問(wèn)題總是會(huì)時(shí)不時(shí)出現(xiàn)在Java程序員面前,這并不是什么丟臉的事情,相信沒(méi)有一個(gè)Java程序員沒(méi)遇到過(guò)ClassNotException因此不要為被人瞅見(jiàn)自己也犯這樣的錯(cuò)誤而覺(jué)得不自然,但是在如果出現(xiàn)了ClassNotFoundException后異常后一臉的茫然,那我想你該了解一下java的類裝載的體制了,同時(shí)為了進(jìn)行下面的關(guān)于類裝載器之間的隔離性的討
2、論,我們先簡(jiǎn)單介紹一下類裝載的體系結(jié)構(gòu)。1.Java類裝載體系結(jié)構(gòu)裝載類的過(guò)程非常簡(jiǎn)單:查找類所在位置,并將找到的Java類的字節(jié)碼裝入內(nèi)存,生成對(duì)應(yīng)的Class對(duì)象。Java的類裝載器專門用來(lái)實(shí)現(xiàn)這樣的過(guò)程,JVM并不止有一個(gè)類裝載器,事實(shí)上,如果你愿意的話,你可以讓JVM擁有無(wú)數(shù)個(gè)類裝載器,當(dāng)然這除了測(cè)試JVM外,我想不出還有其他的用途。你應(yīng)該已經(jīng)發(fā)現(xiàn)到了這樣一個(gè)問(wèn)題,類裝載器自身也是一個(gè)類,它也需要被裝載到內(nèi)存中來(lái),那么這些類裝載
3、器由誰(shuí)來(lái)裝載呢,總得有個(gè)根吧?沒(méi)錯(cuò),確實(shí)存在這樣的根,它就是神龍見(jiàn)首不見(jiàn)尾的BootstrapClassLoader.為什么說(shuō)它神龍見(jiàn)首不見(jiàn)尾呢,因?yàn)槟愀緹o(wú)法在Java代碼中抓住哪怕是它的一點(diǎn)點(diǎn)的尾巴,盡管你能時(shí)時(shí)刻刻體會(huì)到它的存在,因?yàn)閖ava的運(yùn)行環(huán)境所需要的所有類庫(kù),都由它來(lái)裝載,而它本身是C寫的程序,可以獨(dú)立運(yùn)行可以說(shuō)是JVM的運(yùn)行起點(diǎn)偉大吧。在Bootstrap完成它的任務(wù)后,會(huì)生成一個(gè)AppClassLoader(實(shí)際上之
4、前系統(tǒng)還會(huì)使用擴(kuò)展類裝載器ExtClassLoader,它用于裝載Java運(yùn)行環(huán)境擴(kuò)展包中的類)這個(gè)類裝載器才是我們經(jīng)常使用的,可以調(diào)用ClassLoader.getSystemClassLoader()來(lái)獲得,我們假定程序中沒(méi)有使用類裝載器相關(guān)操作設(shè)定或者自定義新的類裝載器,那么我們編寫的所有java類通通會(huì)由它來(lái)裝載,值得尊敬吧。AppClassLoader查找類的區(qū)域就是耳熟能詳?shù)腃lasspath,也是初學(xué)者必須跨過(guò)的門檻,有沒(méi)
5、有靈光一閃的感覺(jué),我們按照它的類查找范圍給它取名為類路徑類裝載器。還是先前假定的情況,當(dāng)Java中出現(xiàn)新的類,AppClassLoader首先在類傳遞給它的父類類裝載器,也就是ExtionClassLoader,詢問(wèn)它是否能夠裝載該類,如果能,那AppClassLoader就不干這活了,同樣ExtionClassLoader在裝載時(shí),也會(huì)先問(wèn)問(wèn)它的父類裝載器。我們可以看出類裝載器實(shí)際上是一個(gè)樹狀的結(jié)構(gòu)圖,每個(gè)類裝載器有自己的父親,類裝載
6、器在裝載類時(shí),總是先讓自己的父類裝載器裝載(多么尊敬長(zhǎng)輩)如果父類裝載器無(wú)法裝載該類時(shí),自己就會(huì)動(dòng)手裝載,如果它也裝載不了,那么對(duì)不起,它會(huì)大喊一聲:Exception,classnotfound。有必要提一句,當(dāng)由直接使用類路徑裝載器裝載類失敗拋出的是NoClassDefFoundException異常。如果使用自定義的類裝載器loadClass方法或者ClassLoader的findSystemClass方法裝載類,如果你不去刻意改
7、變,那么拋出的是ClassNotFoundException。我們簡(jiǎn)短總結(jié)一下上面的討論:去裝載C類,也就是說(shuō)JVM按照運(yùn)行時(shí)的有效執(zhí)行語(yǔ)句,來(lái)決定是否需要裝載新類,從而裝載盡可能少的類,這一點(diǎn)和編譯類是不相同的。2.2顯式的類裝載使用顯示的類裝載方法很多,我們都裝載類test.A為例。使用Class類的fName方法。它可以指定裝載器,也可以使用裝載當(dāng)前類的裝載器。例如:Class.fName(“test.A“)它的效果和Class.
8、fName(“test.A“truethis.getClass().getClassLoader())是一樣的。使用類路徑類裝載裝載.ClassLoader.getSystemClassLoader().loadClass(“test.A“)使用當(dāng)前進(jìn)程上下文的使用的類裝載器進(jìn)行裝載,這種裝載類的方法常常被有著復(fù)雜類裝載體系結(jié)構(gòu)的系統(tǒng)所使用。Thread.currentThread().getContextClassLoader().l
9、oadClass(“test.A“)使用自定義的類裝載器裝載類publicclassMyClassLoaderextendsURLClassLoaderpublicMyClassLoader()super(newURL[0])MyClassLoadermyClassLoader=newMyClassLoader()myClassLoader.loadClass(“test.A“)MyClassLoader繼承了URLClassLoade
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Java SoC中的類裝載器設(shè)計(jì)研究.pdf
- java虛擬機(jī)的類的裝載
- Java類裝載機(jī)制的研究及其在代碼保護(hù)中的應(yīng)用.pdf
- 實(shí)時(shí)Java平臺(tái)的研究——一種面向?qū)崟r(shí)Java平臺(tái)的類裝載器的設(shè)計(jì).pdf
- 共升傳媒包裝載體廣告
- ehcache工具類(java工程中單獨(dú)使用)
- ehcache工具類(java工程中單獨(dú)使用)
- 理光復(fù)印機(jī)安裝載體的方法
- 實(shí)驗(yàn)四 java類的重用
- 淡水微生物鐵載體在類Fenton體系中降解水中普萘洛爾的研究.pdf
- atm管理系統(tǒng)(java類)
- Java集成開發(fā)環(huán)境中編譯、裝載和多候選方案的可視化研究與實(shí)現(xiàn).pdf
- java常用類與方法大全
- 非滲透隔離液體系的研究.pdf
- 成膜隔離液體系的研究.pdf
- 維修作業(yè)中的能量隔離
- Cloud Foundry中Java應(yīng)用集合類內(nèi)存泄漏檢測(cè).pdf
- java練習(xí)冊(cè)(009)--類(1)
- 11.java 常用類講解2
- PAMAM樹形分子納米組裝體系在基因遞送載體中的應(yīng)用.pdf
評(píng)論
0/150
提交評(píng)論