異常的捕獲及處理

1.基本概念

異常是導致程序中斷執行的一種指令流。所有的異常都以類和對象的形式存在。
在其他不使用異常處理機制的語言中要想捕捉異常必須要採用大量的判斷語句,而Java中的異常處理機制具有易於使用、可自行定義異常類、處理拋出的異常同時又不會降低程序運行的速度等優點。
計算機發展中的兩大殺手:①斷電;②被除數爲0。

2. 格式:

try{
    //可能出現異常的語句
}catch(異常類 異常對象){
    //編寫異常的處理語句
}[catch(異常類 異常對象){
    //編寫異常的處理語句
}…]
[finally{
    一定會運行到的程序代碼;
}]

注:不管程序是否發生異常,則肯定會執行到finally語句,finally語句作爲異常處理的統一出口。finally語句是可以省略的,如果省略了finally塊,則在catch()塊結束後,程序會跳到try-catch塊之後繼續執行。

比較常見的異常有:
①數組綁定異常:ArrayIndexOutOfBoundException
②數字格式化異常:NumberFormatException
③算術異常:ArithmeticException

在正常的異常處理中,異常處理的語句格式有try…catch和try…catch…finally兩種。

3.異常類的繼承結構

兩個常用的類,分別爲Exception和Error,這兩個類都是Throwable的子類。
Exception:一般表示的是程序中出現的問題,可以直接使用try…catch處理。
Error:一般指的是JVM錯誤,程序將無法處理。
一般情況下,習慣於將Exception和Error統稱爲異常,而算術異常、數字格式化異常等都屬於Exception的子類。

關於異常信息的輸出:
①直接使用“System,out.println(異常對象)”;
②使用Exception類中的printStackTrace()方法輸出:e.printStackTrace()。

4.異常處理機制

① 一旦發生異常,則首先會產生一個異常類的實例化對象;
② 在try語句中對此異常對象進行捕捉;
③ 產生的異常對象與catch語句中的各個異常類型進行匹配,如果匹配成功,則執行catch語句中的代碼。

所有的子類實例可以全部使用父類類型接收,那麼就可以利用向上轉型的概念,讓所有的異常對象都使用Exception接收。

注:在Java中所有捕獲範圍小的異常必須放在捕獲範圍大的異常之前,否則程序在編譯時就會出現錯誤提示。

可不可以直接使用Throwable?
最大隻能捕獲Exception。(但其實使用Throwable捕獲異常,在代碼中並沒有任何問題)

對於一個程序來說,如果有多個異常最好分別進行捕獲,而不要直接使用Exception捕獲全部異常。

5.throw與throws關鍵字

(1)throws關鍵字
在定義一個方法時可以使用throws關鍵字聲明,使用throws聲明的方法表示此方法不處理異常,而交給方法的調用處進行處理。
格式:
public 返回值類型 方法名稱(參數列表…) throws 異常類{}
在主方法中使用throws關鍵字,此時會再向上拋出異常,則只能由JVM進行處理。
注:儘量不要再主方法使用throws,如果出現問題交由JVM處理,將導致程序中斷。

(2)throw關鍵字
直接使用throw關鍵字人爲地拋出一個異常,拋出時直接拋出異常類的實例化對象即可。
但一般來講用戶都在避免異常的產生,所以不會手工拋出一個新的異常類的實例,而往往會拋出程序中已經產生的異常類實例。

finally作爲異常的統一出口,在此語句塊的編寫儘量不要出現像throw或return這樣的語句。

6.Exception類與RuntimeException類

Exception在程序中必須使用try…catch進行處理;
RuntimeException(運行時異常,也是不受檢查異常)可以不使用try…catch進行處理,但是如果有異常產生,則異常將由JVM進行處理。(最好使用try…catch進行處理)

注:RuntimeException類會自動被Java虛擬機拋出,所以不必在異常說明中把它們列出來。

Throwable分爲Error和Exception兩類:
Error用來表示編譯時和系統錯誤(除特殊情況外)。
Exception是可以被拋出的基本類型,在Java類庫、用戶方法以及運行時故障中都可能拋出Exception異常。

7.自定義異常類

不滿足開發需求後,可自定義異常類,這些異常類需要繼承Exception。

8.斷言

斷言就是肯定某一個結果的返回值是正確的,如果此結果的返回值是錯誤的,將會通過斷言檢查提示錯誤信息。
格式:

assert boolean 表達式
assert Boolean 表達式:詳細的信息

注:開發中並不提倡使用斷言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章