Java Exception異常類(lèi)的繼承體系詳解
1. 異常類(lèi)的繼承體系
Java把所有的非正常情況分成兩種:異常(Exception)和錯(cuò)誤(Error),它們都繼承Throwable父類(lèi)。

2. Error錯(cuò)誤
Error錯(cuò)誤,一般是指與虛擬機(jī)相關(guān)的問(wèn)題,如系統(tǒng)崩潰、虛擬機(jī)錯(cuò)誤、動(dòng)態(tài)鏈接失敗等,這種錯(cuò)誤無(wú)法恢復(fù)或不可能捕獲,將導(dǎo)致應(yīng)用程序中斷。
通常應(yīng)用程序無(wú)法處理這些錯(cuò)誤,因此應(yīng)用程序不應(yīng)該試圖使用catch塊來(lái)捕獲Error對(duì)象。
在定義該方法時(shí),也無(wú)須在其throws子句中聲明該方法可能拋出Error及其任何子類(lèi)。
3. Exception異常
Exception分為兩大類(lèi):
- 運(yùn)行時(shí)異常 [即程序運(yùn)行時(shí),發(fā)生的異常]。
- 編譯時(shí)異常 [即編程時(shí)編譯器檢查出的異常,Checked異常]。
所有的RuntimeException類(lèi)及其子類(lèi)的實(shí)例被稱(chēng)為Runtime異常;不是RuntimeException類(lèi)及其子類(lèi)的異常實(shí)例則被稱(chēng)為Checked異常。
3.1 編譯時(shí)異常: Checked Exception
只有Java語(yǔ)言提供了Checked異常,其他語(yǔ)言都沒(méi)有提供Checked異常。Java認(rèn)為Checked異常都是可以被處理(修復(fù))的異常,所以Java程序必須顯式處理Checked異常。
如果程序沒(méi)有處理Checked異常,該程序在編譯時(shí)就會(huì)發(fā)生錯(cuò)誤,無(wú)法通過(guò)編譯。
Checked異常體現(xiàn)了Java的設(shè)計(jì)哲學(xué)——沒(méi)有完善錯(cuò)誤處理的代碼根本就不會(huì)被執(zhí)行!

對(duì)于Checked異常的處理方式有如下兩種:
(1)當(dāng)前方法明確知道如何處理該異常,程序應(yīng)該使用try…catch塊來(lái)捕獲該異常,然后在對(duì)應(yīng)的catch塊中修復(fù)該異常。

(2)當(dāng)前方法不知道如何處理這種異常,應(yīng)該在定義該方法時(shí)聲明拋出該異常。

常見(jiàn)的編譯異常:
- SQLException 操作數(shù)據(jù)庫(kù)時(shí),查詢(xún)表可能發(fā)生異常
- IOException 操作文件時(shí)發(fā)生的異常
- FileNotFoundException 當(dāng)操作一個(gè)不存在的文件時(shí),發(fā)生異常
- ClassNotFoundException 加載類(lèi),但是該類(lèi)不存在時(shí),發(fā)生異常
- EOFException 操作文件,到文件末尾,發(fā)生異常
- IllegalArguementException 參數(shù)異常
3.2 運(yùn)行時(shí)異常:Runtime Exception
RuntimeException即程序運(yùn)行時(shí)發(fā)生的異常,編譯時(shí)檢測(cè)不到這種異常:

程序運(yùn)行后,拋出異常:

Runtime異常則更加靈活,Runtime異常無(wú)須顯式聲明拋出,如果程序需要捕獲Runtime異常,也可以使用try…catch塊來(lái)實(shí)現(xiàn)。

通過(guò)try…catch捕獲異常,并打印異常棧信息:

常見(jiàn)的運(yùn)行時(shí)異常:
- NullPointerException 空指針異常
- ArithmeticException 數(shù)學(xué)運(yùn)算異常
- ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
- ClassCastException 類(lèi)型轉(zhuǎn)換異常
- NumberFormatException 數(shù)字格式不正確異常
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決@SpringBootApplication報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了如何解決@SpringBootApplication報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Java中properties文件中的中文亂碼問(wèn)題
Properties為了方便用戶(hù)的配置,用于讀取Java的配置文件,不同的編程語(yǔ)言有自己所支持的配置文件,能讓用戶(hù)夠脫離程序本身去修改相關(guān)的變量設(shè)置,這篇文章主要介紹了Java中properties文件中的中文亂碼問(wèn)題,需要的朋友可以參考下2023-08-08
Java關(guān)于MD5文件校驗(yàn)問(wèn)題處理
文章主要介紹了Java獲取文件MD5值的五種方法,包括原始讀入內(nèi)存、分多次讀入、使用字節(jié)數(shù)組轉(zhuǎn)十六進(jìn)制字符串、利用commons-codec包等,并解釋了MD5算法原理、用途及安全性,最后提供了驗(yàn)證生成MD5值正確性的方法2026-03-03
Druid監(jiān)控分布式實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Druid監(jiān)控分布式實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
springboot validator枚舉值校驗(yàn)功能實(shí)現(xiàn)
這篇文章主要介紹了springboot validator枚舉值校驗(yàn)功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)
這篇文章主要介紹了java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06
Spring?MVC概念+項(xiàng)目創(chuàng)建+@RequestMappring案例代碼
Spring?MVC?是?Spring?提供的一個(gè)基于?MVC?設(shè)計(jì)模式的輕量級(jí)?Web?開(kāi)發(fā)框架,本質(zhì)上相當(dāng)于?Servlet,這篇文章主要介紹了Spring?MVC概念+項(xiàng)目創(chuàng)建+@RequestMappring,需要的朋友可以參考下2023-02-02
Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理方法
這篇文章主要介紹了Spring Boot集成SpringFox 3.0與Pageable參數(shù)處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10

