Java - Throws 與 Throw:理解例外處理
你好,未來的 Java 程式設計師!今天,我們將進入一個令人興奮的 Java 例外處理世界之旅。特別是,我們將專注於 throws
和 throw
關鍵字。如果你是程式設計的新手,不用擔心;我會一步步引導你,就像我多年教學中引導無數學生一樣。讓我們一起深入探究吧!
例外是什麼?
在我們跳進 throws
和 throw
之前,先快速回顧一下例外是什麼。想像你正在烹飪一頓飯,遵循著食譜。一切進行得很順利,直到 - 哎呀! - 你發現你缺少了一個重要的材料。這在程式設計中類似於一個例外:一個打斷你程式正常流程的意外事件。
理解 throws
和 throw
throws
關鍵字
throws
關鍵字用於方法聲明中,表示此方法可能會拋出一個或多個類型的例外。這就像放置一個「小心地滑」的標誌 - 你在警告任何使用此方法的人,他們需要為潛在的例外做好準備。
throw
關鍵字
另一方面,throw
用於實際建立並拋出一個例外。這就像實際上在地板上潑水 - 你正在建立例外情況。
語法
讓我們看看兩者的語法:
// 在方法聲明中使用 throws
public void myMethod() throws ExceptionType {
// 方法體
}
// 使用 throw 建立一個例外
throw new ExceptionType("錯誤訊息");
Java Throws 和 Throw 示例
讓我們從一個簡單的例子開始,來說明 throws
和 throw
:
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());
}
}
}
讓我們來解析一下:
- 我們聲明一個
divide
方法,該方法throws ArithmeticException
。 - 在方法內部,如果我們
b
為零,我們throw
一個新的ArithmeticException
。 - 在
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("錯誤:讀取文件時出現問題。");
}
}
}
這個例子展示了如何處理一個方法可能拋出的多種類型的例外。
最佳實踐
- 具體明確:只拋出適合錯誤條件的例外。
- 良好文檔:始終在方法的 Javadoc 中記錄你的方法可能拋出的例外。
-
處理或聲明:使用
try-catch
區塊處理例外,或者使用throws
進行聲明。 - 不要過度使用:不要將例外用於正常流程控制。它們是用於特殊情況的。
結論
理解 throws
和 throw
對於 Java 中正確的例外處理至關重要。這允許你編寫更健壯、更防錯的代碼。請記住,例外是你的朋友 - 他們幫助你預見並妥善處理問題。
在你繼續 Java 的旅程中,你會遇到許多情況,例外處理將變得無價。持續練習,很快它就會變得 second nature!
快樂編碼,未來的 Java 大師們!
Credits: Image by storyset