Java 中的已檢查和未檢查的異常

Mohammad Irfan 2023年10月12日
  1. Java 中被檢查的異常
  2. Java 中的未檢查異常
Java 中的已檢查和未檢查的異常

本教程介紹了 Java 中已檢查和未檢查的異常是什麼。

在 Java 中,異常是在程式碼執行過程中發生並異常終止執行的情況。此異常可能發生在編譯時或執行時。Java 將異常大致分為兩種型別,檢查的和未檢查的。由編譯器在編譯時檢查的異常稱為已檢查異常。同時,在執行時檢查的異常稱為未檢查異常。

為了處理異常,Java 為每個異常提供了類,例如 NullPointerExceptionArrayIndexOutofBoundsExceptionIOException 等。Exception 類位於所有異常類和任何屬於 Exception 子類的頂部 除了 RuntimeException 及其子類是受檢異常。

繼承 RuntimeException 的異常類,例如 ArithmeticExceptionNullPointerExceptionArrayIndexOutOfBoundsException 稱為未經檢查的異常。這些是在執行時檢查的。

Java 中被檢查的異常

讓我們首先了解什麼是異常以及它如何影響程式碼執行。在這個例子中,我們將資料寫入檔案,這段程式碼容易出現諸如 FileNotFoundExceptionIOException 等異常。我們沒有提供任何 catch 處理程式,由於這些是檢查異常,Java 編譯器會不編譯程式碼並在編譯時丟擲異常。請參閱下面的示例。

import java.io.FileOutputStream;

public class SimpleTesting {
  public static void main(String[] args) {
    FileOutputStream fout =
        new FileOutputStream("/home/root/eclipse-workspace/java-project/myfile.txt");
    fout.write(1256);
    fout.close();
    System.out.println("Data written successfully");
  }
}

輸出:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Unhandled exception type FileNotFoundException
	Unhandled exception type IOException
	Unhandled exception type IOException

	at SimpleTesting.main(SimpleTesting.java:8)

為了避免程式碼的任何異常終止,我們必須為程式碼提供一個 catch 處理程式。下面是與上面相同的程式碼,但它有一個 catch 處理程式,因此程式碼不會在兩者之間終止並正常執行。請參閱下面的示例。

import java.io.FileOutputStream;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      FileOutputStream fout =
          new FileOutputStream("/home/irfan/eclipse-workspace/ddddd/myfile.txt");
      fout.write(1256);
      fout.close();
      System.out.println("Data written successfully");
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

輸出:

Data written successfully

Java 中的未檢查異常

下面的程式碼丟擲 ArrayIndexOutOfBoundsException,這是一個未經檢查的異常。這段程式碼編譯成功但沒有執行,因為我們正在訪問陣列範圍之外的元素;因此程式碼丟擲執行時異常。請參閱下面的示例。

public class SimpleTesting {
  public static void main(String[] args) {
    int[] arr = {3, 5, 4, 2, 3};
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
    System.out.println(arr[23]);
  }
}

輸出:

3
5
4
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 5
	at SimpleTesting.main(SimpleTesting.java:9)

相關文章 - Java Exception