10Modificatori de metoda care definesc proprietatile metodei pot fi urmatoarele cuvinte cheie:
public
,
protected
,
private
,
abstract
,
static
,
final
,
synchronized
sau
native
. Se pastreazaprincipiul supraîncarcarii (
overloading
) metodelor din C++. O functie poate arunca o serie de exceptii. Acestlucru trebuie specificat prin cuvântul cheie
throws
urmat de o lista a tipurilor de exceptii care pot fiaruncate. Corpul metodei defineste operatiile pe care le va executa metoda la apelul ei.
Constructorul
este (ca si în C++) metoda cu nume identic cu numele clasei si care nu returneazanici un tip de date. Ca orice metoda, si constructorii contin o lista de parametrii formali. Exista astfelposibilitatea supraîncarcarii constructorilor prin modificarea listei parametrilor formali. În functie devariabilele (tipurile lor) utilizate ca si parametri la instantierea unui obiect prin operatorul
new
, se apeleazaconstructorul corespunzator. În cazul în care nu se declara nici un constructor (doar în acest caz)compilatorul creaza un constructor implicit, având numele clasei, fara nici un parametru formal si avândcorpul constructorului gol. Corpul constructorului poate contine ca prima linie (doar ca prima linie) una dinurmatoarele instructiuni:
this(lista_parametri) sau super(lista_parametri)
Cuvântul cheie
this
reprezinta referinta la obiectul curent. Prin
this(lista_parametri)
sepoate apela un alt constructor (al aceleiasi clase) cu o lista de parametri diferita de cea a constructoruluicurent. Cuvântul cheie
super
reprezinta referinta la clasa de baza a clasei actuale. Prin instructiunea
super(lista_parametri)
se apeleaza constructorul superclasei (clasa de baza directa). Cele douainstructiuni nu pot exista simultan. Un exemplu de supraîncarcare a constructorilor si utilizare a cuvântuluicheie
this
într-un constructor este urmatorul:
public class Masina{public Masina(int nr){. . .} // primul constructorpublic Masina(int nr, String marca){ // al doilea constructorthis(nr); // apelul primului constructor. . . . . .}}
Cuvântul cheie
this
poate fi utilizat nu numai la apelul constructorului, ci si în alte metode. Osituatie mai des întâlnita este aceea de accesare a unui atribut al clasei din interiorul unei metode a clasei încare exista o variabila (de regula, un parametru formal) cu nume identic cu cel al atributului clasei. Caurmare, în doemniul de vizibilitate al metodei, numele respectiv va referi parametrul formal, nu atributulclasei. Situatia acesta se rezolva în modul urmator:
int width; // atribut al claseiint setWidth(int width) // parametru formal{this.width = width; // this.width refera atributul clasei// iar width parametrul formal al metodei}
Obiecte.
În crearea unui obiect dintr-o clasa sunt trei etape:
declararea, instantierea si initializarea
.Daca declararea unui obiect se poate face separat, instantierea si initializarea sunt operatii ce au loc simultanprin folosirea operatorului
new
.Operatorul
new
aloca memoria necesara stocarii obiectului respectiv (atributelor lui) si apeleaza unconstructor, care initializeaza obiectul conform operatiilor specificate în corpul constructorului. Lainstantierea unei clase se aloca memorie fiecarui atribut din clasa respectiva, se initializeaza la valoareaimplicita (
0
pentru tipurile primitive numerice,
false
pentru tipul boolean, si
null
pentru tipurilereferinta), se atribuie valoarea din expresia de initializare din declaratia atributului (daca aceasta exista) sidupa aceea se apeleaza constructorul. Variabilele sunt initializate în ordinea definirii lor si înaintea apeluluioricarei metode inclusiv a constructorului. Doar dupa terminarea executiei constructorului obiectul estedisponibil. În schimb referinta
this
poate fi utilizata în interiorul lui imediat dupa alocarea memorieinecesare stocarii lui.De multe ori este necesara eliberarea unor resurse în momentul distrugerii unui obiect. În limbajulC++ aveam la dispozitie destructorul. În Java, masina JVM contine o componenta numita
Garbage Colector
care se ocupa de dezalocarea zonelor de memorie alocate prin
new
, în momentul în care acele zone nu maisunt referite de nici o variabila. Exista cazuri însa în care e nevoie de dezalocarea altor resurse atasate unuiobiect decât cele de memorie, ca de exemplu conexiuni la fisiere sau conexiuni în retea. O solutie este