Нужно ли и можно ли обрабатывать непроверяемые (unchecked) исключения в Java?

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

Ответ

Да, обрабатывать можно, но нужно — только в тех местах, где вы можете осмысленно на них отреагировать и продолжить корректную работу.

Что такое unchecked-исключения? Это RuntimeException и его подклассы (например, NullPointerException, IllegalArgumentException, ArithmeticException). Компилятор не требует их объявления или обработки.

Когда обрабатывать:

  • Когда вы можете восстановить нормальный поток выполнения (например, повторить операцию, использовать значение по умолчанию).
  • Когда вы находитесь на границе слоев (например, в контроллере веб-приложения) и хотите преобразовать исключение в пользовательский ответ.

Пример осмысленной обработки:

public int safeParseInt(String input, int defaultValue) {
    try {
        return Integer.parseInt(input);
    } catch (NumberFormatException e) { // unchecked исключение
        // Мы можем осмысленно отреагировать — вернуть значение по умолчанию
        logger.debug("Could not parse '{}', using default: {}", input, defaultValue);
        return defaultValue;
    }
}

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