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

问题描述 投票:0回答:3

使用 try-catch-finally 结构来检索数据库记录,似乎我需要在

try
块内返回一个值,以防万一一切正常(就像在出现异常的情况下,函数的结束并不意味着才能达到)。但是如果我返回到
try
内部,是否会到达
finally
代码(以关闭连接等)?

scala exception
3个回答
14
投票

是的,

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


4
投票

是的。

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


0
投票

来自文档

如果在 try 或 the try 中遇到 return 语句 catch 块,finally 块仍然会被执行。

© www.soinside.com 2019 - 2024. All rights reserved.