- 把 .class 文件加載到 JVM 的方法區中,變成一個 Class 對象
- Class#getClassLoader()
- 引導: 類庫
- 擴展: 擴展 jar 包
- 系統: 應用下的 class
系統類加載器的上層領導: 擴展 擴展類加載器的上層領導: 引導 引導沒上層,他是 Boss
- 代碼中出現了這麼一行: new A();
- 系統發現了自己加載了自己的類,其中包含了 new A(), 這說明需要系統去加載 A 類
- 系統會給自己的領導打電話: 讓擴展去自己的地盤去加載 A 類
- 擴展會給自己的領導打電話: 讓引導去自己的地盤去加載 A 類
- 引導自己真的去 rt.jar 中尋找A類
- 如果找到了,那麼加載之,然後返回 A 對應的 Class 對象給擴展,擴展也會把她這個 Class 返回給系統,結束。
- 如果沒找到
- 擴展返回一個 null 給系統,系統去自己的地盤 (應用程序下) 加載 A 類
- 如果找到,那麼加載之,然後返回這個 Class, 結束
- 如果沒找到,拋出異常 ClassNotFoundException
- 擴展返回一個 null 給系統,系統去自己的地盤 (應用程序下) 加載 A 類
class MyApp { //也由系統加載
main() {
A a = new A(); //也由系統加載
String s = new String(); //也由系統加載
}
}
class String { //引導
private Integer i; //直接引導加載
}
Tomcat 提供了兩種類加載器
-
${CATALINA_HOME}\lib, tomcat 類加載器,他負責加載這個下面的類
-
${CONTEXT_HOME}\WEB-INF\lib, ${CONTEXT_HOME}\WEB-INF\classes, 應用類加載器,他負責加載這兩個路徑下的類
-
引導
-
擴展
-
系統
-
特性: 服務器類加載器: 先自己動手,然後再去委託 應用類加載器: 先自己動手,然後再去委託 ![](# 類加載器
- 把 .class 文件加載到 JVM 的方法區中,變成一個 Class 對象
- Class#getClassLoader()
- 引導: 類庫
- 擴展: 擴展 jar 包
- 系統: 應用下的 class
系統類加載器的上層領導: 擴展 擴展類加載器的上層領導: 引導 引導沒上層,他是 Boss
- 代碼中出現了這麼一行: new A();
- 系統發現了自己加載了自己的類,其中包含了 new A(), 這說明需要系統去加載 A 類
- 系統會給自己的領導打電話: 讓擴展去自己的地盤去加載 A 類
- 擴展會給自己的領導打電話: 讓引導去自己的地盤去加載 A 類
- 引導自己真的去 rt.jar 中尋找A類
- 如果找到了,那麼加載之,然後返回 A 對應的 Class 對象給擴展,擴展也會把她這個 Class 返回給系統,結束。
- 如果沒找到
- 擴展返回一個 null 給系統,系統去自己的地盤 (應用程序下) 加載 A 類
- 如果找到,那麼加載之,然後返回這個 Class, 結束
- 如果沒找到,拋出異常 ClassNotFoundException
- 擴展返回一個 null 給系統,系統去自己的地盤 (應用程序下) 加載 A 類
class MyApp { //也由系統加載
main() {
A a = new A(); //也由系統加載
String s = new String(); //也由系統加載
}
}
class String { //引導
private Integer i; //直接引導加載
}
Tomcat 提供了兩種類加載器