Exception

Проработать:

  1. Исключения в Java
  2. Исключения в Java, Часть I (try-catch-finally)
  3. https://habr.com/ru/company/golovachcourses/blog/225585/#1
  4. Вы всё ещё ловите исключения? Тогда мы к вам
  5. Обработка исключений в Java в функциональном стиле
  6. Обработка исключений в Java в функциональном стиле. Часть 2
  7. Обработка исключений в Java с использованием сопоставления с образцом (pattern matching)

Основные определения:

  1. Exception(Исключение) - это нештатная ситуация, ошибка во время выполнения программы.
  2. Error - не обрабатываемые исключения тк после из возникновений нет гарантий что программа будет выполняться корректно. Связанная с работой JVM.

Иерархия исключений:

Типы проверки компилятором:

Checked - компилятор их проверяет.

Checked - ошибки ожидаемые в работающей программе и на их появление будет реакция.

  1. ClassNotFoundException - класс не найден.
  2. CloneNotSupportedException - попытка клонировать объект который не реализует Cloneable интерфейс.
  3. IllegalAccessException - запрещен доступ к классу.
  4. InstantiationException - попытка создания объект абстрактного класса.
  5. InterruptedException - один поток был прерван другим потоком.
  6. NoSuchFieldException - Запрошенное поле не существует.
  7. NoSuchMethodException - Запрошенное поле не существует.

Unchecked - компилятор их не проверяет.

Error

Error - это ошибки JVM. После их появления нормальная работа не гарантируется.

Runtime Exceptions

Runtime Exceptions - ошибки которые должны быть предотвращены кодом. В рабочем приложении их быть не должно.

При использовании из или их наследников Idea не будет рекомендовать обработку из(красными рекомендациями).

Способы обработки исключений

Throws

throws - ключевое слово которое, используется при определении метода. Указывает что метод может выкинуть ошибку.

Если переопределять метод с keyword 'throws'. Наследник должен отлавливать 'throws' не выше по иерархии чем у родителя.

try - catch - finally

Если используются несколько catch нужно писать их отлавливаемые исключения в порядке возвышения по иерархии.

Можно написать try - finally без блока catch. Но try не может быть без finally и catch.

try(try-with-resources){}
catch(Exception e) {}
catch(ClassCastException | ArrayStoreException e1) {}
finally {}
        

try-with-resources(since v.9) - дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока. Проверяет наличие интерфейса AutoCloseable или Closeable. И выполняет метод close. Может быть без finally и catch.

try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
}
        

Создание кастомных Exception классов

Пример:

public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}
        

Условия не выполнения finally: