Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: try with resources, suppressed exception, exception handling

Что произойдет, если exception возникнет в try и при закрытии ресурса в try-with-resources?

Вопрос проверяет знание механизма try-with-resources и понимание подавленных исключений.

Короткий ответ

Если исключение возникло в try, а затем еще одно при закрытии ресурса, основным считается исключение из try. Исключение при закрытии ресурса не теряется, а добавляется как suppressed exception. Его можно получить программно. Это позволяет сохранить полную информацию об ошибках. Такой механизм предотвращает потерю данных об исключениях.

Длинный ответ

try-with-resources специально спроектирован так, чтобы не терять исключения.

Приоритет исключений

Если:

  • исключение возникло в блоке try

  • второе исключение возникло в close()

Тогда:

  • исключение из try становится основным

  • исключение из close() становится suppressed

Что такое suppressed exception

Suppressed exception — это дополнительное исключение, которое:

  • не выбрасывается напрямую

  • привязывается к основному исключению

  • доступно через getSuppressed()

Пример:

try (Resource r = new Resource()) {
    // ошибка в try
} catch (Exception e) {
    e.getSuppressed(); // исключения из close()
}

Почему так сделано

Такой подход:

  • сохраняет первопричину ошибки

  • не теряет информацию о сбое при закрытии

  • упрощает диагностику

Отличие от finally

В finally:

  • исключение из finally затирает исходное

  • suppressed exceptions отсутствуют

try-with-resources решает эту проблему корректно.

Вывод: try-with-resources гарантирует, что исключения при закрытии ресурсов не потеряются, а будут сохранены как suppressed.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#try with resources

#suppressed exception

#exception handling

Подпишись на Java Developer в телеграм