簡介
Java類載入器(英語:Java Classloader)是Java運行時環境(Java Runtime Environment)的一部分,負責動態載入Java類到Java虛擬機的記憶體空間中。類通常是按需載入,即第一次使用該類時才載入。由於有了類載入器,Java運行時系統不需要知道檔案與檔案系統。學習類載入器時,掌握Java的委派概念很重要。
每個Java類必須由某個類載入器裝入到記憶體。Java程式可以利用外部庫(即由其他作者編寫的軟體庫)。
JVM中有3個默認的類載入器:
引導(Bootstrap)類載入器。由原生代碼(如C語言)編寫,不繼承自java.lang.ClassLoader。負責載入核心Java庫,存儲在/jre/lib目錄中。
擴展(Extensions)類載入器。用來在/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實現。
1.引導(Bootstrap)類載入器。由原生代碼(如C語言)編寫,不繼承自java.lang.ClassLoader。負責載入核心Java庫,存儲在/jre/lib目錄中。
2.擴展(Extensions)類載入器。用來在/jre/lib/ext,或java.ext.dirs中指明的目錄中載入 Java的擴展庫。Java 虛擬機的實現會提供一個擴展庫目錄。該類載入器在此目錄裡面查找並載入 Java 類。該類由sun.misc.Launcher$ExtClassLoader實現。
3.Apps類載入器(也稱系統類載入器)。根據 Java應用程式的類路徑(java.class.path或CLASSPATH環境變數)來載入 Java 類。一般來說,Java 套用的類都是由它來完成載入的。可以通過 ClassLoader.getSystemClassLoader()來獲取它。該類由sun.misc.Launcher$AppClassLoader實現。
每個類裝載器有一個父裝載器(parent class loader)。
User-defined class loaders
可以通過繼承java.lang.ClassLoader類的方式實現自己的類載入器,以滿足一些特殊的需求而不需要完全了解Java虛擬機的類載入的細節。
可用於:
•運行時裝載或卸載類。這常用於:
•實現腳本語言
•用於bean生成器
•允許用戶定義的擴展性
•允許名字空間之間的通信。這是CORBA/RMI協定的基礎。
•改變Java位元組碼的裝入,例如,可用於Java類位元組碼的加密裝入。)
•修改已裝入的位元組碼weavingof aspects when usingaspect-oriented programming)。
JEE的類裝載
Java EE(JEE)應用程式伺服器典型地用樹狀的一組類裝載器從已部署的WAR或EAR文檔中裝入類。這使得應用程式之間彼此隔離,但共享已部署模組。servlet container一般被實現為多個類裝載器。
Java運行環境
Java運行環境(Java Runtime Environment,簡稱JRE)是一個軟體,由太陽微系統所研發,JRE可以讓計算機系統運行Java應用程式(Java Application)。
JRE的內部有一個Java虛擬機(Java Virtual Machine,JVM)以及一些標準的類別函式館(Class Library)。