Назад к вопросам
Junior
78
questionbank

Всегда ли выполняется блок finally в конструкции try-catch?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Нет, не всегда. finally может не выполниться в следующих случаях:

  • Завершение работы JVM во время выполнения блока try или catch. Например, при вызове System.exit().
  • Сбой JVM (например, out of memory error или переполнение стека).
  • Бесконечный цикл в блоке try или catch.
  • Завершение потока, выполняющего блок try-catch-finally.

В остальных случаях, даже при выбросе unchecked исключения или возврате из блока try или catch, блок finally будет выполнен.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("В блоке try");
            // Выход из JVM до выполнения finally
            // System.exit(0);
            throw new RuntimeException("Принудительное исключение");
        } catch (RuntimeException e) {
            System.out.println("В блоке catch: " + e.getMessage());
            // Возврат из catch, finally все равно выполнится
            // return;
        } finally {
            System.out.println("В блоке finally"); // Этот код выполняется
        }
        System.out.println("После try-catch-finally"); // Этот код может быть недостижим
    }
}