Наконец, всегда запускается, и в этом весь смысл, просто потому, что он появляется в коде после возврата, не означает, что это так. Среда выполнения Java отвечает за запуск этого кода при выходе из блока try
.
Например, если у вас есть следующее:
int foo() {
try {
return 42;
}
finally {
System.out.println("done");
}
}
Среда выполнения сгенерирует что-то вроде этого:
int foo() {
int ret = 42;
System.out.println("done");
return 42;
}
Если выброшено неперехваченное исключение, блок finally
будет запущен, и исключение продолжит распространяться.