9. Izuzeci Flashcards
Izuzeci u programskom jeziku Java
try{//kod koji moze da prijavi izuzetke}
catch(Exception1 e){//obrada izuzetka tipa Exception1}
catch(Exception2 e){//obrada izuzetka tipa Exception2}
…
finaly{//deo koji se izvrsava nezavisno od toga da li je izuzetak prijavljen ili ne}
Namena finally bloka je da oslobodi resurse koji su eventualno zauzeti pre prijave izuzetka.
Standardni izuzeci u Javi
Tip objekata koji se prijavljuje kao izuzetak mora da bude nasledjen direktno ili indirektno iz klase Throwable.
- Klasa Error je osnovna klasa za predstavljanje skupa izuzetaka koji prijavljuje uglavnom JVM i ovi izuzeci izazivaju prekid rada aplikacije. Ovi izuzeci ne moraju da se prihvataju i obradjuj.
- Klasa Exception je osnovna klasa za predstavljanje skupa izuzetaka koji se pojavljuju u programu - nastali su kao posledice greske programera, pogresnih podataka ili problema sa U/I uredjajima.
- Klasa RunTimeException je klasa za predsatavljanej izuzetaka koji su uglavnom posledica gresaka programera. Izuzeci ove klase ne moraju da budu obradjeni
Checked & Unchecked exceptions
- Unchecked exceptions - u fazi kompajliranja se ne proverava da li su izuzeci ovog tipa obradjeni (izuzeci izvedeni iz Error i RunTimeException)
- Checked exceptions - u fazi kompajliranja se proverava da li su izuzeci ovog tipa obradjeni (izuzeci izvedeni iz Exception osim RunTimeException)
Kreiranje sopstvenih klasa za predstavljanje izuzetaka
Obavezno je da budu direktno ili indirektno izvedeni iz klase Exception
public MojIzuz extends Exception { public MojIzuz(String s) { super(s); } }
Propagiranje izuzetaka u Javi
Ukoliko funkcija prijavljuje izuzetak koji je izveden iz klase Exception, neophodno je da kompajler proveri da li su ti izuzeci obradjeni i to se radi dodavanjem throws klazule, npr throws IOException; iza zaglavlja funkcije koja moze da baci taj izuzetak.
Slicnosti i razlike u odnosu na C++
Format naredbe za prijavu izuzetaka i struktura try catch je isti kao u C++
Razlika je u tome sto izuzetak ne moze biti proizvoljnog tipa, struktura za obradu izuzetka moze da sadrzi finally i u zaglavlju funkcija throws je obavezna.
Izuzeci u programskom jeziku C#
Ukoliko zelimo da napravimo svoj izuzetak, neophodno je da on bude izveden iz ApplicationException.
Slicnosti sa javom su to sto je format naredbi za prijavu izuzetka isti, try - catch struktura je ista, objekti koji se prijavljuju kao izuzeci su objekti stanradnih klasa za predstavljanje izuzetaka ili objekti klasa izvedenih izn jih.
Razlika je to sto se throws klazula ne navodi u zaglavlju funkcije
Mehanizam za obradu izuzetaka
Izuzetak je svaki neobican dogadjaj koji se moze otkriti softverski ili hardverski, a koji zahteva posebnu obradu, npr. deljenje nulom. Izuzetak treba da se obradi izvan osnovnog toka programa.
U jezicima koji ne podrzavaju obradu izuzetaka, ispisuje se odgovarajuca poruka na ekran i prekida se rad programa.
U jezicima koji podrzavaju obradu izuzetaka, u tackama gde je doslo do problema se prijavljuje izuzetak, a u posebnim delovima koda se izuzetak obradjuje, tj. trazi se mogucnost da se nastavi program ili da se taj problem resi.
Tehnike za obradu izuzetaka
Kod novijih programskih jezika razradjeni su mehanizmi za prihvatanje hardverskih izuzetaka i definisanje i obradu softverskih izuzetaka.
Kod starijih programskih jezika ovi problemi su se obicno resavali pomocu:
Koriscenje statusnih parametara za detekciju izuzetaka
Razlicite tacke povratka iz funkcije zavisno od toga da li se pojavio izuzetak ili ne
Potprogram za obradu izuzetka koji se prosledjuje kao parametar
Koriscenje statusnih parametara za detekciju izuzetaka
Potprogramu se dodaje ekstra parametar koji nosi informaciju o statusu odredjenog dogadjaja. Kada nastane dogadjaj koji se kontrolise taj parametar menja vrednost. Pri povratku iz potprograma uvek se ispituje vrednost statusnog parametara. Nedostaci su sto kod postaje jako nepregledan i moguce je da se izuzeci ispituju veliki broj puta.
Razlicite tacke povratka iz funkcije zavisno od toga da li se pojavio izuzetak ili ne
Ovaj nacin omogucava da se nastavak programa razlikuje u zavisnosti da li se pojavio izuzetak. Kod jezika sa dinamickom i polu-dinamickom implementacijom ova tehnika se ne moze koristiti jer otezava manipulisanje aktivacionim slogovima.
Potprogram za obradu izuzetka koji se prosledjuje kao parametar
Potprogram za obradu izuzetaka se prosledjuje u potprograme u kojima se kontrolise odredjeni izuzetak. Osnovni nedostatak ovog pristupa je upravo taj sto se pri svakom pozivu mora prenositi i ceo potprogram za obradu pa kod postaje prenatrpan.