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.