幾個示例演示Java中異常的發生與處理

一、Java Exception 繼承關系
在Java中,所有的異常都是java.lang.Throwable類的子類。Throwable類有兩個主要的子類:java.lang.Error和java.lang.Exception。
- Error類表示嚴重的問題,通常是由Java虛擬機(JVM)生成的,如OutOfMemoryError。這些錯誤通常是不可恢復的,并且不應由應用程序代碼捕獲。
- Exception類表示程序能夠處理的問題。它分為兩大類:已檢查異常(Checked Exceptions)和未檢查異常(Unchecked Exceptions)。
- 已檢查異常:這些是在編譯時要求程序員必須捕獲或聲明的異常,如IOException。
- 未檢查異常:這些是在運行時拋出的異常,通常是程序員的編程錯誤導致的,如NullPointerException或ArithmeticException。

二、示例程序
接下來,我將通過幾個示例程序來演示Java中異常的發生和處理。
示例1:已檢查異常
import java.io.FileInputStream;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("nonexistent.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
}在上面的例子中,我們嘗試打開一個不存在的文件,這會拋出FileNotFoundException,它是IOException的一個子類,屬于已檢查異常。我們使用try-catch塊來捕獲并處理這個異常。
示例2:未檢查異常
public class UncheckedExceptionExample {
public static void main(String[] args) {
try {
int x = 10 / 0;
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
}在這個例子中,我們嘗試做一個除以零的操作,這會拋出ArithmeticException,屬于未檢查異常。我們同樣使用try-catch塊來處理這個異常。
示例3:自定義異常
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
throw new CustomException("This is a custom exception.");
} catch (CustomException e) {
e.printStackTrace();
}
}
}在這個例子中,我們定義了一個名為CustomException的自定義異常,并在main方法中拋出它。我們使用try-catch塊來捕獲并處理這個自定義異常。
三、異常處理方式
處理異常的方式主要有兩種:
- 使用try-catch塊:這是最常見的異常處理方式。你可以在try塊中編寫可能拋出異常的代碼,并在catch塊中處理這些異常。
- 使用try-catch-finally塊:除了處理異常外,你還可以使用finally塊來執行無論是否發生異常都需要執行的代碼,如釋放資源。
- 使用try-with-resources語句:這是Java 7引入的一個新特性,用于自動關閉實現了AutoCloseable接口的資源,如文件流。
- 聲明拋出異常:如果方法內部發生了異常,并且你希望調用該方法的代碼來處理這個異常,你可以在方法簽名中使用throws關鍵字聲明拋出該異常。
通過上面的示例程序和解釋,你應該對Java中的異常和如何處理它們有了基本的了解。在實際編程中,合理地使用異常處理機制是提高代碼健壯性和可維護性的關鍵。
























