我们可以在没有 catch 块的情况下捕获异常吗?
Can we catch an exception without catch block?
假设我有一个没有 catch 块的 try
-finally
块,我们在 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
是一种方法,它将注册一个处理程序,当在任何线程中抛出异常但未被捕获时将调用该处理程序。上面的代码将打印处理的 throwable 的堆栈跟踪。
处理程序将发生异常的线程和抛出的 throwable 作为参数。
您还可以通过在 Thread
实例上使用 setUncaughtExceptionHandler
每个线程 拥有一个处理程序 。此处理程序将处理从此线程抛出的所有未捕获异常。
假设我有一个没有 catch 块的 try
-finally
块,我们在 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
是一种方法,它将注册一个处理程序,当在任何线程中抛出异常但未被捕获时将调用该处理程序。上面的代码将打印处理的 throwable 的堆栈跟踪。
处理程序将发生异常的线程和抛出的 throwable 作为参数。
您还可以通过在 Thread
实例上使用 setUncaughtExceptionHandler
每个线程 拥有一个处理程序 。此处理程序将处理从此线程抛出的所有未捕获异常。