[java基础问题] Exception 和 Error
NoClassDefFoundError 和 ClassNotFoundException 的區(qū)別;
NoClassDefFoundError是一個(gè)錯(cuò)誤(Error),而ClassNOtFoundException是一個(gè)異常,在Java中對于錯(cuò)誤和異常的處理是不同的,我們可以從異常中恢復(fù)程序但卻不應(yīng)該嘗試從錯(cuò)誤中恢復(fù)程序。
ClassNotFoundException的產(chǎn)生原因主要是:
Java支持使用反射方式在運(yùn)行時(shí)動態(tài)加載類,例如使用Class.forName方法來動態(tài)地加載類時(shí),可以將類名作為參數(shù)傳遞給上述方法從而將指定類加載到JVM內(nèi)存中,如果這個(gè)類在類路徑中沒有被找到,那么此時(shí)就會在運(yùn)行時(shí)拋出ClassNotFoundException異常。
解決該問題需要確保所需的類連同它依賴的包存在于類路徑中,常見問題在于類名書寫錯(cuò)誤。
另外還有一個(gè)導(dǎo)致ClassNotFoundException的原因就是:當(dāng)一個(gè)類已經(jīng)某個(gè)類加載器加載到內(nèi)存中了,此時(shí)另一個(gè)類加載器又嘗試著動態(tài)地從同一個(gè)包中加載這個(gè)類。通過控制動態(tài)類加載過程,可以避免上述情況發(fā)生。
NoClassDefFoundError產(chǎn)生的原因在于:
如果JVM或者ClassLoader實(shí)例嘗試加載(可以通過正常的方法調(diào)用,也可能是使用new來創(chuàng)建新的對象)類的時(shí)候卻找不到類的定義。要查找的類在編譯的時(shí)候是存在的,運(yùn)行的時(shí)候卻找不到了。這個(gè)時(shí)候就會導(dǎo)致NoClassDefFoundError.
造成該問題的原因可能是打包過程漏掉了部分類,或者jar包出現(xiàn)損壞或者篡改。解決這個(gè)問題的辦法是查找那些在開發(fā)期間存在于類路徑下但在運(yùn)行期間卻不在類路徑下的類。
轉(zhuǎn)載于:https://www.cnblogs.com/xiong233/p/10942914.html
總結(jié)
以上是生活随笔為你收集整理的[java基础问题] Exception 和 Error的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm如何导入python文件,
- 下一篇: [Swift]LeetCode1153.