Ответ
Для этого используется блок finally. Код внутри finally выполнится всегда, независимо от того:
- Был ли выполнен блок
tryбез ошибок. - Было ли выброшено и перехвачено (
catch) исключение. - Было ли выброшено и НЕ перехвачено исключение (после выполнения
finallyисключение продолжит распространение).
Пример 1: Выполнение кода после успешной операции
try {
System.out.println("Выполняем основную логику...");
// Код без ошибок
} finally {
System.out.println("Этот блок выполнится ВСЕГДА (даже если try прошёл успешно).");
}
Пример 2: Выполнение кода после перехваченного исключения
try {
int result = 10 / 0; // ArithmeticException
} catch (ArithmeticException e) {
System.out.println("Перехватили ошибку: " + e.getMessage());
} finally {
System.out.println("Этот блок выполнится ВСЕГДА (после catch).");
}
Пример 3: Выполнение кода перед неперехваченным исключением
try {
throw new RuntimeException("Критическая ошибка!");
} finally {
// Этот код выполнится ПЕРЕД тем, как исключение "вылетит" из метода.
System.out.println("Освобождаем ресурсы перед завершением.");
}
// Сюда управление не перейдёт
Типичное использование finally: закрытие файловых потоков (FileInputStream), сетевых соединений, освобождение прочих внешних ресурсов (например, с помощью try-with-resources).