Documente Academic
Documente Profesional
Documente Cultură
Exceptii
Gheorghe Cosmin
Silaghi
Cluj-Napoca - 28 Noiembrie
2016
Exceptii (i)
Nu toate erorile pot fi prinse la scrierea programului (la compilare)
Restul problemelor trebuie rezolvate la execuie print-un mecanism
prin care sa se ofere programului client informatia necesara
rezolvarii situaiei
=> exception handling: singurul mecanism Java pentru tratarea
erorilor
Conceptul de exceptie: in domeniul de vizibilitate unde apare
eroarea de obicei nu stim cum sa tratam eroarea, insa stim ca nu
putem s continum cu eroarea, astfel c transmitem eroarea spre
rezolvare la un domeniu de vizibilitate exterior
Exception condition: eroarea aprut (de exemplu imprire la 0)
La apariia unei erori:
Exceptii (ii)
Aruncarea unei exceptii
if (t==null)
throw new NullPointerException();
Cluj-Napoca - 28 Noiembrie
2016
Guarded regions
try {
// codul care este susceptibil sa genereze exceptie
} catch (Type1 tp1) {
// exceptii de tipul Type1
} catch (Type2 tp2) {
// exceptii de tipul Type2
}
finally {
// cod care se executa indiferent de tipul de exceptie aruncat (sau nu)
}
Cluj-Napoca - 28 Noiembrie
2016
Specificarea exceptiei
La o metoda, prin throws se indica tipul erorilor care pot sa fie
aruncate de ctre metoda respectiva
Erorile de tip RuntimeException nu trebuiesc specificate prin
throws
Compilatorul forteaza programatorul s specifice exceptiile
StackTrace:
printStackTrace, getStackTrace
Cluj-Napoca - 28 Noiembrie
In catch se face throw
2016
Inlantuirea exceptiilor
La prinderea unei exceptii si aruncarea unei alte exceptii, se
doreste pastrarea lantului exceptiilor care apar
Subclasele Throwable pot sa utilizeze cauza erorii ca si
argument in constructor
Se poate folosi clauza la constructor doar la clasele de tip
Error, Exception sau RuntimeException
La celelalte tipuri de erori, se poate utiliza initCause
Cluj-Napoca - 28 Noiembrie
2016
Cluj-Napoca - 28 Noiembrie
2016
Exceptii pierdute
Exista o clauza finally fara catch
Sau in finally se face return
Programatorul nu are nici o indicatie despre exceptia pierduta
Restrictii la exceptii:
Cand se suprascrie o metoda, se pot arunca doar exceptiile de
tipul specificat in metoda din clasa de baza
Atentie la exceptii in constructori: constructorii trebuie sa isi
incheie cu success executia pentru a aduce obiectele intr-o
stare sigura
Exception matching: se face potrivire pe cea mai apropiata
clauza catch care potriveste cu tipul exceptiei
Cluj-Napoca - 28 Noiembrie
2016
Guidelines
Tratati exceptiile la domeniul de vizibilitate potrivit (nu prindeti
exceptii decat daca stiti ce sa faceti cu ele)
La rezolvare, de obicei se rezolva problema exceptiei si se reia
executia codului care a generat exceptia sau
Se transmite executia la un nivel superior fara reluarea codului
sau
Se poate calcula un rezultat alternativ celui produs de codul care a
generat exceptia sau
Se poate executa tot ce e posibil in domeniul curent si se arunca
aceasi exceptie la un nivel superior sau
Se poate executa tot ce e posibil in domeniul curent si se arunca o
alta exceptie la nivel superior sau
Se poate termina programul
Sa facem programele nostre simple
Sa facem programele nostre safe prin debugging
Cluj-Napoca - 28 Noiembrie
2016