1. 程式人生 > 其它 >Java執行時異常try-catch塊能捕捉到嗎

Java執行時異常try-catch塊能捕捉到嗎

技術標籤:Java基礎java執行時異常執行時異常捕捉執行時異常能捕捉嗎try-catch 執行時異常

還記得2年前見過這個問題,當時沒太在意,這次寫demo復現了這個問題。Java執行時異常能捕捉嗎?

背景:比如檔案上傳後的刪除操作deleteid不存在丟擲執行時異常。 刪除方法是public void delete(),因為MVC中的Model層沒有宣告異常,service中的delete呼叫dao中的deletedao中的delete去呼叫xml或者資料庫delete操作。現在前端需要接收到刪除成功和失敗的提示,後端刪除失敗是會有執行時異常的,最後需要給前端返回類似{return:"ok"}

或者{return:"你的異常資訊"}

方法大概兩種,第一就是刪除資料失敗直接返回boolean型別值,方法改為public boolean delete(),第二種就是把執行時異常一層層上拋到Controller進行try-catch處理,在catch塊中返回錯誤的json資料{return:"你的異常資訊"}


思考的問題來了,執行時異常一層層往上丟擲,try-catch能接住嗎?如果接不住你就沒法處理失敗資訊傳給前端了。那咱們就來試一試。

public class HelloWorld{

	public static void test() {
try { throw new RuntimeException("test RuntimeException123"); } catch (RuntimeException e) { System.out.println("裡面"); throw new RuntimeException(e.getMessage()); } catch (Exception f) { System.out.println("ff"); } } public static void test2() { System.
out.println("執行到test2"); test(); System.out.println("test()拋異常後面還會執行嗎?"); } public static void main(String[] args) { try { test2(); } catch(Exception e) { e.printStackTrace(); System.out.println("外面"); } } }

java執行時異常能捕捉嗎
結果我們發現,test()中,執行時異常被try-catch接住了,然後繼續往上拋,在test2()中沒有try-catch塊,結果在main方法還是能接住。


得出結論:
  執行時異常不需要throws宣告,即使是方法層層呼叫,也能丟擲到最上層後再用try-catch捕捉。所以,執行時異常可以捕捉,但是沒必要捕捉,除非功能特殊需要。


歡迎一鍵三連~

有問題請留言,大家一起探討學習

----------------------Talk is cheap, show me the code-----------------------