Thread.UncaughtExceptionHandler 是 Thread 類的一個靜態內部接口,專門用於處理線程運行過程中拋出的未捕獲異常。接口定義唯一方法:
void uncaughtException(Thread t, Throwable e)
參數 t 代表發生異常的線程,e 代表拋出的異常對象。當線程因未處理的異常即將終結前,JVM 會自動查找並調用該線程的異常處理器。
Thread.setDefaultUncaughtExceptionHandler(handler),對所有線程實例生效;thread.setUncaughtExceptionHandler(handler),僅對指定線程對象生效。public class UnCaughtExceptionHandlerTest {
static class MyHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t + " 異常:" + e);
}
}
public static void main(String[] args) {
// 為主線程設置專用處理器
Thread.currentThread().setUncaughtExceptionHandler(new MyHandler());
int a = 5 / 0; // 拋出 ArithmeticException
System.out.println("normal over!"); // 不會執行
}
}
Thread[main,5,main] 異常:java.lang.ArithmeticException: / by zero
關鍵點:異常處理器處理完異常後,程序不會繼續執行,也不會正常結束。這與 try-catch 捕獲異常後可繼續執行有本質區別,適合用於日誌記錄、資源清理、錯誤上報等「善後」場景,而非業務流程恢復。