我在面试中问了以下问题:
最终块是否总是被执行?
编辑:
在Java中尝试以上方法后:
如果我将return语句放在try块或catch块中,则
finally
块执行,但是finally
块将无法运行。 我不知道背后的原因。
最佳答案
对于return
,是。如果需要详细信息,请在JLS section 14.20.2中指定。
(请注意,在JLS术语中,return
视为突然终止。但这没关系,因为当您仔分割析规范时,您会看到finally
针对正常终止和突然终止都执行。
如果是System.exit()
,则不会。对exit
方法的调用永远不会返回,也不会引发异常。因此,永远不会执行该线程的“封闭” finally
子句。
(按照JLS的说法,exit()
调用根本不会“终止”。从概念上讲,该方法与进入无限循环的方法(在魔术上不使用任何CPU时间)相同。与JVM关闭相关的所有 Activity 均发生在其他线程上。)