首頁 > 軟體

java異常的兩種處理方式

2021-05-21 17:02:04

過完了520,估計很多暫時還沒物件的小夥伴們昨天吃狗糧吃到飽了吧?咱們也不用羨慕人家成雙成對的。沒有物件的日子裡,至少你還有自有。開個玩笑,別介意。咱們言歸正傳來說說Java異常是怎樣處理的。

在Java程式中,有兩種處理異常的方式。第一種是使用try(){}程式碼塊來捕獲異常,然後使用catch{}程式碼塊來處理捕捉到的異常。第二種是直接拋出異常到更上級。

咱先來聊一聊第一種。慣例,有圖有真相:

上圖中演示的就是使用try-catch程式碼塊處理異常的過程。我們看到原本有報錯(這裡是檢查異常時發現了一個受檢異常爆出的紅槓),需要主動處理異常的程式碼在使用try-catch程式碼塊之後,不再報異常了。

使用try-catch程式碼塊處理異常的時候,try程式碼塊負責捕獲異常,捕獲到的異常被封裝在了catch關鍵字右邊的Exception物件裡面。上圖對異常的處理是輸出異常的錯誤堆棧資訊,通過這些輸出的資訊,我們就能夠搞清楚程式碼中有什麼漏洞,從而對我們的程式碼進行一些邏輯上的修改,避免下一次程式運行到這裡時再次拋出該異常。大多數時候,我們會在catch程式碼塊中編寫一些邏輯。當異常發生的時候,程式就會走進catch程式碼塊,執行我們編寫的程式碼來按照我們的設計處理異常。

打個比方,我寫一個發紅包的程式。程式的邏輯是「校驗資訊」,「支付」,「發紅包」。如果支付成功,但是發紅包的時候,程式出現異常,那麼就必須要退款。這個時候,我們使用try程式碼塊包圍「發紅包」的邏輯。當「發紅包」邏輯拋出異常的時候,就會進入到catch程式碼塊。我們在catch程式碼塊呼叫退款的介面將扣的錢退回去。

這是第一種處理異常的方式。接下來,我們來說第二種方式。

第二種是直接將異常拋給上一層呼叫者。也就是說,你呼叫我這個介面,我出現異常,我自己不處理異常,將異常拋給你。你不想處理的話就繼續拋給呼叫你的呼叫者。上程式碼:

結合java語言的三層架構,這種方式一般是在service服務層使用,將異常拋出到檢視層(Controller)中,再由檢視層集中進行try-catch處理。

說完兩種異常處理方式,我們再來說一說try-catch-finally程式碼塊。

其實try-catch-finally程式碼塊就是try-catch的補充。在某些場景下,會有這樣的需求:不管程式是否正常走完,都必須執行某一段程式碼來完成一些必要的邏輯。這時候,finally程式碼塊就派上用場了。如圖,我們在try-catch處理完異常需要列印一句話「hello 檔案找不到」,但是在catch程式碼塊中,程式已經return(返回程式的運行結果)了。我們分別在finally程式碼塊與finally程式碼塊下面列印這句話:

結果發現,程式會執行finally中的列印語句,但是下方不在finally程式碼塊的程式沒有執行。這就是finally程式碼塊的作用:無論如何,一定執行某段邏輯。

那麼小夥伴們,你們能想象一下,在現實生活中,finally有什麼使用場景嗎?歡迎在評論區留言互動。


IT145.com E-mail:sddin#qq.com