Sobes.tech
Middle

Τι είναι οι λέξεις-κλειδιά final και finalize στη Java, και ποια είναι η διαφορά τους;

sobes.tech AI

Απάντηση από AI

final - λέξη-κλειδί για την ένδειξη αμεταβλητότητας:

  • Μεταβλητή: Η αναφορά ή η τιμή δεν μπορεί να αλλάξει μετά την αρχικοποίηση.
  • Μέθοδος: Η μέθοδος δεν μπορεί να υπερισχύσει σε υποκείμενη κλάση.
  • Κλάση: Η κλάση δεν μπορεί να κληρονομηθεί.

finalize() - μέθοδος που καλείται από τον συλλέκτη απορριμμάτων (Garbage Collector) πριν διαγραφεί ένα αντικείμενο από τη μνήμη. Βρίσκεται στην κλάση Object και προορίζεται για απελευθέρωση εξωτερικών πόρων.

Διαφορές:

final finalize()
Λέξη-κλειδί Μέθοδος
Δείχνει αμεταβλητότητα Καλείται πριν από τη διαγραφή του αντικειμένου
Σχετίζεται με την δήλωση Σχετίζεται με τον κύκλο ζωής του αντικειμένου
Εφαρμόζεται σε μεταβλητές, μεθόδους, κλάσεις Μόνο σε αντικείμενα

Παράδειγμα χρήσης του final:

public class FinalExample {
    final int finalVariable = 10;

    final void finalMethod() {
        // αμετάβλητη λογική μεθόδου
    }
}

final class FinalClass {
    // περιεχόμενο
}

Παράδειγμα χρήσης του finalize():

public class FinalizeExample {
    @Override
    protected void finalize() throws Throwable {
        try {
            // Καθαρισμός εξωτερικών πόρων, π.χ. κλείσιμο σύνδεσης
            System.out.println("Τελειώνει το αντικείμενο FinalizeExample...");
        } finally {
            super.finalize(); // Πάντα καλείτε το super.finalize()
        }
    }
}

Σημαντικό: Η χρήση του finalize() δεν συνιστάται στη σύγχρονη Java λόγω απρόβλεπτου χρόνου εκτέλεσης και πιθανών προβλημάτων απόδοσης. Για διαχείριση πόρων, προτιμάται η χρήση μπλοκ try-with-resources.