1.classLoader的介紹及加載過程java
與普通程序不一樣的是,Java程序(class文件)並非本地的可執行程序。當運行Java程序時,首先運行JVM(Java虛擬機),而後再把Java class加載到JVM裏頭運行,負責加載Java class的這部分就叫作Class Loader。因此classLoader的目的在於把class文件裝入到jvm中。bootstrap
那麼classLoader又在那裏的啦?又由誰調用呢?其實classLoader只是jvm的一個實現的一部分。Jvm提供的一個頂級的classLoader(bootStrap classLoader),bootStrap classLoader負責加載java核心的API以知足java程序最基本的需求。Jvm還提供的兩個classLoader,其中Extension ClassLoader負責加載擴展的Java class,Application ClassLoader負責加載應用程序自身的類。而Extension ClassLoader和Application ClassLoader則由bootStrap classLoader加載。jvm
2.classLoader加載的基本流程繼承
當運行一個程序的時候,JVM啓動,運行bootstrap classloader,該ClassLoader加載java核心API(ExtClassLoader和AppClassLoader也在此時被加載),而後調用ExtClassLoader加載擴展API,最後AppClassLoader加載CLASSPATH目錄下定義的Class,這就是一個程序最基本的加載流程。ssl
3.classLoader加載的方式get
其實classLoader在加載class文件的時候就採用的雙親委託模式。每個自定義ClassLoader都必須繼承ClassLoader這個抽象類,而每一個ClassLoader都會有一個parent ClassLoader,咱們能夠看一下ClassLoader這個抽象類中有一個getParent()方法,這個方法用來返回當前ClassLoader的parent。虛擬機