2017-03-24 6 views
0

많은 책에서 정적 인스턴스 바인딩 (private)을 사용하지 않고 정적 바인딩을 사용하고 다른 인스턴스 메소드 (private가 아닌)는 동적 바인딩을 사용한다고 말했습니다. 그러나 컴파일 될 때, 둘 다 "invokevirtual"JVM 명령어를 사용합니다. 최종 메소드와 최종 메소드가 다른가? JVM이 "invokevirtual"명령어를 실행할 때? 원래는 정적 메서드를 사용하기 때문에 최종 메서드는 "invokespecial"을 전용 인스턴스 메서드로 사용한다고 생각했습니다.자바 최종 메소드는 정적 바인딩을 사용하지만 JVM은 컴파일시 "invokevirtual"명령어를 사용합니다.

답변

0

invokevirtual 이외의 클래스에서 선언 한 인스턴스 메서드를 호출하는 다른 바이트 코드 명령어가 없습니다. 그 이름은 혼란 스럽다. invokeClassMethod 또는 invokeclass과 같은 이름을 지정할 수도 있습니다. 실제로 컴파일러는 최종 메서드를 특별히 처리하지 않습니다. invokespecial은 생성자 및 정적 초기화 프로그램을 호출하는 데 사용됩니다.