異常體系
Throwable |---Error |---Exception |---RuntimeException
異常格式
try { //可能出現異常的代碼 } catch () { //對異常的處理 } finally { //一定執行的代碼,通常用於釋放資源 }
相關方法
String getMessage() //異常信息
String toString() //異常名稱:異常信息
void printStackTrace() //異常名稱,異常信息,異常出現位置
throw和throws
- throw使用於函數內,拋出異常對象
- 當問題可處理時,需在函數體上聲明throws [拋出的異常類型],一方面告訴調用者可能發生的異常要進行捕捉,另一方面當調用者不處理時直接讓程序編譯出錯,讓可能發生的問題提前暴露,否則不聲明throws會將問題帶到運行時期。
自定義異常
- 當程序中出現特有含義的問題時,根據面向對象的特點,將問題封裝成自定義異常類,這樣可以讓拋出的異常更具體,相應的處理方式也更具體。自定義異常類要繼承自Exception。
- 自定義異常類在構造時,由於父類已經定義好了關於異常信息的處理方式,因此只需將異常信息通過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的區別
- RuntimeException是運行時異常,當異常發生後,考慮到調用者無法進行處理,希望程序直接停下來,對代碼進行修正,這時就可以拋出該異常或者自定義子類異常,這類異常不用在函數體上聲明。
- Exception是編譯時異常,當異常發生後,判斷到調用者可以處理,就拋出該異常或者自定義子類異常,這類異常需在函數提上聲明,要求調用者處理。
異常在子父類覆蓋中的特點
- 子類覆蓋父類異常函數,子類不能比父類發生更多異常。
- 若父類拋出異常,子類覆蓋時,只能拋出父類異常或者該異常的子類。
- 若父類拋出多個異常,子類覆蓋時,只能拋出父類異常的子集。
包
- 包與包之間可以使用的權限只有public和protected。
- 不同包之間的訪問,被訪問包中的類和類中的成員,需要被public修飾。不同包中的子類,還可以直接訪問父類中被protected修飾的成員。
public protected default private 同一個類 ok ok ok ok 同一個包 ok ok ok 子類 ok ok 不同包 ok