首頁  >  文章  >  Java  >  Java類別載入機制ClassLoder的詳解(圖文)

Java類別載入機制ClassLoder的詳解(圖文)

黄舟
黄舟原創
2017-03-15 13:11:552101瀏覽

紙上得來終覺淺,絕知此事要躬行 --陸遊      #問渠那得清如許,為有源頭活水來 --朱熹


#一個類別從被載入到記憶體開始到卸載出記憶體為止,它的整個生命週期包含了:載入(loading)、驗證(Verification)、準備(Preparetation)、解析(Resolution)、

初始化(Initialization)、使用(Using) 、卸載(Uploading)七個階段。其中驗證’準備和解析稱為連結。





##Loader類載入的架構

 1)、Bootstrap Classloader啟動類別載入器,主要負責java_home/lib下的核心api或-Xbootstrap選項指定的jar包裝入工作。

 2)、Extension ClassLoader擴充類別載入器,主要負責java_home/lib/ext下jar套件

 3)、App CLassLoader 系統類別載入器,主要負責Java -classpath/所指的目錄下的類別與jar包的裝入工作;

 4)、 UserCustom ClassLoader用戶自訂類別載入器,在程式運作期間,透過Java.lang.Classloader的子類別動態載入class


二、類別載入的特性

1)、每一個ClassLoader都會維護一個自己的命名空間,同一個命名空間不能出現兩個相同的類別名稱

2)、為了實作java安全沙箱模型頂層的類載入器安全機制, java預設採用了" 雙親委派的載入鏈" 結構。

三、類別的載入方式有三種:

1)、命令列啟動應用時由JVM初始化載入。

2)、透過class.forName()方法動態載入。

3)、透過ClassLoader().loadClass()方法動態載入。

這三種載入方式對靜態程式碼區塊的執行有影響。

如下範例:

public class MyHello {    static    {
        System.out.println("hello word");    }
}public class Hello {    public static void main(String[] args) {
        ClassLoader loader=Hello.class.getClassLoader();        
        try {            
        //静态代码块不运行            
        //loader.loadClass("Test.MyHello");            
        //静态代码块运行输出hello world            
        //Class.forName("Test.MyHello");            
        //静态代码块不运行            
        //Class.forName("Test.MyHello", false, loader);            
        //静态代码块运行输出hello world            
        Class.forName("Test.MyHello", true, loader);        
        } 
        catch (ClassNotFoundException e) {            
        // TODO 自动生成的 catch 块            
        e.printStackTrace();       
         }
    }
}

#一、ClassLoader類別載入的架構

 # 1)、Bootstrap Classloader啟動類別載入器,主要負責java_home/lib下的核心api或-Xbootstrap選項指定的jar包裝入工作。

 2)、Extension ClassLoader擴充類別載入器,主要負責java_home/lib/ext下jar套件

 3)、App CLassLoader 系統類別載入器,主要負責Java -classpath/所指的目錄下的類別與jar套件的裝入工作;

 4)、UserCustom ClassLoader使用者自訂類別載入器,在程式運作期間,透過Java.lang.Classloader的子類別動態載入class

以上是Java類別載入機制ClassLoder的詳解(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn