Treść metody finalize

0

Czy może mi ktoś podpowiedzieć przykład kodu dla metody finalize()? Z tym, że nie chodzi mi o wypisywanie komunikatów w stylu "obiekt został zamknięty". Chodzi mi raczej o przykład zdefiniowanych w java metod, które służą do tego czyszczenia.

Np. w c# istnieje metoda dispose. A w javie?

2

Finalize służy tylko i wyłącznie do zwalniania pamięci alokowanej natywnie. W mojej 3 letniej karierze jeszcze nie spotkałem się z potrzebą jej użycia. Dlatego najlepiej zapomnij że ona istnieje.

0
krzysiek050 napisał(a):

Finalize służy tylko i wyłącznie do zwalniania pamięci alokowanej natywnie. W mojej 3 letniej karierze jeszcze nie spotkałem się z potrzebą jej użycia. Dlatego najlepiej zapomnij że ona istnieje.

Super. Cieszy mnie to, bo to oznacza, że mogę spokojnie jechać dalej. Jednak przychodzi mi do głowy wniosek - czy to oznacza, że tej metody w ogóle nie trzeba definiować? Czy to oznacza, że ona działa samoistnie? Tzn. coś tak, jak domyślny konstruktor przy tworzeniu obiektu?

1

Finalize to metoda a nie destruktor. Ona istnieje w każdym obiekcie, a ty możesz ją przeciążyć. Jeżeli tego nie zrobisz, to zostanie wzięta pusta implementacja z klasy Object.

4

@finito, tak działa ona samoistnie w jakiś 99% przypadków. Pozostałe 1% to poza wspomnianym wcześniej zwalnianiem pamięci alokowanej "ręcznie" (natywnie czy prze Unsafe) to rozgłaszanie powiadomień o końcu życia obiektu.
Należy jednak pamiętać, że metoda ta nie musi zostać wykonana. Specyfikacja nie gwarantuje jej wywołania w momencie niszczenia obiektu. Zatem poleganie na jakimkolwiek kodzie wewnątrz tej metody jest niezbyt dobrą praktyką.

1 użytkowników online, w tym zalogowanych: 0, gości: 1