Co to jest Konstruktor w Javie?
CONSTRUCTOR to specjalna metoda, która służy do inicjalizacji nowo utworzonego obiektu i jest wywoływana zaraz po przydzieleniu pamięci dla obiektu. Można go użyć do zainicjowania obiektów do żądanych wartości lub wartości domyślnych w momencie tworzenia obiektu. Koder nie musi pisać konstruktora dla klasy.
Jeśli dla klasy nie podano konstruktora zdefiniowanego przez użytkownika, kompilator inicjuje zmienne składowe do wartości domyślnych.
- numeryczne typy danych są ustawione na 0
- typy danych char są ustawione na znak null („\ 0”)
- zmienne odniesienia są ustawione na null
W tym samouczku nauczysz się:
- Zasady tworzenia konstruktora
- Przeciążanie konstruktorów w Javie
- Łączenie konstruktora
Zasady tworzenia konstruktora Java
- Ma taką samą nazwę jak klasa
- Nie powinien zwracać wartości, która nawet nie jest void
Przykład 1 : Utwórz swój pierwszy konstruktor w Javie
Krok 1) Wpisz następujący program konstruktora w edytorze Java.
class Demo{int value1;int value2;Demo(){value1 = 10;value2 = 20;System.out.println("Inside Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){Demo d1 = new Demo();d1.display();}}
Krok 2) Zapisz, uruchom i skompiluj program konstruktora w Javie i obserwuj dane wyjściowe.
Wynik:
Inside ConstructorValue1 === 10Value2 === 20
Przeciążanie konstruktorów w Javie
Przeciążanie konstruktorów języka Java to technika, w której klasa może mieć dowolną liczbę konstruktorów różniących się listą parametrów. Kompilator rozróżnia te konstruktory, biorąc pod uwagę liczbę parametrów na liście i ich typ.
Przykłady prawidłowych konstruktorów dla klasy Account to
Account(int a);Account (int a,int b);Account (String a,int b);
Przykład 2 : Zrozumienie przeciążania konstruktorów w Javie
Krok 1) Wpisz kod w edytorze.
class Demo{int value1;int value2;/*Demo(){value1 = 10;value2 = 20;System.out.println("Inside 1st Constructor");}*/Demo(int a){value1 = a;System.out.println("Inside 2nd Constructor");}Demo(int a,int b){value1 = a;value2 = b;System.out.println("Inside 3rd Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){Demo d1 = new Demo();Demo d2 = new Demo(30);Demo d3 = new Demo(30,40);d1.display();d2.display();d3.display();}}
Krok 2) Zapisz, skompiluj i uruchom kod.
Krok 3) Błąd =?. Spróbuj usunąć błąd przed przejściem do następnego kroku przeciążania konstruktora Java
Krok 4) Każda klasa ma domyślnego konstruktora w Javie. Domyślny przeciążony konstruktor Java dla klasy Demo to Demo () . Jeśli nie dostarczysz tego konstruktora, kompilator utworzy go za Ciebie i zainicjuje zmienne do wartości domyślnych. Możesz zastąpić ten domyślny konstruktor i zainicjować zmienne do żądanych wartości, jak pokazano w przykładzie 1.
Ale jeśli określisz sparametryzowany konstruktor, taki jak Demo (int a), i chcesz użyć domyślnego konstruktora Java Demo (), musisz go określić.
Innymi słowy, w przypadku zastąpienia konstruktora przeciążającego w Javie i chcesz użyć domyślnego konstruktora Java, należy go określić.
Krok 5) Odkomentuj wiersz nr 4-8. Zapisz, skompiluj i uruchom kod.
Łączenie konstruktora
Rozważmy scenariusz, w którym klasa bazowa jest rozszerzana przez dziecko. Za każdym razem, gdy tworzony jest obiekt klasy potomnej, najpierw wywoływany jest konstruktor klasy nadrzędnej. Nazywa się to łączeniem konstruktora.
Przykład 3: zrozumienie tworzenia łańcuchów konstruktorów
Krok 1) Skopiuj poniższy kod do edytora.
class Demo{int value1;int value2;Demo(){value1 = 1;value2 = 2;System.out.println("Inside 1st Parent Constructor");}Demo(int a){value1 = a;System.out.println("Inside 2nd Parent Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){DemoChild d1 = new DemoChild();d1.display();}}class DemoChild extends Demo{int value3;int value4;DemoChild(){//super(5);value3 = 3;value4 = 4;System.out.println("Inside the Constructor of Child");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);System.out.println("Value1 === "+value3);System.out.println("Value2 === "+value4);}}
Krok 2) Uruchom kod. Dzięki łańcuchowaniu konstruktorów, gdy tworzony jest obiekt klasy potomnej DemoChild, najpierw wywoływany jest konstruktor Demo () klasy nadrzędnej, a później konstruktor DemoChild () dziecka. Oczekiwany wynik =
Inside 1st Parent ConstructorInside the Constructor of ChildValue1 === 1Value2 === 2Value1 === 3Value2 === 4
Krok 3) Możesz zauważyć, że konstruktor klasy nadrzędnej Demo został zastąpiony. A co, jeśli chcesz wywołać nadpisany konstruktor Demo (int a) zamiast domyślnego konstruktora Demo (), gdy tworzony jest twój obiekt podrzędny?
W takich przypadkach możesz użyć słowa kluczowego „super”, aby wywołać nadpisane konstruktory klasy nadrzędnej.
Składnia:-
super();--or--super(parameter list);
Przykład: Jeśli twój konstruktor jest taki jak Demo (String Name, int a) , określisz super ("Java", 5) Jeśli zostanie użyte, słowo kluczowe super musi być pierwszą linią kodu w konstruktorze klasy potomnej.
Krok 4) Odkomentuj wiersz nr 26 i uruchom kod. Obserwuj dane wyjściowe.
Wynik:
Inside 2nd Parent ConstructorInside the Constructor of ChildValue1 === 5Value2 === 0Value1 === 3Value2 === 4