我试图理解如何try-catch-finally
执行流程有效。 Stack Overflow 用户提供了一些关于其执行流程的解决方案。
其中一个例子是:
try {
// ... some code: A
}
catch(...) {
// ... exception code: B
}
finally {
// finally code: C
}
代码A将被执行。如果一切顺利(即 A 执行时没有抛出异常),它将转到finally
,所以代码 C 将被执行。如果A执行时抛出异常,则异常会转到B,最后转到C。
然而,当我尝试时,我得到了不同的执行流程:
try {
int a=4;
int b=0;
int c=a/b;
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally {
System.out.println("common");
}
我得到两个不同的输出:
第一个输出:
java.lang.ArithmeticException: / by zero
at substrings.main(substrings.java:15)
lication.AppMain.main(AppMain.java:140)
common
然而,当我第二次运行同一个程序时:
第二个输出:
common
java.lang.ArithmeticException: / by zero
at substrings.main(substrings.java:15)
我应该从中得出什么结论?会是随机的吗?
printStackTrace()
输出到标准错误。System.out.println("common")
输出到标准输出。它们都路由到同一个控制台,但它们在该控制台上出现的顺序不一定是它们的执行顺序。
如果您在 catch 块和 finally 块中写入同一个流(例如,尝试System.err.println("common")
),您会看到当捕获异常时,catch 块始终在finally 块之前执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)