2016-06-11 211 views
-2

假設我有一個try - finally塊沒有catch塊,我們在try塊內拋出一個異常。我能抓住那個例外嗎?我們可以捕捉一個沒有catch塊的異常嗎?

public static void main(String[] args) throws IOException{ 
    try { 
     throw new IOException("Something went wrong"); 
    } finally{ 
    } 
} 
+4

您在那裏的代碼不會編譯。但是,您可以通過添加「catch」塊來捕獲異常。 – Dando18

+2

如果你想捕獲一個異常,那麼使用catch類。 –

+2

這個問題沒有任何意義:) –

回答

4

是的,這是可能的。

您可以使用未捕獲的異常處理程序。它的責任是捕捉你的程序沒有捕捉到的異常,並用它做一些事情。

public static void main(String[] args) throws IOException { 
    Thread.setDefaultUncaughtExceptionHandler((thread, thr) -> thr.printStackTrace()); 
    throw new IOException("Something went wrong"); 
} 

setDefaultUncaughtExceptionHandler是將註冊時的例外在任何線程中被拋出,並沒有抓到會被調用處理程序的方法。上面的代碼將打印throwable句柄的堆棧跟蹤。

處理程序將異常發生的線程和拋出的throwable作爲參數。

您還可以通過在Thread實例上使用setUncaughtExceptionHandler,爲每個線程設置處理程序。該處理程序將處理從此線程拋出的所有未捕獲的異常。

+0

從來沒有聽說過它,但它的作品。 – SHE