Ответ
Конструкция try-catch-finally — это основной механизм обработки исключений (checked и unchecked) в Java.
Структура и назначение блоков:
try— содержит код, в котором могут возникнуть исключения.catch— перехватывает и обрабатывает исключения указанного типа (или его подтипы). Может быть несколько блоковcatch.finally— блок, который выполняется всегда, независимо от того, было выброшено исключение или нет. Используется для гарантированного освобождения ресурсов (закрытие файлов, соединений с БД).
Пример:
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
// Чтение файла...
int data = fis.read();
// Может выбросить FileNotFoundException, IOException
} catch (FileNotFoundException e) {
System.err.println("Файл не найден: " + e.getMessage());
} catch (IOException e) {
System.err.println("Ошибка ввода-вывода: " + e);
} finally {
// Этот код выполнится в любом случае
if (fis != null) {
try {
fis.close(); // Гарантированное закрытие ресурса
} catch (IOException e) {
System.err.println("Ошибка при закрытии файла");
}
}
}
Важные особенности:
- Блок
finallyвыполняется даже при использованииreturn,breakилиcontinueвнутриtryилиcatch. finallyне выполняется только в двух случаях:- При вызове
System.exit(). - При фатальной ошибке JVM (например,
OutOfMemoryError).
- При вызове
- В Java 7+ рекомендуется использовать try-with-resources для автоматического закрытия ресурсов, реализующих
AutoCloseable.
Try-with-resources (современная альтернатива):
try (FileInputStream fis = new FileInputStream("file.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
String line = br.readLine();
// Ресурсы закроются автоматически здесь
} catch (IOException e) {
// Обработка исключения
}