Provjerena iznimka u odnosu na vrijeme izvršavanja
Izuzeci su posebna vrsta događaja koja mogu poremetiti normalan tok programa. Izuzetak naziva dolazi od "iznimnog događaja". Bacanje izuzetaka postupak je stvaranja izuzetaka i njegova predaja runtime sustavu. Kad sustav za vrijeme izvođenja primi objekt iznimke, pokušati će pronaći nekoga da se rukuje s njim unutar skupa poziva tako što će ga kretati obrnutim redoslijedom (u kojem su se metode pozivale). Runtime sustav je uspješan ako pronađe metodu s alatom za obradu izuzetaka. Rukovatelj izuzecima je blok koda koji službeno može riješiti navedenu iznimku. Ako sustav za vrijeme izvođenja nađe odgovarajući rukovatelj, proslijedit će objekt iznimke rukovatelju. To se naziva hvatanjem iznimke. Međutim, ako se iznimka ne može obraditi, program će se zaustaviti. U Javi iznimke nasljeđuju iz klase Throwable. Označene iznimke iznimke su u kojima kompajler izvršava rukovanje. Iznimke za vrijeme izvršavanja su vrsta iznimki koje prevoditelj ne provjerava.
Što je provjerena iznimka?
Označene iznimke su ili objekti klase java.lang.exception ili njihove potklase (osim java.lang.RuntimeException i njegovih podrazreda). Označene iznimke označavaju se u vrijeme sastavljanja. To znači da programer mora ili uhvatiti ili izbaciti ove iznimke, ili bi se u protivnom kompajler žalio (uzrokujući pogrešku prevoditelja). Zbog toga su programerima dobro poznate mnoge provjerene iznimke. Na primjer, IOException i njegove podklase su provjereni izuzeci, a kad god se programer bavi pristupom ili izmjenom datoteke, prevoditelj provjerava kako se programer brine za sve moguće IOExceptions..
Što je izuzetak od runtimea?
Izuzeci za vrijeme izvođenja sastoje se od java.lang.RuntimeException i svih njegovih podklasa. Teoretski gledano, oni imaju istu svrhu kao i provjereni izuzeci i mogu se baciti ili njima se postupati poput provjerenih izuzetaka, ali njihovo sastavljanje ne primjenjuje. Stoga izuzeci za vrijeme izvođenja pripadaju obitelji neprovjerenih iznimki. NullPointerException, NumberFormatEception, ClassCastException i ArrayIndexOutOfBoundsException česte su iznimke runtimeova na Javi.
Koja je razlika između provjerenog izuzeća i izuzeća tijekom izvršavanja?
Iako su i provjerene iznimke i iznimke tijekom izvođenja neželjene pojave tijekom izvođenja programa, imaju svoje razlike. Provjereno rukovanje iznimkama primjenjuje prevoditelj, ali izuzeci tijekom izvođenja nisu. Dakle, provjerene iznimke moraju se baciti ili obraditi kako bi se kôd sastavio, ali ne postoji takav zahtjev u vezi s iznimkama tijekom izvođenja. Prema tome, izuzeci za vrijeme izvođenja pripadaju kategoriji neprovjerenih izuzetaka, zajedno s pogreškama.
Nedostatak provjerenih izuzetaka je što programer mora to podnijeti čak i ako ne zna kako to učiniti. Dakle, ako programer baci novu iznimku bez omatanja originala, gubitak traga skupa koji pripada izvornom izuzeću će se izgubiti. Ovdje su korisni izuzeci za vrijeme izvođenja. Budući da se sve iznimke u toku izvođenja mogu podnijeti na jednom mjestu, tako programeri mogu napisati manju količinu koda. S druge strane, budući da se moraju uhvatiti provjereni izuzeci, programer ne iznenađuje. Uvijek će znati koji se provjereni izuzetak može izbaciti određenom metodom. Suprotno ovome, razne se iznimke tijekom izvođenja mogu izbaciti bez znanja programera.