В каких случаях в Java применяются runtime (unchecked) исключения?

«В каких случаях в Java применяются runtime (unchecked) исключения?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Runtime (unchecked) исключения в Java — это исключения, которые компилятор не проверяет. Они сигнализируют об ошибках программиста или внутренних сбоях, которые часто невозможно или нецелесообразно обрабатывать локально. Наследуются от RuntimeException.

Когда использовать:

  1. Ошибки программирования: NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException.
  2. Нарушение контракта метода: Например, передача недопустимого аргумента (IllegalArgumentException).
  3. Ошибки, которые сложно или невозможно восстановить на текущем уровне абстракции.

Пример (валидация аргумента):

public void setDiscount(double discount) {
    if (discount < 0 || discount > 1) {
        // IllegalArgumentException — типичное unchecked исключение
        throw new IllegalArgumentException("Скидка должна быть от 0 до 1");
    }
    this.discount = discount;
}
// Вызывающий код НЕ обязан обрабатывать это исключение в try-catch

Почему unchecked?

  • Логические ошибки (обращение к null) должны устраняться на этапе разработки, а не обработки.
  • Избегание загрязнения сигнатур методов: Не нужно добавлять throws для множества потенциальных runtime-ошибок.
  • Best practice: В бизнес-логике приложений часто используют пользовательские unchecked исключения для ошибок валидации или нарушений бизнес-правил.