📜  Java中的线程 UncaughtExceptionHandler 和示例

📅  最后修改于: 2022-05-13 01:55:44.211000             🧑  作者: Mango

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 处理未捕获异常的方式。

句法:

参数:此方法将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);
    }
}

输出:

注意:上面的代码不能在在线 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");
    }
}

输出: