Java 中 ClassNotFoundException 和 NoClassDefFoundError 有什麼區別?\n
ClassNotFoundException 和 NoClassDefFoundError 都是當 JVM 或類載入器在執行時載入類時找不到合適的類時發生的錯誤。ClassNotFoundException 是一個受檢異常,而 NoClassDefFoundError 是一個錯誤,屬於非受檢異常。
有不同型別的 ClassLoader 從不同的來源載入類,有時可能會導致庫 JAR 檔案丟失或類路徑不正確,從而導致載入器無法在執行時載入類。
ClassNotFoundException
當我們嘗試使用反射在執行時載入類,並且如果這些類檔案丟失,則應用程式或程式會丟擲 ClassNotFoundException 異常。在編譯時沒有需要檢查的東西,因為它是在執行時載入類。
示例
public class ClassNotFoundExceptionTest {
public static void main(String[] args) {
try {
Class.forName("Test");
} catch (ClassNotFoundException cnfe) {
System.err.println("You are trying to search for a class is not existing. "+cnfe);
}
}
}輸出
You are trying to search for a class is not existing. java.lang.ClassNotFoundException: Test
NoClassDefFoundError
當一個類使用類路徑中的特定類進行編譯,但如果在執行時找不到相同的類時,就會丟擲 NoClassDefFoundError。缺少 JAR 檔案是導致 NoClassDefFoundError 的最基本原因。根據 Java API 文件,“搜尋到的類定義在當前正在執行的類編譯時存在,但該定義現在已無法找到”。
示例
class Test1 {
public void show() {
System.out.println("show() method called");
}
}
public class Test2 {
public static void main(String[] args) {
Test1 t = new Test1();
t.show();
}
}當我們編譯這兩個類時,我們將得到兩個類檔案 Test1.class 和 Test2.class,在執行 Test2 類時,只需刪除 Test1.class 檔案,然後我們將得到如下所示的 NoClassDefFoundError
輸出
Exception in thread "main" java.lang.NoClassDefFoundError: Test1 at Test2.main(Test2.java:9)
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP