Conceptual, instanțele clasei Object sunt obiecte oarecare, fără atribute precizate. Variabilele referință la Object se folosesc atunci când, la elaborarea programului, se consideră că lor li se pot da ca valori referințe la orice fel de obiecte, indiferent de clasa căreia îi aparțin.
În clasa Object sunt declarate, de asemenea, metode care se consideră ca trebuie să existe în toate celelalte clase. Unele din aceste metode vor trebui redefinite în clasele derivate, pentru a efectua acțiuni specifice acestor clase.
Metodele clasei Object sunt descrise în Java API. Noi vom prezenta aici numai o parte dintre ele, care vor fi utilizate în cele ce urmează.
Metoda equals() este declarată sub forma:
public boolean equals(Object obj)
ceeace înseamnă că nivelul de acces este public, valoarea întoarsă (valoarea obținută la evaluarea acestei funcții) este de tip boolean, iar unicul argument aparține clasei Object. Expresia a.equals(b) în care a și b sunt două obiecte, întoarce valoarea true dacă a este identic cu b și valoarea false în caz contrar.
Așa cum este ea definită în clasa Object, metoda equals()
întoarce valoarea true numai dacă cele doua obiecte comparate
sunt cu adevărat identice, adică au aceeași adresă în memorie, ceeace se
poate scrie și sub forma expresiei a==b. În clasele derivate,
această metoda poate fi redefinită, respectând principiul
polimorfismului, astfel încât să compare cele două obiecte după
conținut, chiar dacă ele nu au aceeași referință.
Metoda hashCode() este declarată sub forma
public int hashCode() și întoarce codul de dispersie al obiectului
căruia i se aplică. Codul de dispersie (engleză: hash code) este
un număr întreg (de tip int) care are următoarele
proprietăți:
|
Metoda toString() este declarată sub forma
public String toString()
și întoarce reprezentarea sub forma de șir de caractere (de obiect
din clasa String) a obiectului căruia i se aplică. Asa dar,
expresia a.toString(), în care a este un obiect,
întoarce reprezentarea sub forma de șir a obiectului a. În
cazul obiectelor aparținând clasei Object, aceasta metodă întoarce un
șir de forma java.lang.Object@<cod_dispersie> în care <cod_dispersie>
este codul de dispersie al obiectului respectiv, exprimat în
hexazecimal. În clasele derivate aceasta metodă este redefinită, astfel
încât să se obțină o reprezentare sub formă de șir a conținutului
obiectului respectiv.
Metoda clone() este declarată sub forma:
protected Object clone() și are rolul de a întoarce o clonă a obiectului căruia i se aplică, deci întoarce un obiect identic cu acesta, dar situat la o altă adresă de memorie și deci având o altă referință. În consecință, după ce se execută instrucțiunea b=a.clone(); în care a și b sunt referințe la obiecte, expresia a==b va avea valoarea false, deoarece valorile variabilelor referință a și b sunt diferite, în timp ce expresia a.equals(b) va întoarce în mod normal valoarea true, deoarece cele două obiecte comparate au conținuturi identice. În schimb, după ce se execută instrucțiunea b=a; variabila b va avea ca valoare aceeași referință ca și variabila a, adica a și b vor indica același obiect din memorie, astfel că expresia a==b întoarce valoarea true. Întrucât metoda clone() este protejată (are nivelul de acces protected) ea nu poate fi utilizată decât pentru obiectele din clasa Object. În schimb, ea poate fi redefinită la clasele descendente, astfel încât sa devină publică. |
Metodele prezentate aici (exceptând, desigur, metoda clone()) sunt testate în programul din fișierul TestObject.java.
Metoda getClass() este declarată sub forma
public final Class getClass()
O expresie de forma a.getClass(), în care a este o referinta la un obiect, întoarce ca valoare un obiect din clasa Class, care conține informații despre clasa obiectului indicat de variabila a. Deocamdată vom folosi această metoda numai pentru a afișa numele clasei, ca în ultimele trei instrucțiuni ale programului din fișierul TestObject.java.
În limbajul Java se face distincție între excepție și eroare. Se consideră ca excepțiile sunt incidente care pot fi captate prin mecanismul try .. catch și pot fi deci tratate prin program, în timp ce erorile sunt incidente grave, care - de regulă - nu pot fi tratate prin program ci produc oprirea executării acestuia. |
catch(Exception e) {
instructiuni_de_tratare_a_exceptiei
e
}
unde e este numele simbolic (identificatorul) dat excepției captate. Clasa are doi constructori:
public Exception()
creează un obiect din clasa Exception
(deci "o excepție") care nu conține nici un mesaj.
public Exception(String s)
creează un obiect din clasa Exception, care
conține un mesaj sub forma șirului s. Prin acest mesaj se
indică, de regulă, ce incident a condus la generarea excepției
respective.
Vom arăta ulterior cum putem folosi acești constructori pentru a genera propriile noastre excepții.
Clasa Exception nu are propriile ei metode.Totuși, atât pentru clasa Exception, cât și pentru toate celelalte clase de excepții se pot folosi metodele superclasei Object. În particular, se poate folosi pentru instanțele oricărei clase de excepții metoda toString(), care pune instanța respectivă sub forma unui șir de caractere. Acest șir conține, de regulă, un mesaj privind felul exceptiei respective.
Exemple de utilizare a claselor de excepții s-au dat deja în capitolul "Tratarea excepțiilor".