Java類加載器

Java類加載器  是Java運行時環境 （ Java Runtime Environment ） 的一個部件 ， 負責動態加載Java類到Java虛擬機的內存空間中 。 類通常是按需加載 ， 即第一次使用該類時才加載 。 由於有了類加載器 ， Java運行時系統不需要知道文件與文件系統 。 對學習類加載器而言 ， 掌握Java的委派概念是很重要的 。 每個Java類必須由某個類加載器裝入到內存 。 Java程序可以通過類加載器來利用外部庫 （ 即由其他作者編寫的軟件庫 ） 。 JVM中有3個默認的類加載器 ： 引導 （ Bootstrap ） 類加載器 。 由原生代碼 （ 如C語言 ） 編寫 ， 不繼承自java.lang.ClassLoader 。 負責加載核心Java庫 ， 存儲在 <JAVA_HOME> / jre / lib目錄中 。 擴展 （ Extensions ） 類加載器 。 用來在 <JAVA_HOME> / jre / lib / ext, 或java.ext.dirs中指明的目錄中加載 Java的擴展庫 。 Java 虛擬機的實現會提供一個擴展庫目錄 。 該類加載器在此目錄裏面查找並加載 Java 類 。 該類由sun.misc.Launcher $ExtClassLoader實現 。 Apps類加載器 （ 也稱系統類加載器 ） 。 根據 Java應用程序的類路徑 （ java.class.path或CLASSPATH環境變量 ） 來加載 Java 類 。 一般來說 ， Java 應用的類都是由它來完成加載的 。 可以通過 ClassLoader.getSystemClassLoader 來獲取它 。 該類由sun.misc.Launcher $AppClassLoader實現 。 每個類裝載器通過組合的方式包含一個父裝載器 （ parent class loader ） 。 JDK 1.2 之後引入 “ 雙親委派 ” 方式來實現類加載器的層次調用 ， 以儘可能保證JDK的系統API不會被用戶定義的類加載器所破壞 ， 但一些使用場景會打破這個慣例來實現必要的功能 。