我试图理解在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
被丢弃并被遗忘)。