NoClassDefFoundError是一個Error類型的異常,是由JVM引起的,不應該嘗試捕獲這個異常。
引起該異常的原因是JVM或ClassLoader嘗試加載某類時在內存中找不到該類的定義,該動作發生在運行期間,即編譯時該類存在,但是在運行時卻找不到了,可能是變異后被刪除了等原因導致;
ClassNotFoundException是一個受查異常,需要顯式地使用try-catch對其進行捕獲和處理,或在方法簽名中用throws關鍵字進行聲明。當使用Class.forName, ClassLoader.loadClass或 ClassLoader.findSystemClass 動態加載類到內存的時候,通過傳入的類路徑參數沒有找到該類,就會拋出該異常;
另一種拋出該異常的可能原因是某個類已經由一個類加載器加載至內存中,另一個加載器又嘗試去加載它。