Java中的Exception的異常分類與try,catch的處理
阿新 • • 發佈:2019-01-29
一、 異常:
1:錯誤的分類
1)Error:錯誤(不可控),一般指的是系統方面的異常,比如 藍屏,記憶體溢位,jvm執行環境出現了問題。
2) Exception:是可控的異常,程式設計師可以在編寫程式時解決的錯誤。
3)**兩者的父類為Throwable;
2:可以控制的異常:
Exception:是所有異常的父類,其下面可以派生出很多子型別。
3:異常處理機制。
在編寫程式時,某一塊程式碼可能會某些異常。我們應該對這塊
1) 進行異常處理。怎麼處理呢?
如下語法:--解決方法
try{
捕捉程式碼片段出現的異常資訊,然後封裝成異常物件//可能出
現異常的程式碼塊放入try{}中,
}catch(異常型別的宣告--引用捕捉到的異常物件){
//處理異常
}finally{
/*不管try中是否出現異常,都會執行此部分程式碼。
一般都用來用做關閉,釋放等操作。
try中出現return 也會執行finally中的語句
*/
}
2)進行處理過程: 我們將可能出現異常的程式碼塊放入try{}中,
①jvm會進行檢查try{}中的程式碼,
如果有異常,jvm就會將異常資訊封裝成相應的異常物件,
然後轉移到catch(){}程式碼塊中進行處理,執行{}中的業務邏輯。
最後會執行finally模組的程式碼。
②如果try{}中沒有異常出現,最後也會執行finally模組 中的邏輯。
4:catch程式碼塊:
①數量上:可以有1個或多個,
②執行順序: 從上到下的catch塊使用的異常型別可以是同級別的;
如果多個異常型別有父子關係時,那麼應該先寫子異常,再寫父異常。
(先寫父異常時,編譯不通過
5:finally程式碼塊:
①finally程式碼塊是有沒有異常都會執行的,最後執行。
②通常用於關閉某些操作,刪除臨時檔案等;
③不管try有沒有異常當程式中有return關鍵字的時候, 先執行return,再執行finally程式碼塊
6:throw : 丟擲異常物件。
概念:有時候,程式中捕獲的異常,不想在catch程式碼塊中處理。
就要往外丟擲,拋給呼叫者(誰呼叫這個方法誰就是呼叫者)
由呼叫者來處理(需要try/catch),main中的異常最好直接處理。
7:throws:
在定義方法時,
throws:就是宣告通知呼叫要處理的異常型別 ,在定義方法處宣告丟擲的異常型別.
throw :丟擲異常物件,拋給呼叫者(方法),讓呼叫者處理.
如果throw是執行時異常,可以不用 throws
如果throw是編譯時異常,必須使用 throws
throw new 一個異常物件:
throw new NullPointerException();
8:異常的分類 :
①檢查性異常(編譯時異常)
reg:IO異常
②非檢查性異常(執行時異常)
reg:
NullPointerException
ArrayIndexOutOfBoundsException
StringIndexOutOfBOundsException
ClassCastException //類造型異常
NumberFormatException//數字異常
IllegalArgumentsException//非法引數異常
不要把ClassNotFoundException當成執行時異常
在throw執行時異常物件時,方法處不需要宣告throws,因為編譯器 會忽略執行時異常。
當throw編譯時異常時,必須在方法處宣告throws此物件的型別。
9:當父類中的方法宣告異常時,子類重寫方法時可以不宣告,也可以宣告;
父類中方法不宣告異常,子類不能宣告異常;
10:自定義異常。只需要繼承Exception,用系統提供的構造器即可。
二、子類異常繼承父類
***子類重寫父類方法時,如果父類的方法聲明瞭異常:
1)子類方法可以不宣告該異常;
2)可以按父類的方法進行宣告;
3)也可以宣告父類方法的異常的子型別異常;
*不能宣告父類方法異常的父型別
例如:public double distance()throws Exception{
//程式碼塊
}
4)父類的方法如果沒有宣告異常 , 子類方法不可以宣告異常