Ruc*_*era 3 java exception try-catch-finally
我试图弄清楚try-catch-finallyin的执行顺序java.我认为执行顺序应该是
但我对以下结果感到困惑
public class TryCatchFinally {
static int i = 0;
public static void main(String[] args) {
try {
System.out.println(i++);
main(args);
} catch (StackOverflowError e) {
System.out.println("Catch");
} finally {
System.out.println("Finally");
}
}
}
Run Code Online (Sandbox Code Playgroud)
出局(出局的一部分)
9127
9128
9129
9130
CatcFCatch // what is the wrong here???
Finally
Finally // there are more Finally printed here.
Run Code Online (Sandbox Code Playgroud)
我的问题是这里真的发生了什么?
让我添加更多为什么它不打印"Catch"?
我在运行时得到了这个IntelliJ IDEA.但是当我跑进去的时候,我会terminal按照以下方式退出.
9151
9152
9153
9154CatchFinallyCatch
Finally
Finally
Finally
Finally
Run Code Online (Sandbox Code Playgroud)
有可能你在调用中的某个地方出现了stackoverflow错误println(可能是因为某些刷新正在进行或类似的事情),使println方法处于不一致的状态(打印部分应该是什么).
当你已经在处理a 时很容易发生这种情况StackOverflowError,因为此时你已经危险地接近溢出的堆栈(因为你刚从一个非常接近问题的点恢复).
我的解释看起来像这样:
StackOverflowError,因为堆栈已满println电话中,另一个StackOverflowError发生catch块已完成(突然)println电话中又 StackOverflowError发生了另一次StackOverflowError是在第9130次调用中发现的mainFinally成功打印,因为堆栈现在缩短了1个元素.| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |