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