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"); // Αυτός ο κώδικας μπορεί να μην φτάσει
    }
}