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
廣告