Vad är en konstruktör i Java och hur använder du det?

Vad är en konstruktör i Java och hur använder du det?

I objektorienterad programmering är en konstruktör en speciell funktion som du kallar för att skapa ett objekt. Konstruktörer har flera unika funktioner som gör att de kan arbeta.





I Java heter du en konstruktör efter sin klass. En konstruktör är en metod, definierad i klassen den gäller. Java -konstruktörer kan använda överbelastning för att tillhandahålla alternativt beteende. Konstruktörer i Java kan också använda arv för att återanvända kod.





Varför behöver du konstruktörer i alla fall?

Konstruktörer är en grundpelare i objektorienterad programmering, och Java är inget undantag. Detta exempel visar hur du kan definiera en grundläggande cirkelklass med en dataegenskap och en metod:





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

Du kan sedan skapa en instans av den här klassen och interagera med den:

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

Men det här är mindre bekvämt och robust än det kan vara. Det är bra objektorienterad praxis att inkapsla data och skydda den från obehörig åtkomst:



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

Nu kan telefonkoden använda setRadius metod och behöver inte oroa dig för dess implementeringsdetaljer:

hur man ansluter wii till tv med hdmi
Circle c = new Circle();
c.setRadius(2);

Konstruktörer erbjuder ett ännu bättre sätt att leverera data till ett objekt när du skapar det. De används ofta för initialisering av fastigheter, till exempel radie här.





Exempel på enkla konstruktörer

Den mest grundläggande konstruktören är en utan argument, som inte gör någonting:

public class Circle {
public Circle() {}
}

Se även: Lär dig hur du skapar klasser i Java





Om du inte definierar en konstruktör kommer Java att tillhandahålla en standard som fungerar på samma sätt.

Notera ett par saker:

  1. Konstruktörens namn matchar klassnamnet.
  2. Denna konstruktör använder offentlig åtkomstmodifierare, så att alla andra koder kan kalla det.
  3. En konstruktör innehåller inte en returtyp. Till skillnad från andra metoder kan konstruktörer inte returnera ett värde.

Konstruktörer utför vanligtvis någon form av initialisering. Observera att koden ovan inte initierar värdet på radien. I det här fallet ställer språket automatiskt in på noll. Denna klass förväntar sig att en användare ska använda setRadius () . Om du vill använda en mer användbar standard än 0 kan du tilldela den inom konstruktorn:

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

Cirklar som skapats med denna klass kommer åtminstone nu att ha ett verkligt område! Den som ringer kan fortfarande använda setRadius () att ge en annan radie än 1. Men konstruktören kan vara ännu vänligare:

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

Nu kan du skapa cirklar med en specifik radie redan från födseln:

hur man öppnar ett word -dokument på mac
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Detta är en mycket vanlig användning för konstruktörer. Du kommer ofta att använda dem för att initiera variabler till parametervärden.

Konstruktör överbelastning

Du kan ange mer än en konstruktör i en klassdefinition:

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

Detta ger telefonkoden ett val av hur man konstruerar objekt:

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

Med en lite mer komplex cirkel kan du utforska mer intressanta konstruktörer. Denna version lagrar 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 skapa en cirkel utan argument, en enda radie eller x- och y -koordinater vid sidan av radien. Detta är samma typ av överbelastning som Java stöder för alla metoder.

Konstruktörkedja

Vad sägs om att skapa en cirkel, baserad på en annan? Detta skulle ge oss möjligheten att enkelt kopiera cirklar. Observera följande block:

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

Detta kommer att fungera, men det upprepar en del kod i onödan. Eftersom Circle -klassen redan har en konstruktör som hanterar de enskilda egenskaperna kan du kalla det istället med detta nyckelord:

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

Detta är en form av konstruktorkedja, som kallar en konstruktör från en annan. Den använder mindre kod och hjälper till att centralisera en operation snarare än att duplicera den.

Ringer föräldrakonstruktören

Den andra formen av konstruktorkedja uppstår när en konstruktör kallar en konstruktör av sin föräldraklass. Detta kan vara antingen tydligt eller implicit. För att ringa en föräldrakonstruktör uttryckligen, använd super nyckelord:

super(x, y);

Tänk dig en Shape -klass som fungerar som förälder till cirkeln:

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

Det hanterar gemensam positionering för alla former eftersom det är funktion som de alla delar. Nu kan Circle -klassen delegera positionshantering till sin förä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;
}
}

Superklass konstruktion är en mycket viktig aspekt av arv i Java . Språket tillämpar det som standard om du inte uttryckligen ringer super i dina konstruktörer.

Åtkomstmodifierare på konstruktörer

Konstruktörer kan inkludera en åtkomstmodifierare i sin signatur. Liksom andra metoder definierar detta vilka typer av uppringare som kan komma åt konstruktorn:

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

Detta är ett mer komplicerat exempel, så var noga med att förstå det:

  • Klassen är inte abstrakt, så det är möjligt att instansera från den.
  • Konstruktören är privat så att bara den här klassen själv kan skapa en ny instans.
  • Via en statisk egenskap och metod exponerar klassen en enda, unik instans av sig själv för uppringare.

Använd konstruktörer i Java för att skapa objekt

Konstruktörer är viktiga för objektorienterad programmering. De låter dig skapa objekt, vilket är viktigt!

I Java ser konstruktörer ut som andra metoder och fungerar på ungefär samma sätt. Du bör komma ihåg de särskilda reglerna kring standardkonstruktörer, överbelastning och konstruktorkedja. Om konstruktörer är nya för dig kanske du vill läsa om de andra grundläggande Java -begreppen du bör lära dig när du börjar.

Dela med sig Dela med sig Tweet E-post 10 grundläggande Java -begrepp du bör lära dig när du börjar

Oavsett om du skriver ett grafiskt användargränssnitt, utvecklar programvara på serversidan eller en mobilapplikation med Android, kommer du att lära dig Java bra. Här är några grundläggande Java -koncept som hjälper dig att komma igång.

Läs Nästa
Relaterade ämnen
  • Programmering
  • Java
  • Kodningstips
Om författaren Bobby Jack(58 artiklar publicerade)

Bobby är en teknikentusiast som arbetade som mjukvaruutvecklare i de flesta av två decennier. Han brinner för spel, jobbar som recensioner -redaktör på Switch Player Magazine och är fördjupad i alla aspekter av online -publicering och webbutveckling.

hur man hittar information om någon
Mer från Bobby Jack

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera