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.

Konstruktory w języku Java

W języku Java konstruktory pełnią funkcję zgodną z założeniami programowania obiektowego. Konstruktor to metoda wywoływana w trakcie tworzenia obiektu, najczęściej służąca do nadania początkowych wartości polom w klasie. Każda klasa ma swój domyślny, pusty konstruktor, który nie zmienia żadnych pól. W przypadku, kiedy programista definiuje własny konstruktor, ten domyślny znika – może jednak zostać dodany ręcznie. Konstruktory mają dwie cechy specjalne, które wyróżniają je na tle innych metod:

  • nazwy konstruktorów są zawsze takie same, jak nazwa klasy, w której się znajdują,

  • konstruktory nie zwracają żadnej wartości.

Zdefiniowany w języku Java konstruktor należący do klasy Czlowiek:

Linia 1. class Czlowiek. Linia 2. otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk Pola asterysk prawy ukośnik. Linia 5. String imie średnik. Linia 6. String nazwisko średnik. Linia 7. int wiek średnik. Linia 10. prawy ukośnik asterysk Konstruktor asterysk prawy ukośnik. Linia 12. Czlowiek otwórz nawias okrągły String kon podkreślnik imie przecinek String kon podkreślnik nazwisko przecinek int kon podkreślnik wiek zamknij nawias okrągły. Linia 13. otwórz nawias klamrowy. Linia 14. imie znak równości kon podkreślnik imie średnik. Linia 15. nazwisko znak równości kon podkreślnik nazwisko średnik. Linia 16. wiek znak równości kon podkreślnik wiek średnik. Linia 17. zamknij nawias klamrowy. Linia 18. zamknij nawias klamrowy.
Ważne!

Zwróć uwagę, że w języku Java definicji klasy nie kończy się znakiem średnika (;) po ostatnim prawym nawiasie klamrowym.

Samodzielnie zdefiniowane konstruktory ułatwiają przypisywanie wartości polom obiektu. Przedstawiony konstruktor Czlowiek() można dodatkowo ulepszyć.

Obecnie musimy nadać nazwy argumentom, których wartości zostaną przypisane odpowiednim polom (przykładowo: argument o nazwie kon_imie odpowiada polu imie). Wprowadza to bałagan w kodzie.

Usuniemy tę niedogodność, używając w definicji konstruktora specjalnej referencji this. Wskazuje ona obiekt, dla którego wywołana została metoda (w przypadku wywołania konstruktora będzie to powstająca właśnie instancja klasy Czlowiek).

Zmodyfikujmy zatem klasę Czlowiek:

Linia 1. class Czlowiek. Linia 2. otwórz nawias klamrowy. Linia 3. prawy ukośnik asterysk Pola asterysk prawy ukośnik. Linia 5. String imie średnik. Linia 6. String nazwisko średnik. Linia 7. int wiek średnik. Linia 10. prawy ukośnik asterysk Konstruktor asterysk prawy ukośnik. Linia 12. Czlowiek otwórz nawias okrągły String imie przecinek String nazwisko przecinek int wiek zamknij nawias okrągły. Linia 13. otwórz nawias klamrowy. Linia 14. this kropka imie znak równości imie średnik prawy ukośnik prawy ukośnik zasada jest cały czas taka sama minus zamknij nawias ostrokątny apostrof nazwa podkreślnik obiektu kropka nazwa podkreślnik pola apostrof. Linia 15. this kropka nazwisko znak równości nazwisko średnik. Linia 16. this kropka wiek znak równości wiek średnik. Linia 17. zamknij nawias klamrowy. Linia 18. zamknij nawias klamrowy.

Konstruktor wygląda bardziej czytelnie niż poprzednio, a działa tak samo.

Warto wspomnieć, że definicje klas w języku Java mogą zawierać wiele konstruktorów. Muszą się one jednak różnić albo liczbą przyjmowanych argumentów, albo ich typem. Właśnie na podstawie liczby lub typu argumentów program dobiera odpowiedni konstruktor podczas tworzenia obiektu.

Pamiętajmy, że konstruktor domyślny tworzony automatycznie (chociaż może on zostać zdefiniowany manualnie), nie ma żadnych argumentów. Oto jego budowa:

Linia 1. Czlowiek otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy zamknij nawias klamrowy prawy ukośnik prawy ukośnik konstruktor domyślny klasy apostrof Czlowiek apostrof.