在JVM中捕获任何内容的目的

时间:2012-07-21 04:29:55

标签: exception-handling jvm .class-file

在Java字节码中,有一个选项可将常量池索引0指定为异常处理程序类型,允许您捕获所有异常。但是,据我所知,这与捕捉Throwable完全相同。那么这个功能的目的是什么?有朝一日,Java的设计师是否设想添加不能从Throwable继承的异常类型?它看起来并不像,但除了懒惰之外,我无法想到另一种解释。

1 个答案:

答案 0 :(得分:0)

JVM specification (§4.7.3)州:

  

如果catch_type项的值为零,则会针对所有异常调用此异常处理程序。这用于实现finally(§3.13)。

尽管在§3.13中没有具体讨论catch_type为零的使用,但是在Java中编译finally子句时使用它的提示给出了一个线索。可能是JVM设计人员需要一种简单的方法来引用所有异常类型,而无需专门引用Throwable类。使用catch_type零将更容易让JVM识别而不必索引到常量池并解析那里的java/lang/Throwable类名。

实际上,正如你所说的,引用java/lang/Throwable的常量池中的catch_type零或索引应该完全相同。