更新時(shí)間:2021-11-12 來(lái)源:黑馬程序員 瀏覽量:
在實(shí)際開發(fā)中,經(jīng)常會(huì)在程序編譯時(shí)期產(chǎn)生一些異常,而這些異常必須要進(jìn)行處理,這種異常被稱為編譯時(shí)期異常,也稱為checked異常。另外還有一種異常是在程序運(yùn)行時(shí)期產(chǎn)生的,這種異常即使不編寫異常處理代碼,依然可以通過(guò)編譯,因此我們稱之為運(yùn)行時(shí)異常,也稱為unchecked異常。接下來(lái)分別對(duì)這兩種異常進(jìn)行詳細(xì)講解。
1.編譯時(shí)異常
在Exception的子類中,除了RuntimeException類及其子類外,其他子類都是編譯時(shí)異常。編譯時(shí)異常的特點(diǎn)是在程序編寫過(guò)程中,Java編譯器就會(huì)對(duì)編寫的代碼進(jìn)行檢查,如果出現(xiàn)比較明顯的異常就必須對(duì)異常進(jìn)行處理,否則程序無(wú)法通過(guò)編譯。處理編譯時(shí)異常有兩種方式,具體如下:
·使用try…catch語(yǔ)句對(duì)異常進(jìn)行捕獲處理。
·使用throws關(guān)鍵字聲明拋出異常,讓調(diào)用者對(duì)其處理。
2.運(yùn)行時(shí)異常
RuntimeException類及其子類都是運(yùn)行時(shí)異常。運(yùn)行時(shí)異常是在程序運(yùn)行時(shí)由Java虛擬機(jī)自動(dòng)進(jìn)行捕獲處理的,即使沒(méi)有使用try…catch語(yǔ)句捕獲或使用throws關(guān)鍵字聲明拋出,程序也能編譯通過(guò),只是在運(yùn)行過(guò)程中可能報(bào)錯(cuò)。
在Java中,常見的運(yùn)行時(shí)異常有多種,如表4-4所示。
表4-4常見運(yùn)行時(shí)異常
運(yùn)行時(shí)異常一般是由于程序中的邏輯錯(cuò)誤引起的,在程序運(yùn)行時(shí)無(wú)法恢復(fù)。例如通過(guò)數(shù)組的角標(biāo)訪問(wèn)數(shù)組的元素時(shí),如果超過(guò)了數(shù)組的最大角標(biāo),就會(huì)發(fā)生運(yùn)行時(shí)異常,代碼示例如下:
int [ ] arr=new int[5]; System.out.println (arr[5]);
上面代碼中,由于數(shù)組arr的長(zhǎng)度為5,最大角標(biāo)應(yīng)為4,當(dāng)使用arr[5]訪問(wèn)數(shù)組中的元素就會(huì)發(fā)生數(shù)組角標(biāo)越界的異常。
Java程序異常處理之try…catch和finally[黑馬程序員]