Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Facultatea de Inginerie
Departamentul de Automatic, Energie i Mediu
Aplicaii JAVA
Lect.dr. Adrian Runceanu
copyright@www.adrian.runceanu.ro
Curs 10
Excepii n Java
Programare n reea
27.05.2015
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
copyright@www.adrian.runceanu.ro
Ce sunt excepiile?
Termenul exceptie este o prescurtare pentru "eveniment
exceptional" si poate fi definit astfel:
O exceptie este un eveniment ce se produce n timpul
executiei unui program si care provoaca ntreruperea
cursului normal al executiei.
27.05.2015
copyright@www.adrian.runceanu.ro
Excepii
Exceptiile pot aparea din diverse cauze si pot avea nivele
diferite de gravitate: de la erori fatale cauzate
de echipamentul hardware pn la erori ce tin strict de
codul programului, cum ar fi accesarea unui element din
afara spatiului alocat unui vector.
In momentul cnd o asemenea eroare se produce n timpul
executiei sistemul genereaza automat un obiect de tip
exceptie ce contine:
informatii despre exceptia respectiva
starea programului n momentul producerii acelei
excepii
27.05.2015
copyright@www.adrian.runceanu.ro
Excepii
public class Exceptii {
public static void main(String argsst) {
int v[] = new int[10];
v[10] = 0; // exceptie, vectorul are elementele v[0]...v[9]
System.out.println("Aici nu se mai ajunge...");
}
}
La rularea programului va fi generata o exceptie si se va afisa
mesajul:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException :10
at Exceptii.main (Exceptii.java:4)
27.05.2015
copyright@www.adrian.runceanu.ro
Excepii
Crearea unui obiect de tip exceptie se numeste
aruncarea unei exceptii ("throwing an exception").
In momentul n care o metoda genereaza o exceptie
(arunca o excepie) sistemul de executie este
responsabil cu gasirea unei secvente de cod dintr-o
metoda care sa trateze acea exceptie.
Cautarea se face recursiv, ncepnd cu metoda care a
generat exceptia si mergnd napoi pe linia apelurilor
catre acea metoda.
27.05.2015
copyright@www.adrian.runceanu.ro
Excepii
Secventa de cod dintr-o metoda care trateaza o anumita
exceptie se numeste analizor de exceptie ("exception
handler") iar interceptarea si tratarea exceptie 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 (n cazul exemplului de mai sus mesajul
"Aici nu se mai ajunge..." nu va fi tiparit).
27.05.2015
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile ?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
Prin modalitatea sa de tratare a excepiilor Java are
urmatoarele avantaje fa de mecanismul tradiional
de tratare a erorilor:
1. Separarea codului pentru tratarea unei erori de codul
n care ea poate s apar
2. Propagarea unei erori pn la un analizor de exceptii
corespunztor
3. Gruparea erorilor dup tipul lor
27.05.2015
10
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
1. Separarea codului pentru tratarea unei erori de codul n care
ea poate s apar
In programarea traditionala tratarea erorilor se combina cu codul
ce poate produce aparitia lor conducnd la aa-numitul "cod
spaghetti".
Sa consideram urmatorul exemplu: o functie care ncarca un
fisier n memorie:
citesteFisier {
deschide fisierul;
determina dimensiunea fisierului;
aloca memorie;
citeste fisierul in memorie;
inchide fisierul;
}
27.05.2015
11
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
Problemele care pot aparea la aceasta functie, aparent
simpla sunt de genul: "Ce se ntmpla daca: ... ?"
fisierul nu poate fi deschis
nu se poate determina dimensiunea fisierului
nu poate fi alocata suficienta memorie
nu se poate face citirea din fisier
fisierul nu poate fi nchis
27.05.2015
12
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
Un cod traditional care sa trateze aceste erori ar arata astfel:
int citesteFisier {
int codEroare = 0;
deschide fisier;
if (fisierul s-a deschis) {
determina dimensiunea fisierului;
if (s-a determinat dimensiunea) {
aloca memorie;
if (s-a alocat memorie) {
citeste fisierul in memorie;
if (nu se poate citi din fisier) codEroare = -1;
else codEroare = -2;
}
} else codEroare = -3;
}
27.05.2015
13
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
inchide fisierul;
if (fisierul nu s-a inchis && codEroare == 0) {
codEroare = -4;
} else codEroare = -4;
} else codEroare = -5;
return codEroare;
} // cod "spaghetti"
27.05.2015
14
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
In Java, folosind mecansimul exceptiilor, codul ar arata astfel:
int citesteFisier {
try {
deschide fisierul;
determina dimensiunea fisierului;
aloca memorie;
citeste fisierul in memorie;
inchide fisierul;
}
catch (fisierul nu s-a deschis) { trateaza eroarea; }
catch (nu s-a determinat dimensiunea) { trateaza eroarea; }
catch (nu s-a alocat memorie) { trateaza eroarea; }
catch (nu se poate citi din fisier) { trateaza eroarea; }
catch (nu se poate inchide fisierul) { trateaza eroarea; }
}27.05.2015
15
Curs - Aplicatii Java
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
2. Propagarea unei erori pn la un analizor de excepii
corespunztor
16
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
Sa presupunem de asemenea ca dorim sa facem tratarea erorilor doar n
metoda1.
Traditional, acest lucru ar trebui facut prin propagarea erorii ntoarse de
metoda citesteFisier pna la metoda1. int metoda2 {
int codEroare = apel metoda3;
int metoda1 {
if (codEroare != 0)
int codEroare = apel metoda2;
return codEroare;
if (codEroare != 0)
...
proceseazaEroare;
}
...
int metoda3 {
}
int codEroare = apel citesteFisier;
if (codEroare != 0)
return codEroare;
...
}
27.05.2015
17
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
Java permite unei metode sa arunce exceptiile aparute n cadrul
ei la un nivel superior, adica functiilor care o apeleaza sau
sistemului.
Cu alte cuvinte o metoda poate sa nu si asume responsabilitatea
tratarii exceptiilor aparute n cadrul ei:
metoda1 {
try {
apel metoda2;
}
catch (exceptie) {
proceseazaEroare;
}
...
}
27.05.2015
18
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
3. Gruparea erorilor dup tipul lor
19
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
La rndul ei clasa IOException se ncadreaza ntr-o
categorie mai larga de exceptii si anume clasa
Exception.
Radacina acestei ierarhii este clasa Throwable
27.05.2015
20
copyright@www.adrian.runceanu.ro
Avantajele excepiilor
try {
FileReader f = new FileReader("input.dat");
// acest apel poate genera exceptie de tipul FileNotFoundException
// tratarea ei poate fi facuta in unul din modurile de mai jos
}
catch (FileNotFoundException e) {
// exceptie specifica provocata de absenta fisierului 'input.dat'
} // sau
catch (IOException e) {
// exceptie generica provocata de o operatie de intrare/iesire
} // sau
catch (Exception e) {
// cea mai generica exceptie - NERECOMANDATA!
}
27.05.2015
21
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile ?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
22
copyright@www.adrian.runceanu.ro
27.05.2015
catch (TipExceptie2 ) {
Prelucrarea exceptiei de tipul 2
}
...
finally {
Cod care se executa indiferent
daca apar sau nu exceptii
}
23
copyright@www.adrian.runceanu.ro
24
copyright@www.adrian.runceanu.ro
25
copyright@www.adrian.runceanu.ro
27.05.2015
26
copyright@www.adrian.runceanu.ro
}
}
}
public static void main(String args[]) {
citesteFisier();
}
}
27.05.2015
27
copyright@www.adrian.runceanu.ro
28
copyright@www.adrian.runceanu.ro
try {
...
sursa.close();
}
...
catch (IOException e) {
...
sursa.close(); //cod redundant
}
Nota:
Obligatoriu un bloc de instructiuni "try" trebuie sa fie urmat de unul sau
mai multe blocuri "catch", n functie de exceptiile provocate de acele instructiuni
sau (optional) de un bloc "finally"
27.05.2015
29
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile ?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
30
copyright@www.adrian.runceanu.ro
4. "Aruncarea" excepiilor
In cazul n care o metoda nu si asuma responsabilitatea
tratarii uneia sau mai multor exceptii pe care le pot
provoca anumite instructiuni din codul sau atunci ea
poate sa "arunce" aceste exceptii catre metodele care o
apeleaza, urmnd ca acestea sa implementeze tratarea
lor sau, la rndul lor, sa "arunce" mai departe exceptiile
respective.
Acest lucru se realizeaza prin specificarea n declaratia
metodei a clauzei throws:
metoda throws TipExceptie1, TipExceptie2, ... {
...
} 27.05.2015
31
Curs - Aplicatii Java
copyright@www.adrian.runceanu.ro
4. "Aruncarea" excepiilor
O metoda care nu trateaza o anumita exceptie trebuie obligatoriu sa o "arunce".
In exemplul de mai sus daca nu facem tratarea exceptiilor n cadrul metodei citesteFisier
atunci metoda apelanta (main) va trebui sa faca acest lucru:
import java.io.*;
public class CitireFisier {
public static void citesteFisier() throws FileNotFoundException, IOException
{
FileInputStream sursa = null; // s este flux de intrare
int octet;
sursa = new FileInputStream("fisier.txt");
octet = 0;
// citesc fisierul caracter cu caracter
while (octet != -1) {
octet = sursa.read();
System.out.print((char)octet);
}
sursa.close();
}27.05.2015
32
Curs - Aplicatii Java
copyright@www.adrian.runceanu.ro
4. "Aruncarea" excepiilor
public static void main(String args[]) {
try {
citesteFisier();
}
catch (FileNotFoundException e) {
System.out.println("Fisierul nu a fost gasit !");
System.out.println("Exceptie: " + e.getMessage());
System.exit(1);
}
catch (IOException e) {
System.out.println("Eroare de intrare/iesire");
System.out.println("Exceptie: " + e.getMessage());
System.exit(2);
}
}
}
27.05.2015
33
copyright@www.adrian.runceanu.ro
4. "Aruncarea" excepiilor
Se observa ca, n acest caz, nu mai putem diferentia exceptiile provocate de
citirea din fisier si de nchiderea fisierului ambele fiind de tipul IOException.
Aruncarea unei exceptii se poate face si implicit prin instructiunea throw ce
are formatul: throw obiect_de_tip_Exceptie.
Exemple:
throw new IOException();
if (index >= vector.length)
throw new ArrayIndexOutOfBoundsException();
catch(Exception e) {
System.out.println("A aparut o exceptie);
throw e;
}
Aceasta instructune este folosita mai ales la aruncarea exceptiilor proprii
care, evident, nu sunt detectate de catre mediul de executie.
27.05.2015
34
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile ?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
35
copyright@www.adrian.runceanu.ro
27.05.2015
36
copyright@www.adrian.runceanu.ro
37
copyright@www.adrian.runceanu.ro
38
copyright@www.adrian.runceanu.ro
39
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile ?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
40
copyright@www.adrian.runceanu.ro
6. Excepii la execuie
In general tratarea exceptiilor este obligatorie n Java.
27.05.2015
41
copyright@www.adrian.runceanu.ro
6. Excepii la execuie
Aceste exceptii au o superclasa comuna si anume
RuntimeException si n aceasta categorie sunt incluse:
1. operatii aritmetice (mpartire la zero)
27.05.2015
42
copyright@www.adrian.runceanu.ro
6. Excepii la execuie
Aceste exceptii pot aparea oriunde n program si pot fi extrem de
numeroare iar ncercarea de "prindere" a lor ar fi extrem de
anevoioasa.
Din acest motiv compilatorul permite ca aceste exceptii sa ramna
netratate, tratarea lor nefiind nsa ilegala.
43
copyright@www.adrian.runceanu.ro
1. Excepii n Java
1.
2.
3.
4.
5.
6.
7.
Ce sunt excepiile ?
Avantajele excepiilor
"Prinderea" i tratarea excepiilor
"Aruncarea" excepiilor
Ierarhia claselor ce descriu excepii
Excepii la execuie
Crearea propriilor excepii
27.05.2015
44
copyright@www.adrian.runceanu.ro
45
copyright@www.adrian.runceanu.ro
}
}
27.05.2015
46
copyright@www.adrian.runceanu.ro
47
copyright@www.adrian.runceanu.ro
27.05.2015
48
copyright@www.adrian.runceanu.ro
27.05.2015
49
copyright@www.adrian.runceanu.ro
50
copyright@www.adrian.runceanu.ro
51
copyright@www.adrian.runceanu.ro
2. Programare n reea
1.
2.
3.
4.
5.
6.
27.05.2015
52
copyright@www.adrian.runceanu.ro
53
copyright@www.adrian.runceanu.ro
54
copyright@www.adrian.runceanu.ro
27.05.2015
55
copyright@www.adrian.runceanu.ro
27.05.2015
56
copyright@www.adrian.runceanu.ro
57
copyright@www.adrian.runceanu.ro
27.05.2015
58
copyright@www.adrian.runceanu.ro
59
copyright@www.adrian.runceanu.ro
60
copyright@www.adrian.runceanu.ro
DatagramPacket
DatagramSocket
Socket
ServerSocket
MulticastSocket
61
copyright@www.adrian.runceanu.ro
27.05.2015
62
copyright@www.adrian.runceanu.ro
2. Programare n reea
1.
2.
3.
4.
5.
6.
27.05.2015
63
copyright@www.adrian.runceanu.ro
2. Lucrul cu URL-uri
Definitie
64
copyright@www.adrian.runceanu.ro
Lucrul cu URL-uri
Exemple de URL-uri sunt:
http://www.utgjiu.ro/ing
http://www.runceanu.ro/adrian/
http://www.scoaladeinformatica.ro
27.05.2015
65
copyright@www.adrian.runceanu.ro
Lucrul cu URL-uri
Un URL are doua componente principale:
1. Identificatorul protocolului folosit (http, ftp, etc)
2. Numele resursei referite. Acesta are urmatoarele
componente:
- numele calculatorului gazda (http://www.utgjiu.ro/ing)
- calea completa spre resursa referita
(http://www.utgjiu.ro/ing/orare_20142015/semII/Anul%20IV%20AIA.pdf)
- optional, o referinta de tip anchor n cadrul fisierului referit
(#url)
- optional, portul la care sa se realizeze conexiunea
27.05.2015
66
copyright@www.adrian.runceanu.ro
Lucrul cu URL-uri
Odata creat, un obiect de tip URL poate fi folosit pentru:
67
copyright@www.adrian.runceanu.ro
Lucrul cu URL-uri
Orice obiect de tip URL poate returna un flux de intrare de
tip InputStream pentru citirea continutului sau. Secventa
clasica pentru aceasta operatiune este:
// Afisarea paginii index.html de la adresa
www.scoaladeinformatica.ro
public class CitireURL {
public static void main(String[] args) throws IOException{
BufferedReader br = null;
27.05.2015
68
copyright@www.adrian.runceanu.ro
Lucrul cu URL-uri
try {
URL resursa = new URL("http://www.scoaladeinformatica.ro");
InputStream in = resursa.openStream();
br = new BufferedReader(new InputStreamReader(in));
String linie;
while ((linie = br.readLine()) != null) {
// proceseaza linia citita
System.out.println(linie);
}
} catch(MalformedURLException e) {
System.err.println("URL incorect: " + e);
}
finally {
br.close();
}
}
}
27.05.2015
69
copyright@www.adrian.runceanu.ro
Conectarea la un URL
Se realizeaza prin metoda openConnection ce
realizeaza stabilirea unei conexiuni bidirectionale cu
resursa specificata.
Aceasta conexiune este reprezentata de un obiect de
tip URLConnection ce permite crearea att a unui
flux de intrare pentru citirea informatiilor de la URLul specificat ct si a unui flux de iesire pentru scrierea
de date catre acel URL.
27.05.2015
70
copyright@www.adrian.runceanu.ro
Conectarea la un URL
Operatiunea de trimitere de date dintr-un program
catre un URL este similara cu trimiterea de date
dintr-un FORM aflat ntr-o pagina HTML.
Metoda folosita pentru trimitere este POST.
In cazul trimiterii de date, obiectul URL este de fapt
un program (comanda) ce ruleaza pe serverul Web
referit prin URL-ul respectiv (servlet, cgi-bin, php,
etc).
27.05.2015
71
copyright@www.adrian.runceanu.ro
2. Programare n reea
1.
2.
3.
4.
5.
6.
27.05.2015
72
copyright@www.adrian.runceanu.ro
Socket-uri
Definitie
27.05.2015
73
copyright@www.adrian.runceanu.ro
Socket-uri
Socket-urile sunt de doua tipuri:
1. TCP, implementate de clasele Socket si ServerSocket
2. UDP, implementate de clasa DatagramSocket
O aplicatie de retea ce foloseste socket-uri se
ncadreaza n modelul client/server de concepere a
unei aplicatii.
In acest model aplicatia este formata din doua
categorii distincte de programe numite servere,
respectiv clienti.
27.05.2015
74
copyright@www.adrian.runceanu.ro
Socket-uri
Programele de tip server sunt cele care ofera diverse
servicii eventualilor clienti, fiind n stare de asteptare
atta vreme ct nici un client nu le solicita serviciile.
Programele de tip client sunt cele care initiaza
conversatia cu un server, solicitnd un anumit
serviciu.
Uzual, un server trebuie sa fie capabil sa trateze mai
multi clienti simultan si, din acest motiv, fiecare
cerere adresata serverului va fi tratata ntr-un fir de
executie separat.
27.05.2015
75
copyright@www.adrian.runceanu.ro
2. Programare n reea
1.
2.
3.
4.
5.
6.
27.05.2015
76
copyright@www.adrian.runceanu.ro
77
copyright@www.adrian.runceanu.ro
27.05.2015
78
copyright@www.adrian.runceanu.ro
79
copyright@www.adrian.runceanu.ro
80
copyright@www.adrian.runceanu.ro
81
copyright@www.adrian.runceanu.ro
27.05.2015
82
copyright@www.adrian.runceanu.ro
copyright@www.adrian.runceanu.ro
2. Programare n reea
1.
2.
3.
4.
5.
6.
27.05.2015
84
copyright@www.adrian.runceanu.ro
85
copyright@www.adrian.runceanu.ro
27.05.2015
86
copyright@www.adrian.runceanu.ro
socket.receive(cerere);
27.05.2015
87
copyright@www.adrian.runceanu.ro
88
copyright@www.adrian.runceanu.ro
89
copyright@www.adrian.runceanu.ro
90
copyright@www.adrian.runceanu.ro
2. Programare n reea
1.
2.
3.
4.
5.
6.
27.05.2015
91
copyright@www.adrian.runceanu.ro
92
copyright@www.adrian.runceanu.ro
93
copyright@www.adrian.runceanu.ro
27.05.2015
94
copyright@www.adrian.runceanu.ro
95
copyright@www.adrian.runceanu.ro
ntrebri?
27.05.2015
96