異常的概述和分類

程序的問題

  1. 嚴重問題:Error,比如內(nèi)存溢出,不處理,因為沒辦法處理
  2. 問題:Exception
  • 編譯期問題 不是RuntimeException異常,必須處理,否則編譯無法通過
  • 運行期問題 RuntimeException,不處理,因為代碼不夠嚴謹,需要修正代碼

處理方案

try...catch...finally

try{
可能出現(xiàn)問題的代碼;
}catch(異常名 變量){
針對問題的處理;
}finally{
釋放資源;
}

變形格式:
try{
可能出現(xiàn)問題的代碼;
}finally{
釋放資源;
}//為了釋放資源,異常沒有處理

finally:被finally控制的語句一定會執(zhí)行,除非之前JVM退出了。用于釋放資源,在IO流或數(shù)據(jù)庫中可以經(jīng)常見到

如果catch里有return語句,finally的語句會在return語句前執(zhí)行

變形格式:
try{
可能出現(xiàn)問題的代碼;
}catch(異常名 變量){
針對問題的處理;
}
注意: 1. try中的代碼越少越好
2. catch中必須有東西
3. 若不明確異常類型,可以用Exception或父類異常來接受,且父類異常需放在最后
代碼形式:1. 有幾個異常,寫幾個try...catch
2. 寫一個try,多個catch 此方法一旦在try中有問題,會在catch中匹配異常,有匹配的話執(zhí)行catch中的代碼并結(jié)束
-JDK7的新特性
try{
可能出現(xiàn)問題的代碼;
}catch(異常名1 |異常名2 ... 變量){//異常必須是同級的
針對問題的處理;
}

throws

格式: throws 異常類名... (必須跟在方法的括號后面)
注意:-盡量不要在main方法上拋出異常

  • 若拋出的是運行期異常,可以不處理,如果是編譯期異常,必須處理

throw

在方法內(nèi)部拋出異常對象 throw new 異常類名();

用戶自定義異常

  1. 繼承Exception

  2. 繼承RuntimeException

  • 只需寫構(gòu)造方法

注意事項:
1.子類重寫父類方法時,子類拋出的異常必須和父類相同或是父類異常的子類異常
2.父類拋出多個異常時,子類不能拋出父類沒有的異常
3.子類重寫的方法沒有拋出異常,子類的方法也不能拋出,只能用try...catch...解決

throws和throw的區(qū)別

throws:跟在方法的括號后面,可拋出多個異常,由方法調(diào)用者處理異常,表示可能發(fā)生異常,不一定發(fā)生異常
throw: 在方法體內(nèi),只能拋出一個異常,由方法體內(nèi)處理,一定拋出了一個異常

異常中需要了解的方法

1.public String getMessage() 異常的消息字符串
2.public String toString() 返回異常的簡單信息,類的 name(路徑名) + “: ” + getLocalizedMessage()方法的結(jié)果(默認返回getMesage())
3.public void printStackTrace() 獲取異常的信息及位置,返回void,把信息輸出到控制臺

異常處理原則

  • 能處理用try{}catch{},后續(xù)程序可以運行
  • 不能處理用throws,后續(xù)程序不能運行
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容