Каково назначение блоков try, catch и finally в Java?

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

Ответ

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

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

Базовый пример:

try {
    // Код, который может вызвать исключение
    FileReader file = new FileReader("test.txt");
    int data = file.read();
} catch (FileNotFoundException e) {
    // Обработка конкретного типа исключения
    System.err.println("Файл не найден: " + e.getMessage());
} catch (IOException e) {
    // Обработка другого типа исключения
    System.err.println("Ошибка ввода-вывода: " + e.getMessage());
} finally {
    // Код для освобождения ресурсов (выполнится в любом случае)
    if (file != null) {
        try { file.close(); } catch (IOException e) { /* игнорируем */ }
    }
    System.out.println("Операция завершена.");
}

Критически важный нюанс: блок finally выполняется даже если в try или catch встречается оператор return, break или continue. Это делает его идеальным местом для закрытия файлов, сетевых соединений и т.д.

Современная альтернатива: для автоматического закрытия ресурсов, реализующих AutoCloseable, используйте try-with-resources.