Java konstruktør
I Java er en konstruktør en særlig metode til initialisering af objekter. Når et klasseobjekt dannes, kaldes konstruktøren. Det er muligt at bruge det til at indstille standardværdierne for objektattributter som følger:
// Creating the Main class in Java public class JavaConstructor { String a; // Creating a class constructor for the Main class public JavaConstructor() { a = "I am the constructor"; } public static void main(String[] args) { JavaConstructor objInstance = new JavaConstructor(); System.out.println(objInstance.a); } }
Det er værd at bemærke, at konstruktørnavnet skal være det samme som klassenavnet, og det kan ikke have en returtype (som void). Derudover aktiveres konstruktøren, når et objekt oprettes. Som standard har alle klasser konstruktører; hvis du ikke selv opretter en, vil Java gøre det for dig. Du vil dog ikke være i stand til at angive startværdier for objektegenskaber i dette tilfælde.
Parametre for konstruktører
Konstruktører kan også acceptere argumenter, som bruges til at opsætte attributter. Konstruktøren er udvidet med en int a parameter i eksemplet nedenfor. Vi sætter a til b (a=b) inde i konstruktøren. Vi leverer et argument på (10) til konstruktøren, når vi kalder det, og det sætter værdien af til 10:
public class JavaConstructor { int a; public JavaConstructor(int b) { a = b; } public static void main(String[] args) { JavaConstructor objInstance;= new JavaConstructor(10); System.out.println(objInstance.a); } }
Du kan frit bruge så mange parametre, som du vil:
//filename: JavaConstructor.java public class JavaConstructor { int modelYear; String modelName; public JavaConstructor(int year, String name) { modelYear = year; modelName = name; } public static void main(String[] args) { JavaConstructor myCar = new JavaConstructor(2020, "Sedan"); System.out.println(myCar.modelYear + " " + myCar.modelName); } }
Regler styrer konstruktøren i Java. Disse regler for at skrive en Java-konstruktør er som følger:
- Konstruktørens navn skal matche klassens navn.
- Der må ikke være nogen eksplicit returtype i en konstruktør.
- En abstrakt, statisk, endelig og synkroniseret Java-konstruktør er umulig.
Typer af konstruktører i Java
Java-konstruktører kommer i en række forskellige former og størrelser. I Java er der to typer konstruktører:
- En standardkonstruktør (no-arg-konstruktør)
- Konstruktør med parametre
Standardkonstruktør i Java
Når en konstruktør ikke har nogen parametre, kaldes den "Standard konstruktør." Standardkonstruktøren har følgende syntaks:
<class_name>(){}
Eksempel:Standardkonstruktør
no-arg-konstruktøren af standardConstructor-klassen oprettes i dette eksempel. Det vil blive kaldt, når objektet er oprettet.
//Program creating and calling a default constructor class defaultConstructor{ //creating a default constructor defaultConstructor(){ System.out.println("This is the default constructor"); } //main method public static void main(String args[]){ //calling a default constructor defaultConstructor b=new defaultConstructor(); } }
Hvis en klasse ikke har en konstruktør, tilføjer compileren en automatisk.
Hvad er formålet med en standardkonstruktør?
Standardkonstruktøren giver objektet standardværdier som 0, null og så videre, afhængigt af typen. En standardkonstruktør, der viser standardindstillingerne, er et eksempel.
// default constructor example // show the default values class Employee{ int id; String firstName; String lastName; //method to display the value of id and name void display(){System.out.println(id+" "+firstName+" "+lastName);} public static void main(String args[]){ // object creation Employee empOne=new Employee(); Employee empTwo=new Employee(); //displaying values of the object empOne.display(); empTwo.display(); } }
Compileren oprettede en til os, fordi vi ikke lavede en konstruktør i ovenstående klasse. Standardkonstruktøren giver 0- og null-værdier i dette tilfælde.
Konstruktør med parametre i Java
En parameteriseret konstruktør er en konstruktør, der har et bestemt antal parametre. Hvorfor vil du bruge en parameteriseret konstruktør? Forskellige værdier tildeles andre objekter ved hjælp af den parametriserede konstruktør. Du kan dog angive de samme værdier.
Eksempel:En parameteriseret konstruktør
Vi har udviklet en konstruktør til Employee-klassen med to parametre i dette eksempel. Konstruktøren kan indeholde et vilkårligt antal parametre.
//Program demonstrating the use of the parameterized constructor. class Employee{ int id; String firstName; String lastName; //creation of a parameterized constructor Employee(int i,String fname, String lname){ id = i; firstName; = fname; lastName; = lname; } //method to display the values void display(){System.out.println(id+" "+firstName+" "+lastName);} public static void main(String args[]){ //creating objects and passing values Employee empOne = new Employee(20,"Thomas","Keen"); Employee empTwo = new Employee(30,"Ann","Thompson"); //calling method to display the values of object empOne.display(); empTwo.display(); } }
Java Constructor Overloading
En konstruktør ligner en metode i Java, bortset fra at den ikke har en returtype. Ligesom Java-metoder kan det blive overbelastet.
I Java refererer konstruktøroverbelastning til flere konstruktører med varierende parameterlister. De er struktureret, så hver konstruktør gør noget særskilt. Compileren skelner dem ud fra antallet af parametre i listen og deres art.
Eksempel:Overbelastning af en konstruktør i Java
//Program illustrating constructor overloading class Employee{ int id; String firstName; String lastName; int age; //creation of a two arg constructor Employee(int i,String fname){ id = i; firstName = fname; } //creation of a three arg constructor Employee(int i,String fname, String lname){ id = i; firstName = fname; lastName = lname; } //creation of a four arg constructor Employee(int i,String fname, String lname,int a){ id = i; firstName = fname; lastName = lname; age=a; } void display(){System.out.println(id+" "+name+" "+age);} public static void main(String args[]){ Employee empOne = new Employee(20,"Ann"); Employee empTwo = new Employee(30,"Thomas","Saks"); Employee empThree = new Employee(40,"Jerry","Floyd", 49); empOne.display(); empTwo.display(); empThree.display(); } }
Konstruktør til kopiering i Java
I Java er der ingen kopikonstruktør. Men ved at bruge kopikonstruktøren i C++ kan vi kopiere værdier fra et objekt til et andet. I Java er der adskillige metoder til at kopiere værdierne af et objekt til et andet. De er som følger:
- Brug af constructor
- Ved at overføre værdierne af et objekt til et andet, kan du oprette et nyt.
- Brug af Object-klassens clone()-funktion
I dette eksempel vil vi bruge Java-konstruktøren til at replikere værdierne af et objekt til et andet.
// program for initializing the values from one object to another object. class Employee{ int id; String firstName; //constructor for initializing an integer and string Employee(int i,String fname){ id = i; firstName = fname; } //constructor to initialize another object Employee(Employee empOne){ id = empOne.id; firstName =empOne.firstName; } void display(){System.out.println(id+" "+firstName);} public static void main(String args[]){ Employee empOne = new Employee(20,"Ann"); Employee empTwo = new Employee(empOne); empOne.display(); empOne.display(); } }
Konklusion
Constructor-klassen i Java bruges til at få adgang til de interne oplysninger fra en klasses konstruktør. Konstruktøren kan gøre andre ting end initialisering, såsom at oprette et objekt, starte en tråd eller kalde en metode. I konstruktøren kan du udføre enhver operation i metoden. Java.lang.reflect-pakken indeholder det.
En konstruktør i Java er en kodeblok, der kan sammenlignes med en metode. Når en ny klasseinstans oprettes, påkaldes denne metode. Hukommelse til objektet allokeres, når konstruktøren kaldes.
Det er en specifik slags metode, der bruges til at opsætte et objekt. Mindst én konstruktør kaldes hver gang et objekt oprettes med nøgleordet new(). I dette scenarie opretter Java-kompileren automatisk en standardkonstruktør. Hvis ingen konstruktør er tilgængelig i klassen, bruger den standardkonstruktøren. Der er to typer konstruktører i Java:no-arg og parameteriserede konstruktører.