Oprettelse af objekter

Som du ved, giver en klasse plan for objekter; du opretter et objekt fra en klasse. Hvert af de følgende udsagn taget fra CreateObjectDemo -programmet opretter et objekt og tildeler det til en variabel:

Den første linje opretter et objekt af Point klasse, og anden og tredje linje skaber hver et objekt i Rectangle klassen.

Hver af disse udsagn har tre dele (diskuteret i detaljer nedenfor):

  1. Erklæring: Koden, der er angivet med fed skrift, er alle variabeldeklarationer, der knytter et variabelnavn til en objekttype.
  2. Instantiering: Det nye søgeord er en Java-operatør, der opretter objektet.
  3. Initialisering: Den nye operatør efterfølges af et opkald til en konstruktør, der initialiserer det nye objekt.

Erklæring om en variabel at henvise til et objekt

Tidligere lærte du, at for at erklære en variabel skriver du:

type name;

Dette giver compileren besked om, at du vil bruge navnet til at henvise til data, hvis type er type. Med en primitiv variabel forbeholder denne erklæring også den rette mængde hukommelse til variablen.

Du kan også erklære en referencevariabel på sin egen linje. For eksempel:

Point originOne;

Hvis du erklærer originOne sådan, vil dens værdi være ubestemt, indtil et objekt faktisk oprettes og tildeles det. At kun erklære en referencevariabel opretter ikke et objekt. Til det er du nødt til at bruge operatoren new som beskrevet i det næste afsnit. Du skal tildele et objekt til originOne, før du bruger det i din kode. Ellers får du en compiler-fejl.

En variabel i denne tilstand, der i øjeblikket ikke refererer til noget objekt, kan illustreres som følger (variabelnavnet, originOne plus en henvisning, der peger på intet):

Instantiering af en klasse

Den nye operatør instantierer en klasse ved at tildele hukommelse til et nyt objekt og returnere en reference til den pågældende hukommelse. Den nye operatør påkalder også objektkonstruktøren.

Bemærk: Udtrykket “instantiating a class” betyder det samme som “at oprette et objekt.” Når du opretter et objekt, opretter du en “instans” af en klasse og “instantierer” derfor en klasse.

Den nye operatør kræver et enkelt postfix-argument: et opkald til en konstruktør. Navnet på konstruktøren giver navnet på den klasse, der skal instantieres.

Den nye operator returnerer en reference til det objekt, den oprettede. Denne reference tildeles normalt en variabel af den passende type, som:

Den reference, der returneres af den nye operatør, gør ikke skal tildeles en variabel. Det kan også bruges direkte i et udtryk. For eksempel:

int height = new Rectangle().height;

Denne erklæring diskuteres i det næste afsnit.

Initialisering af et objekt

Her er koden til punktklassen:

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

Denne klasse indeholder en enkelt konstruktør. Du kan genkende en konstruktør, fordi dens erklæring bruger samme navn som klassen, og den ikke har nogen returtype. Konstruktøren i punktklassen tager to heltalargumenter, som deklareret af koden (int a, int b). Følgende udsagn indeholder 23 og 94 som værdier for disse argumenter:

Point originOne = new Point(23, 94);

Resultatet af udførelsen af dette sætning kan illustreres i næste figur:

Her er koden til klassen Rektangel, som indeholder fire konstruktører:

Hver konstruktør giver dig mulighed for at angive startværdier for rektanglets oprindelse, bredde og højde ved hjælp af både primitive og referencetyper. Hvis en klasse har flere konstruktører, skal de have forskellige underskrifter. Java-kompilatoren differentierer t han konstruerer ud fra antallet og typen af argumenter. Når Java-kompileren møder følgende kode, ved den at kalde konstruktøren i klassen Rektangel, der kræver et punktargument efterfulgt af to heltalargumenter:

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

Dette kalder en af Rectangle “s konstruktører, der initialiserer origin til originOne sætter konstruktøren width til 100 og height til 200.Nu er der to referencer til det samme punktobjekt – et objekt kan have flere referencer til det som vist i næste figur:

Følgende kodelinje kalder Rectangle -konstruktøren, der kræver to heltalargumenter, som giver den indledende værdier for bredde og højde. Hvis du inspicerer koden i konstruktøren, vil du se, at den opretter et nyt punktobjekt, hvis x- og y-værdier initialiseres til 0:

Rectangle rectTwo = new Rectangle(50, 100);

Den rektangelkonstruktør, der bruges i følgende udsagn, tager ikke nogen argumenter, så den kaldes en no-argument-konstruktør:

Rectangle rect = new Rectangle();

Alle klasser har mindst en konstruktør. Hvis en klasse ikke eksplicit erklærer nogen, leverer Java-compileren automatisk en konstruktør uden argument, kaldet standardkonstruktøren. Denne standardkonstruktør kalder klasseforældrenes konstruktør uden argument eller Object konstruktøren, hvis klassen ikke har nogen anden forælder. Hvis forældrene ikke har nogen konstruktør (Object har en), vil compileren afvise programmet.

Write a Comment

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *