Java 中的 finally 块是否始终执行?
javaobject oriented programmingprogramming
是的,除非由于 JVM 崩溃或调用 System.exit() 导致程序异常终止,否则 finally 块始终会执行。
- 无论是否发生异常,finally 块始终会执行。
- 如果发生异常(例如关闭文件或数据库连接),则使用 finally 块来清理代码。
- 我们不能说 finally 块始终会执行,因为有时如果将任何语句(例如 System.exit())或某些类似代码写入 try 块,则程序将自动终止,并且在这种情况下不会执行 finally 块。
- 由于其他情况,例如当 JVM 内存不足时,当我们的 java 进程从任务管理器或控制台强制终止时,当我们的机器因电源故障和 try 块中的死锁情况而关闭时,finally 块将不会执行。
示例1
public class FinallyBlock { public static void main(String args[]){ try { int a=10,b=30; int c = b/a; System.out.println(c); } catch(ArithmeticException ae){ System.out.println(ae); } finally { System.out.println("finally block is always executed"); } } }
在上面的例子中,finally 块无论是否发生异常都会执行。
输出
3 finally 块始终执行
示例 2
public class FinallyBlock { public static void main(String args[]) { try { System.out.println("我在try块中"); System.exit(1); } catch(Exception ex){ ex.printStackTrace(); } finally { System.out.println("我在finally块中"); } } }
在上面的例子中,由于 try 块中的 System.exit(1) 条件,finally 块将不会执行。
输出
我在 try 块中