Перехват необрабатываемых исключений

Перехват необрабатываемых исключений

Интерфейс UncaughtExceptionHandler, являющийся внутренним статическим функциональным интерфейсом класса Thread, предназначен для перехвата необрабатываемых исключений.

Необрабатываемые исключения не требуют обработки. Но может возникнуть ситуация, когда потребуется обрабатывать и их (например, отобразить текст исключения в JFrame). Существует три способа выполнить обработку runtime-исключений:
  1. Вызвать метод setUncaughtExceptionHandler() у класса Thread - настройка обработчика для выбранного потока.
  2. Определить свой класс ThreadGroup и переопределить метод uncaughtException() - изменение поведения обработчика для всех потоков в группе.
  3. Вызвать статический метод класса Thread setDefaultUncaughtExceptionHandler() - установка поведения по умолчанию для всех потоков.
Методы setUncaughtExceptionHandler() и setDefaultUncaughtExceptionHandler() принимают в качестве аргумента класс, реализующий интерфейс Thread.UncaughtExceptionHandler.


class MyHandler implements Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread thread, Throwable e) {
        System.out.printf("Caught exception: %s %s\n", e.getClass(), e.getMessage());
    }
}


public static void main(String[] args) {
     Thread.setDefaultUncaughtExceptionHandler(new MyHandler());
        
     for (int i = 10; i >= 0; i--) {
         int div = 100 / i; //  ArithmeticException при делении на ноль
     }
}

Вывод:

/*
Caught exception: class java.lang.ArithmeticException / by zero
*/
Исключения