欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ClassLoader該如何解析

本篇文章為大家展示了ClassLoader該如何解析,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),新市企業(yè)網(wǎng)站建設(shè),新市品牌網(wǎng)站建設(shè),網(wǎng)站定制,新市網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,新市網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

java.lang.ClassLoader類(lèi)概述:

ClassLoader類(lèi)的作用就是根據(jù)一個(gè)指定的類(lèi)的全限定名,找到對(duì)應(yīng)的Class字節(jié)碼文件,然后加載它轉(zhuǎn)化成一個(gè)java.lang.Class類(lèi)的一個(gè)實(shí)例.

類(lèi)加載器的劃分:

大部分java程序會(huì)使用以下3中系統(tǒng)提供的類(lèi)加載器:

啟動(dòng)類(lèi)加載器(Bootstrap ClassLoader):

    這個(gè)類(lèi)加載器負(fù)責(zé)將\lib目錄下的類(lèi)庫(kù)加載到虛擬機(jī)內(nèi)存中,用來(lái)加載java的核心庫(kù),此類(lèi)加載器并不繼承于java.lang.ClassLoader,不能被java程序直接調(diào)用,代碼是使用C++編寫(xiě)的.是虛擬機(jī)自身的一部分.

擴(kuò)展類(lèi)加載器(Extendsion ClassLoader):

這個(gè)類(lèi)加載器負(fù)責(zé)加載\lib\ext目錄下的類(lèi)庫(kù),用來(lái)加載java的擴(kuò)展庫(kù),開(kāi)發(fā)者可以直接使用這個(gè)類(lèi)加載器.

應(yīng)用程序類(lèi)加載器(Application ClassLoader):

這個(gè)類(lèi)加載器負(fù)責(zé)加載用戶類(lèi)路徑(CLASSPATH)下的類(lèi)庫(kù),一般我們編寫(xiě)的java類(lèi)都是由這個(gè)類(lèi)加載器加載,這個(gè)類(lèi)加載器是CLassLoader中的getSystemClassLoader()方法的返回值,所以也稱(chēng)為系統(tǒng)類(lèi)加載器.一般情況下這就是系統(tǒng)默認(rèn)的類(lèi)加載器.

除此之外,我們還可以加入自己定義的類(lèi)加載器,以滿足特殊的需求,需要繼承java.lang.ClassLoader類(lèi).

使用代碼觀察一下類(lèi)加載器:

package com.wang.test;publicclass TestClassLoader {

    publicstaticvoid main(String[] args) {

        ClassLoader loader = TestClassLoader.class.getClassLoader();

        System.out.println(loader.toString());

        System.out.println(loader.getParent().toString());

        System.out.println(loader.getParent().getParent());

    }

}

觀察打印結(jié)果:

sun.misc.Launcher$AppClassLoader@500c05c2

sun.misc.Launcher$ExtClassLoader@454e2c9c

null

第一行打印的是應(yīng)用程序類(lèi)加載器(默認(rèn)加載器),第二行打印的是其父類(lèi)加載器,擴(kuò)展類(lèi)加載器,按照我們的想法第三行應(yīng)該打印啟動(dòng)類(lèi)加載器的,這里卻返回的null,原因是getParent(),返回時(shí)null的話,就默認(rèn)使用啟動(dòng)類(lèi)加載器作為父加載器.

 類(lèi)加載器的雙親委派模型:

雙親委派模型是一種組織類(lèi)加載器之間關(guān)系的一種規(guī)范,他的工作原理是:如果一個(gè)類(lèi)加載器收到了類(lèi)加載的請(qǐng)求,它不會(huì)自己去嘗試加載這個(gè)類(lèi),而是把這個(gè)請(qǐng)求委派給父類(lèi)加載器去完成,這樣層層遞進(jìn),最終所有的加載請(qǐng)求都被傳到最頂層的啟動(dòng)類(lèi)加載器中,只有當(dāng)父類(lèi)加載器無(wú)法完成這個(gè)加載請(qǐng)求(它的搜索范圍內(nèi)沒(méi)有找到所需的類(lèi))時(shí),才會(huì)交給子類(lèi)加載器去嘗試加載.

這樣的好處是:java類(lèi)隨著它的類(lèi)加載器一起具備了帶有優(yōu)先級(jí)的層次關(guān)系.這是十分必要的,比如java.langObject,它存放在\jre\lib\rt.jar中,它是所有java類(lèi)的父類(lèi),因此無(wú)論哪個(gè)類(lèi)加載都要加載這個(gè)類(lèi),最終所有的加載請(qǐng)求都匯總到頂層的啟動(dòng)類(lèi)加載器中,因此Object類(lèi)會(huì)由啟動(dòng)類(lèi)加載器來(lái)加載,所以加載的都是同一個(gè)類(lèi),如果不使用雙親委派模型,由各個(gè)類(lèi)加載器自行去加載的話,系統(tǒng)中就會(huì)出現(xiàn)不止一個(gè)Object類(lèi),應(yīng)用程序就會(huì)全亂了.

Class.forname()與ClassLoader.loadClass():

Class.forname():是一個(gè)靜態(tài)方法,最常用的是Class.forname(String className);根據(jù)傳入的類(lèi)的全限定名返回一個(gè)Class對(duì)象.該方法在將Class文件加載到內(nèi)存的同時(shí),會(huì)執(zhí)行類(lèi)的初始化.

如: Class.forName("com.wang.HelloWorld");

ClassLoader.loadClass():這是一個(gè)實(shí)例方法,需要一個(gè)ClassLoader對(duì)象來(lái)調(diào)用該方法,該方法將Class文件加載到內(nèi)存時(shí),并不會(huì)執(zhí)行類(lèi)的初始化,直到這個(gè)類(lèi)第一次使用時(shí)才進(jìn)行初始化.該方法因?yàn)樾枰玫揭粋€(gè)ClassLoader對(duì)象,所以可以根據(jù)需要指定使用哪個(gè)類(lèi)加載器.

如:ClassLoader cl=.......;cl.loadClass("com.wang.HelloWorld");

上述內(nèi)容就是ClassLoader該如何解析,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享名稱(chēng):ClassLoader該如何解析
本文網(wǎng)址:http://www.chinadenli.net/article22/ieodjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google企業(yè)網(wǎng)站制作虛擬主機(jī)電子商務(wù)標(biāo)簽優(yōu)化外貿(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)

網(wǎng)站托管運(yùn)營(yíng)