2012-06-06 6 views
1
try { 
    MyClass[] myClass = cProxy.getMyClass(); 
    return "" + myClass[0]; 
} catch (Exception e) { 
    // nothing to do 
} 
return "" + MyClass.UNKNOWN; <-- NoClassDefFoundError thrown 

내가 다른 개체에서 MyClass의 목적을 가지고, 난 그냥 이유를 대신 클래스의 정적 변수를 호출 할 때 NoClassDefFoundError가 throw되는 이유는 무엇입니까?

MyClass[] myClass = cProxy.getMyClass(); 

라인

의 궁금했던 예외 던져 MyClass에 클래스의 정적 변수 "MyClass.UNKNOWN"전화했을 때?

NoClassDefFoundError와 ClassNotFoundException의 깊은 의미는 무엇입니까? 감사합니다

답변

1

두 가지 예외에 대해 java Docs에서 발췌 한 내용은 다음과 같습니다. Java 가상 머신 또는 ClassLoader 인스턴스가 없음 (일반 메서드 호출의 일부로서 또는 새로운 표현을 사용하여 새 인스턴스를 생성의 일부로서) 및 클래스의 정의를로드하려고하면

NoClassDefFoundError:

는 슬로우 클래스의 정의를 찾을 수 있습니다. 검색 대상 클래스 정의는 현재 실행중인 클래스가 컴파일되었을 때 존재했지만 정의를 더 이상 찾을 수 없습니다.

ClassNotFoundException : 응용 프로그램을 사용하여 문자열 이름을 통해 클래스에서로드 할 때 슬로우 Class 클래스의 forName 메소드 •. ClassLoader 클래스의 findSystemClass 메서드입니다. • ClassLoader 클래스의 loadClass 메서드입니다. 하지만 지정된 이름을 가진 클래스에 대한 정의를 찾을 수 없습니다.

1

try catch 블록에서 모든 예외를 catch합니다. try catch를 제거하거나 catch에서 예외를 인쇄하면 cProxy.getMyClass();를 사용할 때와 동일한 예외가 표시됩니다.

모든 예외를 잡는 것은 좋은 습관이 아닙니다!

+0

NoClassDefFoundError는 try..catch 블록에 의해 catch되지 않습니다. 예외를 catch하고 Error가 Exception 하위 클래스가 아니기 때문입니다. – Averroes

관련 문제