Professional Documents
Culture Documents
1
| IMI | PMF | KG | OOP | 13 | AKM |
Izuzeci
JAVA
Greke
2
Obrada greaka
}
catch(Greska g) {
// obrada greske
} Delovi koda koji nede biti
//DEO KODA KOJI SE IZVRSAVA BEZ OBZIRA NA TRY/CATCH
}
izvreni
}
class Prijava{
int ocena; Student s; Predmet p;
. . .
void ocenaIspravka throws Greska (int nova) {
if !(p.ocena()>5 && nova>5 && nova<=10) {
Greska g = new Greska();
5 throw g;
}
else p.setOcena(nova);
}
}
Pojednostavljen model obrade greaka
upotrebom koncepta IZUZETAKA
Ko obavetava?
Metod tokom ijeg izvravanja se desila izuzetna situacija, koja zahteva
drugaije ponaanje pozivaoca metoda koji izuzetak baca.
7 Kako obavetava?
| IMI | PMF | KG | OOP | 13 | AKM |
Generie objekat specijalnog tipa (tipa IZUZETKA) i baca ga, tj. prosleuje ga
komandi throw.
Ko preuzima obavetenje?
throw JVM izvrava tako to preusmerava izvravanje programa na deo koda
koji je naveden u bloku za obradu odgovarajudeg tipa izuzetka, tj. za
prihvatanje objekata odgovarajudeg tipa (catch blok).
Koji je to specijalni tip objekta?
Objekat kojim se opisuje greka ne moe pripadati proizvoljnoj klasi. Klasa
kojoj objekat pripada mora da se nae u lancu nasleivanja klase
Throwable, jer sam Javin kompajler vri proveru tipa objekta pri prevoenju
throw komande.
6
ta je sa nenadgledanim delom koda (van try bloka)?
Ako dodje do bilo kakve greke van nadgledanog regiona, sigurno je da
metod u kom se greka desila nede istu zbrinuti, ved de greka biti delegirana
njegovom pozivaocu.
Pojednostavljen model obrade greaka
upotrebom koncepta IZUZETAKA
ta je sa nenadgledanim delom koda (van try bloka)?
Ako dodje do bilo kakve greke van nadgledanog regiona, sigurno je da
metod u kom se greka desila nede istu zbrinuti, ved de greka biti delegirana
7 njegovom pozivaocu, tj. metodu koji ga je pozvao.
| IMI | PMF | KG | OOP | 13 | AKM |
PRIMER 1. komentar
Klasa Prijava ima predvien metod prepravke ocene, ali samo u sluaju da u prijavi pie da je
student poloio i ako je nova ocena izmeu 6 i 10, tj. Ako se ne menja status poloenosti ispita. U
suprotnom se metod u kom se poziva prepravka ocene obavetava o tome da ispravka ocene nije
7 obavljena tako to se baca izuzetak.
Dakle, neuspena ispravka je logiki svrstana u izuzetak i to u funkcionisanju pozivaoca. Sama
prijava ne zavisi od toga, tj. Ona se brine o konzistentnosti svoga stanja, a onoga koji je pokuao da
je u nekonzistentno stanje dovede, obavetava o neuspehu njegove akcije. Da li de i kako poziva
reagovati nije briga prijave, ved onoga ko izuzetak treba da uhvati.
Lanac hvatanja izuzetka i call stack
Zahvaljujudi call stack-u JVM zna koja je prva naredna komanda koja treba da
bude izvrena nakon regularnog zavretka nekog pozvanog metoda ili kome
treba da prosledi generisani izuzetak
u sluaju neregularnog zavretka Java Runtime
pozvanog metoda. Method
Calls
Ako JVM ne uspe ni u jednom main() method Travel
metodu na call stack-u da Down
Exceptions method a()
pronae obradu izuzetka
Passed
8 program prekida rad. Up
method b()
method c()
Exception
Thrown Here
Tipovi izuzetaka u Javi
Throwable
Error Exception
... RuntimeException
...
9 ...
Izuzeci tipa Error
10
Izuzeci tipa Exception i, posebno, RunTimeException
RunTimeException klase.
Ako metoda baca neki proveravani izuzetak, poziv te metode mora
da bude uokviren try-catch blokom koji hvata taj izuzetak, a
metoda mora da bude oznaena kljunom rei throws i nazivom
klase izuzetka koji baca.
neproveravani izuzeci (unchecked)
Oni koji su izvedeni iz RunTimeException.Klase koje su navedene u tabeli
Javinih predefinisanih izuzetaka, uglavnom, nasleuju klasu
RuntimeException pa pripadaju grupi neproveravanih izuzetaka.
Ako metoda baca neki neproveravani izuzetak, poziv te metode
12 moe, ali ne mora biti uokviren try/catch blokom koji hvata taj
izuzetak.
Neproveravani izuzetak - primer
14
Proveravani izuzetak - primer
15
Proveravani izuzetak - primer
}
catch (ArithmeticException e) {
// Deal with the exception here
}
uhvadeni izuzetak proslediti dalje (na pozivajudi nivo)
try {
// Code that originates an arithmetic exception
}
catch (ArithmeticException e) {
// Deal with the exception here
throw e; // Rethrow the exception to the calling program
}
uhvatiti izuzetak, generisati sopstveni i baciti ga pozivaocu
try {
17 // Code that originates an arithmetic exception
}
catch (ArithmeticException e) {
// Deal with the exception here
throw new SomeNewEcepton(); // Rethrow the exception
}
Napomena
...
}
public class KK {
public void gr(int k) throws Izuz{
if (k==0) throw new NulaArgument();
// regularno ponasanje metoda
}
}
18
Obrada izuzetaka i viestruku catch blokovi
kod koji obrauje izuzetak se poziva za ExceptionType1 ili bilo koju njegovu
podklasu.
Ako je u nekom try/catch bloku navedeno nekoliko catch blokova sa
nekoliko tipova izuzetaka u istoj klasnoj hijearhiji, potrebno je blokove
postaviti tako da se prvo hvata izuzetak najnie podklase, pa redom prema
najvioj superklasi.
// neispravna sekvenca catch blokova
// nee se prevesti
try {
// try block code
19 } catch(Exception e){ ... }
catch(ArithmeticException e){ ... }
Exception objekti
vrednosti koje vratimo s return u finally bloku de pregaziti bilo koji return
izvren u try bloku.
int metod(){
try {
//...
return 1;
}
finally {
return 2;
}
22 // nedohvatljiv deo koda, kompajler ne bi dozvolio
}