Scrigroup - Documente si articole

     

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


Exceptii program in Java

java



+ Font mai mare | - Font mai mic



Exceptii program in Java

O exceptie program este o situatie anormala aparuta in executie si care poate avea cauze hardware sau software. Exceptiile pot fi privite ca evenimente previzibile, ce pot aparea in anumite puncte din program si care afecteaza continuarea programului, prin abatere de la cursul normal.



Existenta exceptiilor este un mare avantaj al limbajului Java, pentru ca permite semnalarea la executie a unor erori uzuale, prin mesaje clare asupra cauzei si locului unde s-a produs eroarea, evitand efectele imprevizibile ale acestor erori (in C, de ex.).

Exceptiile Java sunt de doua categorii:

- Exceptii care nu necesita interventia programatorului (numite 'Runtime Exceptions'), dar care pot fi interceptate si tratate de catre programator. Daca nu sunt tratate, aceste exceptii produc afisarea unui mesaj referitor la tipul exceptiei si terminarea fortata a programului. Aceste exceptii corespund unor erori grave de programare, care nu permit continuarea executiei si care apar frecvent in programe, cum ar fi: erori de indexare a elementelor unui vector (indice in afara limitelor), utilizarea unei variabile referinta ce contine null pentru referire la date sau la metode publice, impartire prin zero, conversie prin 'cast' intre tipuri incompatibile, s.a.

- Exceptii care trebuie fie tratate, fie 'aruncate' mai departe, pentru ca altfel compilatorul marcheaza cu eroare functia in care poate apare o astfel de eroare ('Checked Exceptions': exceptii a caror tratare este verificata de compilator).Aceste exceptii corespund unor situatii speciale care apar la utilizarea unui program (fisiere negasite, erori la operatii de citire-scriere, date incorecte), dar nu produc neaparat terminarea programului. Urmatorul program poate produce (cel putin) doua exceptii, daca este folosit gresit:

class Exc

}

O comanda pentru executia programului de forma 'java Exc' produce exceptia ArrayIndexOutOfBoundException, deoarece nu s-au transmis argumente prin linia de comanda, vectorul 'arg' are lungime zero si deci nu exista arg[0] (indice zero).

O linie de comanda de forma 'java Exc 1,2' (argumentul arg[0] nu este un sir corect pentru un numar intreg) produce o exceptie NumberFormatException, exceptie generata in functia 'parseInt'. Ambele exceptii mentionate erau exceptii 'Runtime'.

Exceptiile generate de operatiile de intrare-iesire (inclusiv la consola) trebuie fie aruncate, fie tratate pentru ca suntem obligati de catre compilatorul Java. Compilatorul stie care metode pot genera exceptii si cere ca functiile care apeleaza aceste metode sa arunce mai departe sau sa trateze exceptiile posibile. Exemplu:

public static void main (String arg[ ]) throws Exception

Absenta clauzei throws din functia 'main' este semnalata ca eroare de compilator, pentru a obliga programatorul sa ia in considerare exceptia ce poate apare la functia de citire 'read', datorita citirii caracterului EOF (sfarsit de fisier) sau unei erori la citire.

O metoda care apeleaza o metoda ce arunca exceptii verificate trebuie fie sa semnaleze mai departe posibilitatea aparitiei acestei exceptii (prin clauza throws), fie sa trateze exceptia printr-un bloc try-catch care sa includa apelul metodei.

Tratarea exceptiilor necesita folosirea unui bloc try-catch pentru delimitarea sectiunii de cod pentru care exceptiile posibile sunt redirectate catre secvente scrise de utilizator pentru tratarea exceptiilor produse. Exemplu de verificare a unui sir daca reprezinta un numar corect sau nu, prin tratarea exceptiei:

public static boolean isNumber (String s)

catch (NumberFormatException ex)

return true; // daca nu s-a produs exceptie

}

Este preferabila aruncarea unei exceptii fata de tratarea prin ignorarea exceptiei, care impiedica aparitia unui mesaj de avertizare la producerea exceptiei. Exemplu:

public static void main (String arg[]) // exceptie daca ref==null

catch (NullPointerException e) // interzice afisare mesaj (nerecomandat!)

}

Anumite functii sunt apelate de mai multe alte functii si deci aruncarea exceptiei obliga si functiile care le apeleaza sa arunce exceptie. Aruncarea exceptiei nu este posibila in definirea unor functii din interfete sau mostenite de la alte clase (pentru ca ar modifica antetul functiei). In aceste cazuri vom face o tratare minimala a exceptiilor (afisarea cauzei cu metoda "printStackTrace" prezenta in orice clasa exceptie), cu acelasi efect la executie ca al exceptiilor "Runtime":

int ch;

try catch(IOException e)

Variabilele folosite in blocul try-catch vor fi declarate in afara acestui bloc, pentru a fi accesibile si in afara blocului.

Exista si situatii cand exceptia trebuie tratata si altfel decat prin afisarea unui mesaj; exemplul urmator arata cum putem verifica daca un sir de caractere reprezinta un numar corect (in orice format permis pentru numere neintregi), fara a examina fiecare caracter in parte:

public static boolean isNumber (String s) catch(NumberFormatException ex)

return true;

}

O functie poate contine unul sau mai multe blocuri try , iar un bloc try poate contine una sau mai multe instructiuni, in care pot apare exceptii. Un bloc try se termina cu una sau mai multe clauze catch pentru diferite tipuri de exceptii care pot apare in bloc.

In exemplul urmator se foloseste un singur bloc try pentru diferite exceptii posibile:

try catch (IOException e)

Varianta urmatoare foloseste doua blocuri try pentru a trata separat exceptiile:

try catch (IOException e)

try catch (IOException e) // exceptie de sfarsit de fisier la citire

Varianta urmatoare foloseste un singur bloc try, dar separa fiecare tip de exceptie:

try catch (FileNotFoundException e)

catch (EOFException e)

catch (IOException e)

Este posibila si aruncarea unor exceptii putin probabile (exceptia de citire, de ex.) combinata cu tratarea altor exceptii (de exemplu exceptia de sfarsit de fisier).

Producerea unor exceptii poate fi prevenita prin verificari efectuate de programator, ca in exemplele urmatoare:

void fun (Object obj)

. . .

}

public static void main (String arg[ ])

System.out.println ( arg[0]); // afiseaza primul argument

}

Uneori este preferabila verificarea prin program (ca in cazul unor conversii de tip nepermise), dar alteori este preferabila tratarea exceptiei (ca in cazul detectarii existentei unui fisier inainte de a fi deschis, sau a utilizarii unor variabile referinta ce pot fi nule).



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 990
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