Výnimka verzus chyba
Keď je program spustený, musí dôjsť k neočakávanému správaniu. Dôvodom môžu byť výnimky alebo chyby. Výnimkou sú udalosti, ktoré môžu narušiť normálny priebeh programu. Chyby sú podmienky, ktoré možno považovať za nevymožiteľné. Výnimky sa väčšinou týkajú samotnej aplikácie, zatiaľ čo chyby sa týkajú systému, na ktorom je program spustený.
Čo je výnimka?
Výnimka je udalosť, ktorá môže narušiť normálny priebeh programu. Výnimka mena pochádza z „mimoriadnej udalosti“. Vyhodenie výnimky je proces vytvorenia objektu výnimky a jeho odovzdania do runtime systému. Objekt výnimky je vytvorený metódou, v ktorej došlo k výnimke. Objekt výnimky obsahuje užitočné informácie, ako napríklad typ a popis výnimky. Keď runtime systém príjme objekt výnimky, pokúsi sa nájsť niekoho, kto by s ním manipuloval v rámci zásobníka volaním v opačnom poradí (v ktorom boli metódy vyvolané). Zásobník hovorov je usporiadaný zoznam metód, ktoré sa zavolali pred metódou, v ktorej sa vyskytla výnimka. Runtime systém je úspešný, ak nájde metódu s obsluhou výnimky. Obsluha výnimiek je blok kódu, ktorý môže oficiálne spracovať uvedenú výnimku. Ak runtime systém nájde vhodný obslužný program (t. J. Typ výnimky sa zhoduje s typom, s ktorým sa dá manipulovať), odovzdá objekt výnimky obsluhe. Toto sa nazýva chytanie výnimky. Ak sa však výnimka nedá spracovať, program sa ukončí. V Java sa výnimky zdedia z triedy Throwable. Výnimky NullPointerException a ArrayIndexOutOfBoundsException sú dve bežné výnimky v Java.
Čo je chyba?
Chyba je stav, ktorý možno považovať za nenapraviteľný, napríklad program, ktorý vyžaduje väčšie množstvo pamäte, ako je k dispozícii. Tieto chyby nie je možné vyriešiť za behu. Ak sa vyskytne chyba, program sa ukončí. V Java sa chyby zdedia z triedy Throwable. Chyby zvyčajne znamenajú vážne problémy, ktoré by sa programátor (alebo aplikácia) nemal pokúsiť zachytiť. Chyby sú jednoducho neobvyklé podmienky, ktoré sa za normálnych okolností nikdy neočakávajú, a preto sa nikdy neočakávajú. Takými chybami sú napríklad OutOfMemoryError, StackOverflowError a ThreadDead. Metódy by nikdy nemali mať obsluhy chýb.
Aký je rozdiel medzi výnimkami a chybami?
Počas vykonávania programu sa vyskytujú nežiaduce chyby aj výnimky. Majú však kľúčové rozdiely. Programátor môže predpokladať výnimky, zatiaľ čo chybu je ťažké predvídať. Výnimky môžu byť skontrolované alebo nezaškrtnuté. Chyby sa však vždy nezaškrtávajú. Výnimky zvyčajne označujú chybu spôsobenú programátorom. Chyby sa však vyskytujú v dôsledku systémovej chyby alebo nevhodného použitia zdroja. Výnimky by sa preto mali riešiť na úrovni aplikácií, zatiaľ čo chyby by sa mali riešiť na úrovni systému (iba ak je to možné). Po spracovaní výnimky máte zaručený návrat k normálnemu toku programov. Ale aj keď sa vyskytne chyba, programátor nemusí vedieť, ako ju vyriešiť. Na rozdiel od tradičného spracovania chýb výnimky umožňujú oddelenie kódu na spracovanie chýb od bežného kódu.