麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

java 命名空間 命名規則第1/2頁

2019-11-26 16:20:32
字體:
來源:轉載
供稿:網友
摘要                                                                                      
    Java的類裝載器是Java動態性的核心,本文將向大家簡要介紹Java的類裝載器,及相關的parent delegation模型,命名空間,運行時包等概念,同時討論一些在學習中容易混淆的問題。 

類裝載器的功能及分類

    顧名思義,類裝載器是用來把類(class)裝載進JVM的。JVM規范定義了兩種類型的類裝載器:啟動類裝載器(bootstrap)和用戶自定義裝載器(user-defined class loader)。 

   bootstrap是JVM自帶的類裝載器,用來裝載核心類庫,如java.lang.*等。如java.lang.Object是由bootstrap裝載的。 

   Java提供了抽象類ClassLoader,所有用戶自定義類裝載器都實例化自ClassLoader的子類。 System Class Loader是一個特殊的用戶自定義類裝載器,由JVM的實現者提供,在編程者不特別指定裝載器的情況下默認裝載用戶類。系統類裝載器可以通過ClassLoader.getSystemClassLoader() 方法得到。


例1,測試你所使用的JVM的ClassLoader

/*LoaderSample1.java*/public class LoaderSample1 {    public static void main(String[] args) {        Class c;        ClassLoader cl;
        cl = ClassLoader.getSystemClassLoader();        System.out.println(cl);
        while (cl != null) {            cl = cl.getParent();            System.out.println(cl);        }        try {            c = Class.forName("java.lang.Object");            cl = c.getClassLoader();            System.out.println("java.lang.Object's loader is " + cl);            c = Class.forName("LoaderSample1");            cl = c.getClassLoader();            System.out.println("LoaderSample1's loader is " + cl);        } catch (Exception e) {            e.printStackTrace();        }    }}
在我的機器上(Sun Java 1.5)的運行結果

C:/java>java LoaderSample1
sun.misc.Launcher$AppClassLoader@82ba41
sun.misc.Launcher$ExtClassLoader@923e30
null
java.lang.Object's loader is null
LoaderSample1's loader is sun.misc.Launcher$AppClassLoader@82ba41


第一行表示,系統類裝載器實例化自類sun.misc.Launcher$AppClassLoader 

第二行表示,系統類裝載器的parent實例化自類sun.misc.Launcher$ExtClassLoader 

第三行表示,系統類裝載器parent的parent為bootstrap 

第四行表示,核心類java.lang.Object是由bootstrap裝載的 

第五行表示,用戶類LoaderSample1是由系統類裝載器裝載的 

parent delegation模型

   從1.2版本開始,Java引入了雙親委托模型,從而更好的保證Java平臺的安全。在此模型下,當一個裝載器被請求裝載某個類時,它首先委托自己的parent去裝載,若parent能裝載,則返回這個類所對應的Class對象,若parent不能裝載,則由parent的請求者去裝載。

   如圖1所示,loader2的parent為loader1,loader1的parent為system class loader。假設loader2被要求裝載類MyClass,在parent delegation模型下,loader2首先請求loader1代為裝載,loader1再請求系統類裝載器去裝載MyClass。若系統裝載器能成功裝載,則將MyClass所對應的Class對象的reference返回給loader1,loader1再將reference返回給loader2,從而成功將類MyClass裝載進虛擬機。若系統類裝載器不能裝載MyClass,loader1會嘗試裝載MyClass,若loader1也不能成功裝載,loader2會嘗試裝載。若所有的parent及loader2本身都不能裝載,則裝載失敗。

   若有一個能成功裝載,實際裝載的類裝載器被稱為定義類裝載器,所有能成功返回Class對象的裝載器(包括定義類裝載器)被稱為初始類裝載器。如圖1所示,假設loader1實際裝載了MyClass,則loader1為MyClass的定義類裝載器,loader2和loader1為MyClass的初始類裝載器。


上一篇:java虛擬機

下一篇:返回列表

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲精品一区中文字幕 | 久久久一区二区精品 | caoporn国产一区二区 | 日韩视频高清 | 羞羞网站在线观看入口免费 | 热99精品视频 | 免费毛片播放 | 久在线观看福利视频69 | 思思久而久而蕉人 | 久久久婷婷一区二区三区不卡 | 免费午夜视频在线观看 | 99re热精品视频 | 日韩精品免费看 | 国产无遮挡一区二区三区毛片日本 | 亚洲成人午夜精品 | 狠狠干91| 久久99综合 | 国产精品久久久久久久不卡 | 国产色爱综合网 | 久久不雅视频 | 激情视频日韩 | 性爱视频免费 | 免费一级特黄毛片视频 | 久久靖品 | 欧美性生交zzzzzxxxxx | 欧美中文字幕一区二区三区亚洲 | 欧美特黄一级高清免费的香蕉 | 欧美国产精品一区二区 | 黄色大片大毛片 | 性高跟鞋xxxxhd4kvideos | 成年人网站国产 | 免费中文视频 | 欧美黄色大片免费观看 | 国产91精品一区二区麻豆亚洲 | 亚洲国产精品久久久久久久 | 欧美特一级片 | v片在线看 | 国产91在线亚洲 | 高潮娇喘嗯啊~文字 | omofun 动漫在线观看 | 鲁丝片一区二区三区免费入口 |