Исключения

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

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

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

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

Если в блоке try выбрасываются разные виды проверяемых исключений, а в блоке catch отлавливается только их базовый тип, то, начиная с Java 7, компилятор может определить какое именно исключение было поймано и перебросить именно его, а не общий тип. ... Читать дальше »

Try с ресурсами. Подавленные исключения

Если класс имплементирует интерфейс AutoCloseable (реализует метод close()), он может быть использован в блоке try c ресурсами.

После завершения выполнения кода в блоке try (независимо от успешности его выполнения), всегда вызывается метод close() указанного ресурса.
Если метод close() тоже выбрасывает исключение, оно будет подавлено исключением, выброшенным при выполнении блока try. Доступ к подавленному исключению можно получить с помощью метода getSuppressed(). ... Читать дальше »

Тип переменной блока multi-catch

Типом переменной, которая принимает объект-исключение в блоке multi-catch, является общий тип всех исключений, объявленных в этом блоке. Поэтому, если отлавливаемые исключения реализуют один и тот же интерфейс, то через переменную блока multi-catch можно получить доступ к его методам. ... Читать дальше »

Переменная блока multi-catch

В блоке multi-catch переменная, которая принимает объект-исключение, является неявно финальной. Им нельзя присвоить другое значение, это приведёт к ошибке компиляции. ... Читать дальше »

Блок multi-catch

Если в блоке try выбрасываются исключения из одной иерархии (суперкласс и дочерний класс), то в multi-catch блоке должен указываться только самый верхний класс данной иерархии. ... Читать дальше »

Отлов checked Exception в блоке try-catch

В сигнатуре метода может быть определено выбрасывание Exception любого типа (checked или unchecked), даже если в теле метода никакой Exception не выбрасывается.

Но блок try-catch не может отлавливать checked Exception, если он не выбрасывается в теле try. ... Читать дальше »

ExceptionInInitializerError

Когда статический член класса выбрасывает какой-либо runtime exception, Java-машина, перехватив его, выбрасывает ExceptionInInitializerError.
Runtime exception может возникнуть при следующих событиях:
1. Выполнение анонимного статического блока
2. Инициализация статической переменной
3. Выполнение статического метода ... Читать дальше »

RuntimeException. Unchecked

RuntimeException - исключительная ситуация возникла при неправильном использовании API (запрос несуществующего элемента массива, вызов метода у пустой ссылки, арифметические ошибки). Такие виды исключений не должны отлавливаться (unchecked), они должны предотвращаться (использоваться проверки) в ходе разработки и отладки приложения.
Иерархия классов RuntimeException
1 2 »