Referencje

Referencje to innymi słowy zmienne typów obiektowych. Są to zmienne, których wartością jest wskaźnik na obiekt ustalonego typu (zależnego od typu referencji) albo wartość null. Wartość null to specjalna wartość zmiennych referencyjnych, która to wartość oznacza, że nie jest to wskaźnik na żaden obiekt.

Kluczem do zrozumienia referencji jest zrozumienie różnicy między referencją samą w sobie a obiektem przez tę referencję wskazywanym. Aby opisać obiekt wystarczy znać typ tego obiektu (jego klasę), oraz stan (wartość) każdej zmiennej tego obiektu. Informacje te zapisane są w pewnym obszarze pamięci. Obszar ten zobrazowano na poniższej ilustracji jako dużą elipsę. W każdej chwili w pamięci zapisany jest stan bardzo wielu obiektów, stąd takich elips na poniższej ilustracji zaznaczono kilka. Referencja z kolei jest niczym innym jak tylko wskazaniem na jeden z tych obiektów, a więc na jeden z tych obszarów pamięci. Referencje oznaczono na poniższym rysunku małymi kółkami. Fakt, że referencje wskazują obiekty zaznaczono jako strzałki. Oczywiście nic nie stoi na przeszkodzie, żeby kilka referencji wskazywało ten sam obiekt. Takie referencje mają po prostu tą samą wartość. Zerknijmy teraz na ten rysunek.

Deklaracja zmiennej typu String o nazwie x i przypisanie jej wartości „Ola” powoduje utworzenie zmiennej referencyjnej x oraz obiektu typu String reprezentującego napis „Ola” i jednoczesne przypisanie do tej referencji wskaźnika na ten obiekt. Przypisanie jakiejś innej zmiennej referencyjnej – zmiennej y – wartości zmiennej x oznacza, że zmienna y będzie wskazywała na ten sam obiekt co zmienna x. Nie jest to operacja na obiekcie wskazywanym przez zmienną referencyjną x, tylko na samej zmiennej. Mamy więc do czynienia z sytuacją pokazaną na kolejnej ilustracji.

Zmienna y miała początkowo wartość null, jako że w deklaracji nie przypisaliśmy jej żadnej wartości. Następnie przypisujemy do tej zmiennej wartość zmiennej x i odtąd obydwie referencje odnoszą się do tego samego obiektu. Możemy teraz wywoływać metody klasy String dla tego obiektu zarówno za pośrednictwem zmiennej x jak i y i będzie to miało dokładnie ten sam skutek. Koniec końców metody te będą wywoływane na tym samym obiekcie klasy String.

Często zdaża się, że potrzebujemy odwołać się w implementowanym kodzie do obiektu dla którego ten kod się wykonuje. To tak, jakbyśmy rozmawiając z grupą osób chcieli powiedzieć coś o sobie – używamy wtedy słowa ‚ja’. W Javie takim odpowiednikiem słowa ‚ja’, tj. wskaźnikiem na samego siebie jest wskaźnik this. W jakich konkretnie okolicznościach wskaźnik this jest przydatny nauczymy się z biegiem kursu. Póki co nie przejmujmy się jeśli nie specjalnie rozumiemy do czego to służy.

Subscribe
Powiadom o
guest
6 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments