Tworzenie obiektów - 1

– Cześć, to znowu ja – twój ulubiony nauczyciel. Robisz tak wielkie postępy, że postanowiłem opowiedzieć Ci o obiektach i o tym, jak z nimi pracować.

Aby utworzyć obiekt, musisz wpisać słowo kluczowe „new”, a następnie nazwę typu (nazwę klasy). Załóżmy, na przykład, że mamy klasę o nazwie 'Kot':

Kod Opis
Kot kot;
Deklaruje zmienną kot będącą referencją do Kot. Zmienna kot ma wartość null.
new Kot();
Tworzy obiekt Kot.
Kot kot = new Kot();
Tworzy zmienną kot będącą referencją do Kot.
Tworzy nowy obiekt Kot. Przypisuje do zmiennej kot referencję do nowo utworzonego obiektu.
Kot kotek = new Kot();
Kot smoluch = new Kot();
Tworzone są dwa obiekty. Referencje do nich są przypisywane do dwóch różnych zmiennych.
Kot kotek = new Kot();
Kot smoluch = new Kot();

smoluch = kotek;
Tworzone są dwa obiekty. Referencje do nich są przypisywane do dwóch różnych zmiennych.

Następnie przypisujemy zmiennej smoluch wartość równą referencji do obiektu, do którego odwołuje się zmienna kotek. Obie zmienne odnoszą się teraz do pierwszego z utworzonych obiektów.
(Ponieważ do drugiego obiektu nie ma już nigdzie odniesienia, jest on teraz uważany za nieużytek)

Kot kotek = new Kot();
Kot smoluch = null;

smoluch = kotek;

kotek = null;
Tworzony jest jeden obiekt Kot i referencja do niego jest przypisywana do pierwszej zmiennej (kotek). Druga zmienna (smoluch) przechowuje pustą (null) referencję.

Obie zmienne odwołują się do tego samego obiektu.

Teraz tylko smoluch, ale nie kotek, odnosi się do obiektu.

– Co by się stało, gdybyśmy stworzyli obiekt i nie zapisali referencji do niego w żadnej zmiennej?

– Jeżeli po prostu utworzymy obiekt bez przypisywania go do zmiennej, maszyna Java utworzy go, a następnie zadeklaruje jako nieużytek/śmieć (obiekt nieużywany). Po chwili obiekt ten zostanie usunięty przez proces „odśmiecania” (garbage collection).

– Jak pozbywam się niepotrzebnego już obiektu?

– Nie robisz tego. Gdy tylko do obiektu nie odnosi się żadna zmienna, jest on oznaczany jako nieużytek i niszczony przez maszynę Java w następnym cyklu zbierania nieużytków/odśmiecania pamięci.

Tak długo, jak istnieje przynajmniej jedna referencja do obiektu, jest on uważany za aktywny i nie zostaje usunięty. Jeżeli chcesz pozbyć się obiektu wcześniej, możesz wyczyścić wszystkie referencje do niego, przypisując wartość null wszystkim zmiennym, które się do niego odwołują.

– Rozumiem. W porównaniu do kilku ostatnich lekcji wygląda to dość prosto.

– Diego nie spał całą noc, wymyślając dla Ciebie zadania. Robił to specjalnie z myślą o Tobie. Ma niezłe poczucie humoru, co?