这个问题在这里已有答案:
给出java中的以下try / catch块:
try{
return;
}
catch(SomeException e){
System.out.println(e);
}
finally{
System.out.println("This is the finally block");
}
并根据这篇文章:“Does finally always execute in Java?”我可以看到程序's output will be '这是最后的块'. However, I can' t弄清楚如何可能,因为print语句前面有一个返回...
我怀疑这种行为与线程有关,但我不确定 . 请赐教 . 谢谢 .
3 回答
return
语句对finally
块的执行没有影响 . 如果JVM
在执行finally
block之前崩溃/退出,则不执行finally
块的唯一方法 . 请查看此Link了解更多信息 . 因此,如果您的代码被替换为finally
块将不会执行finally
在return
语句之前执行 . 由于java规则finally
将始终执行,除非JVM崩溃或System.exit()
被调用 .Java语言规范明确提到最终在不同条件下的执行:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2
Juned是正确的 . 我还想提醒一下从finally块抛出异常,它们会扼杀其他发生的异常 . 例如(有些愚蠢的例子,但它说得好):
在这种情况下,即使捕获并重新抛出SQLException,finally也会抛出一个RuntimeException,它将“屏蔽”或覆盖SQLException . 调用者将收到RuntimeException而不是SQLException .