Java中的线程 UncaughtExceptionHandler 和示例
异常是在程序执行期间(即在运行时)发生的不希望的或意外事件,它破坏了程序指令的正常流程。
在本文中,我们将了解如何实现Thread.UncaughtExceptionHandler 。
在实现handler之前,我们先通过一个例子来了解异常是如何产生的,如下:
public class GFG {
public static void main(String args[])
{
System.out.println(10 / 0);
}
}
上述代码的输出是
Exception in thread "main"
java.lang.ArithmeticException:
/ by zero at Demo.main(GFG.java:5)
但是,如果我们希望覆盖 JVM 的内部工作,以便在发生异常时显示自定义消息,我们可以使用 Thread.UncaughtExceptionHandler 来处理它。
Java.lang.Thread类的setDefaultUncaughtExceptionHandler()方法用于覆盖 JVM 处理未捕获异常的方式。
句法:
public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)
参数:此方法将UncaughtExceptionHandler类型的对象作为参数。
下面是说明 setDefaultUncaughtExceptionHandler() 方法的示例:
示例 1:让我们尝试从 Thread 类中创建一个实现接口 UncaughtExceptionHandler 的类来处理除以 0 异常,如下所示:
// Java program to demonstrate
// the exception handler
// Creating a random class to
// implement the interface
class Random
implements Thread
.UncaughtExceptionHandler {
// Method to handle the
// uncaught exception
public void uncaughtException(
Thread t, Throwable e)
{
// Custom task that needs to be
// performed when an exception occurs
System.out.println(
"Welcome to GeeksforGeeks");
}
}
public class GFG {
public static void main(String[] args)
{
// Passing the object of the type
// UncaughtExceptionHandler to the
// setter method
// setDefaultUncaughtExceptionHandler()
Thread
.setDefaultUncaughtExceptionHandler(
new Random());
System.out.println(10 / 0);
}
}
输出:
Welcome to GeeksforGeeks
注意:上面的代码不能在在线 IDE 上运行,因为在线 IDE 没有提供覆盖异常处理程序的权限。在这里, setDefaultUncaughtExceptionHandler()方法将字段defaultUncaughtExceptionHandler从初始值 null 更改为 Random 类。当发生未捕获的异常时,调用了Random类的uncaughtException()方法。
示例 2:在这个示例中,让我们抛出一个新异常并了解异常是如何处理的。
// Java program to demonstrate
// the exception handler
// Creating a random class to
// implement the interface
class Random
implements Thread.UncaughtExceptionHandler {
// Method to handle the
// uncaught exception
public void uncaughtException(
Thread t, Throwable e)
{
// Custom task that needs to be
// performed when an exception occurs
System.out.println(
"Exception Handled " + e);
}
}
public class GFG {
public static void main(String[] args)
throws Exception
{
// Passing the object of the type
// UncaughtExceptionHandler to the
// setter method
// setDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler(
new Random());
throw new Exception("Exception");
}
}
输出:
Exception Handled Exception