在java中尝试/ catch块返回与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
return
语句对finally
块的执行没有影响。 finally
块不执行的唯一方法是如果JVM
在执行finally
块之前崩溃/退出。 查看此链接获取更多信息。 所以,如果你的代码被替换
try{
System.exit(0);
}
catch(SomeException e){
System.out.println(e);
}
finally{
System.out.println("This is the finally block");
}
finally
块将不会执行
Juned是正确的。 我也想告诫有关从finally块中抛出异常,他们会扼制发生的其他异常。 例如(有点愚蠢的例子,但它表明了):
boolean ok = false;
try {
// code that might throw a SQLException
ok = true;
return;
}
catch (SQLException e) {
log.error(e);
throw e;
}
finally {
if (!ok) {
throw new RuntimeException("Not ok");
}
}
在这种情况下,即使在捕获并重新抛出SQLException时,finally也会在此处引发RuntimeException,并且它将“屏蔽”或覆盖SQLException。 调用者将收到RuntimeException而不是SQLException。
链接地址: http://www.djcxy.com/p/73707.html