異常與包

異常體系

Throwable
    |---Error   
    |---Exception
        |---RuntimeException

異常格式

try 
{
    //可能出現異常的代碼
}
catch ()
{
    //對異常的處理
}
finally
{
    //一定執行的代碼,通常用於釋放資源
}

相關方法

String getMessage() //異常信息

String toString() //異常名稱:異常信息

void printStackTrace() //異常名稱,異常信息,異常出現位置

throw和throws

  1. throw使用於函數內,拋出異常對象
  2. 問題可處理時,需在函數體上聲明throws [拋出的異常類型],一方面告訴調用者可能發生的異常要進行捕捉,另一方面當調用者不處理時直接讓程序編譯出錯,讓可能發生的問題提前暴露,否則不聲明throws會將問題帶到運行時期。

自定義異常

  1. 當程序中出現特有含義的問題時,根據面向對象的特點,將問題封裝成自定義異常類,這樣可以讓拋出的異常更具體,相應的處理方式也更具體。自定義異常類要繼承自Exception。
  2. 自定義異常類在構造時,由於父類已經定義好了關於異常信息的處理方式,因此只需將異常信息通過super(message)傳遞給父類,實現對異常信息的記錄和獲取。
class MyException extends Exception
{
    /*Exception中對異常信息的處理
    private String message;
    Throwable(String message)
    {
        this.message = message;
    }
    public String getMessage()
    {
        return message;
    }
    */

    //子類只需直接調用初始化異常信息
    FuShuException(String msg)
    {
        super(msg);
    }
}

RuntimeException和Exception的區別

  1. RuntimeException是運行時異常,當異常發生後,考慮到調用者無法進行處理,希望程序直接停下來,對代碼進行修正,這時就可以拋出該異常或者自定義子類異常,這類異常不用在函數體上聲明。
  2. Exception是編譯時異常,當異常發生後,判斷到調用者可以處理,就拋出該異常或者自定義子類異常,這類異常需在函數提上聲明,要求調用者處理。

異常在子父類覆蓋中的特點

  1. 子類覆蓋父類異常函數,子類不能比父類發生更多異常。
  2. 若父類拋出異常,子類覆蓋時,只能拋出父類異常或者該異常的子類。
  3. 若父類拋出多個異常,子類覆蓋時,只能拋出父類異常的子集。

  1. 包與包之間可以使用的權限只有public和protected。
  2. 不同包之間的訪問,被訪問包中的類和類中的成員,需要被public修飾。不同包中的子類,還可以直接訪問父類中被protected修飾的成員。
            public  protected       default     private
同一個類     ok      ok               ok         ok
同一個包     ok      ok               ok    
子類         ok      ok
不同包       ok


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