一、Java異常簡介
Java異常是指在程序運行時發生了不可預期的情況,導致程序無法正常執行的錯誤。在Java中,異常是以類的形式存在,它們繼承自Java標準庫中的Exception類或RuntimeException類,其中RuntimeException是一種特殊類型的異常,可以不需要在方法上聲明。
二、Java異常的種類
Java中的異常大致可以分為兩種類型:受檢異常和非受檢異常。
1. 受檢異常
受檢異常是指必需在代碼中顯式處理的異常,否則編譯器就會報錯。所有繼承了Exception類的異常都是受檢異常。在方法的聲明中,必須聲明會拋出受檢異常,否則編譯器會報錯。在調用拋出受檢異常的方法時,需要使用try-catch塊進行捕獲並處理異常。受檢異常包括但不限於:IOException、SQLException等。
示例代碼:
public void readFile(String fileName) throws IOException {
File file = new File(fileName);
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
}
2. 非受檢異常
非受檢異常是指不需要在方法聲明上聲明,在編譯時也不需要強制處理的異常。非受檢異常包括但不限於:NullPointerException、ArrayIndexOutOfBoundsException等。當遇到這些異常時,程序會默認輸出相關的異常信息並停止運行。
示例代碼:
public void divide(int a, int b) {
int result = a / b;
System.out.println(result);
}
三、Java異常處理方式
1. try-catch語句
try-catch塊是一種異常處理方法,用於捕獲可能會拋出異常的代碼塊,並在捕獲到異常之後進行相應的處理。
示例代碼:
try {
// 可能產生異常的代碼塊
} catch (Exception e) {
// 異常處理代碼
}
2. try-catch-finally語句
try-catch-finally語句是在try-catch語句的基礎上,增加了finally語句塊,可以保證在程序執行過程中,finally語句塊中的代碼總是會被執行,即使try-catch代碼塊中拋出了異常。
示例代碼:
FileInputStream fis = null;
try {
fis = new FileInputStream("myfile.txt");
// do something
} catch (FileNotFoundException e) {
// handle the exception
} finally {
try {
fis.close();
} catch (IOException e) {
// handle the exception
}
}
3. try-with-resources語句
try-with-resources語句是一種Java 7引入的新特性,可用於自動關閉資源。當使用try-with-resources語句時,可以在try語句括弧中聲明需要使用的資源,然後在代碼塊結束時,系統會自動為我們關閉這些資源。
示例代碼:
try (FileReader reader = new FileReader("file.txt");
BufferedReader br = new BufferedReader(reader)) {
// do something
} catch (IOException e) {
// handle the exception
}
四、Java異常的拋出及自定義異常
1. 拋出異常
在Java中,異常可以通過throw語句手動觸發。當程序執行到throw語句時,會拋出指定的異常,程序會停止運行。
示例代碼:
public void divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("divided by zero");
}
int result = a / b;
System.out.println(result);
}
2. 自定義異常
在Java中,可以通過繼承Exception類或RuntimeException類來自定義異常。自定義異常類應該繼承Exception或RuntimeException,並且應該在異常類中提供無參構造函數以及一個帶有字元串參數的構造函數。
示例代碼:
class MyException extends Exception {
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
public void doSomething() throws MyException {
// 做一些可能會拋出自定義異常的事情
if (somethingWrongHappened) {
throw new MyException("something wrong happened!");
}
}
五、Java異常的鏈式調用
在Java中,當一個異常被拋出並被捕獲之後,我們可以通過Throwable類的getCause()方法獲取到該異常的原因。這種方式被稱為「鏈式調用」。鏈式調用可以有效地捕捉多個異常並將它們鏈接起來,形成更有意義的錯誤描述信息。
示例代碼:
public void doSomething() throws Exception {
try {
// 可能產生異常的操作
} catch (Exception e) {
throw new Exception("doSomething failed", e);
}
}
六、總結
本文介紹了Java異常的種類和處理方式,以及如何手動拋出異常和自定義異常。同時也介紹了異常的鏈式調用。在編寫Java程序時,合理處理異常是十分重要的,可以使程序更加健壯和可靠。
原創文章,作者:ZLLK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/141775.html
微信掃一掃
支付寶掃一掃