【问题标题】:what happens to the exception thrown in try block if an expectation is thrown again in finally block?如果在 finally 块中再次抛出期望,try 块中抛出的异常会发生什么?
【发布时间】:2021-01-28 14:07:01
【问题描述】:

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

【问题讨论】:

  • 终于不应该有任何容易发生异常的代码。如果出现任何问题,它需要finalize 代码块。 IE。关闭文件、连接等。如果finally 有错误,则该错误将被抛出。
  • 此外,您在 try 块中看不到异常,但它仍然发生。它根本没有显示给您,因为您应该在finally 中自己处理异常

标签: java exception


【解决方案1】:

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

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

....

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

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2023-04-01
    • 2012-09-20
    • 2012-03-24
    • 2017-02-10
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多