這篇文章主要介紹“Java類加載機(jī)制怎么理解”,在日常操作中,相信很多人在Java類加載機(jī)制怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java類加載機(jī)制怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。成都創(chuàng)新互聯(lián)公司將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。
類加載器
簡單講,類加載器ClassLoader的功能就是負(fù)責(zé)將class文件加載到j(luò)vm內(nèi)存。
類加載器分類
從虛擬機(jī)層面講分為兩大類型的類加載器,一是Bootstrap Classloader即啟動類加載器(C++實現(xiàn)),它是虛擬機(jī)的一部分,二是其他類型類加載器(JAVA實現(xiàn)),在虛擬機(jī)外部,并全部繼承ClassLoader類。
從細(xì)分的角度講會分為以下三類類加載器:
1、Bootsrap ClassLoader
啟動類加載器,完全由jvm控制加載,外面訪問不到這個類加載器,即不能被java程序引用。它主要負(fù)責(zé)加載jvm自身的工作類,即java/lib目錄和-Xbootclasspath參數(shù)指定的目錄的類庫。
2、Extension ClassLoader
擴(kuò)展類加載器,由java實現(xiàn),即ExtClassLoader實現(xiàn)類。它主要負(fù)責(zé)加載java/lib/ext目錄和系統(tǒng)環(huán)境變量java.ext.dirs指定目錄所有類庫。
3、Application ClassLoader
應(yīng)用程序類加載器,由java實現(xiàn),即AppClassLoader實現(xiàn)類。它的父類是ExtClassLoader,它主要負(fù)責(zé)加載classpath目錄上的類庫。如果沒有自定義ClassLoader,它就是程序中默認(rèn)的ClassLoader,即可以通過ClassLoader.getSystemClassLoader()獲取當(dāng)前系統(tǒng)的類加載器。
從上圖看雖然Bootstrap ClassLoader是最頂層的類加載器,但是不能被程序引用,它也不是ExtClassLoader的父類加載器,ExtClassLoader沒有父類載器,我們不防來看下面簡單的例子。
程序首先輸出了程序默認(rèn)的類加載器AppClassLoader,然后再輸出了其父類加載器ExtClassLoader,然后就完了,這就證實了上面的理論。
類加載機(jī)制
雖然定義了上面這幾個類加載器,但在加載時類加載器會審查一個class類應(yīng)該由哪個類型的加載器負(fù)責(zé)加載,它使用的是等級加載機(jī)制,是一種雙親委派模型。
雙親委派模式要求所有類加載器,除了頂層的Bootstrap類加載器之外都要有自己的父類加載器。在收到一個類加載請求時,當(dāng)前默認(rèn)的類加載器它不會首先自己來加載這個類,它會委托給自己的父類加載器去加載,父類加載器再委托給父父類加載器,以此類推,直到頂層類加載器,由上到下加載,除非上面的類加載器都無法加載時自己才去加載。
來看看ClassLoader.loadClass方法源碼
再回到之前文章中的有一道關(guān)于是否可以自定義類java.lang.String并使用的面試題,它在java/lib目錄下,所以當(dāng)應(yīng)用類加載器去classpath加載時會去委托父類加載器,這時最頂層類加載器會發(fā)現(xiàn)自己之前已經(jīng)加載過,所以這次不再加載,所以自定義的這個java.lang.String雖然可以正常編譯,但不能被類加載器加載并使用。
所以,這也是雙親委派模式的好處,同一個路徑的類保證不能加載兩次,保證了類與類之間的正常行為和正常運行。
到此,關(guān)于“Java類加載機(jī)制怎么理解”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享名稱:Java類加載機(jī)制怎么理解
文章網(wǎng)址:http://weahome.cn/article/gidcss.html