Когда я должен использовать блок finally в Java try-catch-finally - PullRequest
14 голосов
/ 13 сентября 2011

Когда мне следует использовать фрагмент кода A вместо фрагмента B (т.е. каковы преимущества использования фрагмента A)?:

Фрагмент A:

try {
    // codeblock A
}
catch (Exception ex) {
    // codeblock B
}
finally {
    //codeblock C
}

Фрагмент B:

try {
    // codeblock A
}
catch (Exception ex) {
    // codeblock B
}

//codeblock C

Ответы [ 5 ]

15 голосов
/ 13 сентября 2011

Используйте блок finally, если у вас есть код, который должен выполняться независимо от того, выдано ли исключение.

Хорошим примером является очистка дефицитных ресурсов, таких как соединения с базой данных.

3 голосов
/ 13 сентября 2011

Очевидным случаем является случай, когда вы ре-рейзите или выбрасываете другое исключение в блоке catch.

1 голос
/ 13 сентября 2011

Вы должны почти всегда использовать фрагмент с блоком finally, если у вас есть ресурсы, которые необходимо очистить как в успешном, так и в случае ошибок.Типичным примером является объект соединения jdbc, который всегда должен быть закрыт (очищен) в блоке finally.

1 голос
/ 13 сентября 2011

Это полезно, если вам нужно выполнить некоторую очистку, например, закрыть соединение с базой данных. Поскольку "finally" выполняется всегда, вам не нужно делать подверженные ошибкам копирование-вставку одного и того же кода в конце попытки, а также в одном или нескольких блоках catch.

0 голосов
/ 09 августа 2015

Представьте себе оператор return внутри блока catch: блок C будет выполняться не во фрагменте B , а во фрагменте A Это будет, прежде чем вернуться.

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