1. 程式人生 > >JAVA基礎(一)Java中的異常 (轉)

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的預設處理方式)


2)throws的方式處理異常

簡單來說就是拋~

throw

在方法內部出現某種情況,程式不能繼續執行,需要進行跳轉時,就用 throw 把異常物件丟擲。

throws

定義方法時,需要把出現的問題暴露出來讓呼叫者去處理。那麼就通過 throws 在方法上標識。

程式碼演示:

1)編譯時異常的丟擲


2)執行時異常的丟擲


throws和throw的區別

throws

用在方法聲明後面,跟的是異常類名。可以跟多個異常類名,用逗號隔開,表示丟擲異常,由該方法的呼叫者來處理。

throw

用在方法體內,跟的是異常物件名,只能丟擲一個異常物件名,表示丟擲異常,由方法體內的語句處理。

finally關鍵字的特點及作用

finally 的特點

被finally控制的語句體一定會執行

特殊情況:

在執行到finally之前jvm退出了(比如System.exit(0))

finally的作用

用於釋放資源,在後面的IO流操作和資料庫操作中會見到的~不要急哈~

程式碼演示

程式正常執行時,finally 裡面的內容會執行~


程式報錯時,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沒有提供對應的異常,需要我們來自定義異常。