Java中各種ClassLoader加載時資源搜索路徑

關於Java如何加載類,能夠參考下面這篇文章: 
http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 

這裏咱們來了解下,各種ClassLoader是從哪些地方去尋找class類文件進行加載的? 

JVM是經過一個稱爲ClassLoader東西來加載Class文件的,每當JVM啓動,它就會生成三個ClassLoader,它們分別是Bootstrap Loader, ExtClassLoader 和AppClassLoader。 

這三個ClassLoader做用是不一樣的,它們所加載的class文件也是不一樣的。 
java

  • Bootstrap Loader是用C++語言實現的,它所加載的是JVM中最底層的類,它加載時的搜索路徑是由sun.boot.class.path所指定的。spa

  • Java代碼  收藏代碼ssl

    1. System.out.println(System.getProperty("sun.boot.class.path"));  get


    輸出結果以下:  
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\resources.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\rt.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\sunrsasign.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\jsse.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\jce.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\charsets.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\modules\jdk.boot.jar; 
    E:\Program Files\Java\jdk1.6.0_31\jre\classes 

  • ExtClassLoader是用來加載java的一些庫的,它加載時的搜索路徑是由java.ext.dirs來決定的,該加載器在加載時不一樣於其餘加載器,它加載時會搜索指定路徑下的全部子目錄,也就是說它會搜索java.ext.dirs所指定下的全部子目錄下的class文件或jar文件。同時也能夠用參數-Djava.ext.dirs來改變它的搜索路徑。class

  • Java代碼  收藏代碼module

    1. System.out.println(System.getProperty("java.ext.dirs"));  jdk


    輸出結果以下:  
    E:\Program Files\Java\jdk1.6.0_31\jre\lib\ext; 
    C:\Windows\Sun\Java\lib\ext 

  • AppClassLoader也稱System ClassLoader, 它的搜索路徑是由java.class.path來指定的,並且要注意AppClassLoader不會搜索java.class.path下的子目錄的。搜索

  • Java代碼  收藏代碼rsa

    1. System.out.println(System.getProperty("java.class.path"));  程序


    輸出結果以下:  
    D:\workspace_dbm\study\bin; 
    D:\workspace_dbm\study\lib\common-sdl-1.1.1-TAG20120213-SNAPSHOT.jar; 
    D:\workspace_dbm\study\lib\commons-logging-1.1.1.jar; 
    D:\workspace_dbm\study\lib\commons-lang-2.6.jar; 
    D:\workspace_dbm\study\lib\tools.jar 


    ExtClassLoader 和AppClassLoader在JVM中只會存在一個實例,一旦運行了是沒法改變它們的搜索路徑的,也就是沒法在程序中經過調用System.setProperty()來改變java.class.path或java.ext.dirs來改變它們的搜索路徑的。
相關文章
相關標籤/搜索