JAVA基礎(一)Java中的異常 (轉)
原文地址:https://mp.weixin.qq.com/s/YJlDgcjBRTSq216crd1-SQ
今天 點選上方“
關鍵時刻,第一時間送達!
夥伴們
今天我們來說一下異常
相信夥伴們在寫程式碼的時候
都出現過程式碼報錯~
今天我們就來一起了解這些錯誤
異常
異常的概述
異常就是Java程式在執行過程中出現的錯誤。
異常的分類
通過API檢視Throwable
Error
我們無法解決的異常,例如:伺服器宕機,資料庫崩潰等這樣子的異常~這個我們就不管了~
Exception
我們在開發的過程中需要避免的異常,我們今天會說一些,在開發的過程中會經常見到的異常 RuntimeException(希望看完這一章的內容之後,夥伴們知道如何解決異常呦~)
JVM預設是如何處理異常的如果我們沒有寫針對的處理方式,就只有交給呼叫 main 的 jvm 來處理,jvm 有一個預設的異常處理機制,將該異常進行處理.並將該異常的名稱,異常的資訊.異常出現的位置列印在了控制檯上,同時程式停止執行。
很多時候我們遇到的異常都是這樣的
我們處理異常的兩種方式1)try...catch的方式處理異常try(檢測異常)…catch(捕獲異常)…finally(釋放資源)有三種搭配方式
a)try catch
b)try catch finally
c)try finally
try 後面可以跟多個catch,如果這樣做了,那麼範圍小的要放在前面,範圍大的異常放後面~
JDK7是如何處理多個異常的
Java 中的異常(我們能處理的部分)被分為兩大類:編譯時異常和執行時異常。
所有的 RuntimeException 類及其子類的例項被稱為執行時異常(就是我們寫程式碼的時候犯的錯誤,需要我們來修改程式碼),其他的異常就是編譯時異常
編譯期異常和執行期異常的區別
編譯時異常
Java 程式必須顯示處理(就是編譯器有時候出現的紅色的X),否則程式就會發生錯誤,無法通過編譯。
執行時異常
無需顯示處理,也可以和編譯時異常一樣處理。
Throwable中幾個常見方法getMessage()
獲取異常資訊,返回字串。
toString()
獲取異常類名和異常資訊,返回字串。
printStackTrace()
獲取異常類名和異常資訊,以及異常出現在程式中的位置。返回值void。(JVM的預設處理方式)
簡單來說就是拋~
throw
在方法內部出現某種情況,程式不能繼續執行,需要進行跳轉時,就用 throw 把異常物件丟擲。
throws
定義方法時,需要把出現的問題暴露出來讓呼叫者去處理。那麼就通過 throws 在方法上標識。
程式碼演示:
1)編譯時異常的丟擲
2)執行時異常的丟擲
throws
用在方法聲明後面,跟的是異常類名。可以跟多個異常類名,用逗號隔開,表示丟擲異常,由該方法的呼叫者來處理。
throw
用在方法體內,跟的是異常物件名,只能丟擲一個異常物件名,表示丟擲異常,由方法體內的語句處理。
finally關鍵字的特點及作用finally 的特點
被finally控制的語句體一定會執行
特殊情況:
在執行到finally之前jvm退出了(比如System.exit(0))
finally的作用
用於釋放資源,在後面的IO流操作和資料庫操作中會見到的~不要急哈~
程式碼演示
程式正常執行時,finally 裡面的內容會執行~
程式報錯時,finally 裡面的內容會執行~
1)final,finally和finalize的區別
final
可以修飾類——不能被繼承
可以修飾方法——不能被重寫
可以修飾變數——只能賦值一次
finally
是try語句中的一個語句體,不能單獨使用,用來釋放資源
finalize
是一個方法,當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法~
2)如果catch裡面有return語句,請問finally的程式碼還會執行嗎?如果會,請問是在return前還是return後。
會~finally語句是在try的return語句執行之後,return返回之前執行
自定義異常除了系統給定的異常,我們還可以自己定義異常~可以通過名字區分到底是什麼異常,有針對的解決辦法~
自定義異常需要繼承異常的基類
(繼承 Exception 或者 RuntimeException)
使用方法演示
自定義異常的基本使用
這邊就會報我們自己的異常了~
1)異常注意事項
a:子類重寫父類方法時,子類的方法必須丟擲相同的異常或父類異常的子類。
b:如果父類丟擲了多個異常,子類重寫父類時,只能丟擲相同的異常或者是他的子集,子類不能丟擲父類沒有的異常
c:如果被重寫的方法沒有異常丟擲,那麼子類的方法絕對不可以丟擲異常,如果子類方法內有異常發生,那麼子類只能try,不能throws
2)如何使用異常處理
原則:
如果該功能內部可以將問題處理,用try,如果處理不了,交由呼叫者處理,這是用throws
區別:
後續程式需要繼續執行就try
後續程式不需要繼續執行就throws
最後
如果JDK沒有提供對應的異常,需要我們來自定義異常。