finally 块中的任何内容都(几乎)总是执行,那么将代码封闭到其中或不封闭有什么区别?
无论是否有异常,finally 块中的代码都会被执行。当涉及到您需要始终像关闭连接一样运行的某些内务管理功能时,这非常方便。
现在,我猜你的问题是为什么你应该这样做:
try { doSomething(); } catch { catchSomething(); } finally { alwaysDoThis(); }
什么时候可以这样做:
try { doSomething(); } catch { catchSomething(); } alwaysDoThis();
答案是很多时候,你的 catch 语句中的代码要么重新抛出异常,要么跳出当前函数。对于后一个代码,“alwaysDoThis();” 如果 catch 语句中的代码发出 return 或抛出新的异常, call 将不会执行。