2011-02-10 4 views

ответ

17

Потому что это целая точка в блоке finally - она ​​выполняется, однако вы оставляете блок try, если только сама ВМ не отключена.

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

Для получения дополнительной информации см. JLS section 14.20.2 - и обратите внимание, как все пути включают в себя выполнение блока finally.

3

Наконец ВСЕГДА запускается на выполнение, независимо от того, что происходит в блоке Ьгу (неудовлетворительно, возврат, исключение, отделка и т.д.).

Если вы не хотите, чтобы этот код выполнялся, вы всегда можете поместить его после инструкции try/catch/finally.

+1

За исключением случаев, когда JVM не живет для его запуска ;-) I.e. если JVM убивается или компьютер теряет мощность. –

+0

Согласен ... но тогда НЕТ код будет запущен, что я считаю очевидным ...;) –

0

Это именно то, что finally для: код внутри будет выполняться, когда try блока остается, независимо от того, как (за исключением JVM выключая через System.exit() или внешние причины).