Java-如果我在catch块中返回,那么finally块会被执行吗



这就是我要做的:

try {
    //code
} catch (Exception e) {
    return false;
} finally {
    //close resources
}

这行得通吗?这是不好的做法吗?这样做会更好吗:

boolean inserted = true;
try {
    //code
} catch (Exception e) {
    inserted = false;
} finally {
    //close resources
}
return inserted;

是的,会的。唯一可以阻止finally块执行(AFAIR)的是System.exit()和无限循环(当然还有JVM崩溃)。

finally块总是无条件执行,就像try-catch-finally块所做的最后一件事一样。即使对它执行Thread#stopfinally块仍将执行,就像发生了常规异常一样。

不仅如此,如果您从finally返回,则该返回值将践踏trycatch的返回值。

BTW你的第一个例子不仅很好,而且更受欢迎。在第二个例子中,读者必须四处寻找变量的赋值,这是一项乏味的工作,很容易让bug溜走。

两者大致相同。但是,要小心以下情况:

int i = 0;
try
{
    //code
}
catch(Exception e)
{
    return i;
}
finally
{
    i = 1;
}

将返回0

我只是想补充一下,它在规范中有描述:

如果catch块由于原因R而突然完成,则执行finally块。

当然

由此可见,return语句总是突然完成。

相关内容

  • 没有找到相关文章

最新更新