NoClassDefFoundError 和 ClassNotFoundException異常

FH-Admin發表於2021-08-04

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執行時沒法在路徑上找到。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章