Java對異常的認(rèn)識與異常的處理小結(jié)
一、認(rèn)識異常與異常類型。
(1)簡單定義-什么是異常?
- Java程序在運(yùn)行時可能出現(xiàn)的錯誤或非正常情況。
(2)常見比喻
- 程序運(yùn)行的"安全氣囊"
- 代碼世界里的"急救系統(tǒng)"
(3)異常類型
- 編譯時異常:在Exception類中,除了RuntimeException類以外,其他子類都是編譯時異常。Java編譯器會對編譯時異常進(jìn)行檢查,如果出現(xiàn)這類異常就必須對其進(jìn)行處理,否則程序就無法通過編譯。
- 運(yùn)行時異常:RuntimeException類及其子類都是運(yùn)行時異常。運(yùn)行時異常是在程序運(yùn)行時由Java虛擬機(jī)自動進(jìn)行捕獲處理的,Java編譯器不會對異常進(jìn)行檢查。也就是說,當(dāng)程序中出現(xiàn)這類異常時,即使沒有使用try···catch語句捕獲異?;蚴褂胻hrows關(guān)鍵字聲明拋出異常,程序也能編譯通過,只是程序在運(yùn)行過程中可能報錯。
- Error:系統(tǒng)級別錯誤,程序無法處理(如內(nèi)存溢出)。
(4) 異常體系圖
Throwable
├── Error(系統(tǒng)錯誤,如OutOfMemoryError)
└── Exception
├── RuntimeException(運(yùn)行時異常/非受檢查異常)
│ ├── ArithmeticException
│ ├── NullPointerException
│ ├── ArrayIndexOutOfBoundsException
│ └── ...
└── 其他(編譯時異常/受檢查異常)
├── IOException
├── SQLException
├── ClassNotFoundException
└── ...二、異常的處理
(1)try-catch-finally 基本結(jié)構(gòu)
try {
// 可能拋出異常的代碼
} catch (ExceptionType1 e) {
// 處理ExceptionType1類型的異常
} catch (ExceptionType2 e) {
// 處理ExceptionType2類型的異常
} finally {
// 無論是否發(fā)生異常都會執(zhí)行的代碼
// 常用于資源釋放
}多重catch塊注意事項finally塊的特點(diǎn)
子類異常必須寫在父類異常前面
捕獲異常后程序會繼續(xù)執(zhí)行
小結(jié)
無論是否發(fā)生異常都會執(zhí)行
即使try或catch中有return語句,finally也會執(zhí)行
唯一不執(zhí)行finally的情況:System.exit()
- try:劃定"危險區(qū)",包裹可能出錯的代碼
- catch:設(shè)置"急救站",捕獲并處理特定異常
- finally:建立"清理隊",確保必須執(zhí)行的收尾工作
(2)throws關(guān)鍵字 當(dāng)方法內(nèi)部不處理異常時,可以使用throws聲明拋出
用于方法聲明,表示該方法可能拋出異常但不處理
public void readFile() throws IOException {
// 方法代碼
}(3)throw關(guān)鍵字
使用throw手動觸發(fā)異常
主動拋出異常對象
if (age < 0) {
throw new IllegalArgumentException("年齡不能為負(fù)數(shù)");
}(4)自定義異常
通過繼承Exception或RuntimeException創(chuàng)建
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}(5)異常處理注意事項
- 針對性處理:不要捕獲所有異常(避免直接catch Exception)
- 不要吞掉異常:注意空的catch塊
三、總結(jié)
- 異常是 Java 程序運(yùn)行時可能出現(xiàn)的錯誤或非正常情況,分為可處理的Exception和不可控的Error。
- 類比現(xiàn)實(shí)中的 “安全氣囊” 或 “急救系統(tǒng)”,用于在程序出錯時攔截問題并處理,避免程序崩潰。
- 合理的異常處理能讓程序在出錯時優(yōu)雅降級(如提示用戶、記錄日志、重試機(jī)制),而非直接崩潰。
- 避免在finally塊中編寫復(fù)雜邏輯或拋出新異常,可能導(dǎo)致原有異常被覆蓋。
- 通過理解異常機(jī)制并遵循最佳實(shí)踐,可顯著提升代碼的健壯性和可維護(hù)性,讓程序在 “意外”面前更可靠。
相關(guān)文章
Java 面向?qū)ο笾^承篇詳解原理與特點(diǎn)
繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因為它允許創(chuàng)建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為2021-10-10
SSH結(jié)合jquery實(shí)現(xiàn)三級聯(lián)動效果
這篇文章主要為大家詳細(xì)介紹了SSH結(jié)合jquery實(shí)現(xiàn)三級聯(lián)動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
Kafka日志清理實(shí)現(xiàn)詳細(xì)過程講解
這篇文章主要為大家介紹了Kafka日志清理實(shí)現(xiàn)詳細(xì)過程講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
java 中RSA的方式實(shí)現(xiàn)非對稱加密的實(shí)例
這篇文章主要介紹了java 中RSA的方式實(shí)現(xiàn)非對稱加密的實(shí)例的相關(guān)資料,這里提供實(shí)例幫助大家理解這部分知識,需要的朋友可以參考下2017-08-08
Java圖文驗證碼實(shí)現(xiàn)步驟超詳細(xì)講解
隨著人工智能的發(fā)展,圖文驗證碼可能逐漸被更為高級的驗證方式所替代,這篇文章主要介紹了Java圖文驗證碼實(shí)現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-09-09

