Sobes.tech
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.