2012-07-21 2 views
2

Java 바이트 코드에는 예외 처리기 유형으로 상수 풀 인덱스 0을 지정하여 모든 예외를 포착 할 수있는 옵션이 있습니다. 그러나, 내가 이해하는 바와 같이 이것은 Throwable을 잡는 것과 정확히 동일하다. 그렇다면이 기능의 목적은 무엇입니까? 자바 설계자는 언젠가 Throwable에서 상속받지 않는 예외 유형을 추가 할 계획을 세웠습니까? 그것은 그 것처럼 보이지 않지만 게으름을 제외하고는 다른 설명을 생각할 수 없습니다.JVM의 any 캐치 목적

답변

0

JVM specification (§4.7.3) 상태 :

catch_type 항목의 값이 0 인 경우,이 예외 핸들러는 모든 예외라고합니다. 이것은 finally (§3.13)을 구현하는 데 사용됩니다. catch_type 제로 사용 §3.13 특별히 논의되지 않지만 자바 finally 절 컴파일시 힌트가 사용되는 것을

단서를 제공한다. JVM 디자이너가 Throwable 클래스를 특별히 참조 할 필요없이 모두 예외 유형을 참조하는 간단한 방법을 원했기 때문일 수 있습니다. catch_type 0을 사용하면 상수 풀로 색인을 작성하고 거기에서 java/lang/Throwable 클래스 이름을 확인하지 않고도 JVM에서 쉽게 식별 할 수 있습니다.

실질적으로 말해서 catch_type 0 또는 상수 풀에 대한 인덱스 java/lang/Throwable을 나타내는 인덱스는 동일하게 작동해야합니다.

+0

기본적으로 게으름입니다. 나는 그것이 합리적이라고 생각한다. 그건 그렇고, 그것은 단지 마지막으로 사용되지 않습니다. 또한 동기화 된 블록에서 예외 처리에 사용됩니다. – Antimony