我们可以捕获一个没有catch块的异常吗?

时间:2016-06-11 14:09:43

标签: java exception try-catch try-catch-finally

假设我有一个没有catch块的try - finally块,我们在try块内抛出一个异常。我能抓住那个例外吗?

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

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。

您可以使用未捕获的异常处理程序。它的职责是捕捉你的程序没有捕获的异常,并用它做一些事情。

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

setDefaultUncaughtExceptionHandler是一个方法,它将注册一个处理程序,当在任何线程中抛出异常并且未被捕获时,该处理程序将被调用。上面的代码将打印throwable handling的堆栈跟踪。

处理程序将异常发生的线程和抛出的throwable作为参数。

您还可以在Thread实例上使用setUncaughtExceptionHandler为每个线程设置一个处理程序。此处理程序将处理从此线程抛出的所有未捕获的异常。