天天看點

Java基礎知識五:異常、斷言、日志和調試

異常分類:在Java中,所有的異常對象都是 派生于Throwable類的子類 。在下一層立即分解為 Error和Exception兩個子類:Error類描述了 系統級錯誤和資源耗盡的問題,出現這種問題一般無能為力;在設計Java程式時,我們應該關注 Exception層次結構,Exception又分為兩個分支,一個分支派生于RuntimeException,另一個分支包含其它異常。這麼劃分的依據是:RuntimeException輸入程式錯誤導緻的異常,而程式本身沒有問題,像 I/O錯誤導緻的異常屬于其它異常。

已檢查異常:當遇到無法處理的情況時,Java的方法可以抛出一個異常。一個方法 不緊需要告訴編譯器将要傳回什麼值,還需要告訴編譯器可能發生什麼錯誤。示例如下:

public static Object goodCopyof(Object a, int newLength) throws FileNotFoundException           

建立異常類:建立自己的異常類,我們隻需要讓自己的類 繼承自  Exception 或者 其子類。 習慣上,自己的異常類應該包含兩個構造器:一個是預設的構造器,一個是帶有詳細資訊的構造器。

處理異常: 應該捕獲知道如何處理的異常, 不知道如何處理的異常應當抛出給調用者。

子類和超類中的異常:如果 覆寫超類的某個方法,而 超類的這個方法并沒有抛出異常,則 子類的這個方法必須捕獲所有已檢查的異常。子類覆寫的方法所抛出的異常 不允許超過 超類方法所列出的 異常範圍。

捕獲多個異常: 可以使用并列的catch子句 捕獲多個異常,也可以在 捕獲異常之後抛出新的異常,下面是 異常包裝的示例:

try{

        }catch (SQLException e){
            Throwable se = new ServerException("error");
            se.initCause(e);
            throw se;
        }           

使用這種方式可以 将一個異常 包裝在 另一個異常中 抛出。在 外部 可以使用 getCause()方法獲得 原始的異常。

try()
        {
            
        }