Preverjena izjema v primerjavi z izjemo med izvajanjem
Izjeme so posebni dogodki, ki lahko motijo normalen potek programa. Ime izjema izhaja iz "izjemen dogodek". Vrženje izjeme je postopek ustvarjanja predmeta izjeme in njegove predaje izvajalnemu sistemu. Ko sistem izvajalnega okolja prejme objekt izjeme, bo poskušal najti nekoga, ki bi ga obravnaval znotraj sklada klicev, tako da ga prečka v obratnem vrstnem redu (v katerem so bile klicane metode). Izvajalni sistem je uspešen, če najde metodo z obravnavo izjem. Obravnavalec izjem je blok kode, ki lahko uradno obravnava omenjeno izjemo. Če sistem izvajalnega okolja najde ustrezno obravnavo, bo predmet izjeme posredoval obdelovalcu. To se imenuje lovljenje izjeme. Če pa izjeme ni mogoče obravnavati, se program prekine. V Javi izjeme podedujejo razred Throwable. Preverjene izjeme so izjeme, za katere ravnanje uveljavlja prevajalnik. Izjeme med izvajanjem so vrsta izjem, ki jih prevajalnik ne preveri.
Kaj je označena izjema?
Preverjene izjeme so objekti razreda java.lang.exception ali njegovih podrazredov (razen java.lang. RuntimeException in njegovih podrazredov). Preverjene izjeme so "preverjene" med prevajanjem. To pomeni, da mora programer te izjeme bodisi ujeti ali vrniti, sicer bi se prevajalnik pritožil (kar bi povzročilo napako prevajalnika). Zaradi tega so programerjem številne preverjene izjeme zelo dobro znane. Na primer, izjema IOException in njeni podrazredi so preverjene izjeme in kadar koli ima programer opravka z dostopanjem do datoteke ali spreminjanjem datoteke, prevajalnik preveri, ali programer poskrbi za vse možne izjeme IOException.
Kaj je izjema med izvajanjem?
Izjeme med izvajanjem so sestavljene iz java.lang. RuntimeException in vseh njegovih podrazredov. Teoretično gledano služijo istemu namenu kot preverjene izjeme in jih je mogoče sprožiti ali obravnavati kot preverjene izjeme, vendar prevajalnik ne uveljavlja njihove obravnave. Zato spadajo izjeme med izvajanjem v družino nepreverjenih izjem. NullPointerException, NumberFormatEception, ClassCastException in ArrayIndexOutOfBoundsException so pogoste izjeme med izvajanjem v Javi.
Kakšna je razlika med označeno izjemo in izjemo med izvajanjem?
Čeprav so tako preverjene izjeme kot izjeme med izvajanjem neželen pojav med izvajanjem programa, imajo svoje razlike. Obravnavo preverjenih izjem uveljavlja prevajalnik, izjem med izvajanjem pa ne. Zato je treba preverjene izjeme sprožiti ali obravnavati, da se lahko koda prevede, vendar te zahteve glede izjem med izvajanjem ni. Posledično spadajo izjeme med izvajanjem v kategorijo nepreverjenih izjem skupaj z napakami.
Pomanjkljivost pri preverjenih izjemah je, da mora programerka to ravnati, tudi če ne ve, kako. Torej, če programer vrže novo izjemo, ne da bi zavil izvirno, bo sled sklada, ki pripada izvirni izjemi, izgubljena. Tu pridejo prav izjeme izvajalnega časa. Ker je mogoče vse izjeme med izvajanjem obravnavati na enem mestu, lahko programerji napišejo manj kode. Po drugi strani, ker je treba preverjene izjeme ujeti, za programerja ni presenečenja. Vedno bo vedela, katero preverjeno izjemo bi lahko vrgla določena metoda. V nasprotju s tem se lahko vržejo različne izjeme med izvajanjem brez vednosti programerja.