Hvad er Constructor i Java?
CONSTRUCTOR er en speciel metode, der bruges til at initialisere et nyoprettet objekt og kaldes lige efter, at hukommelsen er allokeret til objektet. Det kan bruges til at initialisere objekterne til ønskede værdier eller standardværdier på tidspunktet for oprettelse af objekt. Det er ikke obligatorisk for koderen at skrive en konstruktør til en klasse.
Hvis der ikke findes en brugerdefineret konstruktør til en klasse, initialiserer kompilatoren medlemsvariabler til standardværdierne.
- numeriske datatyper er indstillet til 0
- char datatyper er indstillet til nul tegn ('\ 0')
- referencevariabler er indstillet til null
I denne vejledning lærer du-
- Regler for oprettelse af en konstruktør
- Konstruktøroverbelastning i Java
- Constructor Chains
Regler for oprettelse af en Java Constructor
- Det har samme navn som klassen
- Det skal ikke returnere en værdi, der ikke engang er ugyldig
Eksempel 1 : Opret din første konstruktør i Java
Trin 1) Skriv følgende konstruktørprogram i Java editor.
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();}}
Trin 2) Gem, kør og kompiler konstruktørprogrammet i Java og observer output.
Produktion:
Inside ConstructorValue1 === 10Value2 === 20
Konstruktøroverbelastning i Java
Java Constructor overbelastning er en teknik, hvor en klasse kan have et vilkårligt antal konstruktører, der adskiller sig i parameterlisten. Compileren differentierer disse konstruktører ved at tage højde for antallet af parametre i listen og deres type.
Eksempler på gyldige konstruktører til klasse Account er
Account(int a);Account (int a,int b);Account (String a,int b);
Eksempel 2 : At forstå Constructor Overloading i Java
Trin 1) Indtast koden i editoren.
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();}}
Trin 2) Gem, kompilér og kør koden.
Trin 3) Fejl =?. Prøv og fejlret fejlen, inden du fortsætter til næste trin i Java constructor overbelastning
Trin 4) Hver klasse har en standardkonstruktør i Java. Standard overbelastet konstruktør Java til klasse Demo er Demo () . Hvis du ikke leverer denne konstruktør, opretter compileren den til dig og initialiserer variablerne til standardværdier. Du kan vælge at tilsidesætte denne standardkonstruktør og initialisere variabler til dine ønskede værdier som vist i eksempel 1.
Men hvis du angiver en parametriseret konstruktør som Demo (int a) og vil bruge standardkonstruktøren Java Demo (), er det obligatorisk for dig at specificere det.
Med andre ord, hvis din overbelastningskonstruktør i Java er tilsidesat, og du vil bruge standardkonstruktøren Java, skal det specificeres.
Trin 5) Kommentarlinje # 4-8. Gem, kompilér og kør koden.
Constructor Chains
Overvej et scenarie, hvor en basisklasse udvides af et barn. Hver gang der oprettes et objekt fra barneklassen, kaldes konstruktøren af overordnede klasse først. Dette kaldes Constructor chaining.
Eksempel 3: At forstå konstruktorkæde
Trin 1) Kopier følgende kode til editoren.
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);}}
Trin 2) Kør koden. På grund af konstruktorkæde, når objektet til underordnet klasse DemoChild oprettes, kaldes konstruktør Demo () i overordnet klasse først, og senere oprettes konstruktør DemoChild () af barnet. Forventet output =
Inside 1st Parent ConstructorInside the Constructor of ChildValue1 === 1Value2 === 2Value1 === 3Value2 === 4
Trin 3) Du kan observere konstruktøren af overordnet klasse Demo er tilsidesat. Hvad hvis du vil kalde den tilsidesatte konstruktør Demo (int a) i stedet for standard konstruktør Demo (), når dit underordnede objekt oprettes?
I sådanne tilfælde kan du bruge nøgleordet "super" til at kalde tilsidesatte konstruktører i overordnet klasse.
Syntaks: -
super();--or--super(parameter list);
Eksempel: Hvis din konstruktør er som Demo (String Name, int a) , vil du angive super ("Java", 5) Hvis det bruges, skal nøgleordet super være den første kodelinje i konstruktøren af underklassen.
Trin 4) Fjern kommentarlinje nr. 26 og kør koden. Overhold output.
Produktion:
Inside 2nd Parent ConstructorInside the Constructor of ChildValue1 === 5Value2 === 0Value1 === 3Value2 === 4