Scala 如果“try”或“catch”块中有“return”,是否执行“finally”块?

Scala 如果“try”或“catch”块中有“return”,是否执行“finally”块?,scala,exception-handling,Scala,Exception Handling,使用try-catch-finally构造来检索数据库记录,似乎我需要在try块中返回一个值,以防一切正常(例如,在异常情况下,函数的结尾无法到达)。但是,如果我返回到try,是否最终将到达代码(关闭连接等)?是 try/catch表达式的结果将是try或catch块的最后一行,但无论发生什么情况,finally块都将始终执行 finally的要点是确保执行某些清理代码,无论代码使用什么路径离开try块。它发生在普通返回时,当抛出并捕获异常时,以及当抛出此try块未捕获的异常时。唯一会阻止它运行

使用try-catch-finally构造来检索数据库记录,似乎我需要在
try
块中返回一个值,以防一切正常(例如,在异常情况下,函数的结尾无法到达)。但是,如果我返回到
try
,是否最终将到达
代码(关闭连接等)?

try/catch
表达式的结果将是
try
catch
块的最后一行,但无论发生什么情况,
finally
块都将始终执行


finally
的要点是确保执行某些清理代码,无论代码使用什么路径离开
try
块。它发生在普通返回时,当抛出并捕获异常时,以及当抛出此
try
块未捕获的异常时。唯一会阻止它运行的是程序根本无法离开
try
块;它内部的无限循环,或者进程通过某种方式被终止,从而阻止正常处理的发生,或者类似的事情。我非常确定,即使您从
try
块中退出进程,
finally
块也会在进程实际死亡之前执行。

即使
try
块中有显式
return
语句,也会执行
finally
块。唯一不执行
finally
块的情况是
sys.exit()
try
catch
块中调用。另外,如果JVM在finally之前崩溃,正如我发现的困难之路。