假设我有一个没有catch块的try
- finally
块,我们在try
块内抛出一个异常。我能抓住那个例外吗?
public static void main(String[] args) throws IOException{
try {
throw new IOException("Something went wrong");
} finally{
}
}
答案 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
为每个线程设置一个处理程序。此处理程序将处理从此线程抛出的所有未捕获的异常。