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

Mohammad Irfan 2023年1月30日 2022年1月13日
  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