CATEGORII DOCUMENTE |
O exceptie este un eveniment ce se produce in timpul executiei unui program si care provoaca intreruperea cursului normal al executiei.
De exemplu, o impartire la 0 sau utilizarea unui indice care depaseste o dimensiune declarata a unui tablou reprezinta un eveniment care perturba executia normala a programului - este vorba despre o exceptie. Cand apare o astfel de eroare in timpul executiei programului sistemul genereaza automat un obiect de tip exceptie ce contine:
informatii despre exceptia respectiva;
starea programului in momentul producerii exceptiei
Exemplu:
public class Exceptii
}
La rularea programului va fi generata o exceptie si se va afisa mesajul :
Exception in thread 'main' java.lang.ArrayIndexOutOfBoundsException :3
at Exceptii.main (Exceptii.java:4)
Java dispune de un mecanism care permite programatorului sa preia controlul programului in momentul in care apare o exceptie si sa o trateze.
Crearea
unui obiect de tip exceptie se numeste aruncarea unei
exceptii ('throwing an exception'). In momentul in care o
metoda genereaza o exceptie (arunca o exceptie)
sistemul de executie este responsabil cu gasirea unei secvente
de cod dintr-o metoda care sa trateze acea exceptie.
Exceptiile sunt propagate inapoi prin secventa de metode apelate pana
cand o anumita metoda prinde exceptia. Secventa de cod
dintr-o metoda care trateaza o anumita exceptie se
numeste analizor de exceptie ('exception handler') iar
interceptarea si tratarea exceptiei se numeste prinderea
exceptiei ('catch the exception').
Cu alte cuvinte la aparitia unei erori este 'aruncata' o
exceptie iar cineva trebuie sa o 'prinda' pentru a o
trata. Daca sistemul nu gaseste nici un analizor pentru o
anumita exceptie atunci programul Java se opreste cu un mesaj de
eroare.
Ierarhia claselor ce contin exceptii este:
Toate exceptiile Java sunt subclase ale clasei Exception.
try
[catch(ClasaExceptie obiectExceptie)]*
[finally]
Instructiunea try contine un bloc de instructiuni ce trebuie executate. Punerea unor instructiuni in cadrul lui try inseamna ca exista posibilitatea aparitiei unor exceptii sau terminarii anormale a unei instructiuni. O instructiune try poate avea oricate clauze catch (optionale) in care sunt tratate exceptiile. De asemenea, instructiunea try poate avea o clauza finally a carui bloc se executa intotdeauna inaintea parasirii instructiunii try. Instructiunea try trebuie sa aiba fie o clauza catch, fie una finnaly.
Formele generale ale instructiunii try.
1.
try
catch(ClasaExceptie obiectExceptie)
2.
try
catch(ClasaExceptie obiectExceptie)
catch(ClasaExceptie obiectExceptie)
3.
try
finnaly
4.
try
catch(ClasaExceptie obiectExceptie)
catch(ClasaExceptie obiectExceptie)
finnaly
In cazul in care este declansata o exceptie si exista mai multe clauze catch, este cautata, in ordine, acea clauza care poate trata exceptia. Adica este gasita o clauza a carui parametru are un tip care se potriveste cu tipul exceptiei. Ordinea in care clauzele catch apar este importanta: clauzele catch mai specifice trebuie sa apara inaintea celor mai generale. Daca nu exista o clauza care sa trateze exceptia, aceasta este propagata in sus, la instructiunile imediat urmatoare.
Exceptii uzuale:
ArithmeticException |
Depasire limita tip sau impartire la 0 |
NumberFormatException |
Conversia nepermisa a unui String la un tip numeric |
IndexOutOfBoundsException |
Indice ilegal intr-un sir |
NegativeArraySizeException |
Crearea unui sir cu numar negativ de elemente |
NullPointerException |
Tentativa de a folosi o referinta care are valoarea null |
SecurityException |
Incalcarea normelor de securitate in timpul executiei |
Adeseori poate aparea necesitatea crearii unor exceptii proprii pentru a pune in evidenta cazuri speciale de erori provocate de clasele unei librarii, cazuri care nu au fost prevazute in ierarhia exceptiilor standard Java.
O exceptie proprie trebuie sa se incadreze in ierarhia exceptiilor Java, cu alte cuvinte clasa care o implementeaza trebuie sa fie subclasa a clasei Exception.
public class ExceptieNoua extends Exception
Exemplu:
1. public class Exc extends Exception
6. }
Intr-o clasa in care se doreste folosirea unei exceptii exista o metoda care creeaza exceptia (obiect al clasei de exceptii), mai multe metode care arunca exceptia primita si, eventual o metoda care o prinde, adica o trateaza. Daca intr-o metoda apare o exceptie - creata in metoda respectiva sau ca urmare a apelarii unei metode care a aruncat o exceptie, atunci ea trebuie fie sa fie tratata, fie sa fie aruncata mai departe. In ambele cazuri codul care ar putea genera exceptia trebuie pus in cadrul unei instructiuni try care sa aiba o clauza catch cu parametru care sa coincida cu clasa exceptiei. Daca exceptia se doreste sa fie tratata, atunci in clauza catch se pune un cod corespunzator. Daca se doreste ca exceptia sa nu fie tratata atunci ea trebuie aruncata mai departe (metodei care a facut apelul) si acest lucru se realizeaza prin adaugarea clauzei throws ClasaExceptie in antetul metodei.
Exemplu 1: In clasa RationalIred se verifica daca numitorul fractiei este 0. Daca da atunci se creeaza o exceptie - linia 53.
1. public class Exc extends Exception
6. }
7. public class Rational
12. public Rational(long m,long n)
16. public Rational(long m)
19. public void setm(long m)
22. public long getm()
25. public void setn(long n)
28. public long getn()
31. public Rational produs(Rational r)
34. public String toString()
37. }
38. public class RationalIred extends Rational
42. public RationalIred(long m,long n) throws Exc
47. catch(Exc e)
48. }
49. public void setIn(long n) throws Exc
55. private void simplifica()
61. setm(getm()/x);
62. setn(getn()/x);
63. }
64. public RationalIred produs(RationalIred r)
71. }
72. public class TestRational
83. catch(Exc e)
86. System.out.println(r1);
87. System.out.println(r2);
88. p=r1.produs(r2);
89. System.out.println(p);
90. }
91. }
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1203
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved