Ответ
Ключевое слово finally в Java используется в блоке try-catch для выполнения кода, который должен быть выполнен в любом случае, независимо от того, было ли выброшено исключение или нет.
Пример:
try {
// Код, который может вызвать исключение
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Деление на ноль!");
} finally {
System.out.println("Этот блок выполнится всегда.");
}
Зачем нужно?
- Освобождение ресурсов: Гарантированное закрытие файлов, соединений с БД, сетевых сокетов.
- Гарантированное выполнение критически важного кода: Логирование, завершение транзакций, сброс флагов.
Даже если в try или catch есть return, continue или break, блок finally выполнится перед выходом из метода или цикла.
Ответ 18+ 🔞
Давай разберёмся, что это за зверь такой — finally. Представь, ты пошёл в магазин за пивом. Это твой try-блок.
try {
// Иду за пивом
goToShopForBeer();
}
Но по дороге тебя может огреть исключение — например, встретится бывшая и устроит сцену. Это catch.
catch (ExGirlfriendException e) {
System.out.println("Всё пропало, идём домой без пива и в депрессии.");
}
И вот тут вступает наш герой — finally. Это как твой внутренний долг, который ты обязан выполнить, даже если всё пошло по пизде. Например, вынести мусор, который ты обещал ещё утром.
finally {
System.out.println("Выношу мусор. Потому что надо. Всегда.");
}
Суть в чём? Код в finally выполнится при любом раскладе. Пиво купил — вынес мусор. Бывшая наорала — всё равно вынес мусор, сквозь слёзы. Даже если ты в блоке try такой: "Всё, я возвращаюсь домой (return)" — тебя всё равно сначала заставят мусор вынести, а уж потом отпустят. Жёстко, но справедливо.
Где это реально нужно? Ну, ёпта, везде, где ты что-то открыл или занял. Файл, соединение с базой, сокет — это всё ресурсы, которые жрут память. Их надо закрывать, даже если посередине работы всё накрылось медным тазом.
Connection conn = null;
try {
conn = openDatabaseConnection(); // Открыли
doSomeCriticalShit(conn); // Работаем
} catch (SQLException e) {
System.out.println("Всё сломалось, охуенно!");
} finally {
// А вот это — святое. Закрываем, даже если выше всё упало.
if (conn != null) {
conn.close(); // Сказали "закрой" — закрой, распиздяй!
}
}
Если этого не сделать, будут утечки, сервер упадёт, админ прийдёт с вилкой... короче, finally — это твой страховочный ремень от самого себя. Ставь всегда, когда есть что чистить. Волнение ебать, но без него никуда.