Когда мне следует использовать фрагмент кода 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
Используйте блок finally, если у вас есть код, который должен выполняться независимо от того, выдано ли исключение.
Хорошим примером является очистка дефицитных ресурсов, таких как соединения с базой данных.
Очевидным случаем является случай, когда вы ре-рейзите или выбрасываете другое исключение в блоке catch.
catch
Вы должны почти всегда использовать фрагмент с блоком finally, если у вас есть ресурсы, которые необходимо очистить как в успешном, так и в случае ошибок.Типичным примером является объект соединения jdbc, который всегда должен быть закрыт (очищен) в блоке finally.
Это полезно, если вам нужно выполнить некоторую очистку, например, закрыть соединение с базой данных. Поскольку "finally" выполняется всегда, вам не нужно делать подверженные ошибкам копирование-вставку одного и того же кода в конце попытки, а также в одном или нескольких блоках catch.
Представьте себе оператор return внутри блока catch: блок C будет выполняться не во фрагменте B , а во фрагменте A Это будет, прежде чем вернуться.
return