exception 是不需要的或意外的事件,它发生在程序执行期间(即运行时),它会扰乱程序指令的正常流程。
在本文中,我们将了解如何实现Thread.UncaughtExceptionHandler。
在实现处理程序之前,我们先通过一个例子来了解一下异常是如何引起的:
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)
但是,如果我们希望重写internal working of 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 不授予覆盖异常处理程序的权限。在这里,设置DefaultUncaughtExceptionHandler()方法,改变字段默认UncaughtExceptionHandler从初始值 null 到 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
相关用法
- Java Thread activeCount()用法及代码示例
- Java Thread checkAccess()用法及代码示例
- Java Thread currentThread()用法及代码示例
- Java Thread destroy()用法及代码示例
- Java Thread dumpStack()用法及代码示例
- Java Thread enumerate()用法及代码示例
- Java Thread getContextClassLoader()用法及代码示例
- Java Thread getDefaultUncaughtExceptionHandler()用法及代码示例
- Java Thread getId()用法及代码示例
- Java Thread getName()用法及代码示例
- Java Thread getPriority()用法及代码示例
- Java Thread getStackTrace()用法及代码示例
- Java Thread getState()用法及代码示例
- Java Thread getThreadGroup()用法及代码示例
- Java Thread holdLock()用法及代码示例
- Java Thread interrupt()用法及代码示例
- Java Thread interrupted()用法及代码示例
- Java Thread isAlive()用法及代码示例
- Java Thread isDaemon()用法及代码示例
- Java Thread isInterrupted()用法及代码示例
- Java Thread join()用法及代码示例
- Java Thread notify()用法及代码示例
- Java Thread notifyAll()用法及代码示例
- Java Thread resume()用法及代码示例
- Java Thread run()用法及代码示例
注:本文由纯净天空筛选整理自abhijeet_rai大神的英文原创作品 Thread UncaughtExceptionHandler in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。