怎么解析Java類(lèi)加載器

這篇文章給大家介紹怎么解析Java類(lèi)加載器,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

嘉善網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),嘉善網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為嘉善1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的嘉善做網(wǎng)站的公司定做!

顧名思義,類(lèi)加載器(class loader)用來(lái)加載 Java 類(lèi)到 Java 虛擬機(jī)中。一般來(lái)說(shuō),Java 虛擬機(jī)使用 Java 類(lèi)的方式如下:Java 源程序(.java 文件)在經(jīng)過(guò) Java 編譯器編譯之后就被轉(zhuǎn)換成 Java 字節(jié)代碼(.class 文件)。類(lèi)加載器負(fù)責(zé)讀取 Java 字節(jié)代碼,并轉(zhuǎn)換成 java.lang.Class類(lèi)的一個(gè)實(shí)例。每個(gè)這樣的實(shí)例用來(lái)表示一個(gè) Java 類(lèi)。通過(guò)此實(shí)例的 newInstance()方法就可以創(chuàng)建出該類(lèi)的一個(gè)對(duì)象。實(shí)際的情況可能更加復(fù)雜,比如 Java 字節(jié)代碼可能是通過(guò)工具動(dòng)態(tài)生成的,也可能是通過(guò)網(wǎng)絡(luò)下載的。
基本上所有的類(lèi)加載器都是 java.lang.ClassLoader類(lèi)的一個(gè)實(shí)例。下面詳細(xì)介紹這個(gè) Java 類(lèi)。
java.lang.ClassLoader類(lèi)介紹
java.lang.ClassLoader類(lèi)的基本職責(zé)就是根據(jù)一個(gè)指定的類(lèi)的名稱,找到或者生成其對(duì)應(yīng)的字節(jié)代碼,然后從這些字節(jié)代碼中定義出一個(gè) Java 類(lèi),即 java.lang.Class類(lèi)的一個(gè)實(shí)例。
ClassLoader提供了一系列的方法,比較重要的方法如:

方法        說(shuō)明
getParent()        返回該類(lèi)加載器的父類(lèi)加載器。
loadClass(String name)        加載名稱為 name的類(lèi),返回的結(jié)果是 java.lang.Class類(lèi)的實(shí)例。
findClass(String name)        查找名稱為 name的類(lèi),返回的結(jié)果是 java.lang.Class類(lèi)的實(shí)例。
findLoadedClass(String name)        查找名稱為 name的已經(jīng)被加載過(guò)的類(lèi),返回的結(jié)果是 java.lang.Class類(lèi)的實(shí)例。
defineClass(String name, byte[] b, int off, int len)        把字節(jié)數(shù)組 b中的內(nèi)容轉(zhuǎn)換成 Java 類(lèi),返回的結(jié)果是 java.lang.Class類(lèi)的實(shí)例。這個(gè)方法被聲明為 final的。
resolveClass(Class c)        鏈接指定的 Java 類(lèi)。

類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)
Java 中的類(lèi)加載器大致可以分成兩類(lèi),一類(lèi)是系統(tǒng)提供的,另外一類(lèi)則是由 Java 應(yīng)用開(kāi)發(fā)人員編寫(xiě)的。系統(tǒng)提供的類(lèi)加載器主要有下面三個(gè):
引導(dǎo)類(lèi)加載器(bootstrap class loader):它用來(lái)加載 Java 的核心庫(kù),是用原生代碼來(lái)實(shí)現(xiàn)的,并不繼承自java.lang.ClassLoader。
擴(kuò)展類(lèi)加載器(extensions class loader):它用來(lái)加載 Java 的擴(kuò)展庫(kù)。Java 虛擬機(jī)的實(shí)現(xiàn)會(huì)提供一個(gè)擴(kuò)展庫(kù)目錄。該類(lèi)加載器在此目錄里面查找并加載 Java 類(lèi)。
系統(tǒng)類(lèi)加載器(system class loader):它根據(jù) Java 應(yīng)用的類(lèi)路徑(CLASSPATH)來(lái)加載 Java 類(lèi)。一般來(lái)說(shuō),Java 應(yīng)用的類(lèi)都是由它來(lái)完成加載的??梢酝ㄟ^(guò) ClassLoader.getSystemClassLoader()來(lái)獲取它。
除了系統(tǒng)提供的類(lèi)加載器以外,開(kāi)發(fā)人員可以通過(guò)繼承 java.lang.ClassLoader類(lèi)的方式實(shí)現(xiàn)自己的類(lèi)加載器,以滿足一些特殊的需求。
除了引導(dǎo)類(lèi)加載器之外,所有的類(lèi)加載器都有一個(gè)父類(lèi)加載器。通過(guò) 上面表中給出的 getParent()方法可以得到。對(duì)于系統(tǒng)提供的類(lèi)加載器來(lái)說(shuō),系統(tǒng)類(lèi)加載器的父類(lèi)加載器是擴(kuò)展類(lèi)加載器,而擴(kuò)展類(lèi)加載器的父類(lèi)加載器是引導(dǎo)類(lèi)加載器;對(duì)于開(kāi)發(fā)人員編寫(xiě)的類(lèi)加載器來(lái)說(shuō),其父類(lèi)加載器是加載此類(lèi)加載器 Java 類(lèi)的類(lèi)加載器。因?yàn)轭?lèi)加載器 Java 類(lèi)如同其它的 Java 類(lèi)一樣,也是要由類(lèi)加載器來(lái)加載的。一般來(lái)說(shuō),開(kāi)發(fā)人員編寫(xiě)的類(lèi)加載器的父類(lèi)加載器是系統(tǒng)類(lèi)加載器。類(lèi)加載器通過(guò)這種方式組織起來(lái),形成樹(shù)狀結(jié)構(gòu)。樹(shù)的根節(jié)點(diǎn)就是引導(dǎo)類(lèi)加載器。下圖中給出了一個(gè)典型的類(lèi)加載器樹(shù)狀組織結(jié)構(gòu)示意圖,其中的箭頭指向的是父類(lèi)加載器。

關(guān)于怎么解析Java類(lèi)加載器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前標(biāo)題:怎么解析Java類(lèi)加載器
瀏覽路徑:http://muchs.cn/article46/iideeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、微信公眾號(hào)、全網(wǎng)營(yíng)銷(xiāo)推廣網(wǎng)站營(yíng)銷(xiāo)、定制開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化