<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • java類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)

    時(shí)間:2024-10-14 12:18:29 JAVA認(rèn)證 我要投稿
    • 相關(guān)推薦

    java類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)

      Java 中的類(lèi)加載器大致可以分成兩類(lèi),一類(lèi)是系統(tǒng)提供的,另外一類(lèi)則是由 Java 應(yīng)用開(kāi)發(fā)人員編寫(xiě)的。那么java類(lèi)加載器有哪些,下面yjbys小編為大家一一解讀!

      系統(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ò) 表 1中給出的 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)加載器。圖 1中給出了一個(gè)典型的類(lèi)加載器樹(shù)狀組織結(jié)構(gòu)示意圖,其中的箭頭指向的是父類(lèi)加載器。

      圖 1. 類(lèi)加載器樹(shù)狀組織結(jié)構(gòu)示意圖

      代碼清單 1演示了類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)。

      清單 1. 演示類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)

     

    public class ClassLoaderTree {

     

    public static void main(String[] args) {

     

    ClassLoader loader = ClassLoaderTree.class.getClassLoader();

     

    while (loader != null) {

     

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

     

    loader = loader.getParent();

     

    }

     

    }

     

    }

      每個(gè) Java 類(lèi)都維護(hù)著一個(gè)指向定義它的類(lèi)加載器的引用,通過(guò) getClassLoader()方法就可以獲取到此引用。代碼清單 1中通過(guò)遞歸調(diào)用getParent()方法來(lái)輸出全部的父類(lèi)加載器。代碼清單 1的運(yùn)行結(jié)果如 代碼清單 2所示。

      清單 2. 演示類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)的運(yùn)行結(jié)果

     

    sun.misc.Launcher$AppClassLoader@9304b1

     

    sun.misc.Launcher$ExtClassLoader@190d11

     

     

      如 代碼清單 2所示,第一個(gè)輸出的是 ClassLoaderTree類(lèi)的類(lèi)加載器,即系統(tǒng)類(lèi)加載器。它是 sun.misc.Launcher$AppClassLoader類(lèi)的實(shí)例;第二個(gè)輸出的是擴(kuò)展類(lèi)加載器,是 sun.misc.Launcher$ExtClassLoader類(lèi)的實(shí)例。需要注意的是這里并沒(méi)有輸出引導(dǎo)類(lèi)加載器,這是由于有些 JDK 的實(shí)現(xiàn)對(duì)于父類(lèi)加載器是引導(dǎo)類(lèi)加載器的情況,getParent()方法返回 null。

    【java類(lèi)加載器的樹(shù)狀組織結(jié)構(gòu)】相關(guān)文章:

    Java定時(shí)器代碼的編寫(xiě)06-16

    企業(yè)項(xiàng)目管理組織結(jié)構(gòu)09-02

    Java時(shí)間類(lèi)及函數(shù)用法07-26

    java實(shí)現(xiàn)web服務(wù)器的方法10-14

    Java編寫(xiě)計(jì)算器的的常見(jiàn)做法08-12

    Java Web服務(wù)器(應(yīng)用服務(wù)器)10-03

    java語(yǔ)句及其控制結(jié)構(gòu)題庫(kù)及答案06-24

    組織結(jié)構(gòu)與企業(yè)戰(zhàn)略的匹配06-04

    解析"項(xiàng)目管理"知識(shí)的組織結(jié)構(gòu)05-23

    Java認(rèn)證考試知識(shí)點(diǎn):Java時(shí)間類(lèi)的函數(shù)09-08

    主站蜘蛛池模板: 正在播放酒店精品少妇约| 国产精品免费久久| 亚洲精品WWW久久久久久| A级精品国产片在线观看| 亚洲第一区精品日韩在线播放| 精品国产第1页| 精品国产第一国产综合精品| 日本精品视频在线观看| 91精品国产福利在线观看麻豆 | 人妻少妇精品视频二区| 国产av无码专区亚洲国产精品| 国产精品伦一区二区三级视频| 亚洲精品欧美二区三区中文字幕| 国产精品你懂的在线播放| 久久精品9988| 欧美精品整片300页| 久久狠狠一本精品综合网| 国产精品毛片一区二区三区| 久久精品无码专区免费| 91精品日韩人妻无码久久不卡| 2020国产精品永久在线| 精品乱码一区二区三区四区| 亚洲国产精品综合久久一线 | 免费精品国产自产拍在线观看| 国产精品高清在线观看| 亚洲精品电影网| 亚洲国产精品第一区二区| 国产成人精品久久免费动漫| 国产精品无码AV一区二区三区| 日产欧美国产日韩精品| 自拍偷自拍亚洲精品被多人伦好爽| 精品一区二区三区免费观看| 国产精品成人h片在线| 国产精品成人99久久久久91gav | 人妻少妇精品久久| 亚洲国产精品一区二区九九 | 国产成人精品一区在线| 国产精品99久久精品爆乳| 2021国产精品视频网站| 亚洲国产精品久久久久网站 | 亚洲国产精品无码久久SM|