Java 教程

Java控制语句

面向对象编程

Java内置类

Java文件处理

Java错误和异常

Java多线程

Java同步

Java网络编程

Java集合

Java接口

Java数据结构

Java集合算法

高级Java

Java杂项

Java APIs和框架

Java类参考

Java有用资源

Java - finally关键字



Java finally 关键字用于在 Java 程序中定义 finally 块。Java 中的 finally 块位于 try 块或 catch 块之后。无论 Java 程序中是否发生异常,finally 代码块始终都会执行。

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

finally 块出现在 Java 程序中 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.
}

示例

在这个例子中,我们使用无效索引访问数组的元素。当程序运行时,它会抛出 ArrayIndexOutOfBoundsException。由于我们在 catch 块中处理了此异常,因此也会执行以下 finally 块。

// File Name : ExcepTest.java
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

示例

在这个例子中,我们使用无效索引访问数组的元素。当程序运行时,它会抛出 ArrayIndexOutOfBoundsException。由于我们在catch块中处理了此异常,并进一步抛出异常,因此finally块仍然会被执行。

// File Name : ExcepTest.java
package com.tutorialspoint;

public class ExcepTest {

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

class CustomException extends Exception{
   private static final long serialVersionUID = 1L;
   CustomException(Exception e){
      super(e);
   }
}

输出

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Exception in thread "main" First element value: 6
The finally statement is executed
com.tutorialspoint.CustomException: java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:12)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:9)

注意以下几点:

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

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

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

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

java_basic_syntax.htm
广告