異常

1 異常是爲了在異常情況下使用而設計的。不要將它們用於普通的控制流。

2 Java提供了三種可拋出結構:受檢異常、運行時異常和錯誤。其中後兩者稱爲未受檢異常。
使用原則:
  (1)如果期望調用者能夠適當恢復,對於這種情況就應該使用受檢的異常。對於這樣的異常,提供一些輔助方法尤爲重要,通過這些方法,調用者可以收穫一些有助於恢復的信息。例如,用於欠費,企圖呼叫,這是可以拋出受檢異常,提供用於查詢所欠費用的方法,從而將這個數字傳遞給客戶。
  (2)對於未受檢異常,這種異常往往表明這屬於不可恢復的情形,再執行下去有害無益。如果程序沒有捕捉這種可拋出結構,將會導致當前線程停止,並出現適當的錯誤信息。
  (3)用運行時異常表明程序錯誤。大多數的運行時異常都表示前提違例。所謂前提違例是指API的客戶沒有遵循API規範建立的約定。如數組越界。

努力使失敗保持原子性
途徑:
 (1)設計一個不可變的對象
 (2)對於可變對象,獲得失敗原子性最常見的方法是,在執行操作之前檢查參數的有效性。這可以使得對象的狀態被修改之前,先拋出適當的異常。例如:

    public Object pop(){
        if(size==0)
            throw new EmptyStackException();
        Object result = elements[--size];
        elements[size]=null;
        return result;
} 
如果取消對size的檢查,當這個方法企圖彈出一個空棧時將拋出異常。然而,這將會導致size域保持在不一致的狀態之中(負數)。

  作爲方法規範的一部分,產生的任何異常都應該讓對象保持在該方法調用之前的狀態。如果違反這條規定,API文檔應該清楚地指明對象將會處於什麼樣的狀態。

4 最常見的可重用異常

異常 使用場合
IllegalArgumentException 非null的參數值不正確
IllegalStateException 對於方法調用而言,對象狀態不合適
NullPointerException 在禁止使用null的情況下參數值爲null
IndexOutOfBoundsException 下標參數值越界
ConcurrentModificationException 在禁止併發修改的情況下,檢測到對象的併發修改
UnsupportedOperationException 對象不支持用戶請求的方法

常見的運行時異常
這裏寫圖片描述
常見的非運行時異常
這裏寫圖片描述 

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