Я попытаюсь привести еще один пример, где мы находим этот шаблон полезным.В сущности, говорится: «Восстановите (обычно) глобальные ресурсы в предсказуемое состояние после того, как блок try / catch будет выполнен с их использованием».
Пример: Мы используем пул соединений с БД => Мы понимаем созданиеновые соединения стоят дорого, и мы хотели бы повторно использовать ограниченный пул соединений.Таким образом, блок try в некотором классе сервлетов начинается с Connection, создает его Statement и ResultSet, записывает результаты в ObjectOutputStream и т. Д. Это может вызвать SQLException (кто-то удалил бесполезный столбец в таблице db, и sql теперь не работает) и / илиIOException (клиентское соединение http разорвано, пока сервлет все еще пишет в него), которое мы перехватываем в блоке catch.Теперь, вне зависимости от того, сгенерировано исключение или нет, мы хотим закрыть соединение с БД, чтобы другие потоки могли его использовать.Это закрытие выполняется в блоке finally.
Надеюсь, это поможет, - MS