java constructor class
Tento tutoriál bude diskutovať o Java Constructor, jeho typoch a konceptoch, ako je preťaženie konštruktorov a reťazenie konštruktorov, s príkladmi kódu:
Z našich predchádzajúcich tutoriálov vieme, že inštancia triedy sa nazýva objekt. Objekt triedy sa vytvára pomocou kľúčového slova „new“. Špeciálna metóda zvaná „konštruktor“ sa volá, keď vytvárame objekt s novým kľúčovým slovom alebo keď je objekt inštancovaný.
Konštruktor je definovaný ako blok kódu na inicializáciu objektu triedy. Je to rovnaké ako metóda, ale nejde o metódu. Možno to však v Jave označiť ako „špeciálnu metódu“.
=> Tu nájdete A-Z výučbových kurzov Java.
Čo sa dozviete:
- Konštruktor Java
- Záver
Konštruktor Java
Konštruktor Java sa používa na inicializáciu práve vytvoreného objektu. Pred použitím v programe musí mať objekt nejaké údaje. Preto používame konštruktor, aby sme mohli objektu priradiť nejaké počiatočné údaje.
Ako jednoduchý príklad si vezmime triedu ABC, pre ktorú potrebujeme vytvoriť objekt. Vytvorme objekt „myObj“ pre triedu ABC pomocou nového kľúčového slova.
ABC myObj = new ABC ();
Vyššie uvedené vyhlásenie vytvorí objekt myObj. Pri vytváraní tohto objektu sa volá konštruktor pre triedu ABC bez argumentov (ABC () zobrazuje, že pre konštruktor neexistujú žiadne argumenty). Pretože pre vyššie uvedený konštruktor nie sú poskytnuté žiadne argumenty, členské polia myObj sa inicializujú na svoje predvolené počiatočné hodnoty.
Napríklad,
- Číselné dátové typy ako int sú nastavené na 0.
- Hodnota premennej dátového typu Char je nastavená na null („ 0“) znak.
- Odkazy sú nastavené na nulu.
V tomto výučbe sa budeme podrobne zaoberať konštruktormi a rôznymi konštruktormi používanými v Jave.
Ako vytvoriť konštruktor v Jave
Ak chcete vytvoriť konštruktor v prostredí Java, musíme dodržiavať určité pravidlá, ktoré sú uvedené nižšie.
- Konštruktor triedy má rovnaký názov ako trieda.
- Nemôže existovať konštruktér, ktorý je konečný, abstraktný, synchronizovaný alebo statický. Je to tak preto, lebo finále funguje ako konštanta, abstrakt sa nedá vytvoriť. Zatiaľ čo synchronizované sa používa v prípade viacerých vlákien a statické kľúčové slovo sa používa na úrovni triedy.
- S konštruktormi môžeme použiť modifikátory prístupu.
- Konštruktor nemôže mať návratový typ.
Napríklad,Poďme definovať triedu Student takto:
class Student{ String name; int roll_no; }
Môžeme vytvárať objekty vyššie uvedenej triedy pomocou nového kľúčového slova. Počas vytvárania objektu môžeme dvojčlenné premenné tejto triedy inicializovať poskytnutím konštruktora. Všimnite si, že aj keď neposkytujeme konštruktor a iba vykonáme nasledujúce vyhlásenie,
Študent študent = nový Študent ();
Napriek tomu Java vykoná predvolený konštruktor, ktorý inicializuje dvojčlenné premenné na ich predvolené hodnoty systému. Teraz, ak chceme, aby počiatočná hodnota Student.name bola „Keith“ a roll_no 27, potom môžeme vytvoriť nasledujúcu metódu konštruktora.
Student () { name = 'Keith'; roll_no = 27; }
Keď vytvoríme objekt triedy študenta s nasledujúcim vyhlásením
Student student = new Student ();
Potom počiatočné hodnoty členských premenných name a roll_no budú Keith, respektíve 27.
Teraz, keď je vytvorený konštruktor, kedy sa bude volať?
Konštruktor sa zavolá zakaždým, keď sa objekt vytvorí pomocou nového kľúčového slova, ako vo vyššie uvedenom prípade. Ako už bolo uvedené, ak nie je poskytnutý žiadny konštruktor, Java poskytuje predvolený konštruktor, ktorý sa zavolá pri vytváraní objektu pomocou nového kľúčového slova.
Príklad konštruktora
Nasledujúci program ukazuje príklad konštruktora, v ktorom máme jednoduchý konštruktor bez akýchkoľvek argumentov. Tento konštruktor jednoducho priraďuje počiatočné hodnoty svojim členským premenným.
//class definition class classDemo{ int num1; int num2; //constructor classDemo(){ num1 = 100; num2 = 250; System.out.println('Inside ClassDemo::Constructor'); } public void display(){ System.out.println('num1 = '+ num1); System.out.println('num2 = '+ num2); } } class Main{ public static void main(String args()){ classDemo cd1 = new classDemo(); //create object of ClassDemo cd1.display(); } }
Výkon:
Predvolený konštruktor v prostredí Java
Predvolený konštruktor sa tiež nazýva Prázdny konštruktor . Tento konštruktor je vložený kompilátorom Java do kódu triedy, kde programátor neimplementuje žiadny konštruktor. Predvolený konštruktor je vložený počas kompilácie, a preto sa zobrazí iba v súbore „.class“, a nie v zdrojovom kóde.
Zvážte nasledujúcu triedu Java.
zdrojový súbor (.java) súbor triedy (.class)
Na vyššie uvedenom obrázku ukazuje prvý obrázok zdrojový kód, v ktorom sme nezadali žiadny konštruktor. Takže keď skompilujeme tento kód a vygeneruje sa súbor .class, môžeme vidieť, že kompilátor Java vložil predvolený konštruktor, ako je znázornené na susednom obrázku (modrou farbou).
Poznámka:
Niekedy sa na opísanie konštruktora no-arg v Jave používa predvolený konštruktor. Ale tieto dva pojmy sa v skutočnosti líšia. Konštruktor No-arg je typ konštruktora v Jave, ktorý určuje programátor. Predvolený konštruktor je konštruktor, ktorý je vložený kompilátorom Java.
implementácia hash tabuľky v kóde c ++
Preto aj keď väčšina programátorov používa tieto dva pojmy zameniteľne, je vhodné nezamieňať ich.
Keď Java vloží predvolený konštruktor, ak má program nejaké premenné, sú im priradené predvolené hodnoty.
Nasledujúca tabuľka zobrazuje predvolené hodnoty pre každý typ údajov.
Typ | Predvolená hodnota |
---|---|
char | u0000 |
Objekt | Referenčná hodnota null |
boolovský | nepravdivé |
bajt | 0 |
krátky | 0 |
int | 0 |
dlho | 0L |
plavák | 0,0f |
dvojitý | 0,0 d |
Nasledujúci program poskytuje príklad predvoleného konštruktora v Jave.
class Main { int num; boolean flag; public static void main(String() args) { // A default constructor is called Main obj = new Main(); System.out.println('num:default value = ' + obj.num); System.out.println('flag:default value = ' + obj.flag); } }
Výkon:
Typy konštruktérov v Jave
Ako je uvedené nižšie, v Jave existujú dva typy konštruktorov.
# 1) Konštruktér No-arg
Konštruktor bez akýchkoľvek argumentov sa nazýva konštruktor bez argumentov alebo bez argumentov. Ak nemáme konštruktor bez akýchkoľvek argumentov, potom kompilátor Java nevytvorí predvolený konštruktor pre triedu.
Všeobecne platí, že ak v našej triede definujeme konštruktor, kompilátor Java nevloží predvolený konštruktor.
Ďalej je uvedený príklad konštruktora No-arg
import java.io.*; class DemoClass { int num; String name; // no-args Constructor called when object is created DemoClass() { System.out.println('DemoClass::Constructor called'); System.out.println('Initial member variable values:'); System.out.println('num = ' + num + ' name = ' + name); } } class Main{ public static void main (String() args) { // this will invoke no-args Constructor DemoClass dc1 = new DemoClass(); } }
Výkon:
V tomto programe sme poskytli konštruktor bez argov. Tu vytlačíme niektoré správy vrátane členských premenných. Na výstupe vidíme, že sú zobrazené správy od konštruktora, ktoré naznačujú, že je vykonaný konštruktor bez argov.
# 2) Parametrizovaný konštruktor
Parametrizovaný konštruktor má jeden alebo viac parametrov. Môžeme použiť parametrizovaný konštruktor pre prípad, že potrebujeme odovzdať nejaké počiatočné hodnoty do členskej premennej triedy.
import java.io.*; class DemoClass { // data members of the class. String name; int id; // parameterized constructor called when object is created DemoClass(String name, int id) { this.name = name; this.id = id; } } class Main { public static void main (String() args) { // this will invoke the parameterized constructor. DemoClass dc1 = new DemoClass('Java', 1); System.out.println('Tutorial Name :' + dc1.name + ', Id :' + dc1.id); } }
Výkon:
Tu sme poskytli parametrizovaný konštruktor, ktorý berie dva argumenty, tj. Meno a id.
V tele konštruktora sú argumenty priradené ako hodnoty k členom a ich premenným premenným.
Potom v hlavnej metóde, keď vytvoríme nový objekt pomocou nového kľúčového slova, odovzdáme dve hodnoty názvu triedy nasledujúcej za novým kľúčovým slovom. To naznačuje, že voláme parametrizovaný konštruktor. Keď zobrazíme členské premenné, vidíme, že majú hodnoty, ktoré sme odovzdali pri vytváraní objektu.
Preťažení konštruktéri v Jave
Teraz vyvstáva otázka, či môže mať trieda viac ako jedného konštruktora, alebo je to tak, že trieda môže mať iba jedného konštruktora?
V triede môžeme mať viac konštruktorov. Trieda môže mať v sebe toľko konštruktorov, pokiaľ sú správne preťažené.
Čo sa teda presne myslí pod preťažením konštruktérov?
Preťaženie konštruktorov je mechanizmus, ktorý umožňuje triede mať toľko konštruktorov, aby všetky tieto konštruktory mali rôzne zoznamy parametrov, či už v závislosti od typov parametrov alebo poradia parametrov.
Nasledujúci program demonštruje preťaženie konštruktora.
//class with multiple constructors class DemoClass{ int val1; int val2; //no args Constructor DemoClass(){ val1 = 10; val2 = 20; System.out.println('DemoClass:: No argument Constructor'); } //Overloaded Constructor DemoClass(int num1){ val1 = num1; val2 = num1; System.out.println('DemoClass:: Overloaded Constructor with one argument'); } //Overloaded DemoClass(int num1,int num2){ val1 = num1; val2 = num2; System.out.println('DemoClass:: Overloaded Constructor with two arguments'); } public void display(){ System.out.println('val1 === '+val1 + ' ; val2 === '+val2 ); } } class Main{ public static void main(String args()){ DemoClass d1 = new DemoClass(); //object with no-args Constructor d1.display(); DemoClass d2 = new DemoClass(10); //object with 1 arg Constructor d2.display(); DemoClass d3 = new DemoClass(20,40); //object with 2 arg Constructor d3.display(); } }
Výkon:
Vo vyššie uvedenom programe máme triedu obsahujúcu tri konštruktory. Prvý konštruktor je konštruktér no-arg a potom máme každý jeden s jedným argumentom a dvoma argumentmi. Pretože má konštruktor jedinečný zoznam parametrov, môžeme povedať, že sú preťažené.
„This ()“ konštruktér v Jave
Čo ak v triede obsahujúcej viac konštruktorov chceme, aby sme zavolali jedného konštruktora od iného konštruktéra v tejto triede?
Na tento účel používame vo vnútri konštruktora kľúčové slovo „this“, z ktorého chceme zavolať iného konštruktora.
Keď má teda trieda viac konštruktorov, konštruktor no-arg a parametrizovaný konštruktor, pomocou kľúčového slova „this“ zavoláme parametrizovaný konštruktor z konštruktora no-args. Toto sa tiež nazýva „Explicitné vyvolanie konštruktora“.
Prečo potrebujeme toto kľúčové slovo?
Potrebujeme to, pretože explicitné vyvolanie konštruktorov nie je možné priamo pomocou iba názvu konštruktora.
Je potrebné poznamenať:
- Kľúčové slovo „this“ by malo byť prvým príkazom vo volajúcom konštruktore.
- Ak má konštruktor kľúčové slovo „toto“, potom nemôže mať slovo „super“. To znamená, že konštruktér môže mať buď super, alebo toto.
class TestClass { TestClass() { //calling Parameterized Constructor this('SoftwareTestingHelp'); System.out.println('TestClass::No-args Constructor'); } TestClass(String str) { System.out.println('TestClass:: Parameterized Constructor(String):' + str); } } class Main{ public static void main(String() args) { TestClass obj = new TestClass(); } }
Výkon:
Vo vyššie uvedenom programe máme ‘TestClass’ s dvoma konštruktormi. Toto nazývame („SoftwareTestingHelp“) od konštruktora bez argov. Toto je výslovné vyvolanie parametrizovaného konštruktora.
Kopírovať konštruktor v Jave
Sme si vedomí konštruktora kópií v C ++. Konštruktor kopírovania je konštruktor, ktorý má ako argument referenciu na objekt a pomocou údajov referenčného objektu sa vytvorí nový objekt.
C ++ poskytuje predvolený konštruktor kópií, ak nie je uvedený v programe.
Java poskytuje podporu aj pre kopírovací konštruktor, neposkytuje však predvolený konštruktor kopírovania.
Nasledujúci program Java demonštruje konštruktor kopírovania pomocou klasického príkladu komplexných čísel, ktoré majú reálne a imaginárne komponenty.
class Complex { private double real, imaginary; // parametrized constructor public Complex(double real, double imaginary) { System.out.println('Complex:: parametrized constructor'); this.real = real; this.imaginary = imaginary; } // copy constructor Complex(Complex c) { System.out.println('Complex::Copy constructor called'); real = c.real; imaginary = c.imaginary; } // Overriding the toString of Object class @Override public String toString() { return '(' + real + ' + ' + imaginary + 'i)'; } } public class Main { public static void main(String() args) { Complex c1 = new Complex(1, 5); //calls parametrized constructor System.out.println('C1 = ' + c1); // copy constructor called Complex c2 = new Complex(c1); System.out.println('C2 = ' + c2); // this is a simple assignment operator Complex c3 = c2; } }
Výkon:
Vyššie uvedený program má triedu „Complex“, ktorá má parametrizovaný konštruktor a konštruktor kopírovania. V hlavnej metóde najskôr vytvoríme objekt c1 pomocou parametrizovaného konštruktora. Potom pomocou nižšie uvedeného vyhlásenia
Complex c2 = new Complex (c1);
Vyššie uvedené vyhlásenie volá konštruktor kopírovania, keď sa do konštruktora odovzdáva referencia c1 pri vytváraní nového objektu c2.
Reťazenie konštruktorov v Jave
Reťazenie konštruktorov je proces jedného konštruktora, ktorý volá iného konštruktora rovnakej triedy.
Aj keď sme dedili zo základnej triedy, konštruktor základnej triedy sa vyvolá najskôr pri vytváraní objektu podradenej triedy. Toto je tiež príklad reťazenia konštruktérov.
V Jave je možné reťazenie reťazca Constructor dosiahnuť pomocou dvoch prístupov:
- V rámci tej istej triedy : Keď voláme jeden konštruktor z iného konštruktora rovnakej triedy, môžeme použiť použitie tohto kľúčového slova ().
- Zo základnej triedy: Konštruktor základnej triedy je možné volať pomocou konštruktora odvodenej triedy pomocou kľúčového slova super.
Prečo potrebujeme reťazenie konštruktérov?
Keď chceme v našom konštruktore vykonať viac úloh, potom namiesto vykonania každej úlohy v jednom konštruktore rozdelíme úlohy na viac konštruktérov a potom zavoláme konštruktory jeden od druhého, čo povedie k reťazeniu konštruktorov.
Ďalej uvádzame niektoré z pravidiel, ktoré musíme dodržiavať pri reťazení konštruktorov.
- Reťazenie konštruktorov sa vykonáva v akomkoľvek poradí a prinesie rovnaké výsledky.
- Výraz „toto“ by mal byť prvým výrazom v konštruktore.
- Mali by sme mať aspoň jedného konštruktora bez tohto kľúčového slova.
Keď máme v našom programe dedičstvo, môžeme vykonať aj reťazenie konštruktorov. V takom prípade podtrieda zavolá konštruktor základnej triedy. Týmto spôsobom sa tvorba objektov podtriedy začína inicializáciou členov nadtriedy.
Teraz implementujeme reťazenie konštruktorov v Jave pomocou vyššie uvedených prístupov.
# 1) Konštruovanie reťazcov v rovnakej triede
class DemoClass { // No args constructor DemoClass() { System.out.println('DemoClass::No args constructor'); } // parameterized constructor DemoClass(int val1) { // calls default constructor this(); System.out.println('DemoClass::Constructor with 1 argument: ' + val1); } // parameterized constructor DemoClass(int val1, int val2) { // invokes parameterized constructor with 1 argument this(5); System.out.print('DemoClass::constructor with 2 arguments:'); System.out.println('Product of 2 arguments = ' + val1 * val2); } } class Main{ public static void main(String args()) { // call parameterized constructor with 2 arguments new DemoClass(10, 15); } }
Výkon:
Ako už bolo spomenuté, reťazce konštruktérov v rámci rovnakej triedy dosiahneme pomocou kľúčového slova „this“. Vo vyššie uvedenom programe máme troch konštruktorov a pomocou kľúčového slova „this“ voláme jeden konštruktor z druhého.
Zo základnej triedy
Keď trieda zdedí inú triedu, potom sa najskôr vyvolá konštruktor nadradenej triedy, keď vytvoríme objekt odvodenej triedy, ktorý je reťazcom konštruktora.
výučba prepojeného zoznamu v c ++
Ak chceme v odvodenej triede explicitne zavolať konštruktor základnej triedy, mali by sme na tento účel použiť kľúčové slovo „super“. Pomocou kľúčového slova „super“ môžeme volať hierarchiu dedičnosti nadtriedami, kým sa nedostaneme do najvyššej triedy.
Nasledujúci program demonštruje použitie kľúčového slova „super“ na reťazenie konštruktorov.
class BaseClass { String name; // no args constructor BaseClass() { this(''); System.out.println('BaseClass::No-argument constructor'); } // Parameterized constructor BaseClass(String name) { this.name = name; System.out.println('BaseClass::Parameterized constructor'); } } class DerivedClass extends BaseClass { // No-argument constructor DerivedClass() { System.out.println('DerivedClass::No-argument constructor'); } // parameterized constructor DerivedClass(String name) { super(name); // invokes Parameterized constructor of BaseClass System.out.println('DerivedClass::Parameterized constructor'); } } class Main { public static void main(String args()) { // invokes DerivedClass parameterized constructor DerivedClass obj = new DerivedClass('Java'); } }
Výkon:
Vo vyššie uvedenom programe vyvoláme parametrizovaný konštruktor odvodenej triedy s hodnotou „Java“. Tento konštruktor má následne volanie konštruktora základnej triedy pomocou „super (meno);“ ktorý vykoná parametrizovaný konštruktor základnej triedy.
často kladené otázky
Otázka č. 1) Ako vytvoríte konštruktor v Jave?
Odpoveď: Vytvoríme konštruktor ako špeciálnu metódu, ktorá má rovnaký názov ako názov triedy. Aj konštruktor nemôže mať návratový typ. Môže mať modifikátory prístupu, ale nemôže byť konečné, statické, abstraktné alebo synchronizované.
Ak je ABC trieda, potom môžeme definovať jej konštruktor ako
ABC(){} //no args constructor OR ABC(param1, param 2, …, param n) {} //parameterized constructor
Otázka 2) Aká je výhoda konštruktora v Jave?
Odpoveď: Pomocou konštruktora môžeme inicializovať členov triedy ako prvú vec, ktorú vytvorí momentový objekt. Konštruktor eliminuje potrebu implicitného volania normálnych metód.
V konštruktore môžeme vykonávať rôzne úlohy spojené s inicializáciou, spustením úloh atď., Pretože konštruktory sú vyvolané počas fázy vytvárania objektu.
Otázka č. 3) Prečo sa používajú konštruktéri?
Odpoveď: Konštruktory sa používajú hlavne na inicializáciu členov triedy a vyvolávajú sa pri vytváraní objektu triedy.
Otázka č. 4) Môže byť konštruktér súkromný?
Odpoveď: Áno, môžeme mať súkromného konštruktéra. Keď je konštruktor súkromný, potom je možné zabrániť inštancii triedy.
Otázka č. 5) Môže byť konštruktér konečný?
Odpoveď: Nie, nemôžeme mať konečného konštruktéra.
Záver
V tomto tutoriáli sme začali našu diskusiu o konštruktoroch v Jave. Naučili sme sa základné informácie o konštruktore, jeho tvorbe a pravidlách, ktoré treba dodržiavať. Diskutovali sme tiež o konštruktoroch kopírovania v Jave.
Predvolený konštruktor a typy konštruktorov a koncepty ako preťaženie konštruktorov a reťazenie konštruktorov boli informované príkladmi. Ako súčasť týchto tém sme videli aj použitie kľúčového slova „toto“ v konštruktoroch.
=> Prečítajte si sériu Easy Java Training Series.
Odporúčané čítanie
- Objekt Java Class Vs - Ako používať triedy a objekty v Jave
- Základy jazyka Java: Java Syntax, trieda Java a základné koncepty Java
- Celé číslo Java a trieda Java BigInteger s príkladmi
- Výukový program triedy skenerov Java s príkladmi
- Výukový program triedy Java Array - java.util. Trieda polí s príkladmi
- Čo je Java Vector | Výukový program Java Vector Class s príkladmi
- Príručka k rozhraniu Java a abstraktnej triede
- Robotická trieda v selenovom WebDriveri s Java