Поскольку в этом весь смысл блока finally
- он выполняется, однако вы покидаете блок try
, если только сама виртуальная машина не закрыта внезапно.
Как правило, блоки finally
используются для очистки ресурсов - вы не хотите оставлять дескриптор файла открытым только потому, что вернулись во время блока try
, не так ли? Теперь вы могли бы поместить этот код очистки непосредственно перед оператором return, но тогда он не будет очищен, если код вызовет исключение. При finally
код очистки выполняется , однако вы покидаете блок, что, как правило, то, что вы хотите.
См. JLS раздел 14.20.2 для получения более подробной информации - и обратите внимание, как все пути включают выполнение блока finally
.