Нам всем говорили, что блок
finally выполняется всегда, при любых обстоятельствах. Но так ли это на самом деле?Можешь назвать ситуацию, когда он не сработает?
Ответ — нет, но с важной оговоркой.
Фатальный краш JVM (например, StackOverflowError) это стопроцентный «нет» для finally.
А вот с
System.exit() всё интереснее. Если вызов проходит успешно, JVM завершается сразу, и finally пропускается. Если же SecurityManager блокирует вызов, выбрасывается SecurityException, и блок finally выполняется в рамках обычной обработки ошибки.То есть поведение реально зависит от прав, заданных в рантайме.
👉 Java Portal