Sobes.tech
Junior

Mindig végrehajtódik a finally blokk a try-catch szerkezetben?

sobes.tech MI

Válasz az MI-től

Nem, nem mindig. A finally blokk nem hajtódik végre a következő esetekben:

  • A JVM befejezése a try vagy catch blokk végrehajtása közben. Például, amikor a System.exit() hívásra kerül.
  • JVM hibája (például memóriahiány vagy verem túlcsordulás).
  • Végtelen ciklus a try vagy catch blokkban.
  • A szál befejezése, amely végrehajtja a try-catch-finally blokkot.

Más esetekben, még akkor is, ha unchecked kivétel keletkezik vagy a try vagy catch blokkból visszatérünk, a finally blokk végrehajtásra kerül.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("Try blokkban");
            // JVM kilépése a finally végrehajtása előtt
            // System.exit(0);
            throw new RuntimeException("Kényszerített kivétel");
        } catch (RuntimeException e) {
            System.out.println("Catch blokkban: " + e.getMessage());
            // Visszatérés a catch-ből, a finally mégis végrehajtódik
            // return;
        } finally {
            System.out.println("Finally blokkban"); // Ez a kód végrehajtódik
        }
        System.out.println("Try-catch-finally után"); // Ez a kód nem biztos, hogy eléri
    }
}