2010-12-13 6 views
4

컨텍스트 :자바 정적 내부 클래스 초기화 오류

이 가
LazyInitialization.temporaryDirectory(); 

는 [좀 더 코드를 추가 수정 됨] 아래 내 코드는 결국 위의 호출을 다음과 같이 java.io.File의 클래스는 정적 내부 클래스의 메소드를 가지고 코드 행. 내 문맥 상 괜찮거나/예상되는 temporaryDirectory() 메소드 내에서 예외가 발생합니다. 내가 다음에 다시 같은 방법 (createTempFile)를 호출 할 때 다음

try { 
    File tempFile = File.createTempFile("aaa", "aaa"); 
} catch (Exception e) { 
    // handle exception 
} 

, 나는 "java.lang.NoClassDefFound 오류 - 클래스 java.io.File에 $ LazyInitialization를 초기화 할 수 없습니다"얻을

질문 : 내부 메서드 LazyInitialization은 정적 메서드가 호출되었을 때 클래스 로더에 의해로드되어야한다고 가정했습니다. 내부 메서드에서 예외가 발생했지만. 그러나 두 번째 호출시 NoClassDefFound 오류가 나타나는 이유는 무엇입니까? 원래의 가정은 틀린가?

+0

나는 그것이 작동한다고 생각한다. 코드를 보여주세요. – thejh

답변

7

정적 초기화 코드가 런타임 예외를 throw하면 ExceptionInInitializerError로 래핑되고 클래스 로딩을 트리거하는 코드의 컨텍스트에서 throw됩니다 (오류 예외 인 경우 래핑되지 않음). 이 시점에서 클래스는로드에 실패했습니다. 따라서 나중에 사용하려고하면 NoClassDefFoundError가 발생합니다.

아마도 이것은 사용자가 경험하는 것입니다.

+0

예 정확하게 Eyal –