Java - 如果我返回一个 catch 块,最终会执行该块吗?

2022-09-04 06:09:24

这就是我正在尝试做的:

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;

答案 1

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


答案 2

总是无条件地执行,就像块做的最后一件事一样。即使您针对它执行,该块仍将执行,就像发生常规异常一样。finallytry-catch-finallyThread#stopfinally

不仅如此,如果从 返回,则该返回值将践踏来自 或 的返回值。finallytrycatch

顺便说一句,您的第一个示例不仅很好,而且是首选。在第二个示例中,读者必须追逐变量的赋值,这是一项繁琐的工作,并且很容易让错误溜走。