Mikä on Java -konstruktori ja miten sitä käytetään?

Mikä on Java -konstruktori ja miten sitä käytetään?

Objektisuuntautuneessa ohjelmoinnissa konstruktori on erityinen toiminto, jonka kutsut luodaksesi objektin. Rakentajilla on useita ainutlaatuisia ominaisuuksia, joiden avulla ne voivat toimia.





Java -ohjelmassa nimeät konstruktorin luokkansa mukaan. Konstruktori on menetelmä, joka on määritelty luokassa, jota se koskee. Java -konstruktorit voivat käyttää ylikuormitusta vaihtoehtoisen käyttäytymisen tarjoamiseksi. Java -konstruktorit voivat myös käyttää perintöä koodin uudelleenkäyttöön.





Miksi tarvitset rakentajia?

Rakenteet ovat olio-ohjelmoinnin tukipilari, eikä Java ole poikkeus. Tämä esimerkki näyttää, kuinka voit määritellä Circle -perusluokan yhdellä dataominaisuudella ja yhdellä menetelmällä:





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

Voit sitten luoda tämän luokan ilmentymän ja olla vuorovaikutuksessa sen kanssa:

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

Mutta tämä on vähemmän kätevää ja kestävää kuin se voisi olla. Tietojen koteloiminen ja luvattoman käytön estäminen on hyvä olio-suuntautunut käytäntö:



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

Nyt kutsukoodi voi käyttää setRadius ja sinun ei tarvitse huolehtia sen toteutustiedoista:

kuinka korjata Apple -logoon juuttunut iPhone
Circle c = new Circle();
c.setRadius(2);

Konstruktorit tarjoavat entistä paremman tavan toimittaa tietoja objektiin, kun luot sen. Niitä käytetään hyvin usein ominaisuuksien, kuten säde tässä.





Esimerkkejä yksinkertaisista rakentajista

Perusrakentaja on sellainen, jolla ei ole argumentteja ja joka ei tee mitään:

public class Circle {
public Circle() {}
}

Katso myös: Opi luomaan luokkia Javassa





Jos et määritä konstruktoria, Java tarjoaa oletusrakenteen, joka toimii samalla tavalla.

Huomaa pari asiaa:

  1. Konstruktorin nimi vastaa luokan nimeä.
  2. Tämä rakentaja käyttää julkinen access modifier, joten mikä tahansa muu koodi voi kutsua sitä.
  3. Rakentaja ei sisällä palautustyyppiä. Toisin kuin muut menetelmät, konstruktorit eivät voi palauttaa arvoa.

Rakentajat suorittavat tyypillisesti jonkinlaisen alustuksen. Huomaa, että yllä oleva koodi ei alustaa säteen arvoa. Tässä tapauksessa kieli asettaa sen automaattisesti nollaksi. Tämä luokka odottaa käyttäjän käyttävän setRadius () . Jos haluat käyttää hyödyllisempää oletusarvoa kuin 0, voit määrittää sen rakentajaan:

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

Tällä luokalla luotuilla piireillä on ainakin nyt todellinen alue! Soittaja voi edelleen käyttää setRadius () antaa muun säteen kuin 1. Mutta rakentaja voi olla jopa ystävällisempi:

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

Nyt voit luoda ympyröitä, joilla on tietty säde syntymästä alkaen:

xbox one -ohjain sammuu jatkuvasti
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Tämä on hyvin yleinen käyttö rakentajille. Käytät niitä usein alustamaan muuttujat parametriarvoiksi.

Konstruktorin ylikuormitus

Voit määrittää useamman kuin yhden konstruktorin luokan määritelmässä:

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

Tämä antaa kutsukoodille mahdollisuuden valita, miten objekteja rakennetaan:

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

Hieman monimutkaisemman ympyrän avulla voit tutkia mielenkiintoisempia rakentajia. Tämä versio tallentaa asemansa:

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

Voit nyt luoda ympyrän ilman argumentteja, yhden säteen tai x- ja y -koordinaatit säteen rinnalle. Tämä on samanlainen ylikuormitus, jota Java tukee millä tahansa menetelmällä.

Rakentajaketju

Entä yhden piirin luominen toisen perusteella? Tämä antaisi meille mahdollisuuden kopioida piirejä helposti. Huomioi seuraava lohko:

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

Tämä toimii, mutta se toistaa jotakin koodia tarpeettomasti. Koska Circle -luokassa on jo rakentaja, joka käsittelee yksittäisiä ominaisuuksia, voit kutsua sitä sen sijaan käyttämällä Tämä avainsana:

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

Tämä on yksi konstruktorin ketjutusmuoto, kutsuen yhtä konstruktoria toiselta. Se käyttää vähemmän koodia ja auttaa keskittämään toiminnon sen sijaan, että kopioisi sen.

Soittaminen päärakentajaan

Toinen konstruktorin ketjutusmuoto esiintyy, kun konstruktori kutsuu emoluokkansa konstruktorin. Tämä voi olla joko eksplisiittistä tai implisiittistä. Jos haluat kutsua päärakentajaa nimenomaisesti, käytä super avainsana:

super(x, y);

Kuvittele, että Shape -luokka toimii ympyrän vanhempana:

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

Se hoitaa kaikkien muotojen yhteisen sijoittelun, koska tämä on toiminnallisuus, joka niillä kaikilla on yhteinen. Nyt Circle -luokka voi siirtää sijainnin käsittelyn vanhemmalleen:

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

Superclass rakentaminen on erittäin tärkeä osa perintö Javassa . Kieli pakottaa sen oletuksena, jos et nimenomaisesti soita super rakentajissasi.

Access Modifiers on Constructors

Rakentajat voivat sisällyttää allekirjoitukseensa pääsynmuokkaajan. Kuten muutkin menetelmät, tämä määrittää, minkä tyyppiset soittajat voivat käyttää konstruktoria:

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

Tämä on monimutkaisempi esimerkki, joten muista ymmärtää se:

  • Luokka ei ole abstrakti, joten siitä on mahdollista välttyä.
  • Rakentaja on yksityinen, joten vain tämä luokka voi luoda uuden esiintymän.
  • Staattisen ominaisuuden ja menetelmän avulla luokka altistaa soittajille yhden ainutlaatuisen ilmentymän itsestään.

Käytä objektien luomiseen Java -konstruktoreita

Rakenteet ovat välttämättömiä olio-ohjelmoinnille. Niiden avulla voit luoda esineitä, mikä on välttämätöntä!

Javassa konstruktorit näyttävät muista menetelmistä ja toimivat suunnilleen samalla tavalla. Muista oletusrakentajia, ylikuormitusta ja rakentajan ketjutusta koskevat erityissäännöt. Jos konstruktorit ovat sinulle uusia, saatat haluta lukea muita Java -peruskäsitteitä, jotka sinun pitäisi oppia aloittaessasi.

Jaa Jaa Tweet Sähköposti 10 Core Java -käsitettä, jotka sinun pitäisi oppia aloittaessasi

Kirjoitatpa sitten graafista käyttöliittymää, kehität palvelinpuolen ohjelmistoa tai Android-sovellusta käyttävää mobiilisovellusta, Java-oppiminen palvelee sinua hyvin. Tässä on joitain Java -peruskäsitteitä, joiden avulla pääset alkuun.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Java
  • Koodausvinkkejä
Kirjailijasta Bobby Jack(58 artikkelia julkaistu)

Bobby on teknologian harrastaja, joka työskenteli ohjelmistokehittäjänä lähes kaksi vuosikymmentä. Hän on intohimoinen pelaamisesta, työskentelee Switch Editor Magazine -lehden arvostelutoimittajana ja on upotettu kaikkeen verkkojulkaisemiseen ja -kehitykseen.

ilmaisia ​​pelejä, jotka eivät käytä dataa
Lisää Bobby Jackilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi