Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Exceptii Java

java



+ Font mai mare | - Font mai mic



Exceptii

1.1.   Aspecte generale

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.

1.2.   Instructiunea try

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

1.3.   Crearea unei exceptii

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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1128
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved