2010-07-15 1 views
6

NoClassDefFoundError는 차례대로 오류를 확장하는 LinkageError를 확장합니다. Error 클래스 상태에 대한NoClassDefFoundError와 ClassNotFoundException의 차이점은 무엇입니까?

자바 독은 :

Error 합리적인 응용 프로그램 캐치해서는 안되는 중대한 문제를 나타냅니다 Throwable 의 서브 클래스입니다.

Class.forName()과 같은 클래스 로딩 메소드는 throws 절에서만 ClassNotFoundException을 선언합니다. Error 위의 설명 이외에 어떤 우리가 Class.forName() 등으로 NoClassDefFoundError로드 클래스를 잡기 일반적으로하지 않아야한다는 것을 의미

내 질문하는 NoClassDefFoundError 대신 ClassNotFoundException의 발생합니다 조건 무엇입니까? 정확하게 Class.forName() 같은 것들에 대한 -

+0

정확히 일치하는 http://stackoverflow.com/questions/1457863/what-is-the-difference-between-noclassdeffounderror-and-classnotfoundexception – skaffman

+0

여기에 관련된 토론이 있습니다. http://stackoverflow.com/ 질문/430089/in-java-can-class-forname-ever-return-null/430092 # 430092 –

답변

12

ClassNotFoundException은 수동으로 클래스를로드하는 경우 상황에서 (당신의 코드) 던져 질 가능성이 높습니다. 이러한 이름은 예를 들어 사용자 입력에서 나올 수 있습니다.

NoClassDefFoundError 클래스 파일 자체가 찾을 수없는 클래스를 참조 할 때 발생합니다. 은 얼마 전만해도 이었지만 지금은 그렇지 않습니다. 이것은 반영하려고하는 코드의 버그 일뿐만 아니라 모든 필수 클래스를 사용할 수 없게하는 배포 오류입니다. 지금까지 내가 말할 수있는 한 NoClassDefFoundError은 대개 또는 항상 항상 입니다.ClassNotFoundException입니다.하지만 이것은 코드가 너무 깨진 환경을 나타내는 것이므로 코드가 아닙니다. 복구.

는 적어도, 내 이해 :) 컴파일러의 .class 파일을 찾을 수 없습니다 때문에

+2

@Downvoter : 왜 그렇게 말 할까? –

+1

높은 등급의 답변으로이 점에 대해 훨씬 더 높은 등급의 질문이 있지만,이 대답이 더 잘 설명하고 다른 사람들로부터 정보가 부족하다고 느꼈습니다. (NoClassDefFoundError가 항상 ClassNotFoundException을 감싸는 것으로 보이는 것과 같이,이 두 클래스의 의도에 대해 제게 많은 걸 알려줍니다.) – skiphoppy

+0

@Jon 클래스 이름이 사용자 입력에서 오는 경우에 대한 실질적인 예를 들려 줄 수 있습니까? – Geek

0

NoClassDefFoundError를 런타임에 occures입니다.

관련 문제