Avatar ·

`finally` 块总是执行吗?JVM 和 `System.exit()` 的陷阱

大家好!我是 Java 新手,正在尝试理解异常处理。`finally` 块让我感到困惑。教科书上说它总是执行,无论是否有异常。但我找到了一些似乎并非如此的例子。 例如,以下代码: ```java public class FinallyTest { public static void main(String[] args) { try { System.out.println("在 try 中"); System.exit(0); } catch (Exception e) { System.out.println("在 catch 中"); } finally { System.out.println("在 finally 中"); } } } ``` 我期望看到 "在 finally 中",但程序直接结束了,没有输出。为什么?`System.exit(0)` 不是异常,而是正常终止。 另一个例子。如果 `try` 块中有 `return`,`finally` 仍然会执行吗?我听说会,但想确认一下。如果 `finally` 中也抛出异常会怎样?它会覆盖 `try` 中的异常吗?