gpt4 book ai didi

java - 未捕获的 RuntimeException 和 finally 子句 : which comes first?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:42 24 4
gpt4 key购买 nike

try block 中抛出一个 RuntimeException 而未被捕获,而 finally 子句调用 System.exit().

public static void main(String[] args) {
try {
Integer.valueOf("NotANumber");
} finally {
System.out.println("finally");
System.exit(0);
}
}

输出是

finally

如果 System.exit(0) 从 finally 中移除,则输出为

finally
Exception in thread "main" java.lang.NumberFormatException: For input string: "NotANumber"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.valueOf(Integer.java:554)
at exception.MyExcepTest.main(MyExcepTest.java:20)

“finally” 可能出现在 NumberFormatException 消息之前、之后或之间。

谁能解释一下?

最佳答案

finally block 肯定会在main 方法退出之前执行,之后由JVM 打印stacktrace。

也许堆栈跟踪被打印到 System.err,并且这两个流以不可预知的方式在您的控制台输出中混合(因为它们基本上是同时产生的)。

当您也将“finally”打印到 System.err 时会发生什么?

关于java - 未捕获的 RuntimeException 和 finally 子句 : which comes first?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255295/

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