04/21/23 Curs 8 1
Programare Orientata Obiect
Curs 8Exceptii
04/21/23 Curs 8 2
Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase si metode abstracte7. Interfete8. Exceptii (I)
04/21/23 Curs 8 3
Curs 8
1. Exceptii (I)1.1 Introducere1.2 Erori si managementul erorilor1.3 Exceptii1.4 Tipuri de exceptii1.5 Mecanismul try/catch/finally1.6 Exemple
C8. Exceptii1.1. Introducere
– Utilizatorii de aplicatii se asteapta ca acestea sa functioneze fara probleme.
– Aplicatiile sunt folosite uneori in moduri care nu au fost anticipate de dezvoltatori
– Datorita problemelor de design sau erorilor de programare, aplicatiile pot sa “crape” in timpul executiei
– Este responsabilitatea programatorilor sa dezvolte aplicatii care sa nu isi intrerupa executia in mod neasteptat (!)
– Solutia? Managementul erorilor prin folosirea exceptiilor
C8. Exceptii1.2. Erori si managamentul erorilor
– O eroare reprezinta un rezultat neasteptat obtinut in urma executiei unui program
– Erorile netrate (unhandeld) pot avea ca rezultat un comportament neasteptat din partea aplicatiei sau chiar intreruperea executiei
– Erorile trebuie tratate de catre programator astfel incat ele sa nu ajunga la utilizator
C8. Exceptii1.2. Erori si managamentul erorilor
– Cauze posibile ale erorilor:– Managementul memoriei (alocare incorecta,
folosirea de pointeri nuli)– Sistemul de fisiere (spatiu insuficient, drepturi
de scriere/citire)– Retea (nu exista conexiune, URL nu exista)– Erori de calcul (impartirea cu zero)
C8. Exceptii1.2. Erori si managamentul erorilor
– Cele mai des intalnite erori:– Erori de accesare a vectorilor (accesarea
elementului de pe pozitia -1)– Erori de conversie (transformarea unui string
intr-o valoare numerica)– ?
C8. Exceptii1.2. Erori si managamentul erorilor
– Abordarea clasica de tratare a erorilor:1. Fiecare metoda intoarce o valoare (indicator)
care arata daca s-a executat cu succes sau nu (in acest caz se returneaza un cod de eroare)
Dezavantaj: Programatorul trebuie sa is aminteasca sa verifice ceea ce returneaza metodele si sa actioneze in consecinta.
Se foloseste in limbaje procedurale cum ar fi limbajul C
C8. Exceptii1.2. Erori si managamentul erorilor
– Abordarea clasica de tratare a erorilor:2. Tratarea erorilor se face printr-un mecanism
global si se foloseste un mecanism de “jump” pentru a apela o functie atunci cand apare o eroare
Dezavantaj: Folosirea intructiunii de “jump” (GoTo) este considerata o practica “nesanatoasa” si este descurajata.
Se foloseste in limbaje cum ar fi C, FORTRAN, dar se poate adapta si in C++ si Java
C8. Exceptii1.2. Erori si managamentul erorilor
– O metoda mai buna: exceptiile– Exceptiile preiau partile bune de la abordarile
clasice– Actioneaza in mod similar cu metodele care
intorc coduri de eroare. Orice metoda poate “arunca” o exceptie daca apare o eroare
– Sunt un mecanism global de management de tratare a erorilor, mecanism implementat la nivelul masinii virtuale
C8. Exceptii1.3. Exceptii
– Ce sunt exceptiile?– O exceptie este o reprezentare a unei erori
sau unei situatii neasteptate– Exceptiile sunt implementate in limbajul Java
si sunt disponibile in toate nivelele unei aplicatii Java
– Exceptiile izoleaza si identifica codul in care apare eroare
C8. Exceptii1.3. Exceptii
– Ce sunt exceptiile?– Atunci cand o eroare apare in timpul executie
unui program, masina virtuala Java creaza un obiect de tip exceptie care contine informatii referitoare la eroare (tipul erorii, metoda si clasa unde a aparut, stiva de apeluri, etc.)
– Obiectul rezultat este “aruncat” in program pentru a fi tratat (“tratarea exceptiilor”).
– Important! O exceptie este un obiect care descriere o eroare.
C8. Exceptii1.3. Exceptii
– Exista clase care descriu toate erorilor comune si care sunt derivate din clasa generica Exception (http://docs.oracle.com/javase/7/docs/api/ - Exception)
– Tipuri de exceptii:– Checked – exceptii care nu sunt “fatale”
pentru executia programului si pot fi tratate (“array index out of bounds”, “file not found”, “number format exception”)
– Unchecked – exceptii “fatale” (“null pointer”)
C8. Exceptii1.3. Exceptii
– Tratarea exceptiilor– Se face cu ajutorul intructiunilor
try/catch/finally sau prin folosind clauza throws in declarea metodei
– Pentru orice succesiune de instructiuni care “arunca” o exceptie checked programatorul trebuie sa decida daca trateaza exceptia local (in metoda) folosind try/catch/finally sau propaga exceptia la nivelul urmator (in metoda sau clasa apelanta) folosind throws
C8. Exceptii1.4. Mecanismul try/catch/finally
– Atunci cand o succesiune de instructiuni pot sa provoace o eroare, acestea se plaseaza in interiorul unui bloc try
– Dupa blocul try, instructiunile care trateaza cazul in care apare eroarea se plaseaza intr-un bloc catch
– Blocul finally contine instructiuni care se executa si daca apare o eroare in timpul executiei si daca nu
C8. Exceptii1.4. Mecanismul try/catch/finally
try {//instructiuni care se incearca a fi executate
}catch(Exception e) {
//instructiuni care se executa daca apare o eroare}finally //optional{
//instructiuni care se executa intotdeauna}
C8. Exceptii1.5. Exemple
public class Exemplu { public static void main(String args[]) {
int v[] = new int[10];v[10] = 0; //Exceptie !System.out.println("Aici nu se mai
ajunge..."); }}
La rularea programului va fi generata o exceptie, programul se va opri la instructiunea care a cauzat exceptia si se va afisa un mesaj de eroare de genul:
Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException :10at Exceptii.main (Exceptii.java:4)
C8. Exceptii1.5. Exemple
public class Exemplu { public static void main(String args[]) {
try{
int v[] = new int[10];v[10] = 0; //Exceptie !System.out.println("Aici nu se mai
ajunge...");}catch (Exception ex){System.out.println(“A aparut o eroare!”);}
}}
Se face tratarea erorilor. Exceptia aruuncata din blocul try va fi prinsa in catch si trata. Dupa tratarea exceptiei programul isi va incheia executia in mod normal.
C8. Exceptii1.5. Exemple
public class Exemplu { public static void main(String args[]) {
try{
int v[] = new int[10];v[10] = 0; //Exceptie !System.out.println("Aici nu se mai
ajunge...");}catch (ArrayIndexOutOfBoundsException ex){System.out.println(“A aparut o eroare de tip
ArrayIndexOutOfBounds!”);}
}}
Pentru tratarea mai precisa a exceptiei se poate folosi in catch o clasa mai specifica decat clasa Exception.
C8. Exceptii1.5. Exemple
public class Exemplu { public static void main(String args[]) {
try{
int v[] = new int[10];v[10] = 0; //Exceptie !System.out.println("Aici nu se mai
ajunge...");}catch (ArrayIndexOutOfBoundsException ex){System.out.println(“A aparut o eroare!”);}catch (Exception ex){System.out.println(“A aparut o eroare!”);}
}}E posibil sa avem mai multe instructiuni catch pentru a putea trata mai multe execeptii ce pot rezulta din aceeasi bucata de cod.
C8. Exceptii1.5. Exemple
public class Exemplu { public static void main(String args[]) {
try{
int v[] = new int[10];v[10] = 0; //Exceptie !System.out.println("Aici nu se mai ajunge...");
}catch (ArrayIndexOutOfBoundsException ex){System.out.println(“A aparut o eroare de tip
ArrayIndex…!”);}catch (Exception ex){System.out.println(“A aparut o eroare!”);}finally{ System.out.println(“Se executa intotdeauna!”);}
}}
04/21/23 Curs 8 22
Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase abstracte7. Interfete8. Exceptii (I)9. Exceptii (II)10. Fire de executie