← Назад к вопросам

Нужно ли всегда писать finally с catch?

1.3 Junior🔥 101 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Нет, finally не требуется всегда при catch

Finally блок — это не обязательная часть конструкции try-catch. Ты можешь использовать:

  • try-catch без finally
  • try-finally без catch (для ресурсов)
  • try-catch-finally вместе

Когда finally нужен

Finally выполняется всегда, независимо от того, было ли исключение:

try {
    // бизнес-логика
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("Ошибка: " + e.getMessage());
} finally {
    System.out.println("Это выполнится в любом случае");
}

Случаи использования finally:

  • Закрытие ресурсов (файлы, соединения с БД)
  • Очистка временных данных
  • Логирование завершения операции
  • Восстановление состояния приложения

Когда finally не нужен

// Достаточно только catch
try {
    String data = fetchData();
} catch (IOException e) {
    logger.error("Ошибка при загрузке", e);
}

Современный подход — try-with-resources

В Java 7+ вместо finally лучше использовать try-with-resources:

try (FileReader reader = new FileReader("file.txt")) {
    // работа с ресурсом
} catch (IOException e) {
    logger.error("Ошибка при чтении файла", e);
}
// reader закроется автоматически

Это безопаснее и читабельнее, чем finally + close().

Важные моменты

  • Finally выполняется даже при return или break в catch
  • Если в finally выполнить return, он перекроет исключение из try/catch
  • В finally не нужно генерировать новые исключения (плохая практика)

Вывод: Finally нужен только для очистки ресурсов в старом коде. В новых проектах используй try-with-resources — это стандарт Java 7+.