所謂裝載就是尋找一個類或是一個接口的二進制形式並用該二進制形式來構造表明這個類或是這個接口的class對象的過程。java
在Java中,類裝載器把一個類裝入Java虛擬機中,要通過三個步驟來完成:裝載、連接和初始化,其中連接又能夠分紅校驗、準備、解析。bootstrap
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。網絡
一個Java應用程序使用兩種類型的類裝載器:根裝載器(bootstrap)和用戶定義的裝載器(user-defined)。jvm
Java類裝載器的體系結構以下所示:操作系統
Bootstrap(根裝載器) | Extension (擴展裝載器) | System | UserDefine1 / \ UserDefine2 UserDefine3 | UserDefine4
Java的類裝載模型是一種代理(delegation)模型。當JVM 要求類裝載器CL(ClassLoader)裝載一個類時,CL首先將這個類裝載請求轉發給他的父裝載器。代理
只有當父裝載器沒有裝載並沒有法裝載這個類時,CL纔得到裝載這個類的機會。這樣,全部類裝載器的代理關係構成了一種樹狀的關係。樹的根是類的根裝載器(bootstrap ClassLoader) ,在JVM中它以"null"表示。code
除根裝載器之外的類裝載器有且僅有一個父裝載器。在建立一個裝載器時,若是沒有顯式地給出父裝載器,那麼JVM將默認系統裝載器爲其父裝載器。對象
下面針對各類類裝載器分別進行詳細的說明:繼承
根(Bootstrap)裝載器:該裝載器沒有父裝載器,它是JVM實現的一部分,從sun.boot.class.path裝載運行時庫的核心代碼。接口
擴展(Extension)裝載器:繼承的父裝載器爲根裝載器,不像根裝載器可能與運行時的操做系統有關,這個類裝載器是用純Java代碼實現的,它從java.ext.dirs (擴展目錄)中裝載代碼。
系統(System or Application)裝載器:裝載器爲擴展裝載器,咱們都知道在安裝JDK的時候要設置環境變量(CLASSPATH ),這個類裝載器就是從java.class.path(CLASSPATH 環境變量)中裝載代碼的,它也是用純Java代碼實現的,同時仍是用戶自定義類裝載器的缺省父裝載器。
小應用程序(Applet) 裝載器: 裝載器爲系統裝載器,它從用戶指定的網絡上的特定目錄裝載小應用程序代碼。