`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` 中的异常吗?