<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java 類加載器介紹 > 原文: [https://javatutorial.net/java-class-loaders-explained](https://javatutorial.net/java-class-loaders-explained) 本文介紹了 Java 類加載器的關鍵組件。 Java 類加載器是 [Java 虛擬機(JVM)](https://javatutorial.net/jvm-explained)的重要組成部分。 它們用于加載類和接口。 Althaout 類裝入器是 JVM 不可或缺的一部分,它們對于 Java 的內部工作非常重要,因此您在作為 Java 開發人員的日常工作中不太可能需要創建自定義類裝入器。 例如,如果要創建將在諸如 Tomcat 之類的容器上執行的應用程序,則可以使用自定義類加載器的實際應用程序。 Tomcat 要做的是為每個 Web 應用程序創建一個類加載器(以便它以后可以卸載 Web 應用程序并釋放內存)。 本文旨在解釋類加載器的工作方式,并列出 Java 類加載器的關鍵組件。 您下次 Java 面試時可能會遇到有關類加載器的問題。 ## 什么是 Java 類加載器 我們知道 Java 程序在 [Java 虛擬機(JVM)](https://javatutorial.net/jvm-explained)上運行。 當我們編譯 Java 類時,它將轉換為平臺和機器無關的字節碼。 編譯的類存儲為`.class`文件。 當我們嘗試使用類時,Java 類加載器將該類加載到內存中。 在已經運行的類中通過名稱引用類時,這些類將引入 Java 環境。 一旦第一個類運行,以后將由類加載器完成加載類的嘗試。 通常,通過聲明并使用靜態`main()`方法來完成第一類的運行。 ![hierarchy of class loaders](https://img.kancloud.cn/7d/d1/7dd1b8c21dc030ba534a43a8f24a4f8d_680x665.jpg) 類加載器的層次結構 ## Java 類加載器的類型 1. **自舉類加載器** - 它加載 JDK 內部類,通常加載`rt.jar`和其他核心類,例如`java.lang.*`包類 2. **擴展類加載器** - 它從 JDK 擴展目錄(通常是 JRE 的`lib / ext`目錄)加載類。 3. **系統類加載器** - 從系統類路徑加載類,可以在使用`-cp`或`-classpath`命令行選項調用程序時進行設置。 ## 何時以及如何加載類 何時加載類? 確實有兩種情況: 1. 當執行新的字節碼時(例如,`MyClass mc = new MyClass()`?? 2. 當字節碼靜態引用一個類時(例如`System.out`)。 類加載器是分層的。 第一個類是在類中聲明的靜態`main()`方法的幫助下專門加載的。 所有隨后加載的類均由已加載并正在運行的類加載。 進一步的類加載器在加載類時遵循以下規則: 1. 檢查該類是否已經加載。 2. 如果未加載,請要求父類加載器加載該類。 3. 如果父類加載器無法加載類,請嘗試在該類加載器中加載它。 ## 靜態與動態類加載 使用 Java 的`new`運算符靜態加載類。 動態加載是一種使用`Class.forName()`在運行時以編程方式調用類加載器的功能的技術。 ## `loadClass`和`Class.forName`之間的區別 `loadClass`僅加載類,但不初始化對象,而`Class.forName`在加載對象后初始化對象。 例如,如果您使用`ClassLoader.loadClass`加載 JDBC 驅動程序,則該驅動程序將無法注冊,并且您將無法使用 JDBC `java.lang.Class.forName(String className)`方法返回與具有給定字符串名稱的類或接口關聯的`Class`對象。 如果找不到該類,則此方法引發`ClassNotFoundException` 下面的示例演示`Class.forName`的用法 ```java package net.javatutorial; import java.lang.reflect.Method; public class ClassForNameExample { public static void main(String[] args) { try { Class<?> c = Class.forName("java.awt.Point"); System.out.println("name = " + c.getName()); System.out.println("package = " + c.getPackage()); Method[] methods = c.getDeclaredMethods(); System.out.println("----- Class methods ---------------"); for (Method method : methods) { System.out.println(method.getName()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } ``` 加載`java.awt.Point`類。 比我們打印類名稱,包和該類所有可用方法的名稱。 這是在 Java 8 中執行程序的結果: ```java name = java.awt.Point package = package java.awt, Java Platform API Specification, version 1.8 ----- Class methods --------------- equals toString getLocation getX getY setLocation setLocation setLocation move translate ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看