Provjerena iznimka u odnosu na iznimku tijekom izvođenja
Iznimke su posebna vrsta događaja, koji mogu poremetiti normalan tijek programa. Naziv iznimka dolazi od "iznimnog događaja". Izbacivanje iznimke je proces stvaranja objekta iznimke i njegova predaja sustavu za izvršavanje. Kada runtime sustav primi objekt iznimke, pokušat će pronaći nekoga tko će njime upravljati unutar hrpe poziva prelazeći ga obrnutim redoslijedom (u kojem su metode pozvane). Sustav za izvođenje je uspješan ako pronađe metodu s rukovateljem iznimkama. Rukovatelj iznimkama je blok koda koji može službeno obraditi spomenutu iznimku. Ako runtime sustav pronađe odgovarajući rukovatelj, proslijedit će objekt iznimke rukovatelju. To se zove hvatanje iznimke. Međutim, ako se iznimka ne može obraditi, program će prekinuti rad. U Javi iznimke nasljeđuju od klase Throwable. Provjerene iznimke su iznimke na čije rukovanje provodi prevodilac. Iznimke u vremenu izvođenja su vrsta iznimki koje kompajler ne provjerava.
Što je označena iznimka?
Checked Exception su ili objekti klase java.lang.exception ili njezinih podklasa (osim java.lang. RuntimeException i njenih podklasa). Provjerene iznimke se "provjeravaju" tijekom kompajliranja. To znači da programer mora ili uhvatiti ili izbaciti ove iznimke, inače bi se kompajl žalio (uzrokujući grešku prevoditelja). Zbog toga su mnoge provjerene iznimke vrlo dobro poznate programerima. Na primjer, IOException i njegove potklase su provjerene iznimke, a kad god se programer bavi pristupom ili modificiranjem datoteke, kompajler provjerava je li programer riješio sve moguće IOExceptione.
Što je iznimka vremena izvođenja?
Iznimke vremena izvođenja sastoje se od java.lang. RuntimeException i svih njegovih podklasa. Teoretski govoreći, služe istoj svrsi kao i provjerene iznimke i mogu se izbaciti ili rukovati njima kao provjerena iznimka, ali rukovanje njima nije nametnuto od strane kompajlera. Stoga iznimke vremena izvođenja pripadaju obitelji neprovjerenih iznimaka. NullPointerException, NumberFormatEception, ClassCastException i ArrayIndexOutOfBoundsException uobičajene su iznimke vremena izvođenja u Javi.
Koja je razlika između provjerene iznimke i iznimke tijekom izvođenja?
Iako su i provjerene iznimke i iznimke tijekom izvođenja neželjena pojava tijekom izvođenja programa, one imaju svoje razlike. Rukovanje provjerenim iznimkama provodi kompajler, ali iznimke u vremenu izvođenja nisu. Stoga se provjerene iznimke moraju izbaciti ili obraditi kako bi se kod kompilirao, ali ne postoji takav zahtjev u vezi s iznimkama vremena izvođenja. Posljedično, iznimke vremena izvođenja pripadaju kategoriji neprovjerenih iznimaka zajedno s pogreškama.
Nedostatak s provjerenim iznimkama je taj što programer to mora riješiti čak i ako ne zna kako. Dakle, ako programer samo izbaci novu iznimku bez omatanja originalne, trag stoga koji pripada izvornoj iznimci bit će izgubljen. Ovdje su iznimke vremena izvođenja korisne. Budući da se svim iznimkama vremena izvođenja može rukovati na jednom mjestu, programeri mogu pisati manje koda. S druge strane, budući da se provjerene iznimke moraju uhvatiti, nema iznenađenja za programera. Ona će uvijek znati koja je provjerena iznimka mogla biti izbačena određenom metodom. Suprotno tome, razne iznimke vremena izvođenja mogu se izbaciti bez znanja programera.