Java 之異常

1 概述

Java程序在運行過程中出現的錯誤,如除數爲零、空指針、數組越界等

2 分類

Throwable:異常類的父類

Error:極其嚴重的問題,如內存溢出,我們不作處理

Exception

    RuntimeException:運行時異常,一般是代碼不夠嚴謹導致,需要修改代碼,所以也不處理

    編譯是異常:Exception 中除去 RuntimeException 部分,必須處理,因爲不處理不能通過編譯。

3 異常處理

如果我們沒有處理異常,JVM 會做出默認處理:將異常名稱、原因及出現的問題輸出在控制檯,並結束程序。

處理格式:

JDK7 以前

注意:

try{} 中的代碼越少越好,儘可能明確 catch 中的異常類型,如果實在不清楚,可以用父類替代,並且輩分越高的異常越放在後面。

catch(Exception e){} 中必須有內容,即便是一個提示消息

當 try{} 中有多個異常時,一旦異常出現,出現異常後面的代碼將不會被執行

JDK7 以後

注意:

該代碼雖然簡潔,但是不同的異常處理卻是相同的,而且各個異常必須是同輩的異常

即便是try和catch中有return語句,finally中的語句也會被執行

如圖中代碼所示

當程序執行到 catch 中 return a 時,就已經形成了return 30 的返回路徑。但因爲有 finally,所以程序會跳轉到 finally 並執行,等待 finally 中的語句執行完畢後在執行 return 30。

4 異常聲明和拋出

  • 聲明異常

使用 throws 關鍵字在方法後面聲明拋出異常

注意:

throws 必須跟在方法後面,並且可以聲明拋出多個異常,用 "," 隔開即可。

儘量不要在main()上聲明拋出異常

  • 拋出異常

格式:throw 異常對象

例: throw new Exception("拋出一個異常");

5 throw 和 throws 的區別

  • throw

用在方法體內,跟的是異常對象

只能拋出一個異常對象

表示拋出一個異常,由方法體內的語句處理

執行throw一定拋出了某種異常

  • throws

用在方法聲明後面,跟的是異常類名,可以多個異常類名,用逗號隔開,表示方法可能拋出異常,由方法的調用者處理

執行throws表示可能出現異常,但不一定會發生 

  • 注意

子類重寫父類方法時,子類的方法只能拋出父類方法聲明的異常或其子異常

父類方法如果聲明拋出多個異常,子類重寫方法聲明拋出的異常只能是父類方法聲明拋出異常的子集

如果父類方法沒有聲明拋出異常,那麼子類也不能聲明拋出異常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章