一、 異常:
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)父類的方法如果沒有聲明異常 , 子類方法不可以聲明異常