一、什麼叫作bootstrap?做爲形容詞有依靠本身力量的;本身作的等意思,在咱們計算機世界裏,通常指的是自舉,引導,引導程序。java
那什麼是bootstrapClassLoader呢?它是引導加載器,也是最原始的加載器,它是幹什麼 事情的呢?它負責加載整個java的核心類。編程
它的父類是什麼?它是沒有父類的,是由jvm建立的bootstrap
Java提供了動態的裝載特性;它會在運行時的第一次引用到一個class的時候對它進行裝載和連接,而不是在編譯期進行。JVM的類裝載器負責動態裝載。Java類裝載器有以下幾個特色: jvm
public static void main(String[] args) {
java.net.URL[] urls=sun.misc.Launcher.getBootstrapClassPath().getURLs();
for (int i = 0; i < urls.length; i++) {
System.out.println(urls[i]);
}url
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/resources.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/rt.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/sunrsasign.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/jsse.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/jce.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/charsets.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/lib/modules/jdk.boot.jar
file:/D:/Program%20Files/Java/jdk1.6.0_23/jre/classes.net
二、什麼是extensionClassLoader擴展類加載器 對象
System.out.println(System.getProperty("java.ext.dirs"));
ClassLoader extensionClassloader=ClassLoader.getSystemClassLoader().getParent();
System.out.println("the parent of extension classloader : "+extensionClassloader.getParent()); ssl
D:\Program Files\Java\jdk1.6.0_23\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
the parent of extension classloader : nullget
實際上他纔是java裏邊的原始類加載器,它是由bootstrapClassLoader加載的,可是他的父類不是bootStrapClassLoader,由於booStrapClassLoader不是一個java對象。。。虛擬機
三、什麼是systemClassLoader呢?
若是說bootstrap class loader和extension class loader負責加載的是JVM的組件,那麼system class loader負責加載的是應用程序類。它負責加載用戶在$CLASSPATH裏指定的類。
每一個類裝載器都有一個本身的命名空間用來保存已裝載的類。當一個類裝載器裝載一個類時,它會經過保存在命名空間裏的類全侷限定名(Fully Qualified Class Name)進行搜索來檢測這個類是否已經被加載了。若是兩個類的全侷限定名是同樣的,可是若是命名空間不同的話,那麼它們仍是不一樣的類。不一樣的命名空間表示class被不一樣的類裝載器裝載。
顧名思義,類裝載器是用來把類(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() 方法獲得。每一個類裝載器都有本身的命名空間,其中維護着由它裝載的類型。因此一個Java程序能夠屢次裝載具備同一個全限定名的多個類型。這樣一個類型的全限定名就不足以肯定在一個Java程序能夠屢次裝載具備同一個全限定名的多個類型。所以,當多個類裝載器都裝載了同名的類型時,爲了惟一地標識該類型,還要在類型名稱前面加上一個裝載該類型(指出了他所位於的命名空間)的類裝載器的標識。java虛擬機中的命名空間,實際上是解析過程的結果。對於每一個被裝載的類型,Java虛擬機都會記錄裝載它的類裝載器,當虛擬機解析一個類到另外一個類的符號引用時,他須要被引用類的類裝載器。