Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

Не, не винаги. finally може да не бъде изпълнен в следните случаи:

  • Завършване на JVM по време на изпълнение на блока try или catch. Например, при извикване на System.exit().
  • Грешка на JVM (например, изчерпване на памет или препълване на стек).
  • Безкраен цикъл в блока 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"); // Този код може да не бъде достигнат
    }
}