Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Создание и использование кастомного исключения в Java

Быстрый ответ

Для создания своего исключения необходимо наследоваться от класса Exception.

Java
Скопировать код
public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

Чтобы сгенерировать это исключение, используйте команду throw.

Java
Скопировать код
throw new MyException("Очень необычное исключение");

Такой подход позволит передать конкретную информацию о проблеме, которая возникла в программе.

Кинга Идем в IT: пошаговый план для смены профессии

Продумывание дизайна пользовательского исключения

При создании собственного исключения необходимо учитывать особенности возникающей ошибки.

Тонкая грань между проверяемыми и непроверяемыми

В Java исключения подразделяются на проверяемые и непроверяемые. Проверяемые исключения наследуются от класса Exception, исключая RuntimeException и его наследников, которые являются непроверяемыми. Золотой нормой является использование проверяемых исключений, если можно восстановить работу программы, и непроверяемых – для обозначения ошибок в логике программы.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Искусство создания конструкторов

Хорошо продуманное исключение дает возможность передачи подробных сообщений об ошибках или соответствующей информации через конструкторы:

Java
Скопировать код
public class BinaryDataNotFoundException extends Exception {
    // У каждой ошибки своя история
    public BinaryDataNotFoundException() {
        super("Потеряна в море двоичных кодов");
    }
    
    // Индивидуальная причина ошибки
    public BinaryDataNotFoundException(String message) {
        super(message);
    }
}

Конкретность versus повторное использование

Создавая своё исключение, стоит стремиться к тому, чтобы оно было конкретным и многоразово применимым для схожих ситуаций ошибок. Старайтесь избегать создания большого числа узкоспециализированных исключений, так как это ухудшает читаемость кода и нарушает принцип DRY (Don't Repeat Yourself — Не повторяйся).

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

При использовании собственных исключений следует придерживаться стандартных способов обработки ошибок: предоставление полных и понятных сообщений, избегание пустых блоков catch и документирование ситуаций, при которых может быть выброшено исключение.

Визуализация

Создание собственного исключения можно сравнить с проектированием ключа :old_key:, который подходит к определённому «замку» (сценарию ошибки) в вашем коде:

Markdown
Скопировать код
Ваш код (🚪)                Ваше исключение (🔐)
-----------------------     --------------------------------
Общая логика               StandardKeyException
Работа с базами данных     DatabaseLockedException
Проверка входных данных    InvalidInputException

Специализированные ключи для особых случаев!

Ценность хорошего сообщения об ошибке

Так же, как важно знать своё местоположение в незнакомом городе, так же важны и осмысленные сообщения об ошибках в мире исключений.

Java
Скопировать код
throw new DataIntegrityViolationException("Хьюстон, у нас проблема: объект " + objectId + " не подпадает под контроль.");

Когда следует придерживаться классических решений

Для стандартных типов ошибок, предпочтительнее использовать встроенные исключения:

Java
Скопировать код
public void setAge(int age) {
    if (age < 0 || age > 150) {
        throw new IllegalArgumentException("Не может быть, тебе уже " + age + " лет! Ты что, долгожитель?");
    }
}

Создание собственных непроверяемых исключений путем расширения RuntimeException

Для решения уникальных задач быстро и без лишних усложнений можно наследовать непроверяемые исключения от RuntimeException:

Java
Скопировать код
public class ConfigurationError extends RuntimeException {
    public ConfigurationError(String message, Throwable cause) {
        super(message, cause);
    }
}

Полезные материалы

  1. Урок: Исключения (The Java™ Tutorials > Essential Java Classes) — полное руководство по обработке исключений в Java.
  2. Как выбросить исключение – The Java™ Tutorials — официальное руководство по генерации исключений.
  3. Издержки, связанные с Exception против Throwable в Java – Stack Overflow — дискуссия нюансов использования исключений в Java на платформе Stack Overflow.
  4. Исключения в Java – GeeksforGeeks — подробное изложение основ исключений в Java.
  5. Обработка исключений в Java | DigitalOcean — оглубленное изучение реализации и использования исключений в Java.
  6. Как создать свои исключения в Java – DZone — практические советы и примеры создания пользовательских исключений.
  7. Java – Исключения — учебный курс с примерами использования и создания исключений в Java.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какое из следующих утверждений верно о создании пользовательских исключений в Java?
1 / 5