在 Java 字节码中,有一个选项可以将常量池索引 0 指定为异常处理程序类型,从而允许您捕获所有异常。但是,据我了解,这与捕获 Throwable 完全相同。那么这个功能的目的是什么?有一天,Java 的设计者是否设想过添加不继承自 Throwable 的异常类型?看起来不像,但除了懒惰,我想不出其他解释。
问问题
84 次
1 回答
0
如果该项的值
catch_type
为零,则为所有异常调用此异常处理程序。这用于实现finally
(§3.13)。
尽管第 3.13 节中没有具体讨论 catch_type zero 的使用,但finally
在 Java 中编译子句时使用它的提示提供了一个线索。JVM 设计者可能想要一种简单的方法来引用所有异常类型,而不必专门引用Throwable
该类。使用 catch_type 零对于 JVM 来说更容易识别,而不是必须索引到常量池并在java/lang/Throwable
那里解析类名。
实际上,正如您所说,catch_type 零或指向常量池的索引java/lang/Throwable
应该相同地工作。
于 2012-07-21T04:49:50.073 回答