in JAVA

Java > ClassNotFoundException VS NoClassDefFoundError 뭐가 다를까?

ClassNotFoundException 같은 경우는 class 로더가 필요한 class를 class path에서 찾지 못할 때 발생한다.

일반적으로 class path에 클래스를 추가할 경우 따로 채크를 해주어야 한다.

NoClassDefFoundError 같은 경우는 디버거 또는 이유를 찾기에는 좀더 복잡하다. 그리고 이 에러는 컴파일러로부터 class 런타임 시에 class file을 찾지 못했을 때 발생된다.

아래와 같이 확인 할 수 있다.

Test1.java
[sourcecode language=”java”]
public class Test1 {
}
[/sourcecode]

Test.java
[sourcecode language=”java”]
public class Test {
public static void main(String[] args) {
Test1 = new Test1();
}
}
[/sourcecode]

컴파일 후에 Test1.class파일을 지우고 Test파일을 실행 해보자.

Exception in thread “main” java.lang.NoClassDefFoundError: Test
at Test1.main(Test1.java:5)
Caused by: java.lang.ClassNotFoundException: Test
at 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

위와 같은 에러를 확인 할 수 있다.

reference

Write a Comment

Comment