Sobes.tech
Senior
68

Šta hvata u catch ako se izuzetak dogodi i u try i pri zatvaranju resursa (try-with-resources)?

Компаније где су питане
IT OneIT One

Одговор од АИ

sobes.tech АИ

Если в блоке 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().