Java - Throws 與 Throw:理解例外處理

你好,未來的 Java 程式設計師!今天,我們將進入一個令人興奮的 Java 例外處理世界之旅。特別是,我們將專注於 throwsthrow 關鍵字。如果你是程式設計的新手,不用擔心;我會一步步引導你,就像我多年教學中引導無數學生一樣。讓我們一起深入探究吧!

Java - throw Exception

例外是什麼?

在我們跳進 throwsthrow 之前,先快速回顧一下例外是什麼。想像你正在烹飪一頓飯,遵循著食譜。一切進行得很順利,直到 - 哎呀! - 你發現你缺少了一個重要的材料。這在程式設計中類似於一個例外:一個打斷你程式正常流程的意外事件。

理解 throwsthrow

throws 關鍵字

throws 關鍵字用於方法聲明中,表示此方法可能會拋出一個或多個類型的例外。這就像放置一個「小心地滑」的標誌 - 你在警告任何使用此方法的人,他們需要為潛在的例外做好準備。

throw 關鍵字

另一方面,throw 用於實際建立並拋出一個例外。這就像實際上在地板上潑水 - 你正在建立例外情況。

語法

讓我們看看兩者的語法:

// 在方法聲明中使用 throws
public void myMethod() throws ExceptionType {
// 方法體
}

// 使用 throw 建立一個例外
throw new ExceptionType("錯誤訊息");

Java Throws 和 Throw 示例

讓我們從一個簡單的例子開始,來說明 throwsthrow

public class DivisionExample {
public static double divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("不能除以零!");
}
return (double) a / b;
}

public static void main(String[] args) {
try {
System.out.println(divide(10, 2));  // 這個正常工作
System.out.println(divide(10, 0));  // 這個將拋出例外
} catch (ArithmeticException e) {
System.out.println("發生錯誤:" + e.getMessage());
}
}
}

讓我們來解析一下:

  1. 我們聲明一個 divide 方法,該方法 throws ArithmeticException
  2. 在方法內部,如果我們 b 為零,我們 throw 一個新的 ArithmeticException
  3. main 方法中,我們使用 try-catch 區塊來處理潛在的例外。

當你運行這個,你將會看到:

5.0
發生錯誤:不能除以零!

更多示例

示例 1:自定義例外

讓我們建立一個自定義例外並使用它:

class AgeException extends Exception {
public AgeException(String message) {
super(message);
}
}

public class VotingSystem {
public static void checkEligibility(int age) throws AgeException {
if (age < 18) {
throw new AgeException("你必須年滿 18 歲才能投票。");
} else {
System.out.println("你有資格投票!");
}
}

public static void main(String[] args) {
try {
checkEligibility(20);  // 這個沒問題
checkEligibility(15);  // 這個將拋出例外
} catch (AgeException e) {
System.out.println("錯誤:" + e.getMessage());
}
}
}

這個例子展示了如何創建和使用你自己的自定義例外。

示例 2:處理多個例外

讓我們看看如何處理多個例外:

import java.io.*;

public class FileReadExample {
public static void readFile(String filename) throws FileNotFoundException, IOException {
FileReader file = new FileReader(filename);
BufferedReader reader = new BufferedReader(file);

String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}

reader.close();
}

public static void main(String[] args) {
try {
readFile("example.txt");
} catch (FileNotFoundException e) {
System.out.println("錯誤:找不到文件。");
} catch (IOException e) {
System.out.println("錯誤:讀取文件時出現問題。");
}
}
}

這個例子展示了如何處理一個方法可能拋出的多種類型的例外。

最佳實踐

  1. 具體明確:只拋出適合錯誤條件的例外。
  2. 良好文檔:始終在方法的 Javadoc 中記錄你的方法可能拋出的例外。
  3. 處理或聲明:使用 try-catch 區塊處理例外,或者使用 throws 進行聲明。
  4. 不要過度使用:不要將例外用於正常流程控制。它們是用於特殊情況的。

結論

理解 throwsthrow 對於 Java 中正確的例外處理至關重要。這允許你編寫更健壯、更防錯的代碼。請記住,例外是你的朋友 - 他們幫助你預見並妥善處理問題。

在你繼續 Java 的旅程中,你會遇到許多情況,例外處理將變得無價。持續練習,很快它就會變得 second nature!

快樂編碼,未來的 Java 大師們!

Credits: Image by storyset