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

时间:2021-01-28 14:07:01

标签: java exception

我想了解当 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");
        }

1 个答案:

答案 0 :(得分:1)

try 块中的异常被丢弃和遗忘,如 language specification 中所述:

<块引用>
  • 如果 try 块的执行由于值 V 的 throw 而突然完成,则有一个选择:

....

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