Crearea obiectelor

După cum știți, o clasă oferă planul obiectelor; creați un obiect dintr-o clasă. Fiecare dintre următoarele afirmații preluate din programul CreateObjectDemo creează un obiect și îl atribuie unei variabile:

Prima linie creează un obiect al Point, iar a doua și a treia linie creează fiecare un obiect din clasa Rectangle.

Fiecare dintre aceste instrucțiuni are trei părți (discutat în detaliu mai jos):

  1. Declarație: codul setat cu caractere aldine reprezintă toate declarațiile variabilei care asociază un nume de variabilă cu un tip de obiect.
  2. Instanțare: noul cuvânt cheie este un operator Java care creează obiectul.
  3. Inițializare: noul operator este urmat de un apel către un constructor, care inițializează noul obiect.

Declararea unei variabile pentru a vă referi la un obiect

Anterior, ați aflat că pentru a declara o variabilă, scrieți:

type name;

Aceasta notifică compilatorului că veți folosi numele pentru a vă referi la date al căror tip este tip. Cu o variabilă primitivă, această declarație rezervă, de asemenea, cantitatea adecvată de memorie pentru variabilă.

De asemenea, puteți declara o variabilă de referință pe propria linie. De exemplu:

Point originOne;

Dacă declarați originOne astfel, valoarea acestuia va fi să fie nedeterminat până când un obiect este creat și atribuit acestuia. Simpla declarare a unei variabile de referință nu creează un obiect. Pentru aceasta, trebuie să utilizați operatorul new, așa cum este descris în secțiunea următoare. Trebuie să atribuiți un obiect originOne înainte de al utiliza în cod. În caz contrar, veți primi o eroare de compilator.

O variabilă în această stare, care în prezent nu face referire la niciun obiect, poate fi ilustrată după cum urmează (numele variabilei, originOne , plus o referință care nu indică nimic):

Instantierea unei clase

Noul operator instanțiază o clasă prin alocarea memoriei pentru un obiect nou și returnarea unei referințe la memoria respectivă. Noul operator invocă, de asemenea, constructorul de obiecte.

Notă: Expresia „instanțierea unei clase” înseamnă același lucru cu „crearea unui obiect”. Când creați un obiect, creați o „instanță” a unei clase, prin urmare „instanțiați” o clasă.

Noul operator necesită un singur argument postfix: un apel către un constructor. Numele constructorului oferă numele clasei de instanțiat.

Noul operator returnează o referință la obiectul pe care l-a creat. Această referință este de obicei atribuită unei variabile de tipul corespunzător, cum ar fi:

Referința returnată de noul operator nu este trebuie să fie alocate unei variabile. Poate fi folosit și direct într-o expresie. De exemplu:

int height = new Rectangle().height;

Această afirmație va fi discutată în secțiunea următoare.

Initializarea unui obiect

Aici este codul pentru clasa Point:

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

Această clasă conține un singur constructor. Puteți recunoaște un constructor deoarece declarația sa folosește același nume ca și clasa și nu are niciun tip de returnare. Constructorul din clasa Point acceptă două argumente întregi, așa cum este declarat de cod (int a, int b). Următoarea afirmație oferă 23 și 94 ca valori pentru aceste argumente:

Point originOne = new Point(23, 94);

Rezultatul executării acestui afirmația poate fi ilustrată în figura următoare:

Aici este codul pentru clasa Rectangle, care conține patru constructori:

Fiecare constructor vă permite să furnizați valori inițiale pentru originea, lățimea și înălțimea dreptunghiului, utilizând atât tipurile primitive, cât și cele de referință. Dacă o clasă are mai mulți constructori, aceștia trebuie să aibă semnături diferite. Compilatorul Java diferențiază t constructorii se bazează pe numărul și tipul argumentelor. Când compilatorul Java întâlnește următorul cod, știe să apeleze constructorul din clasa Rectangle care necesită un argument Point urmat de două argumente întregi:

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

Aceasta apelează unul dintre Rectangle „constructori care inițializează origin la originOne. De asemenea, constructorul setează width la 100 și height la 200.Acum există două referințe la același obiect Point – un obiect poate avea mai multe referințe la acesta, așa cum se arată în figura următoare:

Următoarea linie de cod apelează constructorul Rectangle care necesită două argumente întregi, care furnizează inițialul valori pentru lățime și înălțime. Dacă inspectați codul în cadrul constructorului, veți vedea că acesta creează un nou obiect Point ale cărui valori x și y sunt inițializate la 0:

Rectangle rectTwo = new Rectangle(50, 100);

Constructorul dreptunghiular utilizat în următoarea declarație nu ia niciun argument, deci este numit un constructor fără argumente:

Rectangle rect = new Rectangle();

Toate clasele au cel puțin un constructor. Dacă o clasă nu declară în mod explicit niciuna, compilatorul Java furnizează automat un constructor fără argumente, numit constructor implicit. Acest constructor implicit numește constructorul fără argument al părintelui clasei sau constructorul Object dacă clasa nu are alt părinte. Dacă părintele nu are niciun constructor (Object are unul), compilatorul va respinge programul.

Write a Comment

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *