这就是我要做的事情:
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;
答案 0 :(得分:23)
是的,它会的。唯一可以阻止finally块执行的东西(AFAIR)是System.exit()
和无限循环(当然还有JVM崩溃)。
答案 1 :(得分:6)
作为finally
块的最后一件事,try-catch-finally
块始终无条件地执行。即使你对它执行Thread#stop
,finally
块仍然会执行,就像发生常规异常一样。
不仅如此,如果您从finally
返回,则该返回值将会覆盖try
或catch
的返回值。
BTW你的第一个例子不仅很好,而且更受欢迎。在第二个例子中,读者必须追逐变量的赋值,这是一项繁琐的工作,让bug很容易漏掉。
答案 2 :(得分:4)
两者大致相同。但是,请注意以下情况:
int i = 0;
try
{
//code
}
catch(Exception e)
{
return i;
}
finally
{
i = 1;
}
0
将返回。
答案 3 :(得分:0)