25просмотров
22 декабря 2025 г.
questionScore: 28
☄️ Suppressed исключения: что происходит, когда летит сразу несколько ошибок? Знаете ли вы, что в Java исключение может нести в себе другие исключения? Это не баг, а фича — suppressed exceptions. 🖥Контекст: Возникает в блоке try-with-resources и когда в finally бросается исключение. 🤓Пример: try (var resource = new AutoCloseableResource()) { throw new RuntimeException("Основная ошибка в try-блоке");
} catch (Exception e) { System.out.println(e.getMessage()); // "Основная ошибка в try-блоке" // А где же исключение из close()?! Throwable[] suppressed = e.getSuppressed(); for (Throwable t : suppressed) { System.out.println("Suppressed: " + t.getMessage()); }
} class AutoCloseableResource implements AutoCloseable { @Override public void close() throws Exception { throw new IOException("Ошибка при закрытии ресурса"); }
}
✨Что произойдёт? 1. Исключение из try-блока — основное
2. Исключение из close() — suppressed (добавляется к основному)
3. JVM гарантирует, что suppressed не потеряются! ❓Зачем это нужно? ✈️ Не терять ошибки закрытия ресурсов
✈️ Видеть полную картину сбоя
✈️ Правильно логировать цепочки проблем 📌Итог: Всегда проверяйте getSuppressed() при обработке исключений в сложных сценариях с ресурсами. Одна ошибка может скрывать другую! ✈️Подписаться: @iamjavadev #исключения #ресурсы #сакральныезнания #trywithresources