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的運行時系統拋出