Professional Documents
Culture Documents
Oop 7
Oop 7
Exceptions
Greške u programu
Prilikom pisanja iole ozbiljnih programa greške
su česta, gotovo, neizbežna stvar
Obrada svih ulaza se nameće kao ozbiljan
problem
Dobar program mora imati mogućnost da na
sve ulaze odgovori na adekvatan način
Da li vam se dogodio bar jedan
Da li Vam se dogodio bar jedan izuzetak...
Poruka u statusnoj liniji za razne vrste grešaka
SecurityExceptions,
ArrayIndexOutOfBoundsExceptions,
NullPointerException ....
Izuzetak
Izuzetak je neželjeni događaj koji prekida tok
programa.
Kada se dogodi izuzetak, izvršenje programa
se prekida. U takvim slučajevima dobijamo
poruku o grešci generisanu sistemom.
Programer može upravljati takvim
dogadjajima (exception handling).
preduzimanjem odredjenih aktivnosti.
Kada se program prekine to je zato što je
izuzetak izbačen (An exception was trown)
Izuzeci mogu biti izbačeni od strane sistema ili
eksplicitno izbačeni od strane programa
Mnogi programski jezici ne nude nikakvu
pomoć za upravljanje greškama.
Na programeru je da sam formira kodove za
greške i da piše funkcije koje će vraćati kod
greške koja se dogodila.
Za razliku od toga Java nudi mogućnost
upravljanja izuzetnim situacijama (exception
handling).
Na primer
public class ExceptionDemo
}
Java runtime system izbacuje izuzetak
ArrayIndexOutOfBoundsException,
I zavrsava program
Object
Throwable
Error Exception
RuntimeException
Sa vise detalja
Vrste izuzetaka
Izuzeci su objekti neke podklase klase
java.lang.Throwable. Mogu biti:
• Greške (Errors)
• Provereni izuzeci (Checked Exceptions)
• Neprovereni izuzeci (Runtime Exceptions)
Klasa Error
Klasa Error koja je u vrhu jedne od grana je osnovna
klasa za klase koje reprezentuju teške otkaze koji se
dešavaju u toku izvršavanja programa, poput, recimo,
otkaza prilikom dinamičkog vezivanja.
Tipičan Java program gotovo nikad neće raditi sa
ovakvim tipom greske.
Program se sruši pre nego sto pokuša da obradi
grešku.
Provereni I ne provereni
izuzeci
Glavna razlika između proverenog i
neproverenog izuzetka je u tome što se
provereni izuzeci proveravaju u vreme
kompajliranja, dok se neprovereni izuzeci
proveravaju tokom izvrsenja programa.
Provereni izuzeci
(Checked Exceptions)
Svi izuzeci osim runtime izuzetaka tokom
izvođenja poznati su kao Provereni izuzeci,
jer ih kompajler proverava tokom
kompajliranja da bi utvrdio da li ih je
programer obrađivao ili ne.
Ako se ovi izuzeci ne obrade / ne deklarišu u
programu, dobićete grešku pri kompajliranju.
Neprovereni izuzeci
RuntimeException
Posebnu važnost među svim naslednicima klase
Exception ima klasa RuntimeException.
Ona, kao i njeni naslednici predstavljaju situacije
koje se ne moraju proveravati.
RuntimeException
Ovi izuzeci se ne proveravaju tokom vremena
kompajliranja, tako da prevodilac ne
proverava da li ih je programer obrađivao ili
ne, ali odgovornost programera je da obradi
ove izuzetke i obezbedi siguran izlazak.
Na primer, izuzetak
NullPointerException može da se javi bilo gde u
programu kad se obraćamo objektu preko
null reference. (ukoliko pokusate da koristite
promenljivu pre nego sto joj dodelite objekat)
Cena pisanja handler-a za sve takve situacije
daleko prevazilazi dobit od specificiranja i
hvatanja takvih izuzetaka pa nas kompajleri i
ne primoravaju da te izuzetke hvatamo
Klasa Exeption
klasa RuntimeExeptions
ArrayIndexOutOfBoundsException ,
SecurityException,
NullPointerException............
Ostale klase izuzetaka
EOFException,
MalformedURLException
IOException …
Važno pravilo
Svaki izuzetak, osim izuzetaka čije su klase
izvedene iz klase RuntimeException, se mora
Uhvatiti, i obraditi, ili
specificirati da metod može proizvesti takav
izuzetak
Exception handling
Upravljanja izuzetnim situacijama (exception
handling).
kada se u nekom metodu dogodi neka izuzetna
situacija metod formira objekat (exception object)
koji onda predaje izvršnom okruženju na
upravljanje.
Zadatak runtime okruženja je da pronađe deo koda
u programu koji će upravljati nastalim izuzetkom
(exception handler) ili da
kada takvog koda nema, završi program i izda
poruku o grešci.
Exception handler
Za traženje odgovarajućeg exception
handler-a runtime okruženje koristi stek sa
aktivacionim zapisima funkcija u programu.
Pretraga tog steka počinje od funkcije koja je
proizvela izuzetak i nastavlja se naviše kroz
stek pozivanja sve dok se ne nađe funkcija
koja u svome telu sadrži kod za upravljanje
izuzetkom. (exception handler)
Exception objekat
Exception objekat koji funkcija kreira i baca
prilikom izuzetnih situacija je Java objekat u
pravom smislu reči. To je objekat neke od
klasa koje su izvedene iz klase Exception i on
sadrži sve relevantne podatke o nastalom
izuzetku, uključujući i stanje programa u
trenutku njegovog nastanka.
Primer, za uvodjenje u
problematiku izuze taka
Predpostavimo da pišemo funkciju koja treba
da učita neki fajl u memoriju.
Pseudo-kodom izraženo
rešenje
read{
otvoriti fajl;
odrediti mu velicinu;
alocirati dovoljno memorije;
ucitati fajl u memoriju;
zatvoriti fajl;
}
Pri tom treba voditi računa o
sledećim stvarima
da li je fajl uspešno otvoren,
da li njegova dužina može uspešno da se
odredi,
da li može da se alocira dovoljno memorije,
šta ako fajl ne može da se čita,
šta ako fajl ne može da se zatvori.
prethodni kod malo konkretnije
errorCodeType read {
inicijalizacija errorCode = 0;
otvoriti fajl;
if (fajl otvoren) {
odrediti velicinu fajla;
if (dobijena duzina fajla) {
alocirati dovoljno memorije;
if (alocirano dovoljno memorije) {
ucitati fajl u memoriju;
if (citanje nije moguce) {
errorCode = -1;
}
} else {
errorCode = -2;
}
}else }
errorCode = -3;
}
zatvoriti fajl;
if (fajl nije zatvoren && errorCode == 0) {
errorCode = -4;
} else {
errorCode = errorCode and -4;
}
} else {
errorCode = -5;
}
return errorCode;
}
Isti kod Koristeći exception mehanizam
read {
try{
otvoriti fajl;
odrediti mu velicinu;
alocirati memoriju;
ucitati fajl u memoriju;
zatvoriti fajl;
} catch (fileOpenFailed) {
obrada;
} catch (sizeDeterminationFailed) {
obrada;
} catch (memoryAllocationFailed) {
obrada;
} catch (readFailed) {
obrada;
} catch (fileCloseFailed) {
obrada;
}
}
Da bi ste uhvatili izuzetak