TEMA 4. POO EXCEPTII JAVA. TRATAREA EXCEPTIILOR | Page 4
(în cazul exemplului de mai sus mesajul ”Aici nu se mai ajunge...” nu va fi afisat).
.[2]
Aruncarea excepţiilor.[4]
Exemplu de aruncare a unei excepţii:
List l = getArrayListObject();
if (null == l)
throw new Exception("The list is empty");
În acest exemplu, încercăm să obţinem un obiect de tip ArrayList; dacă
funcţia getArrayListObject întoarce null, aruncăm o excepţie.
Pe exemplul de mai sus putem face următoarele observaţii:
un obiect-excepţie este un obiect ca oricare altul, şi se instanţiază la fel
(folosind new)
aruncarea excepţiei se face folosind cuvântul cheie throw
există clasa Exception care desemnează comportamentul specific pentru
excepţii.
În realitate, clasa Exception este părintele majorităţii claselor excepţie din Java.
Enumerăm câteva excepţii standard:
IndexOutOfBoundsException: este aruncată când un index asociat unei liste
sau unui vector depăşeşte dimensiunea colecţiei respective.
NullPointerException: este aruncată când se accesează un obiect neinstanţiat
(null).
NoSuchElementException: este aruncată când se apelează next pe
un Iterator care nu mai conţine un element următor.
În momentul în care se instanţiază un obiect-excepţie, în acesta se reţine întregul
lanţ de apeluri de funcţii prin care s-a ajuns la instrucţiunea curentă.
Această succesiune se numeşte stack trace şi se poate afişa prin
apelul e.printStackTrace(), unde e este obiectul excepţie.
Prinderea excepţiilor.[4]
Când o excepţie a fost aruncată, runtime system încearcă să o trateze (prindă).
Tratarea unei excepţii este făcută de o porţiune de cod specială.
Cum definim o astfel de porţiune de cod specială?
Cum specificăm faptul că o porţiune de cod specială tratează
o anumită excepţie?
Să observăm următorul exemplu:
public void f() throws Exception {
List l = null;
if (null == l)
throw new Exception();
}