Skip to content

Latest commit

 

History

History
111 lines (91 loc) · 3.86 KB

類加載器.md

File metadata and controls

111 lines (91 loc) · 3.86 KB

類加載器

介紹

  • 把 .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

類的解析過程

class MyApp { //也由系統加載
    main() {
        A a = new A(); //也由系統加載
        String s = new String(); //也由系統加載
    }
}
 
class String { //引導
    private Integer i; //直接引導加載
}

Tomcat 的類加載器

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

類的解析過程

class MyApp { //也由系統加載
    main() {
        A a = new A(); //也由系統加載
        String s = new String(); //也由系統加載
    }
}
 
class String { //引導
    private Integer i; //直接引導加載
}

Tomcat 的類加載器

Tomcat 提供了兩種類加載器

  • ${CATALINA_HOME}\lib, tomcat 類加載器,他負責加載這個下面的類

  • ${CONTEXT_HOME}\WEB-INF\lib, ${CONTEXT_HOME}\WEB-INF\classes, 應用類加載器,他負責加載這兩個路徑下的類

  • 引導

  • 擴展

  • 系統

  • 特性: 服務器類加載器: 先自己動手,然後再去委託 應用類加載器: 先自己動手,然後再去委託