NoClassDefFoundError和ClassNotFoundException之间有什么区别?是由什么导致的?
問(wèn)題: NoClassDefFoundError和ClassNotFoundException之間有什么區(qū)別?是由什么導(dǎo)致的?
NoClassDefFoundError和ClassNotFoundException之前的區(qū)別是什么?
是什么導(dǎo)致它們被拋出?這些問(wèn)題我們要怎么樣解決?
當(dāng)我在為了引入新的jar包而修改現(xiàn)有代碼的時(shí)候,我經(jīng)常遇到這些異常。在webstart發(fā)布的java應(yīng)用程序的客戶端和服務(wù)端,我都遇到過(guò)這些異常。
我所遇到的問(wèn)題可能的原因:
- packages not included in build.xml for the client side of code
- runtime classpath missing for the new jars we are using
- version conflicts with previous jar
如今,當(dāng)我遇到這些問(wèn)題時(shí),我會(huì)采取trail-and-error 的方法來(lái)讓程序正常進(jìn)行。但是我需要更加清楚的認(rèn)知和理解。
回答
來(lái)自http://www.javaroots.com/2013/02/classnotfoundexception-vs.html:
ClassNotFoundException:當(dāng)類加載器在class path下面找不到需要的類時(shí)發(fā)生。所以,基本上你應(yīng)該檢查你的class path并在class path下面添加類。
NoClassDefFoundError:這更難調(diào)試和查找原因。在編譯時(shí)需要的類是存在的,但是在運(yùn)行時(shí)類被更改或者刪除,或者類的靜態(tài)初始化出現(xiàn)異常,這個(gè)異常就會(huì)被拋出了。這意味著類加載的時(shí)候,該類是存在于classpath中,但是這個(gè)類其中所需要的一個(gè)類要么被刪除了,要么編譯器加載失敗。所以你應(yīng)該去看這個(gè)類的所依賴的類。
例子:
public class Test1 { }public class Test {public static void main(String[] args){Test1 = new Test1(); }}在編譯完這兩個(gè)類以后,刪除test1運(yùn)行test就會(huì)出現(xiàn)異常
Exception in thread "main" java.lang.NoClassDefFoundError: Testat Test1.main(Test1.java:5) Caused by: java.lang.ClassNotFoundException: Testat java.net.URLClassLoader$1.run(Unknown Source)at java.net.URLClassLoader$1.run(Unknown Source)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)... 1 more文章翻譯自Stack Overflow:https://stackoverflow.com/questions/1457863/what-causes-and-what-are-the-differences-between-noclassdeffounderror-and-classn
總結(jié)
以上是生活随笔為你收集整理的NoClassDefFoundError和ClassNotFoundException之间有什么区别?是由什么导致的?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring框架里面applicatio
- 下一篇: 梦到自己老公出车祸是什么预兆