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