Выполняется ли блок `finally` в случае, если внутри блока` try` или `catch` есть` return`? - PullRequest
7 голосов
/ 19 октября 2011

Используя конструкцию try-catch-finally для извлечения записи базы данных, мне кажется, что мне нужно вернуть значение внутри блока try в случае, если все в порядке (как в случае исключения, конец функциине предназначено, чтобы быть достигнутым).Но если я вернусь внутрь try, будет ли достигнут код finally (чтобы закрыть соединение и т. Д.)?

Ответы [ 2 ]

7 голосов
/ 19 октября 2011

Да,

Результатом выражения try/catch будет последняя строка блока try или catch, но блок finally всегда будет выполняться независимо от того, что

2 голосов
/ 19 октября 2011

Да.

Смысл finally заключается в том, чтобы гарантировать выполнение некоторого кода очистки независимо от того, какой путь код использует для выхода из блока try.Это происходит при обычном возврате, когда выбрасывается и перехватывается исключение, и когда выдается исключение, которое не перехватывается этим блоком try.Единственное, что помешает его выполнению, - это если программа вообще не может покинуть блок try;внутри него бесконечный цикл, или процесс, убиваемый каким-либо способом, который препятствует нормальной обработке, или что-то в этом порядке.Я почти уверен, что даже если вы выйдете из процесса из блока try, блок finally будет выполнен до того, как процесс на самом деле умрет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...