我想了解当 finally 块中再次发生异常时,try 块中抛出的异常会发生什么?
运行下面的代码后,我只看到 finally 块中抛出的异常。我想了解 try 块中抛出的异常会发生什么?
try{
int i = 10/0;
}
finally {
System.out.println("one");
int[] a = new int[2];
a[4] = 0;
System.out.println("two");
}
答案 0 :(得分:1)
try
块中的异常被丢弃和遗忘,如 language specification 中所述:
try
块的执行由于值 V 的 throw
而突然完成,则有一个选择:
....
<块引用>catch
语句的任何 try
子句的可捕获异常类的赋值不兼容,则执行 finally
块。然后有一个选择:
finally
块正常完成,那么 try
语句会因为值 V 的 throw
而突然完成。finally
块因原因 S 突然完成,则 try
语句因原因 S 突然完成(并且值 V 的 throw
被丢弃和遗忘)。