最终块总是用Java执行吗?

是的,除非由于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 block is always executed

例子2

public class FinallyBlock {
   public static void main(String args[]) {
      try {
         System.out.println("I am in try block");
         System.exit(1);
      } catch(Exception ex){
         ex.printStackTrace();
      } finally {
         System.out.println("I am in finally block");
      }
   }
}

在上面的示例中,由于try块中的System.exit(1)条件,无法执行finally块。

输出结果

I am in try block