그거/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가 존재하지 않을 경우 발생