Ответ
Конструкция 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.