Objektien luominen

Kuten tiedät, luokka tarjoaa objektien suunnitelman; luot objektin luokasta. Jokainen seuraavista CreateObjectDemo -ohjelmasta otetuista lauseista luo objektin ja määrittää sen muuttujalle:

Ensimmäinen rivi luo objektin Point -luokka, ja toinen ja kolmas rivi luovat kukin Rectangle -luokan objektin.

Jokaisella näistä lauseista on kolme osaa (käsitellään yksityiskohtaisesti jäljempänä):

  1. Ilmoitus: Lihavoidut koodit ovat kaikki muuttujailmoituksia, jotka yhdistävät muuttujan nimen objektityyppiin.
  2. Instantiation: Uusi avainsana on Java-operaattori, joka luo objektin.
  3. Alustus: Uutta operaattoria seuraa kutsu konstruktorille, joka alustaa uuden objektin.

Muuttujan julistaminen viitata objektiin

Aiemmin opit, että muuttujan ilmoittamiseksi kirjoitat:

type name;

Tämä ilmoittaa kääntäjälle, että käytät nimeä viitataksesi tietoihin, joiden tyyppi on tyyppi. Primitiivisellä muuttujalla tämä ilmoitus varaa myös muuttujalle oikean määrän muistia.

Voit myös ilmoittaa viitemuuttujan omalle rivilleen. Esimerkiksi:

Point originOne;

Jos ilmoitat originOne näin, sen arvo olla määrittelemätön, kunnes objekti on todella luotu ja osoitettu sille. Yksinkertaisesti viitemuuttujan ilmoittaminen ei luo objektia. Tätä varten sinun on käytettävä new -operaattoria seuraavassa osassa kuvatulla tavalla. Sinun on määritettävä objekti osoitteeseen originOne, ennen kuin käytät sitä koodissasi. Muussa tapauksessa saat kääntäjävirheen.

Tässä tilassa oleva muuttuja, joka ei tällä hetkellä viittaa mihinkään objektiin, voidaan kuvata seuraavasti (muuttujan nimi, originOne ja mihinkään viittaava viittaus):

Luokan välitön käynnistys

Uusi operaattori havainnollistaa luokan varaamalla muistia uudelle objektille ja palauttamalla viitteen kyseiseen muistiin. Uusi operaattori kutsuu myös objektinrakentajan.

Huomaa: Ilmaus ”luokan instantiointi” tarkoittaa samaa kuin ”objektin luominen”. Kun luot objektin, luot luokan ”ilmentymän”, minkä vuoksi ”välität” luokan.

Uusi operaattori vaatii yhden postfix-argumentin: kutsun rakentajalle. Konstruktorin nimi antaa luokan nimen, joka tulee ilmentää.

Uusi operaattori palauttaa viitteen luomaansa objektiin. Tämä viite on yleensä määritetty sopivan tyyppiselle muuttujalle, kuten:

Uuden operaattorin palauttama viite ei on määritettävä muuttujalle. Sitä voidaan käyttää myös suoraan lausekkeessa. Esimerkiksi:

int height = new Rectangle().height;

Tätä lausuntoa käsitellään seuraavassa osiossa.

Objektin alustaminen

Tässä on Point-luokan koodi:

public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}

Tämä luokka sisältää yhden konstruktorin. Voit tunnistaa konstruktorin, koska sen käsky käyttää samaa nimeä kuin luokka ja sillä ei ole palautustyyppiä. Point-luokan rakentaja vie kaksi kokonaislukua, kuten koodi on ilmoittanut (int a, int b). Seuraava lause antaa arvot 23 ja 94 kyseisille argumenteille:

Point originOne = new Point(23, 94);

Tämän suorituksen tulos lause voidaan havainnollistaa seuraavassa kuvassa:

Tässä on Suorakulmio-luokan koodi, joka sisältää neljä konstruktoria:

Jokaisen konstruktorin avulla voit antaa alkuarvot suorakulmion alkuperälle, leveydelle ja korkeudelle sekä primitiivisillä että viitetyypeillä. Jos luokassa on useita rakentajia, niillä on oltava erilaiset allekirjoitukset. Java-kääntäjä erottaa t hän rakentaa argumenttien lukumäärän ja tyypin perusteella. Kun Java-kääntäjä kohtaa seuraavan koodin, se tietää kutsuvan Suorakulmio-luokan konstruktorin, joka vaatii Point-argumentin, jota seuraa kaksi kokonaislukua:

 Rectangle rectOne = new Rectangle(originOne, 100, 200);

Tämä kutsuu yhtä Rectangle ”konstruktoreista, joka alustaa origin muotoon originOnewidth arvoksi 100 ja height arvoksi 200.Nyt on kaksi viittausta samaan Point-objektiin – objektilla voi olla useita viittauksia siihen, kuten seuraavassa kuvassa näkyy:

Seuraava koodirivi kutsuu Rectangle -rakentajaa, joka vaatii kaksi kokonaislukuargumenttia, jotka antavat alkukoodin leveyden ja korkeuden arvot. Jos tarkastat koodin konstruktorissa, huomaat, että se luo uuden Point-objektin, jonka x- ja y-arvot alustetaan arvoon 0:

Rectangle rectTwo = new Rectangle(50, 100);

Seuraavassa lauseessa käytetty suorakaiteen muotoilija ei ota argumentteja, joten sitä kutsutaan argumenttittomaksi konstruktoriksi:

Rectangle rect = new Rectangle();

Kaikilla luokilla on vähintään yksi konstruktori. Jos luokka ei nimenomaisesti ilmoita mitään, Java-kääntäjä antaa automaattisesti argumenttittoman konstruktorin, jota kutsutaan oletuskonstruktoriksi. Tämä oletusrakentaja kutsuu luokan vanhemman argumenttirakentajan tai Object -rakentajan, jos luokassa ei ole muuta vanhempaa. Jos vanhemmalla ei ole konstruktoria (Object on sellainen), kääntäjä hylkää ohjelman.

Write a Comment

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *