Hva er en konstruktør i Java og hvordan bruker du det?

Hva er en konstruktør i Java og hvordan bruker du det?

I objektorientert programmering er en konstruktør en spesiell funksjon som du kaller for å lage et objekt. Konstruktører har flere unike funksjoner som gjør dem i stand til å jobbe.





I Java navngir du en konstruktør etter klassen. En konstruktør er en metode, definert i klassen den gjelder for. Java -konstruktører kan bruke overbelastning for å gi alternativ oppførsel. Konstruktører i Java kan også gjøre bruk av arv for å gjenbruke kode.





Hvorfor trenger du konstruktører uansett?

Konstruktører er en bærebjelke i objektorientert programmering, og Java er intet unntak. Dette eksemplet viser hvordan du kan definere en grunnleggende sirkelklasse med én dataegenskap og én metode:





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

Du kan deretter opprette en forekomst av denne klassen og samhandle med den:

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

Men dette er mindre praktisk og robust enn det kan være. Det er god objektorientert praksis å kapsle inn data og beskytte dem mot uautorisert tilgang:



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

Nå kan telefonkoden bruke setRadius metode og trenger ikke å bekymre deg for implementeringsdetaljene:

kan jeg bruke ps3 -spill på ps4
Circle c = new Circle();
c.setRadius(2);

Konstruktører tilbyr en enda bedre måte å levere data til et objekt når du lager det. De brukes veldig ofte til initialisering av eiendommer, for eksempel radius her.





Eksempler på enkle konstruktører

Den mest grunnleggende konstruktøren er en uten argumenter, som ikke gjør noe:

public class Circle {
public Circle() {}
}

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





Hvis du ikke definerer en konstruktør, gir Java en standard som oppfører seg på samme måte.

Legg merke til et par ting:

  1. Navnet på konstruktøren samsvarer med klassens navn.
  2. Denne konstruktøren bruker offentlig tilgangsmodifikator, slik at enhver annen kode kan kalle det.
  3. En konstruktør inkluderer ikke en returtype. I motsetning til andre metoder kan ikke konstruktører returnere en verdi.

Konstruktører utfører vanligvis en slags initialisering. Vær oppmerksom på at koden ovenfor ikke initialiserer verdien av radius. I dette tilfellet vil språket automatisk sette det til null. Denne klassen forventer at en bruker skal bruke setRadius () . For å bruke en mer nyttig standard enn 0, kan du tilordne den i konstruktøren:

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

Sirkler opprettet med denne klassen vil i det minste nå ha et faktisk område! Den som ringer kan fortsatt bruke setRadius () å gi en annen radius enn 1. Men konstruktøren kan være enda vennligere:

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

Nå kan du lage sirkler med en bestemt radius helt fra fødselen:

hvordan vite om noen blokkerte deg på instagram
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Dette er en veldig vanlig bruk for konstruktører. Du vil ofte bruke dem til å initialisere variabler til parameterverdier.

Konstruktør Overbelastning

Du kan angi mer enn én konstruktør i en klasse definisjon:

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

Dette gir telefonkoden 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 litt mer kompleks sirkel kan du utforske flere interessante konstruktører. Denne versjonen lagrer sin posisjon:

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 nå opprette en sirkel uten argumenter, en enkelt radius eller x- og y -koordinater ved siden av radiusen. Dette er den samme typen overbelastning som Java støtter for enhver metode.

Constructor Chaining

Hva med å lage en sirkel, basert på en annen? Dette vil gi oss muligheten til enkelt å kopiere sirkler. Følg følgende blokk:

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

Dette vil fungere, men det gjentar noen kode unødvendig. Siden Circle -klassen allerede har en konstruktør som håndterer de enkelte egenskapene, kan du i stedet kalle det ved å bruke dette søkeord:

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

Dette er en form for konstruktorkjetting, som kaller en konstruktør fra en annen. Den bruker mindre kode og hjelper til med å sentralisere en operasjon i stedet for å duplisere den.

Ringer foreldrekonstruktøren

Den andre formen for konstruktorkjetting oppstår når en konstruktør kaller en konstruktør av sin overordnede klasse. Dette kan være eksplisitt eller implisitt. For å ringe en overordnet konstruktør eksplisitt, bruk super søkeord:

super(x, y);

Tenk deg en Shape -klasse som fungerer som overordnet til sirkelen:

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

Den håndterer vanlig posisjonering for alle former siden dette er funksjonalitet de alle deler. Nå kan Circle -klassen delegere posisjonshåndtering til sine overordnede:

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

Superklassekonstruksjon er et veldig viktig aspekt av arv i Java . Språket håndhever det som standard hvis du ikke eksplisitt ringer super i konstruktørene dine.

Få tilgang til modifikatorer på konstruktører

Konstruktører kan inkludere en tilgangsmodifikator i signaturen. Som andre metoder definerer dette hvilke typer innringere som kan få tilgang til konstruktøren:

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

Dette er et mer komplisert eksempel, så vær oppmerksom på å forstå det:

  • Klassen er ikke abstrakt, så det er mulig å instantere fra den.
  • Konstruktøren er privat, så bare denne klassen kan lage en ny forekomst.
  • Via en statisk egenskap og metode, avslører klassen en enkelt, unik forekomst av seg selv for innringere.

Bruk konstruktører i Java til å lage objekter

Konstruktører er avgjørende for objektorientert programmering. De lar deg lage objekter, noe som er viktig!

I Java ser konstruktører ut som andre metoder og fungerer omtrent på samme måte. Du bør huske de spesielle reglene rundt standardkonstruktører, overbelastning og konstruktorkjetting. Hvis konstruktører er nye for deg, vil du kanskje lese deg opp på de andre kjerne -Java -konseptene du bør lære når du starter.

Dele Dele kvitring E -post 10 kjerne -Java -konsepter du bør lære når du kommer i gang

Enten du skriver en GUI, utvikler server-side-programvare eller en mobilapplikasjon som bruker Android, vil det være bra å lære Java. Her er noen kjerne -Java -konsepter for å hjelpe deg i gang.

Les neste
Relaterte temaer
  • Programmering
  • Java
  • Kodetips
Om forfatteren Bobby Jack(58 artikler publisert)

Bobby er en teknologientusiast som jobbet som programvareutvikler i de fleste to tiårene. Han brenner for spill, jobber som Reviews Editor i Switch Player Magazine, og er fordypet i alle aspekter av online publisering og webutvikling.

hva skal jeg oppgradere på min pc -test
Mer fra Bobby Jack

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere