1. 程式人生 > >JVM(八) 類載入器

JVM(八) 類載入器

前面部落格中簡單提到類載入器,並有demo展示。在這裡詳細介紹一下。


類載入器用來把類載入到Java虛擬機器中。

類載入器之間的關係:

     

Java虛擬機器自帶的類載入器

根(Bootstrap)類載入器:該載入器沒有父載入器。它負責載入虛擬機器的核心類庫,如java.lang.*等。之前部落格中提到Test1.java的例子,返回null(http://blog.csdn.net/qwlzxx/article/details/71404166)說明了這一點。根類載入器從系統屬性sun.boot.class.path所指定的目錄中載入類庫。根類載入器的實現依賴於底層作業系統,屬於虛擬機器的實現的一部分,它並沒有繼承java.lang.ClassLoader類。

擴充套件(Extension)類載入器:它的父載入器為根類載入器。它從java.ext.dirs系統屬性所指定的目錄中載入類庫,或者從JDK的安裝目錄的jre\lib\ext子目錄(擴充套件目錄)下載入類庫,如果把使用者建立的JAR檔案放在這個目錄下,也會自動由擴充套件類載入器載入。擴充套件類載入器是純Java類,是java.lang.ClassLoader類的子類。

系統(System)類載入器:也稱為應用類載入器,它的父載入器為擴充套件類載入器。它從環境變數classpath或者系統屬性java.class.path所指定的目錄中載入類,它是使用者自定義的類載入器的預設父載入器。系統類載入器是純Java類,是java.lang.ClassLoader類的子類。

使用者自定義的類載入器

使用者可以定製自己的類載入器(User-defined Class Loader)。Java提供了抽象類java.lang.ClassLoader, 所有使用者自定義的類載入器應該繼承ClassLoader類。