1.簡介
ClassNotFoundException和NoClassDefFoundError是當JVM無法找到classpath請求的類發生。
2.ClassNotFoundException
ClassNotFoundException是一個已檢查的異常,當應用程式嘗試通過其全限定名稱加載類并且在類路徑上找不到時所發生的的異常。
主要發生在嘗試使用 Class.forName()、ClassLoader.loadClass()、ClassLoader.findSystemClass() 加載類時。
例如:加載一個本不存在的類
Class.forName("acb.s.sad")
3.NoClassDefFoundError
當發生NoClassDefFoundError ( java項目 fhadmin.cn),系統不能正常運作,且不能恢複。當JVM嘗試以下操作:
使用new執行個體化一個類
使用方法調用加載類
當編譯器可以成功編譯類,但java運作時找不到類檔案時,就會發生改錯誤。它通常發生在執行靜态塊或初始化類的靜态字段時出現異常,是以類初始化失敗
4.解決方案
主要原因是運作時類檔案(類路徑中)不可用。解決方法:
保證類路徑中是否可以使用包含該類的類或jar。如果沒有,需要手動添加它。
如果在類路徑上可用,那麼有可能是路徑被覆寫了。這個時候需要找到類的确切路徑。
5.總結
ClassNotFoundException和NoClassDefFoundError都是因為java運作時找不到類相關。
ClassNotFoundException是java運作時加載類時抛出的異常(Exception),并且名稱是在運作時提供。
NoClassDefFoundError是該類在編譯時存在,但java運作時沒法在路徑上找到。