亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ClassLoader該如何解析

發布時間:2021-12-28 15:09:18 來源:億速云 閱讀:119 作者:柒染 欄目:大數據

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

java.lang.ClassLoader類概述:

ClassLoader類的作用就是根據一個指定的類的全限定名,找到對應的Class字節碼文件,然后加載它轉化成一個java.lang.Class類的一個實例.

類加載器的劃分:

   大部分java程序會使用以下3中系統提供的類加載器:

啟動類加載器(Bootstrap ClassLoader):

    這個類加載器負責將\lib目錄下的類庫加載到虛擬機內存中,用來加載java的核心庫,此類加載器并不繼承于java.lang.ClassLoader,不能被java程序直接調用,代碼是使用C++編寫的.是虛擬機自身的一部分.

擴展類加載器(Extendsion ClassLoader):

這個類加載器負責加載\lib\ext目錄下的類庫,用來加載java的擴展庫,開發者可以直接使用這個類加載器.

應用程序類加載器(Application ClassLoader):

    這個類加載器負責加載用戶類路徑(CLASSPATH)下的類庫,一般我們編寫的java類都是由這個類加載器加載,這個類加載器是CLassLoader中的getSystemClassLoader()方法的返回值,所以也稱為系統類加載器.一般情況下這就是系統默認的類加載器.

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

使用代碼觀察一下類加載器:

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());

    }

}

  觀察打印結果:

sun.misc.Launcher$AppClassLoader@500c05c2

sun.misc.Launcher$ExtClassLoader@454e2c9c

null

  第一行打印的是應用程序類加載器(默認加載器),第二行打印的是其父類加載器,擴展類加載器,按照我們的想法第三行應該打印啟動類加載器的,這里卻返回的null,原因是getParent(),返回時null的話,就默認使用啟動類加載器作為父加載器.

 類加載器的雙親委派模型:

  雙親委派模型是一種組織類加載器之間關系的一種規范,他的工作原理是:如果一個類加載器收到了類加載的請求,它不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,這樣層層遞進,最終所有的加載請求都被傳到最頂層的啟動類加載器中,只有當父類加載器無法完成這個加載請求(它的搜索范圍內沒有找到所需的類)時,才會交給子類加載器去嘗試加載.

  這樣的好處是:java類隨著它的類加載器一起具備了帶有優先級的層次關系.這是十分必要的,比如java.langObject,它存放在\jre\lib\rt.jar中,它是所有java類的父類,因此無論哪個類加載都要加載這個類,最終所有的加載請求都匯總到頂層的啟動類加載器中,因此Object類會由啟動類加載器來加載,所以加載的都是同一個類,如果不使用雙親委派模型,由各個類加載器自行去加載的話,系統中就會出現不止一個Object類,應用程序就會全亂了.

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

  Class.forname():是一個靜態方法,最常用的是Class.forname(String className);根據傳入的類的全限定名返回一個Class對象.該方法在將Class文件加載到內存的同時,會執行類的初始化.

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

  ClassLoader.loadClass():這是一個實例方法,需要一個ClassLoader對象來調用該方法,該方法將Class文件加載到內存時,并不會執行類的初始化,直到這個類第一次使用時才進行初始化.該方法因為需要得到一個ClassLoader對象,所以可以根據需要指定使用哪個類加載器.

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

上述內容就是ClassLoader該如何解析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巨鹿县| 木里| 西林县| 德庆县| 灵川县| 本溪| 龙陵县| 陇西县| 墨竹工卡县| 来宾市| 专栏| 神农架林区| 临海市| 双流县| 梅州市| 巴林左旗| 马龙县| 盐山县| 固镇县| 昌都县| 吴忠市| 鄂温| 河北省| 蒙城县| 黑水县| 特克斯县| 崇信县| 桦甸市| 新巴尔虎右旗| 广饶县| 衡南县| 平阳县| 固阳县| 固原市| 云南省| 安阳市| 视频| 平乐县| 赞皇县| 防城港市| 五常市|