Am văzut că putem avea mai multe valori grupate în șiruri, fiecare fiind identificată prin poziția sa în șir. În Java, elementele șirurilor trebuie să aibă același tip.
Dar, poate dorim să grupăm valori de tipuri diferite și/sau să nu știm exact pe ce poziție am pus o anumită valoare. Sunt cazuri în care este logic ca anumite valori să fie împreună. De exemplu, am putea avea o persoană pentru care dorim să știm numele și vârsta; numele ar fi un string, iar vârsta un număr întreg. Am putea lucra cu două variabile, dar nu ar exista nicio legătură clară între ele.
Dacă am complica puțin problema și am dori să creăm un șir de persoane, atunci am avea un șir de nume și un șir de vârste. Ar trebui să avem grijă ca, în cele două șiruri, numărul de ordine să fie același pentru o anumită persoană. Totuși, ar fi mult mai simplu să avem un șir de persoane, nu?
În Java putem crea așa-numitele obiecte; un obiect poate avea diferite proprietăți. În cazul nostru am avea un obiect care reprezintă o persoană și obiectul respectiv ar avea două proprietăți: numele și vârsta.
Pentru a putea utiliza astfel de obiecte, în Java trebuie mai întâi să definim structura lor. Practic, trebuie să spunem că persoanele au nume și vârstă. Este un fel de șablon care ne spune ce conțin obiectele noastre; acest șablon se numește clasă. Clasele ajung să fie foarte complicate și au multe utilizări, dar deocamdată ne limităm la elementele de bază.
Pentru a defini o clasă va trebui să precizăm numele său, precum și tipul și numele proprietăților obiectelor care fac parte din clasa respectivă. Clasa noastră ar fi definită astfel:
1 2 3 4 |
class Persoana { String nume; int varsta; } |
Observați că am folosit cuvântul class urmat numele clasei și apoi, între acolade, am specificat tipurile și numele proprietăților, separate prin semnul ;. Proprietățile sunt declarate la fel ca variabilele; diferența față de variabilele obișnuite este faptul că ele nu există independent, ci doar în interiorul obiectelor.
Dacă am definit clasa, putem crea acum obiecte. Pentru fiecare obiect vom avea o variabilă care va fi utilizată pentru a lucra cu obiectul respectiv. Tipul acestei variabile este chiar numele clasei. Un exemplu pentru declararea unei astfel de variabile este:
1 |
Persoana elev; |
Acum trebuie să dăm o valoare variabilei respective; îi putem atribui un obiect existent sau va trebui să creăm un nou obiect. Deocamdată nu avem niciun obiect, deci vom crea unul. Acest lucru se realizează folosind cuvântul new, urmat de numele clasei și apoi de o pereche de paranteze rotunde (vom vedea în episoadele următoare care este rolul parantezelor respective):
1 |
elev = new Persoana(); |
Putem folosi și variante prescurtată (inițializarea obiectului împreună cu declararea sa):
1 |
Persoana elev = new Persoana(); |
Acum avem un obiect elev care reprezintă o persoană, dar nu am precizat încă numele și vârsta sa. Trebuie să accesăm cumva proprietățile respective. Pentru aceasta va trebui să precizăm numele obiectului (nu al clasei), urmat de semnul . și apoi de numele proprietății. Dacă dorim să spunem că Dragoș are 17 ani, putem folosi următoarele instrucțiuni:
1 2 |
elev.nume = "Dragoș"; elev.varsta = 17; |
Pentru a folosi informațiile respective, le putem accesa folosind aceeași construcție:
1 2 |
System.out.println(elev.nume); System.out.println(elev.varsta); |
Să vedem cum ar arăta un program complet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Obiecte { public static void main (String[] args) throws java.lang.Exception { Persoana elev = new Persoana(); elev.nume = "Dragoș"; elev.varsta = 17; System.out.print(elev.nume); System.out.print(": "); System.out.println(elev.varsta); } static class Persoana { String nume; int varsta; } } |
Observați că în linia 13 apare cuvântul static; nu vom discuta acum despre clasele statice; este suficient să știți că avem nevoie de o clasă statică fiindcă și metoda main de mai sus e statică, iar această metodă e statică fiindcă "așa trebuie"...
Ar mai trebui precizat faptul că, în Java, definițiile claselor nu pot apărea în interiorul unor funcții; acesta este motivul pentru care clasa Persoana nu a fost definită în corpul funcției main.
Cu siguranță ați observat că, până acum, toate programele noastre conțineau o clasă. Aceea era așa numita clasă principală; acum putem crea și alte clase.