我在面试中问了以下问题:



最终块是否总是被执行?

编辑:
在Java中尝试以上方法后:

如果我将return语句放在try块或catch块中,则

  • finally块执行,但是
  • 如果我调用System.exit form try或catch,
  • finally块将无法运行。

  • 我不知道背后的原因。

    最佳答案



    对于return,是。如果需要详细信息,请在JLS section 14.20.2中指定。

    (请注意,在JLS术语中,return视为突然终止。但这没关系,因为当您仔分割析规范时,您会看到finally针对正常终止和突然终止都执行。

    如果是System.exit(),则不会。对exit方法的调用永远不会返回,也不会引发异常。因此,永远不会执行该线程的“封闭” finally子句。

    (按照JLS的说法,exit()调用根本不会“终止”。从概念上讲,该方法与进入无限循环的方法(在魔术上不使用任何CPU时间)相同。与JVM关闭相关的所有 Activity 均发生在其他线程上。)

    09-30 17:53
    查看更多