Java finally语句的用法(附带实例)
Java 中的 try-catch 语句后面还可以跟有一个 finally 代码块,无论 try 代码块正常结束还是 catch 代码块异常结束都会执行 finally 代码块,如下图所示。

图 1 finally代码块
使用 finally 代码块的示例代码如下:

图 2 执行finally代码块
自动资源管理是在 try 语句上的扩展,语法如下:
示例代码如下:

图 1 finally代码块
使用 finally 代码块的示例代码如下:
import java.util.Scanner; public class ExceptionExample { public static void main(String[] args) { Scanner scanner = null; try { scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); String input = scanner.nextLine(); int number = Integer.parseInt(input); System.out.println("输入的整数是:" + number); int dividend = 100; int result = dividend / number; // 尝试除以零的算术运算,引发 ArithmeticException 异常 System.out.println("结果:" + result); } catch (NumberFormatException e) { System.out.println("输入的不是有效的整数。"); } catch (ArithmeticException e) { System.out.println("发生了算术异常:" + e.getMessage()); } catch (Exception e) { System.out.println("发生了其他异常。"); } finally { if (scanner != null) { // 确保无论发生什么情况,都关闭 Scanner 资源 scanner.close(); System.out.printf("资源已释放。"); } } } }程序运行过程如下图所示,无论是否发生了异常,都保证执行了 finally 代码块:

图 2 执行finally代码块
Java自动资源管理
使用 finally 代码块释放资源会导致程序代码大量增加,一个 finally 代码块往往比正常执行的程序还要多。在 Java 7 之后提供的自动资源管理技术可以替代 finally 代码块,优化代码结构,提高程序可读性。自动资源管理是在 try 语句上的扩展,语法如下:
try { // 声明或初始化资源语句 // 可能会生成异常语句 } catch (Throwable e1) { // 处理异常 e1 } catch (Throwable e2) { // 处理异常 e2 ... } catch (Throwable eN) { // 处理异常 eN }在 try 语句后面添加一对小括号“()”,其中是声明或初始化资源语句,可以有多条语句,语句之间用分号“;”分隔。
示例代码如下:
import java.util.Scanner; public class ExceptionExample { public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { System.out.print("请输入一个整数:"); String input = scanner.nextLine(); int number = Integer.parseInt(input); System.out.println("输入的整数是:" + number); int dividend = 100; int result = dividend / number; // 尝试除以零的算术运算,引发 ArithmeticException 异常 System.out.println("结果:" + result); } catch (NumberFormatException e) { System.out.println("输入的不是有效的整数。"); } catch (ArithmeticException e) { System.out.println("发生了算术异常:" + e.getMessage()); } catch (Exception e) { System.out.println("发生了其他异常。"); } } }在这个改进后的代码中,我们使用了自动资源管理 Scanner 对象。Scanner 类实现了 AutoCloseable 接口,因此在 try 代码块运行结束时会自动调用 scanner.close() 方法来关闭资源。无论代码是否发生异常,Scanner 对象都会被正确释放。这样的写法使代码更简洁,同时确保了资源的可靠释放。