문제

Java에서는 class.forname이 null을 반환 할 수 있습니까, 아니면 클래스를 찾을 수 없다면 항상 classnotfoundexception 또는 noclassdeffounderror를 던질 수 있습니까?

도움이 되었습니까?

해결책

Java Docs는 클래스를 찾을 수 없다면 ClassNotFoundException을 던질 것이라고 말합니다.

다른 팁

NULL 은이 방법에 대한 문서의 어느 곳에서도 언급되지 않았으므로 예외를 던지는 대신 NULL을 반환하는 것이 의미가있는 상황이없는 것 같기 때문에, 나는 그것을 가정하는 것이 안전하다고 생각합니다. 널을 반환하지 마십시오.

noclassdeffounderror를 던지지는 않지만 ClassNotFoundException을 던질 수 있습니다.

기본 클래스 로더를 사용하면 확실히 널을받지 못할 것입니다. 그러나 JDigital이 말했듯이, 귀하는 사용할 수있는 보안 모델 또는 다른 유형의 프록시 로더 (의도적으로 또는 다른 방법)에 따라 여러 가지 사용자 정의 클래스 로더가 적용될 수 있습니다.

도대체, Forname조차도 클래스 로더를 매개 변수로 가져갈 수 있습니다 ... :)

피코

@dan 다이어가 틀렸어, class.forname ~할 수 있다 던지다 NoClassDefFoundError, 시도중인 클래스가 정적 초기 시설에 ClassNotFoundException 오류를 가져옵니다. 다음은 UNTE입니다

class Outer {
  public static final void main(final String[] args) throws Exception{
    Class.forName("Inner");
  }
}

다른 파일이없는 디렉토리에서 컴파일하고 실행하면 ClassNotFoundException: Inner

이제 동일한 디렉토리에 다음을 추가하고 모든 것을 컴파일하고 java Outer 한 번 보려면 괜찮습니다.

class Inner {
  static Inner2 _i2 = new Inner2();
}

class Inner2 {}

마지막으로, 내부 .class 및 외부를 다시 삭제하십시오 ~ 할 것이다 가져 오기 NoClassDefFoundError: Inner2, caused by ClassNotFoundException: Inner2

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top