Wat is een constructor in Java en hoe gebruik je het?

Wat is een constructor in Java en hoe gebruik je het?

Bij objectgeoriënteerd programmeren is een constructor een speciale functie die u aanroept om een ​​object te maken. Constructeurs hebben verschillende unieke eigenschappen waardoor ze kunnen werken.





In Java noem je een constructor naar zijn klasse. Een constructor is een methode, gedefinieerd in de klasse waarop deze van toepassing is. Java-constructors kunnen overbelasting gebruiken om alternatief gedrag te bieden. Constructeurs in Java kunnen ook gebruikmaken van overerving om code opnieuw te gebruiken.





Waarom heb je eigenlijk constructeurs nodig?

Constructors zijn een steunpilaar van objectgeoriënteerd programmeren en Java is daarop geen uitzondering. Dit voorbeeld laat zien hoe u een basisklasse Circle kunt definiëren met één gegevenseigenschap en één methode:





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

U kunt dan een instantie van deze klasse maken en ermee communiceren:

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

Maar dit is minder handig en robuust dan het zou kunnen zijn. Het is een goede objectgeoriënteerde praktijk om gegevens in te kapselen en deze te beschermen tegen ongeautoriseerde toegang:



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

Nu kan de belcode de . gebruiken setRadius methode en hoeft u zich geen zorgen te maken over de implementatiedetails:

hoe ruilkaarten op stoom te krijgen
Circle c = new Circle();
c.setRadius(2);

Constructors bieden een nog betere manier om gegevens aan een object te leveren wanneer u het maakt. Ze worden heel vaak gebruikt voor de initialisatie van eigenschappen, zoals de straal hier.





Voorbeelden van eenvoudige constructors

De meest elementaire constructor is er een zonder argumenten, die niets doet:

public class Circle {
public Circle() {}
}

Zie ook: Leer hoe u klassen in Java kunt maken





Als u geen constructor definieert, biedt Java een standaardconstructor die zich op dezelfde manier gedraagt.

Let op een paar dingen:

  1. De naam van de constructor komt overeen met de klassenaam.
  2. Deze constructor gebruikt de openbaar access modifier, dus elke andere code kan het noemen.
  3. Een constructor bevat geen retourtype. In tegenstelling tot andere methoden kunnen constructeurs geen waarde retourneren.

Constructors voeren meestal een soort initialisatie uit. Merk op dat de bovenstaande code de waarde van straal niet initialiseert. In dit geval zal de taal deze automatisch op nul zetten. Deze klasse verwacht dat een gebruiker setRadius() . Om een ​​bruikbare standaardwaarde dan 0 te gebruiken, kunt u deze binnen de constructor toewijzen:

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

Kringen die met deze klasse zijn gemaakt, hebben nu in ieder geval een echt gebied! De beller kan nog steeds gebruiken setRadius() om een ​​andere straal dan 1 op te geven. Maar de constructor kan nog vriendelijker zijn:

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

Nu kunt u vanaf de geboorte cirkels maken met een specifieke straal:

hoe te streamen vanaf nintendo switch
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Dit is een veelgebruikt gebruik voor constructeurs. U zult ze vaak gebruiken om variabelen te initialiseren tot parameterwaarden.

Constructor overbelasting

U kunt meer dan één constructor in een klassendefinitie opgeven:

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

Dit geeft aanroepende code een keuze voor het construeren van objecten:

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

Met een iets complexere Circle kun je interessantere constructors verkennen. Deze versie slaat zijn positie op:

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; }
}

U kunt nu een cirkel maken zonder argumenten, een enkele straal of x- en y-coördinaten naast de straal. Dit is dezelfde soort overbelasting die Java voor elke methode ondersteunt.

Constructor Chaining

Hoe zit het met het creëren van een cirkel, gebaseerd op een andere? Dit zou ons de mogelijkheid geven om cirkels gemakkelijk te kopiëren. Let op het volgende blok:

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

Dit zal werken, maar het herhaalt een aantal code onnodig. Omdat de klasse Circle al een constructor heeft die de individuele eigenschappen afhandelt, kun je die in plaats daarvan aanroepen met de dit trefwoord:

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

Dit is een vorm van constructor chaining, waarbij de ene constructor van de andere wordt aangeroepen. Het gebruikt minder code en helpt bij het centraliseren van een bewerking in plaats van deze te dupliceren.

De ouderconstructeur bellen

De andere vorm van constructor-chaining treedt op wanneer een constructor een constructor van zijn bovenliggende klasse aanroept. Dit kan zowel expliciet als impliciet zijn. Gebruik de om een ​​bovenliggende constructor expliciet aan te roepen Super trefwoord:

super(x, y);

Stel je een Shape-klasse voor die optreedt als de ouder van de cirkel:

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

Het behandelt een gemeenschappelijke positionering voor alle vormen, omdat dit functionaliteit is die ze allemaal delen. Nu kan de Circle-klasse het afhandelen van posities delegeren aan zijn ouder:

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;
}
}

Superklasse constructie is een zeer belangrijk aspect van erfenis in Java . De taal dwingt het standaard af als je niet expliciet belt Super in uw constructeurs.

Toegang tot modifiers op constructors

Constructeurs kunnen een toegangsmodifier in hun handtekening opnemen. Net als andere methoden definieert dit welke typen beller toegang hebben tot de constructor:

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

Dit is een ingewikkelder voorbeeld, dus zorg ervoor dat u het begrijpt:

  • De klasse is niet abstract, dus het is mogelijk om er een instantie van te maken.
  • De constructor is privé, dus alleen deze klasse zelf kan een nieuwe instantie maken.
  • Via een statische eigenschap en methode stelt de klasse een enkele, unieke instantie van zichzelf bloot aan bellers.

Constructors in Java gebruiken om objecten te maken

Constructors zijn essentieel voor objectgeoriënteerd programmeren. Hiermee kunt u objecten maken, wat essentieel is!

In Java lijken constructors op andere methoden en werken ze op vrijwel dezelfde manier. Onthoud de speciale regels rond standaardconstructors, overbelasting en constructor-chaining. Als constructors nieuw voor je zijn, wil je misschien wat meer lezen over de andere Java-kernconcepten die je moet leren als je aan de slag gaat.

Deel Deel Tweeten E-mail 10 Java-kernconcepten die u moet leren als u aan de slag gaat

Of u nu een GUI schrijft, server-side software ontwikkelt of een mobiele applicatie met Android gebruikt, het leren van Java zal u goed van pas komen. Hier zijn enkele Java-kernconcepten om u op weg te helpen.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Java
  • Codeertips
Over de auteur Bobby Jack(58 artikelen gepubliceerd)

Bobby is een technologie-enthousiasteling die bijna twee decennia als softwareontwikkelaar heeft gewerkt. Hij is gepassioneerd door gaming, werkt als recensie-editor bij Switch Player Magazine en is ondergedompeld in alle aspecten van online publiceren en webontwikkeling.

hoe gebruik je een groen scherm?
Meer van Bobby Jack

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren