異常是對問題的描述,將問題對象進行封裝成一個對象.java
Throwable
|—–Error
|—–Exception
|—–RuntimeException
特色:異常體系中的全部類以及創建的對象都具有可拋性.也就是說能夠被throw和throws關鍵字所操做,只有異常類體系具有這個特色,markdown
throw定義在函數內,用於拋出異常對象
throws定義在函數上,用於拋出異常類,能夠拋出多個用逗號隔開的異常類函數
當函數內容有throw拋出異常對象,並未進行try處理,必需要在函數上聲明,不然編譯報錯.固然RuntimeException除外,也就是說,函數內若是拋出RuntimeException異常,函數上不須要聲明.spa
若是函數聲明瞭異常,調用者須要進行處理,處理方法能夠是throws和try
異常有兩種:
編譯時被檢測異常
該異常在編譯時,若是沒有處理(沒有拋出也沒有try),編譯失敗
運行時異常(編譯時不檢測)
在編譯時不須要處理,編譯器不檢查
該異常發生,建議不處理,讓程序中止,須要對代碼進行修正.code
try{
//須要被檢測的代碼
}
catch(){
//處理異常的代碼
}
finally{
//必定會執行的代碼
}
注意:
1.finally中定義的一般是 關閉資源代碼,由於資源必須釋放
2.finally只有一種狀況不會執行,當程序在finally以前強行中止,也就是System,exit(0)對象
定義類繼承Exception或者RuntimeException
1.爲了讓該自定義類具備可拋性
2.讓該類具有操做異常的共性方法繼承
當要定義的自定義異常信息時,可使用父類已經定義好的功能.異常信息傳遞給父類的構造函數.接口
class MyException extends Exception {
MyException(String message){
super(message);
}
}
自定義異常:按照java面向對象的思想,將程序中出現的特有問題進行封裝.資源
1.調用到拋出異常的功能時,拋出幾個就處理幾個.也就是一個try對應多個catch
2.多個catch狀況下,父類的catch放到最下面,以避免覆蓋異常
3.catch內須要定義針對性的處理方式,不要簡單的定義輸出語句,也不要不寫,這是良好的代碼習慣編譯器
在子父類覆蓋時: 1.子類拋出的異常必須是父類的異常的子類或者子集 2.若是父類或者接口沒有異常拋出時,子類覆蓋出現異常,只能try,不能拋出