Sunteți pe pagina 1din 10

Limbaje de programare – curs 7 -

- Informatică Economică, an III –

Exceptii

Gheorghe Cosmin Silaghi

Cluj-Napoca - 22 Noiembrie 2017


Exceptii (i)
Nu toate erorile pot fi prinse la scrierea programului (la compilare)
Restul problemelor trebuie rezolvate la execuție print-un mecanism prin care
sa se ofere programului client informatia necesara rezolvarii situației
=> 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ă continuăm
cu eroarea, astfel că transmitem eroarea spre rezolvare la un domeniu de
vizibilitate exterior
Exception condition: eroarea apărută (de exemplu impărțire la 0)
La apariția 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 executiei
programului
◼ Handlerul de exceptie: locul de unde se reia executia programului, recupereaza programul de
la eroarea aparuta Cluj-Napoca - 22 Noiembrie 2017
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 - 22 Noiembrie 2017


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 - 22 Noiembrie 2017


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 - 22 Noiembrie 2017


Specificarea exceptiei
La o metoda, prin throws se indica tipul erorilor care pot sa fie aruncate de
către 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:


◼ In catch se face throw
Cluj-Napoca - 22 Noiembrie 2017
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 - 22 Noiembrie 2017


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 try-catch

Cluj-Napoca - 22 Noiembrie 2017


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 - 22 Noiembrie 2017


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 - 22 Noiembrie 2017

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