Sunteți pe pagina 1din 10

Limbaje de programare curs 7 - Informatic Economic, an III

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:

Se creaz un obiect de tip exceptie (pe heap, cu new)


Firul de executie curent este intrerupt si referinta la obiectul exceptie este
transmis in afara contextului curent
Mecanismul de exception
handling
caut
un context potrivit pentru reluarea
Cluj-Napoca
- 28
Noiembrie
executiei programului
2016
Handlerul de exceptie: locul de unde se reia executia programului, recupereaza

Exceptii (ii)
Aruncarea unei exceptii
if (t==null)
throw new NullPointerException();

Obiectele de tip exceptie pot fi construite cu argumente


transmise
La throw se poate arunca orice obiect dintr-un tip care extind
clasa Throwable (clasa radacina a ierarhiei exceptiilor)

Conceptul de tranzactie: totul sau nimic


Premisa fundamentala a tranzactiilor: existenta conceptului de
exceptie

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)
}

Try catch functioneaza ca un switch pe tipul de exceptie


2 modalitati de tratare a erorilor

Termination: eroarea este aruncata


Resumption: se insereaza cod try catch pt rezolvarea erorii

Cluj-Napoca - 28 Noiembrie
2016

Crearea propriilor exceptii


Mostenire din clasa Exception
La afisari la o eroare se recomanda utilizarea System.err
in loc de System.out
printStackTrace(..) : se afiseaza secventa de metode
apelate pentru a se ajunge la exceptie
getMessage() : mostenit de la Throwable, e similar cu
toString pentru erori
Logging:

Urmarirea executiei programului pentru a putea rezolva mai usor


erorile
java.util.logging
Se creaza un obiect de tip Logger
Se pot loga mesaje de tip fine, info, severe, warning, etc.
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

Daca intr-o functie este posibil s apara o exceptie si programatorul nu


o specifica prin throws, atunci apare eroare la compilare
Erorile verificate si enforced la compilare: checked exceptions

Prinderea oricarei exceptii:

catch (Exception e) {.. }

StackTrace:

printStackTrace, getStackTrace

Rearuncarea unei exceptii:

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

Ierarhia exceptiilor Java


Clasa Throwable: orice este mostenit din throwable poate fi
aruncat cu throw
2 tipuri de obiecte Throwable: Error and Exception
Exceptiile java mostenesc din clasa Exception
Numele exceptiei este sugestiv pentru cauza aparitiei
exceptiei
RuntimeException: sunt aruncate in mod automat de catre
java la momentul aparitiei lor unchecked exceptions
De obicei, acestea indica buguri si nu trebuie prinse cu trycatch

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

S-ar putea să vă placă și