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 块中

相关文章