Łańcuch konstruktorów w Javie z przykładami i implementacją

Opublikowany: 2023-06-05

W Javie Konstruktory można rozumieć jako bloki kodu używane do inicjowania nowo tworzonych obiektów. Konstruktor jest podobny do metod instancji w Javie. Istnieje jednak zasadnicza różnica między Konstruktorami a metodami w Javie — podczas gdy metody mają typ zwracany, Konstruktory nie mają żadnego określonego typu zwracanego. Programiści często odwołują się do Konstruktorów jako specjalnego typu metody w Javie.

Konstruktory w Javie mają taką samą nazwę jak klasa i wyglądają następująco:

klasa publiczna mój program{

//To jest konstruktor

mójProgram(){

}

..

}

Kiedy konstruktor jest wywoływany z poziomu innego konstruktora, wtedy w Javie występuje łączenie konstruktorów. Zanim jednak zagłębimy się w łańcuch konstruktorów, najpierw rzućmy okiem na to, jak działają konstruktory w Javie, wraz z kilkoma przykładami, które pomogą Ci lepiej zrozumieć.

Spis treści

Jak działają konstruktory w Javie?

Aby zrozumieć, jak działają konstruktory, spójrzmy na przykład. Załóżmy, że mamy klasę o nazwie myProgram. Teraz, gdy stworzymy obiekt tej klasy, będziemy musieli napisać następującą instrukcję:

mojProgram obj = nowy mojProgram()

Jak widać, słowo kluczowe new użyte w powyższym przykładzie tworzy obiekt myProgram i wywołuje konstruktor w celu zainicjowania tego nowo utworzonego obiektu.

Jeśli brzmi to dla ciebie trochę myląco, nie martw się. Przyjrzyjmy się prostemu programowi konstruktora w Javie, aby lepiej zrozumieć działanie konstruktorów w Javie.

Podstawowy program konstruktora w Javie

Spójrz na następujący fragment kodu Java, który używa konstruktorów:

test klasy publicznej{

Książka sznurkowa;

//Konstruktor

Test(){

this.book = „Buszujący w zbożu”;

}

public static void main(String[] args) {

Obiekt testowy = nowy Test();

System.out.println(obiekt.książka);

}

}

Wyjście:

Buszujący w zbożu

W powyższym programie stworzyliśmy obiekt o nazwie 'obj' naszej klasy Program. Następnie wydrukowaliśmy nazwę zmiennej instancji tego nowo utworzonego obiektu. Jak widać na wyjściu, wyjście jest takie samo, jak wartość przekazana do 'book' podczas inicjalizacji Konstruktora.

Pokazuje to, że w momencie utworzenia obiektu obj Konstruktor został automatycznie wywołany. Tutaj użyliśmy słowa kluczowego „this”, aby odnieść się do bieżącego obiektu. Jest też więcej sposobów, aby to zrobić, o czym porozmawiamy w dalszej części artykułu podczas omawiania łączenia konstruktorów.

Po ustaleniu podstaw konstruktora w Javie przejdźmy do łączenia konstruktorów w Javie i tego, jak to działa!

Łańcuch konstruktorów w ramach jednej klasy

Aleczym jest łańcuch konstruktorów w Javie obejmujący pojedynczą klasę?Wywołanie jednego konstruktora z innego w tej samej klasie obejmuje łączenie konstruktorów w ramach tej klasy. Słowo kluczowe „this” jest używane w składni łączenia konstruktorów w obrębie tej samej klasy. Bieżąca instancja klasy jest określana, gdy używane jest „to”. Wykorzystanie łączenia konstruktorów w Javie najlepiej zrozumiećna przykładzie .

Łączenie konstruktorów z klas podstawowych/nadrzędnych

Klasa w Javie może pochodzić od innej klasy; klasa pochodna jest określana jako podklasa, a klasa, z której pochodzi, jest określana jako klasa nadrzędna. Podklasa może mieć własnych konstruktorów i wywoływać konstruktory swojej nadklasy.

Konstruktor nadklasy używa terminu super(), po którym następują wymagane dane wejściowe. Słowo kluczowe super() musi zawsze znajdować się w pierwszym wierszu konstruktora podklasy.

Wywołanie od innego konstruktora, konstruktora

Za pomocą słowa kluczowego this() konstruktor w Javie może wywołać inny konstruktor z tej samej klasy. Pierwszym słowem kluczowym w konstruktorze musi być zawsze this() słowo kluczowe, którego można użyć tylko do wywołania innego konstruktora tego samego typu.

Konstruktor superklasy telefonicznej

Słowo kluczowe super() w Javie umożliwia konstruktorom podklas wywołanie konstruktora nadklasy. Słowo kluczowe super(), którego można użyć tylko do wywołania konstruktora nadklasy podklasy, zawsze musi być pierwszym wierszem konstruktora podklasy.

Programy Java mogą zachowywać się inaczej, jeśli konstruktory są ułożone w innej kolejności. Jeśli klasa ma wiele konstruktorów i jeden z nich używa słowa kluczowego this() do wywołania innego konstruktora, zmiana kolejności konstruktorów może zmienić zachowanie programu.

Inny sposób tworzenia łańcuchów konstruktorów za pomocą bloku init

Używanie bloku inicjalizacyjnego to kolejne podejście do łączenia konstruktorów w Javie .Sekcja kodu znana jako blok inicjalizacyjny jest uruchamiana

Podstawy łączenia konstruktorów w Javie

Kiedy wywołujemy Konstruktor z innego Konstruktora tej samej klasy, to, co się dzieje, jest znane jako Łączenie Konstruktorów. Głównym celem łączenia konstruktorów jest przekazywanie parametrów przez wiele różnych konstruktorów i inicjowanie ich tylko w jednym miejscu. W ten sposób masz szansę zachować wszystkie swoje inicjalizacje w jednym miejscu, podczas gdy różne konstruktory mogą być udostępniane użytkownikom.

Jeśli nie wykonasz łączenia konstruktorów, a dwa różne konstruktory wymagają jednego parametru, będziesz musiał dwukrotnie zainicjować ten parametr. Ponadto za każdym razem, gdy zmieni się inicjalizacja, będziesz musiał wprowadzić odpowiednie zmiany we wszystkich konstruktorach zamiast tylko jednego.

Zasadniczo należy zawsze wywoływać Konstruktory z większą liczbą argumentów od Konstruktorów, które mają mniej argumentów. Musisz także mieć świadomość, że możemy przeciążyć wiele Konstruktorów w klasie. Jednak w momencie tworzenia obiektu wywoływany jest tylko jeden konkretny Konstruktor. Podczas programowania w Javie może zaistnieć kilka sytuacji, w których będziesz musiał wywoływać wiele konstruktorów jeden od drugiego bez tworzenia różnych obiektów. Ten mechanizm wywoływania jednego Konstruktora z innego Konstruktora i gdy zaangażowany Konstruktor wywołuje innego Konstruktora, jest znany jako łączenie konstruktorów.

Ucz siękursów oprogramowaniaonline z najlepszych uniwersytetów na świecie.Zdobądź programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Istnieją dwie podstawowe rzeczy, o których należy pamiętać, jeśli chodzi o łańcuch konstruktorów, aby zapewnić najwyższą przejrzystość:

  • Głównym celem łączenia konstruktorów jest utrzymanie kodu. Chodzi o to, aby pomóc Ci napisać tylko jeden fragment kodu, który można ponownie wykorzystać w całym programie. W ten sposób Twój kod będzie nie tylko czysty i czytelny, ale także łatwiej będzie zarządzać wszystkimi poprawkami i zmianami zachodzącymi tylko w jednym miejscu zamiast we wszystkich Konstruktorach.
  • Konstruktor, który został wywołany, nie tworzy osobnego obiektu. Zamiast tego używa aktualnie uruchomionego obiektu do wywołania innego konstruktora. To tak, jakby wywołać inną metodę wewnątrz konstruktora, z wyjątkiem tego, że jest on również konstruktorem.

Jak widzieliście we wcześniejszym przykładzie, użyliśmy tego słowa kluczowego, aby uzyskać dostęp do parametrów Konstruktora. Podobnie łańcuch konstruktorów również wymaga przede wszystkim dwóch słów kluczowych. Oto te dwa słowa kluczowe:

  • this – jego reprezentacja metody wywołuje bieżący konstruktor klasy.
  • super – Reprezentacja metody wywołuje natychmiastowy konstruktor nadrzędnej lub nadrzędnej klasy nadrzędnej.

Ponadto powinieneś znać kilka innych ważnych terminów i definicji związanych z łączeniem konstruktorów w Javie:

  • Wywołanie Konstruktora: Kiedy wywołujesz Konstruktora i ten Konstruktor zostaje pomyślnie wywołany, jest to znane jako Wywołanie Konstruktora.
  • Wykonanie konstruktora: Jeśli po wywołaniu konstruktora, kontrola rozpocznie wykonywanie instrukcji w treści konstruktora. Jest to znane jako wykonanie konstruktora.

Kluczowe zasady łączenia konstruktorów w Javie

Po ustaleniu podstaw łańcuchów konstruktorów przyjrzyjmy się kilku podstawowym zasadom pracy z łańcuchem konstruktorów w Javie:

  • this() może wywoływać tylko parametry należące do tego samego konstruktora.
  • super() może wywoływać tylko bezpośredniego Konstruktora nadklasy.
  • this() i super() powinny być pierwszą instrukcją w Konstruktorze.
  • This () i super() nie mogą być używane w tym samym Konstruktorze, ponieważ obie osoby muszą być pierwszymi instrukcjami, co nie jest praktycznie możliwe.
  • Nie możesz dodać this() we wszystkich Konstruktorach tej samej klasy, ponieważ powinien istnieć co najmniej jeden Konstruktor bez instrukcji this().
  • Wywoływanie i wykonywanie Konstruktorów w Javie odbywa się odwrotnie. Tak więc, jeśli Konstruktory zostały wywołane w kolejności A, B, C, to wykonanie będzie w kolejności C, B, A.

Na przykład tutaj mamy dwie oddzielne klasy, które działają poprzez przeciążanie różnych Konstruktorów. Chcemy wykonać konstruktory w kolejności 2, 1, 4, 3, 5.

Aby wykonać konstruktory w kolejności, musimy wywoływać konstruktory dokładnie w odwrotnej kolejności, np. 5, 3, 4, 1, 2, patrz poniższy przykład.

klasowy rodzic

{

Rodzic()// 1

{

this("cześć");

System.out.println("w rodzicu 0 arg konstruktor 1");

}

Rodzic(ciąg znaków)// 2

{

System.out.println("w konstruktorze Parent(String) 2");

}

}

class Constructor rozszerza Parent

{

Konstruktor()// 3

{

this(10);// wywołanie konstruktora 5 liczb

System.out.println("w konstruktorze 0 arg konstruktor 3");

}

Konstruktor (ciąg znaków)// 4

{

super();//wywołanie konstruktora klasy nadrzędnej o 1 numerze

System.out.println("in Constructor(String msg) arg konstruktor 4");

}

Konstruktor(int i)// 5

{

this("hello");//wywołanie konstruktora 4-cyfrowego

System.out.println("w konstruktorze(int i) konstruktor 5");

}

// metoda main().

public static void main(String[] args)

{

Konstruktor cobj = nowy Konstruktor(); // wywołanie konstruktora 3 liczb

}

}

Wyjście:

w konstruktorze Parent(String) 2

w konstruktorze Rodzic 0 arg 1

w Konstruktorze (String msg) arg Konstruktor 4

w konstruktorze (int i) konstruktor 5

w Konstruktorze 0 arg Konstruktor 3

Podsumowując wszystkie koncepcje konstruktorów i łączenia konstruktorów w Javie z jednym końcowym przykładem:

klasa Emp

{

public String ENazwa;

public int EZarobki;

publiczny adres ciągu;

publiczne Emp()

{

this("Rahul");

}

public Emp (nazwa ciągu)

{

this(nazwa, 140035);

}

public Emp(Nazwa ciągu znaków, int sal)

{

this(imię, sal, „Nowe Delhi”);

}

public Employee(String name, int sal, String add)

{

this.ENname=nazwa;

this.EZarobki=sal;

ten.adres=dodaj;

}

unieważnij disp() {

System.out.println("Nazwa: "+EName);

System.out.println("Wynagrodzenie: "+EEzarobki);

System.out.println("Adres: "+adres);

}

public static void main(String[] args)

{

Obiekt pracownika = nowy pracownik();

obj.disp();

}

}

Wyjście:

Imię i nazwisko pracownika: Rahul

Wynagrodzenie pracownika: 140035

Adres pracownika: Nowe Delhi

Wniosek

W ten sposób dochodzimy do końca tego artykułu. Mamy nadzieję, że wyjaśniło to Twoje wątpliwości dotyczące łączenia konstruktorów w Javie i jeszcze bardziej wzmocniło Twoje zrozumienie. W upGrad wierzymy w pomaganie studentom z całego świata w osiągnięciu pełnego potencjału i odniesienia sukcesu w karierze. Nasze kursy są zaprojektowane z myślą zarówno o nowicjuszach, jak i doświadczonych profesjonalistach.

Jednym z takich kursów jest upGrad's Job-linked PG Certification in Software Engineering , zaprojektowany specjalnie dla osób poszukujących pracy po raz pierwszy. Zapoznaj się z treścią kursu i zapisz się już dziś! Naucz się wszystkich odpowiednich umiejętności inżynierii oprogramowania, takich jak Java, DSA, OODAP, JavaScript, MERN, AWS itp., od ekspertów branżowych i czołowych specjalistów.

P: Czy w Javie można połączyć w łańcuch więcej niż dwa konstruktory?

Java dopuszcza maksymalnie dwa łańcuchy konstruktorów. W ten sposób możesz tworzyć bardziej skomplikowane obiekty i ograniczać powielanie kodu.

P: Co się dzieje, gdy konstruktor w Javie wywołuje samego siebie?

Konstruktor w Javie, który wywołuje sam siebie, spowoduje błąd przepełnienia stosu i nieskończoną pętlę.

P: Jak wygląda domyślny konstruktor w Javie?

Domyślny konstruktor w Javie to taki, który nie przyjmuje żadnych danych wejściowych. Jeśli w klasie nie ma zadeklarowanego konstruktora, jest on tworzony automatycznie.