Мак*_*кин 2 java exception stack-trace
这是我的简单测试代码:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行后我会得到这个:
Line 1
Line 2
java.lang.RuntimeException
at Scratch.main(scratch_4.java:5)
Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)
我以为“finally”代码必须最后执行,但事实并非如此。是什么原因?
默认情况下,printStackTrace打印到System.err,而您正在写入System.out。因此,您正在写入两个不同的流,在您的特定情况下,看起来涉及的缓冲已将输出顺序与实际执行顺序切换。
如果您写入单个流(例如使用System.err.println 或调用e.printStackTrace(System.out))或将catch块更改为像其他行一样写入System.out,您将看到 try => catch => finally 的顺序。
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |