Да. finally обычно выполняется при штатном выходе из try, включая исключение или return, но не гарантирован при аварийном завершении процесса, отключении питания или принудительном уничтожении.
Может ли finally не выполниться?
Да. finally обычно выполняется при штатном выходе из try, включая исключение или return, но не гарантирован при аварийном завершении процесса, отключении питания или принудительном уничтожении.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Да. finally обычно выполняется при штатном выходе из try, включая исключение или return, но не гарантирован при аварийном завершении процесса, отключении питания или принудительном уничтожении.
Он также не будет достигнут, пока управление бесконечно остаётся внутри try, например в зависшем вызове. Детали завершения зависят от языка и среды: System.exit в Java или низкоуровневое завершение процесса не равны обычному раскручиванию стека. Поэтому важное сохранение данных и восстановление нельзя строить только на finally. Для внешних ресурсов полезны транзакции, leases и повторяемая уборка.