Middle
Czym są słowa kluczowe final i finalize w Java i na czym polega ich różnica?
sobes.tech AI
Odpowiedź od AI
final - słowo kluczowe do oznaczania niezmienności:
- Zmienna: Odwołanie lub wartość nie mogą być zmienione po inicjalizacji.
- Metoda: Metoda nie może być nadpisana w klasie pochodnej.
- Klasa: Klasa nie może być dziedziczona.
finalize() - metoda wywoływana przez garbage collector przed usunięciem obiektu z pamięci. Znajduje się w klasie Object i służy do zwalniania zasobów zewnętrznych.
Różnice:
final |
finalize() |
|---|---|
| Słowo kluczowe | Metoda |
| Oznacza niezmienność | Wywoływana przed usunięciem obiektu |
| Związane z deklaracją | Związane z cyklem życia obiektu |
| Dotyczy zmiennych, metod, klas | Tylko obiektów |
Przykład użycia final:
public class FinalExample {
final int finalVariable = 10;
final void finalMethod() {
// niezmienna logika metody
}
}
final class FinalClass {
// zawartość
}
Przykład użycia finalize():
public class FinalizeExample {
@Override
protected void finalize() throws Throwable {
try {
// Sprzątanie zasobów zewnętrznych, np. zamknięcie połączenia
System.out.println("Finalizing FinalizeExample object...");
} finally {
super.finalize(); // Zawsze wywołuj super.finalize()
}
}
}
Ważne: Użycie finalize() nie jest zalecane w nowoczesnej Javie ze względu na nieprzewidywalny czas wykonania i potencjalne problemy z wydajnością. Do zarządzania zasobami lepsze są bloki try-with-resources.