# Java中異常類Exception的用法
## 一、異常處理概述
### 1.1 什么是異常
異常(Exception)是程序在運行過程中發生的非正常事件,它會中斷正常的指令流。在Java中,異常是以對象的形式存在的,當程序出現錯誤時,會創建并拋出一個異常對象。
### 1.2 異常處理的重要性
良好的異常處理能夠:
- 提高程序的健壯性
- 便于調試和錯誤定位
- 提供友好的用戶提示
- 保證資源正確釋放
## 二、Exception類體系結構
### 2.1 Java異常類層次
Throwable ├── Error └── Exception ├── RuntimeException └── 其他Checked Exception
### 2.2 Checked Exception vs Unchecked Exception
| 類型 | 特點 | 示例 |
|---------------------|-----------------------------|--------------------------|
| Checked Exception | 必須處理,否則編譯不通過 | IOException, SQLException |
| Unchecked Exception | 不強制處理,通常是編程錯誤 | NullPointerException |
## 三、Exception的基本用法
### 3.1 try-catch-finally塊
```java
try {
// 可能拋出異常的代碼
FileInputStream fis = new FileInputStream("test.txt");
} catch (FileNotFoundException e) {
// 異常處理
System.err.println("文件未找到: " + e.getMessage());
} finally {
// 無論是否發生異常都會執行
if (fis != null) {
fis.close();
}
}
try {
// 可能拋出多種異常的代碼
int num = Integer.parseInt("123a");
System.out.println(10 / num);
} catch (NumberFormatException e) {
System.out.println("數字格式錯誤");
} catch (ArithmeticException e) {
System.out.println("算術運算錯誤");
}
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
public class InsufficientFundsException extends Exception {
private double amount;
public InsufficientFundsException(double amount) {
super("資金不足,還差: " + amount);
this.amount = amount;
}
public double getAmount() {
return amount;
}
}
public void withdraw(double amount) throws InsufficientFundsException {
if (balance < amount) {
throw new InsufficientFundsException(amount - balance);
}
balance -= amount;
}
// 反模式1:捕獲但不處理
try {
// ...
} catch (Exception e) {
// 空catch塊
}
// 反模式2:過度使用異??刂屏鞒?try {
while (true) {
list.get(index++);
}
} catch (IndexOutOfBoundsException e) {
// 終止循環
}
try {
// 業務代碼
} catch (BusinessException e) {
throw new ServiceException("處理業務時出錯", e);
}
try {
// ...
} catch (ServiceException e) {
Throwable rootCause = e.getCause();
if (rootCause instanceof BusinessException) {
// 處理特定原因
}
}
try {
// 可能拋出多種異常的代碼
} catch (IOException | SQLException e) {
// 統一處理IO和SQL異常
logger.error("操作失敗", e);
}
public void process() throws IOException, SQLException {
try {
// 可能拋出多種異常的代碼
} catch (Exception e) {
throw e; // 編譯器知道實際拋出的異常類型
}
}
// 不好的做法
try {
return list.get(index);
} catch (IndexOutOfBoundsException e) {
return null;
}
// 更好的做法
if (index >= 0 && index < list.size()) {
return list.get(index);
}
return null;
Exception和Error的區別?
final、finally、finalize的區別?
throw和throws的區別?
public String readFile(String path) throws IOException {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (FileNotFoundException e) {
throw new IOException("文件不存在: " + path, e);
}
return content.toString();
}
public void updateUser(User user) throws DaoException {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement("UPDATE users SET name=? WHERE id=?");
stmt.setString(1, user.getName());
stmt.setInt(2, user.getId());
stmt.executeUpdate();
} catch (SQLException e) {
throw new DaoException("更新用戶失敗", e);
} finally {
DbUtil.closeQuietly(stmt);
DbUtil.closeQuietly(conn);
}
}
Java異常處理是編寫健壯應用程序的關鍵部分。通過合理使用Exception類及其子類,結合try-catch-finally結構,可以有效地處理程序運行時的各種錯誤情況。同時,遵循異常處理的最佳實踐,避免常見陷阱,能夠顯著提高代碼質量和可維護性。
記?。寒惓L幚淼哪繕瞬皇窍挟惓?,而是以可控的方式管理異常,確保程序在遇到問題時能夠優雅地處理或恢復。 “`
注:本文實際約2400字,涵蓋了Java異常處理的核心知識點,包括基礎用法、高級特性、最佳實踐和實際案例。Markdown格式便于在各種平臺上閱讀和編輯。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。