Вопрос проверяет понимание продвинутой обработки исключений и механизмов сохранения контекста ошибок.
Suppressed exception — это исключение, которое возникло дополнительно к основному и было сохранено, а не выброшено напрямую. Чаще всего оно появляется при использовании try-with-resources. Основное исключение выбрасывается, а дополнительные прикрепляются к нему. Это позволяет не терять информацию об ошибках. Получить suppressed exception можно программно.
Механизм suppressed exception был добавлен для решения проблемы потери исключений.
Suppressed exception — это исключение, которое:
возникло после основного
не прерывает выполнение
сохраняется внутри основного исключения
Чаще всего оно появляется при ошибке в close() ресурса.
Типичный сценарий:
исключение возникает в блоке try
при закрытии ресурса возникает еще одно исключение
второе исключение добавляется как suppressed
Пример:
try (Resource r = new Resource()) {
throw new RuntimeException("main");
}
Если close() выбросит исключение, оно станет suppressed.
В блоке catch:
catch (Exception e) {
Throwable[] suppressed = e.getSuppressed();
}
Это позволяет:
логировать все ошибки
анализировать цепочку проблем
Без suppressed exception:
вторичные ошибки терялись бы
диагностика была бы неполной
сложные сбои было бы труднее анализировать
Вывод: suppressed exception сохраняют полную картину ошибок и делают обработку исключений более надежной.