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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。