異常掌握幾點:
1, 異常的思想:
將問題封裝成對象的思想。
2, 異常的處理方式。
編譯時異常:在函數上要聲明,然後要麼拋出,要麼try。
什麼時間try,什麼時間拋throws?
異常你能處理的就try
異常你不能處理的就拋throws。
編譯異常發生,只要沒有處理,都要聲明。
運行時異常:可以不用聲明,可以直接拋出。
3, 拋出多異常,並多catch處理的原則
父類異常往後放。
4, 編譯時檢測異常和運行時異常
編譯時異常:編譯時期被檢查到的異常,是可以預防修改的異常。
運行時異常:編譯時期不被檢查,運行時期發生的異常,一般這種異常都是調用者傳遞錯誤參數導致的,所以對於這種情況,應該讓程序停止。
5, 自定義異常
自定義編譯時異常:繼承Exception或其子類。
自定義運行時異常:繼承RuntimeException或其子類
可以調用父類構造方法指定異常拋出的信息:例如:
ZiException ( String message)
{
Super( message );
}
6, Throws和throw的區別
Throws:後跟異常名稱,聲明異常。
Throw :後跟異常對象,拋出異常並結束函數。
7, 異常的封裝和轉換
封裝:將異常封裝成一個對象,便於處理。
轉換:將一些調用者不需要知道或者無法處理的異常在方法體中進行捕獲、處理後,throw拋出且告知調用者一個他應該或者可以處理的異常。
8, finally的作用,try,catch,finally的組合形式
finally的作用:捕獲異常後,不管怎樣,都必須執行finally中的代碼。在結束代語句return前執行。
1,try{} catch(){}finally{} // 不需要聲明
2,try{} catch(){} // 不需要聲明
3,try{} finally{} // 需要聲明。 作用:不處理異常,關閉資源。
9, 異常在覆蓋時的細節
1,父類方法中拋出了一個異常,那麼覆蓋子類方法中只能拋出父類拋出的異常或者其子異常。
2,如果父類方法中拋出了多個異常,那麼覆蓋子類方法只能拋出父類異常的子類異常。
3,父類方法中沒有拋出異常,子類覆蓋方法就不能拋出異常。
Exception
1,RuntimeException:其以及其子類都是運行時異常。
2,Exception其他的子類都是編譯時檢測異常。
如果函數上表示了異常,調用者一定要進行處理,要麼try,要麼throws,否則編譯失敗。
檢測異常:必須聲明,並要給出處理方式。
運行時異常:不需給出處理方式,因爲這種異常會導致算術失敗,無法繼續,只能讓程序停止,讓調用者修改代碼。不需要聲明。將其拋出即可。
函數內部出現運行時異常時,只需對函數內部處理即可(結束程序),不用在函數上將其拋出。
函數上拋出了幾個異常,調用者就要處理幾個異常。
getMessage():獲取異常信息。
toString() :獲取異常的名稱和異常的信息。
printStackTrace():打印信息,名稱,位置到控制檯。還可以存儲到文件中(jvm的默認異常處理機制就是調用產生異常對象的printStackTrace方法)