Ответ
Unchecked исключение (наследник RuntimeException) следует создавать для обозначения ошибок программиста или невосстановимых условий, которые, как правило, можно предотвратить корректным кодом. Компилятор не требует их обязательной обработки.
Критерии для создания unchecked исключения:
- Ошибка в логике программы: Несоблюдение контракта метода (передача недопустимого аргумента:
null, отрицательное число).public void setAge(int age) { if (age < 0 || age > 150) { // Программист, вызвавший метод, должен был проверить данные throw new IllegalArgumentException("Возраст должен быть от 0 до 150: " + age); } this.age = age; } - Невосстановимая ситуация: Ошибка, после которой продолжение работы приложения в данном контексте невозможно или бессмысленно (например, сбой при инициализации критического компонента).
- Нарушение инвариантов класса: Объект оказался в некорректном внутреннем состоянии.
Почему unchecked? Обработка таких ошибок на каждом уровне стека вызовов избыточна и загромождает код. Они обычно ловятся на верхнем уровне (например, в обработчике веб-запроса или главном цикле) для логирования и graceful shutdown.
Отличие от checked: Если ошибку можно и нужно обработать локально для восстановления — используйте checked. Если ошибка фатальна для текущей операции и её обработка — это просто логирование/завершение — используйте unchecked.