假设我有一个try
- finally
块没有 catch 块,我们在 try
块中抛出一个异常。我能抓住那个异常吗?
public static void main(String[] args) throws IOException{
try {
throw new IOException("Something went wrong");
} finally{
}
}
是的,这是可能的。
您可以使用未捕获的异常处理程序。它的职责是捕获程序未捕获的异常,并对其进行处理。
public static void main(String[] args) throws IOException {
Thread.setDefaultUncaughtExceptionHandler((thread, thr) -> thr.printStackTrace());
throw new IOException("Something went wrong");
}
setDefaultUncaughtExceptionHandler
是一种方法,它将注册一个处理程序,当任何线程中引发异常且未被捕获时,将调用该处理程序。上面的代码将打印可抛出处理的堆栈跟踪。
处理程序将发生异常的线程和引发的可抛出对象作为参数。
您还可以通过在 Thread
实例上使用 setUncaughtExceptionHandler
为每个线程设置一个处理程序。此处理程序将处理从此线程引发的所有未捕获的异常。