Java - 如果我在catch块中返回,是否会执行finally块?

Com*_*ver 12 java scope try-catch-finally

这就是我想要做的:

try {

    //code
} catch (Exception e) {

    return false;
} finally {

    //close resources
}
Run Code Online (Sandbox Code Playgroud)

这会有用吗?这是不好的做法吗?这样做会更好:

boolean inserted = true;

try {

    //code
} catch (Exception e) {

    inserted = false;
} finally {

    //close resources
}

return inserted;
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 23

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

  • ...和停电:)(爆炸,你通过添加JVM崩溃毁了它) (7认同)
  • 许多人忽略了有趣的一点是,"线程#停止"将*不会阻止`finally`执行. (2认同)

Mar*_*nik 6

总是无条件地finally执行该块,作为块的最后一件事.即使你执行它,该块仍将执行,就像发生常规异常一样.try-catch-finallyThread#stopfinally

不仅如此,如果你从中返回finally,那个返回值将会践踏任何一个try或者的返回值catch.

BTW你的第一个例子不仅很好,而且更受欢迎.在第二个例子中,读者必须追逐变量的赋值,这是一项繁琐的工作,让bug很容易漏掉.