Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 与框架

Java 类引用

Java 有用资源

Java - finally 代码块



Java 中的 finally 代码块

finally 代码块位于 try 代码块或 catch 代码块之后。无论是否发生异常,finally 代码块中的代码始终都会执行。

使用 finally 代码块,您可以运行任何您想要执行的清理类型语句,无论受保护的代码中发生了什么。

语法:finally 代码块

finally 代码块出现在 catch 代码块的末尾,并具有以下语法:

try {
   // Protected code
} catch (ExceptionType1 e1) {
   // Catch block
} catch (ExceptionType2 e2) {
   // Catch block
} catch (ExceptionType3 e3) {
   // Catch block
}finally {
   // The finally block always executes.
}

使用 finally 代码块时需要注意的事项

  • catch 子句不能没有 try 语句。

  • 并非每次 try/catch 代码块都必须有 finally 子句。

  • try 代码块不能没有 catch 子句或 finally 子句。

  • try、catch、finally 代码块之间不能有任何代码。

  • 如果在 finally 代码块之前调用了 exit() 方法或程序执行中发生了致命错误,则不会执行 finally 代码块。

  • 即使方法在 finally 代码块之前返回了一个值,finally 代码块也会执行。

为什么要使用 Java finally 代码块?

  • Java finally 代码块可用于清理(关闭)连接、打开的文件、流等,这些必须在程序退出之前关闭。
  • 它还可以用于打印一些最终信息。

Java finally 代码块示例

以下代码段演示了如何在处理异常后使用 try/catch 语句后的 finally 代码块。在这个例子中,我们创建了一个错误,使用无效索引访问数组的元素。catch 代码块处理异常并打印它。现在,在 finally 代码块中,我们打印一个语句,表示 finally 代码块正在执行。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      int a[] = new int[2];
      try {
         System.out.println("Access element three :" + a[3]);
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("Exception thrown  :" + e);
      }finally {
         a[0] = 6;
         System.out.println("First element value: " + a[0]);
         System.out.println("The finally statement is executed");
      }
   }
}

输出

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

更多示例

示例 1

以下代码段演示了如何在即使没有处理异常的情况下,在 try/catch 语句之后使用 finally 代码块。在这个例子中,我们创建了一个错误,使用无效索引访问数组的元素。由于 catch 代码块没有处理异常,我们可以在输出中检查 finally 代码块是否打印了一个语句,表示 finally 代码块正在执行。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      int a[] = new int[2];
      try {
         System.out.println("Access element three :" + a[3]);
      } catch (ArithmeticException e) {
         System.out.println("Exception thrown  :" + e);
      }finally {
         a[0] = 6;
         System.out.println("First element value: " + a[0]);
         System.out.println("The finally statement is executed");
      }
   }
}

输出

First element value: 6
The finally statement is executed
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:8)

示例 2

以下代码段演示了如何在 try 代码块中方法可以返回值的情况下使用 finally 代码块。在这个例子中,我们在 try 代码块中返回一个值。我们可以在输出中检查 finally 代码块是否打印了一个语句,表示即使方法向调用函数返回了一个值后,finally 代码块也正在执行。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {     
      System.out.println(testFinallyBlock());
   }

   private static int testFinallyBlock() {
      int a[] = new int[2];
      try {
         return 1; 
      } catch (ArrayIndexOutOfBoundsException e) {
      System.out.println("Exception thrown  :" + e);
      }finally {
         a[0] = 6;
         System.out.println("First element value: " + a[0]);
         System.out.println("The finally statement is executed");
      }
      return 0;
   }
}

输出

First element value: 6
The finally statement is executed
1
广告