Iznimka naspram pogreške
Neočekivano ponašanje sigurno će se dogoditi kada je program pokrenut. To može biti zbog iznimaka ili pogrešaka. Izuzetak su događaji koji mogu poremetiti normalan tijek programa. Pogreške su stanja koja se mogu smatrati nepopravljivima. Iznimke se uglavnom odnose na samu aplikaciju, dok se pogreške odnose na sustav na kojem se program izvodi.
Što je iznimka?
Iznimka je događaj koji može 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. Objekt iznimke kreira metoda u kojoj se iznimka dogodila. Objekt iznimke sadrži korisne informacije poput vrste i opisa iznimke. 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). Stog poziva je uređeni popis metoda koje su pozvane prije metode u kojoj je došlo do iznimke. 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 (tj. tip iznimke odgovara tipu koji se može obraditi), 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 'Throwable klase.' NullPointerException i ArrayIndexOutOfBoundsException dvije su uobičajene iznimke u Javi.
Što je pogreška?
Greška je stanje koje se može smatrati nepopravljivim, kao što je program koji zahtijeva količinu memorije veću od one koja je dostupna. Ove se pogreške ne mogu riješiti tijekom izvođenja. Ako dođe do pogreške, program će se prekinuti. U Javi, pogreške nasljeđuju od klase Throwable. Pogreške obično predstavljaju ozbiljne probleme koje programer (ili aplikacija) ne bi trebao pokušavati uhvatiti. Pogreške su jednostavno nenormalni uvjeti, za koje se ne očekuje da će se dogoditi u normalnim okolnostima, pa se stoga nikada ne predviđaju. Na primjer, OutOfMemoryError, StackOverflowError i ThreadDead takve su pogreške. Metode nikada ne bi trebale imati rukovatelje greškama.
Koja je razlika između iznimke i pogreške?
I pogreške i iznimke su neželjena pojava tijekom izvođenja programa. Međutim, oni imaju ključne razlike. Iznimke programer može predvidjeti, a pogrešku je teško predvidjeti. Iznimke mogu biti označene ili isključene. Ali greške se uvijek ne provjere. Iznimke obično ukazuju na pogrešku koju je uzrokovao programator. Međutim, pogreške se javljaju zbog sistemske pogreške ili neprikladne upotrebe resursa. Stoga se iznimke trebaju rješavati na razini aplikacije, dok se greške trebaju rješavati na razini sustava (samo ako je moguće). Nakon obrade iznimke, zajamčeno je da ćete se vratiti u normalan tijek programa. Ali čak i ako se otkrije pogreška, programer možda uopće ne zna kako s njom postupiti. Za razliku od tradicionalnog rukovanja pogreškama, iznimke dopuštaju odvajanje koda za rukovanje pogreškama od uobičajenog koda.