그거/Java
NoClassDefFoundError vs ClassNotFoundException
뽀기
2011. 10. 11. 16:41
NoClassDefFoundError
- 컴파일 시점에는 존재했으나, 실행때 내부적으로 loading 되는 class가 없을 때
예제) 아래와 같은 java 자원들을 컴파일 한 후 B.class 파일을 삭제하고 java C 하면 NoClassDefFoundError 발생
Class A extends B {
}
Class B {
}
Class C {
public static void main(String[] args) {
A a = new A a();
}
}
예제) 아래와 같은 java 자원들을 컴파일 한 후 D.class 파일을 삭제하고 java E 하면 NoClassDefFoundError 발생
class D {
}
Class E {
public static void main(String[] args) {
D d = new D();
}
}
ClassNotFoundException
- 해당 class 파일이 없을 때(클래스를 로딩하려는 명시적인 시도가 실패할 경우)
예) 아래와 같은 java 자원들을 컴파일 한 후 C.class 파일을 삭제하고 java C 하면 ClassNotFoundException 발생
Class A extends B {
}
Class B {
}
Class C {
public static void main(String[] args) {
A a = new A a();
}
}
정리하면,
ClassNotFoundException
=> ClassLoader가 로딩하려고 하는 class가 존재하지 않을 경우 발생
NoDefFoundClassError
=> ClassLoader가 로딩하는 명시적인 class 내부에서 묵시적으로 로딩하고자 하는 class가 존재하지 않을 경우 발생