🤟致敬讀者
- 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺
📘博主相關
- 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息
文章目錄
- JavaSE核心知識點02面向對象編程02-08(異常處理)
- **一、異常處理的核心概念**
- **1. 什么是異常?**
- **2. Java異常分類**
- **二、異常處理的關鍵字**
- **1. try-catch-finally**
- **2. throws**
- **3. throw**
- **三、常見異常類型與處理**
- **1. 常見異常示例**
- **2. 處理多個異常**
- **四、自定義異常**
- **1. 創建自定義異常類**
- **2. 使用自定義異常**
- **五、最佳實踐與常見陷阱**
- **1. 最佳實踐**
- **2. 常見陷阱**
- **六、總結與練習**
- **1. 關鍵點總結**
- **2. 練習題目**
📃文章前言
- 🔷文章均為學習工作中整理的筆記。
- 🔶如有錯誤請指正,共同學習進步。
好的!作為Java新手,掌握異常處理是編寫健壯程序的關鍵。以下是一份詳細的Java異常處理指南,包含基礎概念、使用方法和實際示例:
JavaSE核心知識點02面向對象編程02-08(異常處理)
一、異常處理的核心概念
1. 什么是異常?
- 異常(Exception):程序運行時發生的非正常情況,會中斷正常的指令流。
- 異常處理的必要性:避免程序崩潰、提供友好錯誤提示、確保資源正確釋放。
2. Java異常分類
Java異常體系以 Throwable
為根類,分為兩類:
- Error:嚴重錯誤(如內存溢出
OutOfMemoryError
),程序無法處理。 - Exception:可處理的異常,分為兩類:
- Checked Exception(檢查型異常):編譯時強制檢查(如
IOException
)。 - Unchecked Exception(非檢查型異常):運行時異常(如
NullPointerException
、ArithmeticException
)。
- Checked Exception(檢查型異常):編譯時強制檢查(如
二、異常處理的關鍵字
1. try-catch-finally
try {// 可能拋出異常的代碼int result = 10 / 0; // 拋出 ArithmeticException
} catch (ArithmeticException e) {// 捕獲并處理異常System.out.println("除數不能為零!");
} finally {// 無論是否發生異常,都會執行的代碼(常用于釋放資源)System.out.println("執行finally塊");
}
2. throws
聲明方法可能拋出的異常,由調用者處理:
public void readFile() throws IOException {FileReader file = new FileReader("test.txt");// ...
}
3. throw
手動拋出異常對象:
if (age < 0) {throw new IllegalArgumentException("年齡不能為負數!");
}
三、常見異常類型與處理
1. 常見異常示例
異常類型 | 觸發場景 | 處理建議 |
---|---|---|
NullPointerException | 調用 null 對象的方法或屬性 | 檢查對象是否為 null |
ArrayIndexOutOfBounds | 訪問數組越界位置 | 檢查數組索引范圍 |
IOException | 文件讀寫失敗(如文件不存在) | 使用 try-catch 或 throws |
NumberFormatException | 字符串轉換為數字失敗(如 "abc" ) | 校驗輸入是否為有效數字 |
2. 處理多個異常
try {FileInputStream fis = new FileInputStream("file.txt");int data = fis.read();
} catch (FileNotFoundException e) {System.out.println("文件未找到!");
} catch (IOException e) {System.out.println("讀取文件失敗!");
} catch (Exception e) {// 兜底處理(不建議濫用)System.out.println("未知錯誤!");
}
四、自定義異常
1. 創建自定義異常類
public class InsufficientBalanceException extends Exception {public InsufficientBalanceException(String message) {super(message);}
}
2. 使用自定義異常
public void withdraw(double amount) throws InsufficientBalanceException {if (amount > balance) {throw new InsufficientBalanceException("余額不足!");}balance -= amount;
}
五、最佳實踐與常見陷阱
1. 最佳實踐
- 精準捕獲:避免捕獲過于寬泛的異常(如直接
catch (Exception e)
)。 - 資源釋放:使用
try-with-resources
(Java 7+)自動關閉資源:try (FileInputStream fis = new FileInputStream("file.txt")) {// 使用資源 } catch (IOException e) {e.printStackTrace(); }
- 記錄異常:使用日志工具(如
log4j
)記錄異常堆棧:catch (SQLException e) {logger.error("數據庫操作失敗", e); }
2. 常見陷阱
- 忽略異常:空
catch
塊會隱藏問題。// 錯誤示例! try {// 可能出錯的代碼 } catch (Exception e) {// 空處理 }
- 在finally中return:可能導致異常被覆蓋。
try {// ... } finally {return; // 不推薦! }
六、總結與練習
1. 關鍵點總結
- 分類:理解Checked vs Unchecked異常的區別。
- 處理方式:
try-catch
、throws
、throw
的適用場景。 - 資源管理:優先使用
try-with-resources
替代手動關閉。
2. 練習題目
- 編寫代碼讀取文件內容,處理可能的
FileNotFoundException
。 - 實現一個除法方法,當除數為零時拋出
ArithmeticException
。 - 自定義一個
InvalidEmailException
,并在用戶輸入無效郵箱時拋出。
通過實際編碼練習,逐步掌握異常處理的核心技巧!遇到問題時,可查閱 Java官方文檔 或調試工具(如IDE的斷點功能)。
📜文末寄語
- 🟠關注我,獲取更多內容。
- 🟡技術動態、實戰教程、問題解決方案等內容持續更新中。
- 🟢《全棧知識庫》技術交流和分享社區,集結全棧各領域開發者,期待你的加入。
- 🔵?加入開發者的《專屬社群》,分享交流,技術之路不再孤獨,一起變強。
- 🟣點擊下方名片獲取更多內容🍭🍭🍭👇