Sobes.tech
Junior

Kas finally plokk alati täidetakse try-catch konstruktsioonis?

sobes.tech AI

Vastus AI-lt

Ei, mitte alati. finally võib jääda täitmata järgmistes olukordades:

  • JVM lõpetamine try või catch ploki ajal. Näiteks, kui kutsutakse System.exit().
  • JVM viga (näiteks mälu puudus või virna üleküllus).
  • Lõpmatu tsükkel try või catch plokis.
  • Töötlusploki try-catch-finally lõpetamine.

Teistes olukordades, isegi kui visatakse välja unchecked erind või tagastatakse try või catch plokist, täidetakse finally plokk.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("Try plokis");
            // JVM väljumine enne `finally` täitmist
            // System.exit(0);
            throw new RuntimeException("Võimustatud erind");
        } catch (RuntimeException e) {
            System.out.println("Catch plokis: " + e.getMessage());
            // Tagastamine catch-st, `finally` täidetakse ikkagi
            // return;
        } finally {
            System.out.println("`Finally` plokis"); // See kood täidetakse
        }
        System.out.println("Pärast try-catch-finally"); // See kood võib jääda täitmata
    }
}