Catch будет не запускаться после выполнения любых частей блока try catch. Catch будет only , если выброшено исключение и блок catch может обработать этот тип исключения.
Блок finally - это тот, который будет запускаться после завершения блока try. Под завершением я подразумеваю, что он нормально завершается или каким-то образом завершается (выходит из цикла, возвращается из метода, вызывает исключение и т. Д.)
Если вы поместите код за пределы блока finally и будет сгенерировано исключение (например), то код может не выполняться, если исключение не перехвачено, или оно переброшено в блоке перехвата, или выдается новое исключение в блоке улова. Если вы поместите его в блок finally, он будет выполнен.
По сути, очистка должна быть помещена в блок finally.