【发布时间】:2021-09-06 15:29:20
【问题描述】:
这是我的简单测试代码:
class Scratch {
public static void main(String[] args) {
try {
System.out.println("Line 1");
throw new RuntimeException();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
System.out.println("Line 2");
}
}
}
运行后我会得到这个:
Line 1
Line 2
java.lang.RuntimeException
at Scratch.main(scratch_4.java:5)
Process finished with exit code 0
我认为“finally”代码必须最终执行,但事实并非如此。 是什么原因?
【问题讨论】:
-
我认为 finally 只是定义为在
catch中的代码之前执行。不过为了确定,我必须在语言规范中查找。 -
@markspace:不,肯定是在catch块之后执行的。
-
我接受更正!不过,我会留下我的评论,因为我认为这说明了一个可能的误解。
-
@markspace 我要说的是关键字
finally应该清楚地表明这是最后发生的事情;但后来我发现the Oracle tutorial says“finally 块总是在 try 块退出时执行。”,这是一个非常具有误导性的陈述。就像 JonSkeet 说的:如果 try 抛出了匹配的异常,它肯定会在 catch 之后执行。
标签: java exception stack-trace