2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、JavaJava類裝載體系中的隔離性類裝載體系中的隔離性Java中類的查找與裝載出現(xiàn)的問題總是會時不時出現(xiàn)在Java程序員面前,這并不是什么丟臉的事情,相信沒有一個Java程序員沒遇到過ClassNotException因此不要為被人瞅見自己也犯這樣的錯誤而覺得不自然,但是在如果出現(xiàn)了ClassNotFoundException后異常后一臉的茫然,那我想你該了解一下java的類裝載的體制了,同時為了進行下面的關于類裝載器之間的隔離性的討

2、論,我們先簡單介紹一下類裝載的體系結(jié)構(gòu)。1.Java類裝載體系結(jié)構(gòu)裝載類的過程非常簡單:查找類所在位置,并將找到的Java類的字節(jié)碼裝入內(nèi)存,生成對應的Class對象。Java的類裝載器專門用來實現(xiàn)這樣的過程,JVM并不止有一個類裝載器,事實上,如果你愿意的話,你可以讓JVM擁有無數(shù)個類裝載器,當然這除了測試JVM外,我想不出還有其他的用途。你應該已經(jīng)發(fā)現(xiàn)到了這樣一個問題,類裝載器自身也是一個類,它也需要被裝載到內(nèi)存中來,那么這些類裝載

3、器由誰來裝載呢,總得有個根吧?沒錯,確實存在這樣的根,它就是神龍見首不見尾的BootstrapClassLoader.為什么說它神龍見首不見尾呢,因為你根本無法在Java代碼中抓住哪怕是它的一點點的尾巴,盡管你能時時刻刻體會到它的存在,因為java的運行環(huán)境所需要的所有類庫,都由它來裝載,而它本身是C寫的程序,可以獨立運行可以說是JVM的運行起點偉大吧。在Bootstrap完成它的任務后,會生成一個AppClassLoader(實際上之

4、前系統(tǒng)還會使用擴展類裝載器ExtClassLoader,它用于裝載Java運行環(huán)境擴展包中的類)這個類裝載器才是我們經(jīng)常使用的,可以調(diào)用ClassLoader.getSystemClassLoader()來獲得,我們假定程序中沒有使用類裝載器相關操作設定或者自定義新的類裝載器,那么我們編寫的所有java類通通會由它來裝載,值得尊敬吧。AppClassLoader查找類的區(qū)域就是耳熟能詳?shù)腃lasspath,也是初學者必須跨過的門檻,有沒

5、有靈光一閃的感覺,我們按照它的類查找范圍給它取名為類路徑類裝載器。還是先前假定的情況,當Java中出現(xiàn)新的類,AppClassLoader首先在類傳遞給它的父類類裝載器,也就是ExtionClassLoader,詢問它是否能夠裝載該類,如果能,那AppClassLoader就不干這活了,同樣ExtionClassLoader在裝載時,也會先問問它的父類裝載器。我們可以看出類裝載器實際上是一個樹狀的結(jié)構(gòu)圖,每個類裝載器有自己的父親,類裝載

6、器在裝載類時,總是先讓自己的父類裝載器裝載(多么尊敬長輩)如果父類裝載器無法裝載該類時,自己就會動手裝載,如果它也裝載不了,那么對不起,它會大喊一聲:Exception,classnotfound。有必要提一句,當由直接使用類路徑裝載器裝載類失敗拋出的是NoClassDefFoundException異常。如果使用自定義的類裝載器loadClass方法或者ClassLoader的findSystemClass方法裝載類,如果你不去刻意改

7、變,那么拋出的是ClassNotFoundException。我們簡短總結(jié)一下上面的討論:去裝載C類,也就是說JVM按照運行時的有效執(zhí)行語句,來決定是否需要裝載新類,從而裝載盡可能少的類,這一點和編譯類是不相同的。2.2顯式的類裝載使用顯示的類裝載方法很多,我們都裝載類test.A為例。使用Class類的fName方法。它可以指定裝載器,也可以使用裝載當前類的裝載器。例如:Class.fName(“test.A“)它的效果和Class.

8、fName(“test.A“truethis.getClass().getClassLoader())是一樣的。使用類路徑類裝載裝載.ClassLoader.getSystemClassLoader().loadClass(“test.A“)使用當前進程上下文的使用的類裝載器進行裝載,這種裝載類的方法常常被有著復雜類裝載體系結(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論