시도해 볼 수 있습니다.
컴파일 한 후, 해결이 false 인 경우 구체적인 클래스 Test.Then에 테스트 3 링크를 유지 interface.but에 대한 구체적인 클래스에서 테스트 클래스를 변경, JVM이 error.It의 매우 흥미로운 찾을 수 없습니다. 실제로 Class someClass1= Class.forName("Test3",false,cls)
은 Test3도 해결하지 않습니다. 이는 오류가 발생하지 않음을 의미합니다.
Java 언어 사양 -은 resolveClass가 수행하는 작업을 설명합니다. 클래스와 인터페이스
12.3 링크는 링크는 클래스 또는 인터페이스 유형의 이진 형태를 취하는하고 실행할 수 있도록 자바 가상 머신의 실행 상태를 결합하는 프로세스이다. 클래스 또는 인터페이스 유형은 링크되기 전에 항상로드됩니다. 링크에 관련된 세 가지 다른 활동이 있습니다. 심볼 참조의 확인, 준비 및 해결. 링크의 정확한 의미는 Java Virtual Machine Specification, Second Edition의 5 장에 있습니다. 여기에서는 Java 프로그래밍 언어의 관점에서 프로세스에 대한 개요를 제시합니다. 참조 기호의
12.3.3 해상도 다른 클래스 및 인터페이스의 이진 명칭 (§13.1)를 사용 상징적 클래스 또는 인터페이스를 참조 다른 클래스 및 인터페이스 및 그 필드, 메소드, 및 생성자의 이진 표현 (§13.1). 필드 및 메서드의 경우 이러한 심볼릭 참조에는 필드 또는 메서드를 선언하는 클래스 또는 인터페이스 형식의 이름은 물론 필드 또는 메서드 자체의 이름과 적절한 형식 정보가 포함됩니다. 심볼릭 참조를 사용하려면 먼저 심볼릭 참조가 올바른 것으로 검사되고 일반적으로 참조가 반복적으로 사용될 경우보다 효율적으로 처리 될 수있는 직접 참조로 대체되는 해결 방법을 사용해야합니다.
해결 중에 오류가 발생하면 오류가 발생합니다. 가장 일반적으로이 클래스는 IncompatibleClassChangeError 클래스의 다음 하위 클래스 중 하나의 인스턴스이지만 IncompatibleClassChangeError의 다른 하위 클래스 인스턴스이거나 IncompatibleClassChangeError 클래스 자체의 인스턴스 일 수도 있습니다. 이 오류는 직접 또는 간접적으로 유형에 대한 기호 참조를 사용하는 프로그램의 모든 지점에서 발생 될 수있다
이
있는 IllegalAccessError : 심볼릭 참조는 그 필드의 사용 또는 할당을 지정 발생했습니다, 또는 호출 필드 또는 메소드가 private, protected 또는 default 액세스 (public이 아님)로 선언되었거나 클래스가 선언되지 않았기 때문에 참조가 들어있는 코드에 액세스 할 수없는 메소드의 생성 또는 클래스의 인스턴스 작성 공공의. 예를 들어, 원래 public으로 선언 된 필드가 필드를 참조하는 다른 클래스가 컴파일 된 후에 private로 변경된 경우에 발생할 수 있습니다 (13.4.6).
InstantiationError : 클래스 인스턴스 작성 표현식에 사용 된 기호 참조가 발견되었지만 참조가 인터페이스 또는 추상 클래스를 참조하기 때문에 인스턴스를 작성할 수 없습니다. 예를 들어, 원래 추상 클래스가 아닌 클래스가 해당 클래스를 참조하는 다른 클래스가 컴파일 된 후에 추상으로 변경되는 경우에 발생할 수 있습니다 (13.4.1 절).
NoSuchFieldError : 특정 클래스 또는 인터페이스의 특정 필드를 참조하는 심볼릭 참조가 발견되었지만 클래스 또는 인터페이스에 해당 이름의 필드가 없습니다. 예를 들어 필드를 참조하는 다른 클래스가 컴파일 된 후 클래스에서 필드 선언이 삭제 된 경우 (13.4.7) 발생할 수 있습니다.
NoSuchMethodError : 특정 클래스 또는 인터페이스의 특정 메소드를 참조하지만 해당 클래스 또는 인터페이스에 해당 서명의 메소드가 포함되지 않은 기호 참조가 발생했습니다. 예를 들어, 메소드를 참조하는 다른 클래스가 컴파일 된 후 클래스에서 메소드 선언이 삭제 된 경우 (13.4.11) 발생할 수 있습니다. 또한 클래스가 구현을 찾을 수없는 기본 메서드를 선언하면 UnsatisfiedLinkError (LinkageError) 클래스가 throw 될 수 있습니다. 가상 컴퓨터에서 사용되는 전략의 종류에 따라 메서드를 사용하는 경우 오류가 발생합니다 (12.3 단원).