ClassNotFoundException發生在裝入階段。
當應用程式試圖通過類的字元串名稱,使用正常的三種方法裝入類,但卻找不到指定名稱的類定義時就抛出該異常。
NoClassDefFoundError: 當目前執行的類已經編譯,但是找不到它的定義時
也就是說你如果編譯了一個類B,在類A中調用,編譯完成以後,你又删除掉B,運作A的時候那麼就會出現這個錯誤
加載時從外存儲器找不到需要的class就出現ClassNotFoundException
連接配接時從記憶體找不到需要的class就出現NoClassDefFoundError
大概這樣的吧,JDK API裡面的解釋
1.NoClassDefFoundError
當 Java 虛拟機或 ClassLoader 執行個體試圖在類的定義中加載(作為通常方法調用的一部分或者作為使用 new 表達式建立的新執行個體的一部分),但無法找到該類的定義時,抛出此異常。
目前執行的類被編譯時,所搜尋的類定義存在,但無法再找到該定義。
2.ClassNotFoundException
當應用程式試圖使用以下方法通過字元串名加載類時,抛出該異常:
* Class 類中的 forName 方法。
* ClassLoader 類中的 findSystemClass 方法。
* ClassLoader 類中的 loadClass 方法。
但是沒有找到具有指定名稱的類的定義。從 1.4 版本開始,此異常已經更新,以符合通用的異常鍊機制。在構造時提供并通過 getException() 方法通路的“加載類時引發的可選異常”,現在被稱為原因,它可以通過 Throwable.getCause() 方法以及與上面提到的“遺留方法”來通路。