8、NoClassDefFoundError 和 ClassNotFoundException 有什麼區別?

classnotfoundexception

當程序運行的過程中嘗試使用類加載器去加載class文件的時候,如果沒有在classpath中查找到指定的類,就會拋出classnotfoundexception。一般情況下,當我們使用 class.forname或者classloader.loadclass以及使用 classloader.findsystemclass在運行時加載類的時候,如果類沒有找到,那麼就會導致jvm拋出 classnotfountexception。

noclassdeffounderror

當jvm在加載一個類的時候,如果這個類在編譯時可以用,但是在運行時找不到這個類的定義的時候,jvm就會拋出一個noclassdeffounderror錯誤, 比如當我們new一個類的實例的時候,如果在運行時類找不到,則會拋出一個noclassdeffounderror錯誤。

差異對比

繼承exception   vs  繼承error

當動態加載class的時候找不到類  vs 當編譯成功以後執行過程中class找不到

一般在執行class.forname, classloader.loadclass  vs  由jvm的運行時系統拋出

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章