Hvad er en konstruktør i Java, og hvordan bruger du det?

Hvad er en konstruktør i Java, og hvordan bruger du det?

I objektorienteret programmering er en konstruktør en særlig funktion, som du kalder for at oprette et objekt. Konstruktører har flere unikke funktioner, som gør dem i stand til at arbejde.





I Java navngiver du en konstruktør efter sin klasse. En konstruktør er en metode, defineret i den klasse, den gælder for. Java -konstruktører kan bruge overbelastning til at levere alternativ adfærd. Konstruktører i Java kan også gøre brug af arv til at genbruge kode.





Hvorfor har du overhovedet brug for konstruktører?

Konstruktører er en grundpille i objektorienteret programmering, og Java er ingen undtagelse. Dette eksempel viser, hvordan du kan definere en grundlæggende cirkelklasse med en dataegenskab og en metode:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Du kan derefter oprette en forekomst af denne klasse og interagere med den:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

Men dette er mindre bekvemt og robust, end det kunne være. Det er god objektorienteret praksis at indkapsle data og beskytte dem mod uautoriseret adgang:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Nu kan opkaldskoden bruge setRadius metode og behøver ikke bekymre dig om dens implementeringsdetaljer:

hvordan man forbliver sikker på tor
Circle c = new Circle();
c.setRadius(2);

Konstruktører tilbyder en endnu bedre måde at levere data til et objekt, når du opretter det. De bruges meget ofte til initialisering af ejendomme, f.eks radius her.





Eksempler på simple konstruktører

Den mest grundlæggende konstruktør er en uden argumenter, der ikke gør noget:

public class Circle {
public Circle() {}
}

Se også: Lær, hvordan du opretter klasser i Java





Hvis du ikke definerer en konstruktør, leverer Java en standard, der opfører sig på samme måde.

Bemærk et par ting:

  1. Konstruktørens navn matcher klassens navn.
  2. Denne konstruktør bruger offentlig adgangsmodifikator, så enhver anden kode kan kalde det.
  3. En konstruktør inkluderer ikke en returtype. I modsætning til andre metoder kan konstruktører ikke returnere en værdi.

Konstruktører udfører typisk en form for initialisering. Bemærk, at ovenstående kode ikke initialiserer værdien af ​​radius. I dette tilfælde sætter sproget det automatisk til nul. Denne klasse forventer, at en bruger skal bruge setRadius () . Hvis du vil bruge en mere nyttig standard end 0, kan du tildele den inden for konstruktøren:

public class Circle {
public Circle() { radius = 1; }
}

Cirkler oprettet med denne klasse vil i det mindste nu have et faktisk område! Den, der ringer op, kan stadig bruge setRadius () at give en anden radius end 1. Men konstruktøren kan være endnu venligere:

public class Circle {
public Circle(double r) { radius = r; }
}

Nu kan du oprette cirkler med en bestemt radius lige fra fødslen:

hvordan man sletter fil i linux
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Dette er en meget almindelig anvendelse for konstruktører. Du vil ofte bruge dem til at initialisere variabler til parameterværdier.

Konstruktør Overbelastning

Du kan angive mere end én konstruktør i en klassedefinition:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

Dette giver opkaldskode et valg om, hvordan man konstruerer objekter:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

Med en lidt mere kompleks cirkel kan du udforske flere interessante konstruktører. Denne version gemmer sin position:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

Du kan nu oprette en cirkel uden argumenter, en enkelt radius eller x- og y -koordinater sammen med radius. Dette er den samme form for overbelastning, som Java understøtter til enhver metode.

Konstruktør kæde

Hvad med at oprette en cirkel baseret på en anden? Dette ville give os mulighed for let at kopiere cirkler. Vær opmærksom på følgende blok:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Dette vil fungere, men det gentager unødvendig kode. Da Circle -klassen allerede har en konstruktør, der håndterer de enkelte egenskaber, kan du i stedet kalde det ved hjælp af det her søgeord:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Dette er en form for konstruktorkæde, der kalder en konstruktør fra en anden. Den bruger mindre kode og hjælper med at centralisere en operation frem for at kopiere den.

Ringer til forældrekonstruktøren

Den anden form for konstruktorkæden opstår, når en konstruktør kalder en konstruktør af sin forældreklasse. Dette kan enten være eksplicit eller implicit. For at kalde en forældrekonstruktør eksplicit skal du bruge super søgeord:

super(x, y);

Forestil dig en Shape -klasse, der fungerer som forælder til cirklen:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Det håndterer fælles positionering for alle former, da det er funktionalitet, de alle deler. Nu kan Circle -klassen delegere positionshåndtering til sin forælder:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Superklassekonstruktion er et meget vigtigt aspekt af arv i Java . Sproget håndhæver det som standard, hvis du ikke eksplicit ringer super i dine konstruktører.

Adgang til modifikatorer på konstruktører

Konstruktører kan inkludere en adgangsmodifikator i deres signatur. Ligesom andre metoder definerer dette, hvilke typer opkaldere der kan få adgang til konstruktøren:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Dette er et mere kompliceret eksempel, så vær opmærksom på at forstå det:

  • Klassen er ikke abstrakt, så det er muligt at instantiere fra den.
  • Konstruktøren er privat, så kun denne klasse selv kan oprette en ny forekomst.
  • Via en statisk egenskab og metode udsætter klassen en enkelt, unik forekomst af sig selv for opkaldere.

Brug konstruktører i Java til at oprette objekter

Konstruktører er afgørende for objektorienteret programmering. De giver dig mulighed for at oprette objekter, hvilket er vigtigt!

I Java ligner konstruktører andre metoder og fungerer på nogenlunde samme måde. Du skal huske de særlige regler omkring standardkonstruktører, overbelastning og konstruktorkæden. Hvis konstruktører er nye for dig, vil du måske læse om de andre centrale Java -koncepter, du bør lære, når du starter.

Del Del Tweet E -mail 10 Core Java -koncepter, du bør lære, når du kommer i gang

Uanset om du skriver en GUI, udvikler serverside-software eller en mobilapplikation ved hjælp af Android, vil Java lære dig godt. Her er nogle centrale Java -koncepter, der hjælper dig med at komme i gang.

Læs Næste
Relaterede emner
  • Programmering
  • Java
  • Kodningstip
Om forfatteren Bobby Jack(58 artikler udgivet)

Bobby er en teknologientusiast, der arbejdede som softwareudvikler i det meste af to årtier. Han brænder for spil, arbejder som Reviews Editor hos Switch Player Magazine og er nedsænket i alle aspekter af onlineudgivelse og webudvikling.

lav en bootbar usb fra iso
Mere fra Bobby Jack

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere