java constructor class
Ta vadnica bo s primeri kode razpravljala o Java Constructorju, njegovih vrstah in konceptih, kot sta preobremenitev konstruktorja in veriženje konstruktorjev:
Iz naših prejšnjih vadnic vemo, da se primerek razreda imenuje objekt. Predmet razreda se ustvari z uporabo ključne besede “new”. Posebna metoda, imenovana 'konstruktor', se imenuje, ko ustvarimo objekt z novo ključno besedo ali ko je objekt instantiran.
Konstruktor je definiran kot blok kode za inicializacijo predmeta razreda. Je enak metodi, vendar ni metoda. Vendar pa jo v Javi lahko imenujemo 'posebna metoda'.
=> Tukaj si oglejte A-Z vadnic za učenje Java.
Kaj se boste naučili:
- Java Constructor
- Zaključek
Java Constructor
Konstruktor Java se uporablja za inicializacijo pravkar ustvarjenega predmeta. Predmet mora imeti nekaj podatkov, preden se uporabi v programu. Zato uporabljamo konstruktor, da lahko predmetu dodelimo nekaj začetnih podatkov.
Kot preprost primer si oglejte razred ABC, za katerega moramo ustvariti objekt. Ustvarimo objekt ‘myObj’ za razred ABC z novo ključno besedo.
ABC myObj = new ABC ();
Zgornja izjava ustvari objekt myObj. Ko se ta objekt ustvarja, se pokliče konstruktor za razred ABC brez argumenta (ABC () prikazuje, da za konstruktor ni argumentov). Ker za zgornji konstruktor ni nobenega argumenta, bodo polja članov myObj inicializirana na privzete začetne vrednosti.
Na primer,
- Številski podatkovni tipi, kot je int, so nastavljeni na 0.
- Vrednost spremenljivke podatkovnega tipa Char je nastavljena na ničelni znak (‘ 0’).
- Sklici so nastavljeni na nič.
V tej vadnici bomo podrobno obravnavali konstruktorje skupaj z različnimi konstruktorji, ki se uporabljajo v Javi.
Kako ustvariti konstruktor v Javi
Če želite ustvariti konstruktor v Javi, moramo upoštevati določena pravila, kot so navedena spodaj.
- Konstruktor razreda ima enako ime kot razred.
- Konstruktorja, ki bi bil končni, abstraktni, sinhroniziran ali statičen, ne more biti. To je zato, ker Končno deluje kot konstanta, abstraktnega ni mogoče ustvariti. Medtem ko je sinhronizirano uporabljeno v primeru večnitnega navoja, statična ključna beseda pa na ravni razreda.
- S konstruktorji lahko uporabimo modifikatorje dostopa.
- Konstruktor ne more imeti vrnjenega tipa.
Na primer,določimo razred študent na naslednji način:
class Student{ String name; int roll_no; }
Z novo ključno besedo lahko ustvarimo predmete zgornjega razreda. Medtem ko se objekt ustvarja, lahko dvočlanske spremenljivke tega razreda inicializiramo z zagotavljanjem konstruktorja. Upoštevajte, da tudi če ne zagotovimo konstruktorja in samo izvedemo spodnjo izjavo,
Študent študent = novi Študent ();
Kljub temu bo Java izvedla privzeti konstruktor, ki bo dvočlanske spremenljivke inicializiral na privzete sistemske vrednosti. Če želimo, da je začetna vrednost Student.name »Keith«, roll_no pa 27, lahko za to ustvarimo naslednjo konstruktorsko metodo.
Student () { name = 'Keith'; roll_no = 27; }
Ko ustvarimo predmet študentskega razreda s spodnjo izjavo
Student student = new Student ();
Potem bodo začetni vrednosti spremenljivk ime namesto roll_no Keith oziroma 27.
Kdaj bo poklican zdaj, ko je ustvarjen konstruktor?
Konstruktor se pokliče vsakič, ko se objekt ustvari z novo ključno besedo, kot v zgornjem primeru. Kot smo že omenili, če ni na voljo noben konstruktor, Java nudi privzeti konstruktor, ki se pokliče, ko je objekt ustvarjen z novo ključno besedo.
Primer konstruktorja
Naslednji program prikazuje primer konstruktorja, v katerem imamo preprost konstruktor brez kakršnih koli argumentov. Ta konstruktor svojim spremenljivkam članom preprosto dodeli začetne vrednosti.
//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(); } }
Izhod:
Privzeti konstruktor v Javi
Privzeti konstruktor se imenuje tudi Empty Constructor . Ta konstruktor vstavi prevajalnik Java v kodo razreda, kjer programer ne izvaja nobenega konstruktorja. Med pripravo je vstavljen privzeti konstruktor, ki bo prikazan samo v datoteki '.class' in ne v izvorni kodi.
Razmislite o naslednjem razredu Java.
izvorna datoteka (.java) datoteka razreda (.class)
Na zgornji sliki prva slika prikazuje izvorno kodo, v kateri nismo navedli nobenega konstruktorja. Ko torej prevedemo to kodo in ustvari datoteko .class, lahko vidimo, da je prevajalnik Java vstavil privzeti konstruktor, kot je prikazano na sosednji sliki (v modri barvi).
Opomba:
Včasih se za opis konstruktorja no-arg v Javi uporablja privzeti konstruktor. Toda ta dva izraza sta v resnici različna. No-arg constructor je vrsta konstruktorja v Javi, ki jo določi programer. Privzeti konstruktor je konstruktor, ki ga vstavi prevajalnik Java.
kako najti varnostni ključ omrežja v operacijskem sistemu Windows 10
Torej, čeprav ta dva izraza večina programerjev uporablja izmenično, je priporočljivo, da teh dveh izrazov ne zamenjate.
Ko Java vstavi privzeti konstruktor, če ima program kakršne koli spremenljivke, jim dodelijo privzete vrednosti.
Spodnja tabela prikazuje privzete vrednosti vsakega podatkovnega tipa.
Tip | Privzeta vrednost |
---|---|
char | u0000 |
Predmet | Sklic ničen |
logično | napačno |
bajt | 0 |
kratek | 0 |
int | 0 |
dolga | 0L |
float | 0,0f |
dvojno | 0,0 d |
Naslednji program daje primer privzetega konstruktorja v Javi.
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); } }
Izhod:
Vrste konstruktorjev v Javi
Kot je prikazano spodaj, obstajata dve vrsti konstruktorjev.
# 1) No-arg Constructor
Konstruktor brez kakršnih koli argumentov se imenuje no-args ali no-argument constructor. Če nimamo konstruktorja brez argumentov, potem prevajalnik Java ne ustvari privzetega konstruktorja za razred.
Če v našem razredu definiramo konstruktor, potem prevajalnik Java ne vstavi privzetega konstruktorja.
Spodaj je primer konstruktorja 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(); } }
Izhod:
V tem programu smo podali konstruktor no-args. Tukaj natisnemo nekaj sporočil, vključno s spremenljivkami članov. V izhodu lahko vidimo, da so prikazana sporočila iz konstruktorja, ki kažejo, da se izvaja no-args konstruktor.
# 2) Parametrizirani konstruktor
Parametrizirani konstruktor ima enega ali več parametrov. Uporabimo lahko parametrizirani konstruktor, če moramo nekaj začetnih vrednosti predati spremenljivki člana razreda.
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); } }
Izhod:
Tu smo podali parametrizirani konstruktor, ki zajema dva argumenta, to je ime in id.
Znotraj telesa konstruktorja so argumenti dodeljeni kot vrednosti imenom spremenljivke člana oziroma id.
Nato v glavni metodi, ko z novo ključno besedo ustvarimo nov objekt, v ime razreda po novi ključni besedi posredujemo dve vrednosti. To pomeni, da prikličemo parametrizirani konstruktor. Ko prikažemo spremenljivke članov, lahko vidimo, da imajo vrednosti, ki smo jih podali med ustvarjanjem predmeta.
Preobremenjeni konstruktorji v Javi
Zdaj se postavlja vprašanje, ali ima lahko razred več konstruktorjev ali pa ima razred lahko samo en konstruktor?
No, v razredu imamo lahko več konstruktorjev. V razredu je lahko toliko konstruktorjev, če so pravilno preobremenjeni.
Kaj torej natančno pomeni preobremenitev konstruktorjev?
Preobremenitev konstruktorja je mehanizem, ki razredu omogoča toliko konstruktorjev, da imajo vsi ti konstruktorji različne sezname parametrov, ne glede na vrsto parametrov ali vrstni red parametrov.
Spodnji program prikazuje preobremenitev konstruktorja.
//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(); } }
Izhod:
V zgornjem programu imamo razred, ki vsebuje tri konstruktorje. Prvi konstruktor je ne-arg konstruktor, nato pa imamo po enega z enim argumentom oziroma dvema argumentoma. Ker ima konstruktor edinstven seznam parametrov, lahko rečemo, da so konstruktorji preobremenjeni.
Konstruktor ‘this ()’ v Javi
Kaj pa, če želimo v razredu, ki vsebuje več konstruktorjev, poklicati enega konstruktorja iz drugega konstruktorja v tem razredu?
V ta namen uporabimo ključno besedo »to« znotraj konstruktorja, iz katerega želimo poklicati drugega konstruktorja.
Torej, kadar ima razred več konstruktorjev, konstruktor no-arg in parametrizirani konstruktor, s ključno besedo ‘this’ pokličemo parametrizirani konstruktor iz konstruktorja no-args. Temu pravimo tudi “Izrecno priklic konstruktorja”.
Zakaj potrebujemo to ključno besedo?
Potrebujemo ga, ker eksplicitnega klica konstruktorjev ni mogoče neposredno z uporabo samo imena konstruktorja.
Opombe:
brezplačno varno youtube v mp3 pretvornik -
- Ključna beseda 'to' bi morala biti prva izjava v klicnem konstruktorju.
- Če ima konstruktor ključno besedo 'this', potem ne more imeti 'super'. To pomeni, da ima konstruktor lahko super ali to.
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(); } }
Izhod:
V zgornjem programu imamo 'TestClass' z dvema konstruktorjema. Temu pravimo (»SoftwareTestingHelp«) iz konstruktorja no-args. To je izrecno klicanje parametriziranega konstruktorja.
Kopiraj konstruktor v Javi
Zavedamo se konstruktorja kopij v jeziku C ++. Konstruktor kopiranja je konstruktor, ki ima kot argument referenco na objekt, nov objekt pa se ustvari s pomočjo podatkov referenčnega predmeta.
C ++ nudi privzeti konstruktor kopij, če ta v programu ni na voljo.
Java nudi tudi podporo za konstruktor kopij, vendar ne ponuja privzetega konstruktorja kopij.
Naslednji program Java prikazuje konstruktor kopiranja na klasičnem primeru kompleksnih števil, ki imajo resnične in namišljene komponente.
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; } }
Izhod:
Zgornji program ima razred 'Kompleks', ki ima parametrizirani konstruktor in konstruktor kopij. Najprej v glavni metodi s parametriziranim konstruktorjem izdelamo objekt c1. Nato s spodnjo izjavo,
Complex c2 = new Complex (c1);
Zgornji stavek pokliče konstruktor kopiranja, ko se referenca c1 posreduje konstruktorju med ustvarjanjem novega predmeta c2.
Verige konstruktorjev v Javi
Veriženje konstruktorja je postopek, ko en konstruktor pokliče drugega konstruktorja istega razreda.
Tudi ko smo podedovali iz osnovnega razreda, se pri ustvarjanju predmeta podrejenega razreda najprej prikliče konstruktor osnovnega razreda. To je tudi primer verige konstruktorjev.
V Javi lahko veriženje Constructorja dosežemo z dvema pristopoma:
- V istem razredu : Ko prikličemo enega konstruktorja iz drugega konstruktorja istega razreda, lahko uporabimo s pomočjo ključne besede this ().
- Iz osnovnega razreda: Konstruktor osnovnega razreda lahko pokliče konstruktor izpeljanega razreda z uporabo ključne besede super.
Zakaj potrebujemo verigo konstruktorjev?
Ko želimo v našem konstruktorju izvesti več nalog, namesto da bi opravili vsako nalogo v enem konstruktorju, razčlenimo naloge na več konstruktorjev in nato med seboj prikličemo konstruktorje, kar povzroči veriženje konstruktorjev.
Spodaj je nekaj pravil, ki jih moramo upoštevati med izvajanjem veriženja konstruktorjev.
- Veriženje konstruktorja se izvede v poljubnem vrstnem redu in bo dalo enake rezultate.
- Izraz 'ta' bi moral biti prvi izraz v konstruktorju.
- Morali bi imeti vsaj en konstruktor brez te ključne besede.
Ko imamo v svojem programu dediščino, lahko izvedemo tudi veriženje konstruktorjev. V tem primeru bo podrazred poklical konstruktor osnovnega razreda. S tem se ustvarjanje predmetov podrazreda začne z inicializacijo članov superrazreda.
Zdaj bomo izvedli verigo konstruktorjev v Javi z uporabo zgornjih pristopov.
# 1) Verige konstruktorjev znotraj istega razreda
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); } }
Izhod:
Kot smo že omenili, dosežemo verigo konstruktorjev znotraj istega razreda z uporabo ključne besede ‘this’. V zgornjem programu imamo tri konstruktorje in s pomočjo ključne besede ‘this’ pokličemo enega konstruktorja iz drugega.
Iz osnovnega razreda
Ko razred podeduje drug razred, se najprej prikliče konstruktor nadrejenega razreda, ko ustvarimo objekt izpeljanega razreda, ki je veriga konstruktorja.
Če želimo v izpeljanem razredu izrecno poklicati konstruktor osnovnega razreda, potem v ta namen uporabimo ključno besedo 'super'. Z uporabo ključne besede ‘super’ lahko v hierarhiji dedovanja imenujemo konstruktorje superklase, dokler ne dosežemo najvišjega razreda.
Spodnji program prikazuje uporabo ključne besede 'super' za veriženje konstruktorjev.
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'); } }
Izhod:
V zgornjem programu prikličemo parametrizirani konstruktor izvedenega razreda z vrednostjo 'Java'. Ta konstruktor pa pokliče konstruktor osnovnega razreda z uporabo 'super (ime);' ki izvaja parametrizirani konstruktor osnovnega razreda.
Pogosto zastavljena vprašanja
V # 1) Kako ustvarim konstruktor v Javi?
Odgovor: Ustvarimo konstruktor kot posebno metodo, ki ima enako ime kot ime razreda. Konstruktor ne more imeti tudi vrnjenega tipa. Lahko ima modifikatorje dostopa, ne more pa biti končni, statični, abstraktni ali sinhroniziran.
Če je ABC razred, lahko njegov konstruktor definiramo kot
ABC(){} //no args constructor OR ABC(param1, param 2, …, param n) {} //parameterized constructor
V # 2) Kakšne so prednosti konstruktorja v Javi?
Odgovor: Z uporabo konstruktorja lahko člane razreda inicializiramo kot prvo stvar, ko je predmet ustvarjen. Konstruktor odpravlja potrebo po implicitnem klicanju običajnih metod.
V konstruktorju lahko izvajamo različne naloge, povezane z inicializacijo, zagonom ipd., Saj se konstruktorji prikličejo v fazi ustvarjanja predmeta.
V # 3) Zakaj se uporabljajo konstruktorji?
Odgovor: Konstruktorji se v glavnem uporabljajo za inicializacijo članov razreda in se prikličejo, ko se ustvarja predmet razreda.
V # 4) Ali je lahko konstruktor zaseben?
Odgovor: Da, lahko imamo zasebnega konstruktorja. Ko je konstruktor zaseben, lahko razredu preprečimo, da bi ustvaril primer.
V # 5) Ali je lahko konstruktor končni?
Odgovor: Ne, ne moremo imeti končnega konstruktorja.
Zaključek
V tej vadnici smo začeli razpravo o konstruktorjih v Javi. Spoznali smo osnove konstruktorja, njegovo ustvarjanje in pravila, ki jih je treba upoštevati. Razpravljali smo tudi o konstruktorjih kopiranja v Javi.
Privzeti konstruktor in vrste konstruktorjev ter koncepti, kot sta preobremenitev konstruktorja in veriženje konstruktorjev, so bili predstavljeni s primeri. Kot del teh tem smo v konstruktorjih videli tudi uporabo ključne besede ‘this’.
=> Preberite serijo Easy Java Training Series.
Priporočeno branje
- Predmet Java Class Vs - Kako uporabljati razred in predmet v Javi
- Osnove Java: Sintaksa Java, Razred Java in Osnovni koncepti Java
- Java Integer in Java BigInteger Class z primeri
- Vadnica razreda Java Scanner Class z primeri
- Vadnica razreda Java Array - java.util.Arrays Class s primeri
- Kaj je Java Vector | Vadnica Java Vector Class s primeri
- Vadnica Java vmesnika in abstraktnega razreda s primeri
- Razred robotov v programu Selenium WebDriver z Javo