gpt4 book ai didi

java - 在 finally block 中抛出异常

转载 作者:行者123 更新时间:2023-11-29 05:19:10 25 4
gpt4 key购买 nike

我试图在 finally block 中抛出相同的异常,而之前抛出的异常没有被捕获。我预计我们将抛出两个 Excpetion 类型的对象。由于我们需要两个 catch 子句,如下所示:

public static void main(String[] args) {
try {
try {
try {
throw new Exception();
} finally {
System.out.println("finally");
throw new Exception();
}
} catch (Exception ex) {
System.out.println("catch");
} finally {
System.out.println("finally");
}
} catch (Exception ex) {
System.out.println("catch");
}
System.out.println("finish");
}

但是那个程序打印:

finally
catch
finally
finish

即没有进入第二个catch子句。为什么?

最佳答案

当您在 finally block 中抛出异常时,第一个异常会悄无声息地消失。

它在 JLS Chapter 14.20.2

If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S.

无论您如何进入 finally block ,这都是事实。如果您通过抛出异常 T 进入它,则无法再捕获该异常。

关于java - 在 finally block 中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25464893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com