Izuzetak u odnosu na pogrešku
Neočekivano ponašanje vjerojatno će se dogoditi kada se program pokrene. To može biti zbog izuzetaka ili pogreške. Izuzetak su događaji koji mogu poremetiti normalan tok programa. Pogreške su uvjeti koji se mogu smatrati nenadoknadivim. Iznimke su uglavnom povezane sa samom aplikacijom, dok su pogreške povezane sa sustavom na kojem se program izvodi.
Što je iznimka?
Izuzetak je događaj koji može poremetiti normalan tok programa. Izuzetak naziva dolazi od "iznimnog događaja". Bacanje izuzetaka postupak je stvaranja izuzetaka i njegova predaja runtime sustavu. Objekt izuzeća stvara se metodom u kojoj se iznimka dogodila. Objekt izuzeća sadrži korisne informacije poput vrste i opisa iznimke. 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). Korak poziva je naručeni popis metoda koje su pozvane prije metode u kojoj se dogodila iznimka. 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 izvršavanja pronađe odgovarajući rukovatelj (tj. Vrsta iznimke odgovara vrsti kojom se može rukovati), 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 izuzeci nasljeđuju iz "klase probacivanja". NullPointerException i ArrayIndexOutOfBoundsException dvije su uobičajene iznimke na Javi.
Što je pogreška?
Pogreška je uvjet koji se može smatrati nenadoknadljivim, poput programa koji zahtijeva količinu memorije veću od dostupne. Te se pogreške ne mogu upravljati tijekom izvođenja. Ako dođe do pogreške, program će se zaustaviti. U Javi pogreške nasljeđuju od klase Throwable. Pogreške obično predstavljaju ozbiljne probleme koje programer (ili aplikacija) ne bi trebao pokušati uhvatiti. Pogreške su jednostavno nenormalni uvjeti, za koje se nikada ne očekuje da će se pojaviti u normalnim okolnostima, te stoga nikada nisu predviđeni. Na primjer, OutOfMemoryError, StackOverflowError i ThreadDead su takve pogreške. Metode nikada ne smiju imati rukovatelje za pogreške.
Koja je razlika između iznimke i pogreške?
I pogreške i iznimke neželjene su pojave tijekom izvođenja programa. Međutim, one imaju ključne razlike. Iznimke može predvidjeti programer, dok je pogrešku teško predvidjeti. Iznimke se mogu provjeriti ili isključiti. Ali pogreške su uvijek neprovjerene. Iznimke obično pokazuju grešku koju uzrokuje programer. Međutim, pogreške se pojavljuju zbog sistemske pogreške ili neprimjerenog korištenja resursa. Stoga se s iznimkama treba postupati na razini aplikacije, dok se pogreške trebaju voditi na razini sustava (samo ako je moguće). Nakon rukovanja iznimkom, zajamčeno se vraćate u normalan tok programa. Ali čak i ako se dogodi pogreška, programer u prvom redu možda ne zna kako to riješiti. Za razliku od tradicionalnog postupanja s pogreškama, iznimke omogućuju odvajanje koda za upravljanje pogreškama od redovnog koda.