Sobes.tech
Junior

Wordt de finally-blok altijd uitgevoerd in een try-catch-constructie?

sobes.tech AI

Antwoord van AI

Nee, niet altijd. finally kan in de volgende gevallen niet worden uitgevoerd:

  • Het beëindigen van de JVM tijdens de uitvoering van het try- of catch-blok. Bijvoorbeeld bij het aanroepen van System.exit().
  • JVM-fout (bijvoorbeeld out of memory error of stack overflow).
  • Een oneindige lus in het try- of catch-blok.
  • Het beëindigen van de thread die het try-catch-finally-blok uitvoert.

In andere gevallen, zelfs als er een unchecked uitzondering wordt gegooid of er wordt geretourneerd uit het try- of catch-blok, wordt het finally-blok uitgevoerd.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("In het try-blok");
            // JVM afsluiten voordat finally wordt uitgevoerd
            // System.exit(0);
            throw new RuntimeException("Forse uitzondering");
        } catch (RuntimeException e) {
            System.out.println("In het catch-blok: " + e.getMessage());
            // Terugkeren uit catch, finally wordt toch uitgevoerd
            // return;
        } finally {
            System.out.println("In het finally-blok"); // Deze code wordt uitgevoerd
        }
        System.out.println("Na try-catch-finally"); // Deze code is mogelijk niet bereikbaar
    }
}