Можно ли использовать блок try-finally без catch в Java?

«Можно ли использовать блок try-finally без catch в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. Конструкция try-finally без catch допустима, когда не требуется обработка исключений, но необходимо гарантированно выполнить код освобождения ресурсов (закрытие файлов, соединений и т.д.). Исключение, возникшее в блоке try, не перехватывается и пробрасывается выше по стеку вызовов.

Пример:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
try {
    String line = reader.readLine();
    // работа с данными
} finally {
    reader.close(); // ресурс будет закрыт даже при исключении
}

Почему это работает? Блок finally выполняется всегда, независимо от того, было выброшено исключение в try или нет.

Важно:

  • Для работы с ресурсами в современном Java предпочтительнее использовать try-with-resources.
  • Использование try-finally без catch оправдано, когда вы сознательно хотите, чтобы исключение распространялось дальше, а ваша задача — только обеспечить cleanup.