?# 第三章第一節-java異常
標簽(空格分隔): 廖雪峰
---
在計算機程序運行過程中,錯誤總會出現。
- 用戶輸入錯誤
- 讀寫文件錯誤
- 網絡錯誤
- 和硬件的連接錯誤
**java只允許返回一個值**對錯誤的處理也變得比較困難,常用以下幾種方案:
1. 規定返回的錯誤碼在程序中使用`if`和`else`或者`switch`的形式進行判斷,這樣的缺點讓程序看起來很雜亂.
2. 采用`javabean`把需要返回的數據封裝起來,在處理邏輯中進行解析.
為提高效率java引入了一種新的**錯誤處理方式--異常**來處理這種問題.
## 異常
基本概念:
- 異常自身就是class,帶有類型信息.
- 異常可以在任何地方拋出.
- 異常只需要在上層捕獲,和方法的調用分離.
異常的繼承關系:

## 異常體系:
必須捕獲的異常(IDE提示必須拋出)
- `Exception`以及其子類,但是不包括`RuntimeException`及其子類.
- `Checked Exception`(Exception的子類,不包括RuntimeException)
不必須捕獲的異常
- `Error`及其子類
- `RuntimeException`及其子類(IDE不提示拋出,運行出錯會拋出,見到最多的一類)
解析:
Error是指發生了嚴重錯誤,程序對此無能為力,無法自我修復的情況.比如:`OutOfMemoryError`,`NoClassDefFoundError`,`StackOverFlow`等
Exception指的是運行時發生的邏輯錯誤,第一類估計可能錯誤的問題`IOException`,`NumberFormatException`...第二類是程序出現的邏輯問題`NullPointException`,`IndexOutOfBoundsException`
對可能拋出的`Checked Exception`的方法調用:
1. 通過使用`try{} catch{} `捕獲異常處理.
2. 不捕獲異常,但是通過在類名出`throws`聲明.
3. **通過`throws`聲明需要在調用的上層進行捕獲.**
4. main方法是最后捕獲異常機會.
## 小節小結
- java使用異常來處理錯誤,并通過`try{}catsh{}`來捕獲異常.
- java異常也是一個class,是繼承`Throwable`.
- `Error`是無需捕獲的嚴重無措.
- `Exception`是應該捕獲的可處理異常.
- `RuntimeException`無需強制捕獲,非`RuntimeException(也就是Checked Exception)`必須強制捕獲,或者通過`throws`聲明,讓上級調用來捕獲.
- 前言
- 一:Java快速入門
- 二:Java面向對象編程
- 三:Java異常處理
- 錯誤處理
- Java的異常
- 捕獲異常
- 拋出異常
- 自定義異常
- 斷言和日志
- 使用斷言
- 使用JDK Logging
- 使用Commons Logging
- 使用Log4j
- 四:Java反射與泛型
- 反射
- Class類
- 訪問字段
- 調用方法
- 調用構造方法
- 獲取繼承關系
- 注解
- 使用注解
- 定義注解
- 處理注解
- 泛型
- 什么是泛型
- 使用泛型
- 編寫泛型
- 擦拭法
- extends通配符
- super通配符
- 泛型和反射
- 五:Java集合
- Java集合簡介
- Java集合簡介
- List
- 使用List
- 編寫equals方法
- Map
- Set
- Queue
- Stack
- 最佳實踐
- 六:Java IO編程
- 七:Java處理日期和時間
- 八:JUnit單元測試
- 九:Java正則表達式
- 十:Java加密與安全
- 十一:Java多線程編程
- 十二:Maven基礎
- 十三:Java網絡編程
- 十四:Java操作XML和JSON
- 十五:Java JDBC編程
- 十六:Java函數式編程