R1cjFdx4IrmHM
Fotografia przedstawia ulicę, na której stoi koparka i biało‑czerwone znaki ostrzegawcze.

I_R_W13A_M01_JAVA Konstruktory i destruktory w Java

Źródło: Matthew Hamilton, domena publiczna.

Destruktory

Destruktor, jak sugeruje nazwa, jest przeciwieństwem konstruktora. Zostaje on najczęściej wywołany automatycznie, tuż przed usunięciem danego obiektu klasy. Ma na celu przygotowanie do fizycznego zwolnienia zajmowanej przez obiekt pamięci. W destruktorze można zawrzeć m.in. instrukcję zamknięcia połączenia z plikiem lub wyrejestrowanie się z innych obiektów. Destruktor nie przyjmuje żadnych argumentów.

Co istotne – podczas gdy klasa może posiadać wiele konstruktorów, destruktor może być tylko jeden.

W języku Java nie używa się destruktorów, czyli metod wywoływanych przez program w celu usunięcia obiektu z pamięci. Wynika to z faktu, że stosuje się w nim szczególną metodę zarządzania pamięcią.

W przypadku języków niskopoziomowych zarządzaniem pamięcią zajmuje się programista. Właśnie on jest odpowiedzialny między innymi za usuwanie niepotrzebnych obiektów z pamięci.

Natomiast po uruchomieniu programu napisanego w języku Java zarządzaniem pamięcią zajmuje się wirtualna maszyna Javy (JVM, ang. Java Virtual Machine), a ściślej mówiąc tzw. garbage collector. Wirtualna maszyna zapobiega wyciekom pamięci, czyli niezamierzonemu zajmowaniu pamięci komputera.

Mechanizm ten jest bardzo wygodny, ponieważ przejmuje część zadań, które musiałby wykonać programista. Z drugiej strony ceną za to jest spowolnienie działania programów (w porównaniu z ich odpowiednikami napisanymi w językach z ręcznym zarządzaniem pamięcią). Obecnie to się zmienia: aplikacje Javy coraz mniej ustępują w szybkości programom utworzonym w językach, w których nie stosuje się automatycznego zarządzania pamięcią.

Mimo wszystko usuwanie niepotrzebnych obiektów jest uważane za dobry nawyk programisty.