如果在finally块中再次抛出期望,在try块中抛出的异常会发生什么?



我试图理解在try块中抛出的异常会发生什么,当在finally块中再次发生异常时?

运行下面的代码后,我只看到在finally块中抛出异常。我试图了解在try块抛出的异常发生了什么?

try{
int i = 10/0;
}
finally {
System.out.println("one");
int[] a = new int[2];
a[4] = 0;
System.out.println("two");
}

try块中的异常被丢弃并遗忘,如语言规范中指定的:

  • 如果try块的执行因为throw值为V而突然完成,则有一个选择:

……

  • 如果V的运行时类型与try语句的任何catch子句的可捕获异常类不兼容,则执行finally块。然后有一个选择:
  • 如果finally块正常完成,则try语句突然完成,因为throw的值为v。
  • 如果finally块因原因S而突然完成,则try语句因原因S而突然完成(值V的throw被丢弃并被遗忘)。

最新更新