Sobes.tech
Назад к вопросам
Senior
8

Если исключение выпало и в try, и при закрытии ресурса (try-with-resources), что поймаем в catch?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

Если в блоке try возникает исключение, а при закрытии ресурса в try-with-resources — другое исключение, то в catch будет поймано исключение из блока try, а исключение, возникшее при закрытии ресурса, станет подавленным (suppressed) и будет доступно через метод Throwable.getSuppressed() у основного исключения.

Пример:

try (MyResource res = new MyResource()) {
    throw new IOException("Ошибка в try");
} catch (IOException e) {
    System.out.println("Основное исключение: " + e.getMessage());
    for (Throwable suppressed : e.getSuppressed()) {
        System.out.println("Подавленное исключение: " + suppressed.getMessage());
    }
}

В этом примере в catch будет поймано исключение "Ошибка в try", а исключение, возникшее при закрытии ресурса, будет подавлено и доступно через getSuppressed().