在Java字节码中,有一个选项可将常量池索引0指定为异常处理程序类型,允许您捕获所有异常。但是,据我所知,这与捕捉Throwable完全相同。那么这个功能的目的是什么?有朝一日,Java的设计师是否设想添加不能从Throwable继承的异常类型?它看起来并不像,但除了懒惰之外,我无法想到另一种解释。
答案 0 :(得分:0)
如果
catch_type
项的值为零,则会针对所有异常调用此异常处理程序。这用于实现finally
(§3.13)。
尽管在§3.13中没有具体讨论catch_type为零的使用,但是在Java中编译finally
子句时使用它的提示给出了一个线索。可能是JVM设计人员需要一种简单的方法来引用所有异常类型,而无需专门引用Throwable
类。使用catch_type零将更容易让JVM识别而不必索引到常量池并解析那里的java/lang/Throwable
类名。
实际上,正如你所说的,引用java/lang/Throwable
的常量池中的catch_type零或索引应该完全相同。