盡管這可能是由於編譯時和運行時間之間的類路徑不匹配造成的,但這不一定是由這個造成的。
在這種情況下,保持兩三種不同的例外是很重要的:
- java.lang.ClassNotFoundException 這個異常表明該類在類路徑中找不到。這表明我們正在嘗試加載類定義,並且該類不存在於類路徑中。
- java.lang.NoClassDefFoundError 這個異常表明JVM在其內部類定義數據結構中查找類的定義,但沒有找到它。這與說不能從類路徑加載不同。通常這表明我們以前試圖從類路徑加載一個類,但由於某種原因它失敗了 - 現在我們試圖再次使用這個類(因此需要加載它,因為它上次失敗了),但是,甚至不會嘗試加載它,因為我們之前加載失敗(並且有理由懷疑我們會再次失敗)。早期的失敗可能是一個ClassNotFoundException或一個ExceptionInInitializerError(表示靜態初始化塊失敗)或任何其他問題。重點是,NoClassDefFoundError不一定是類路徑問題。