Zaškrtnutá výnimka verzus runtime výnimka
Výnimkou sú špeciálne typy udalostí, ktoré môžu 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. 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é). 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, 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 od triedy Throwable. Začiarknuté výnimky sú výnimky, pri ktorých kompilátor vynucuje spracovanie. Výnimky za behu sú typom výnimiek, ktoré kompilátor nekontroluje.
Čo je kontrolovaná výnimka?
Začiarknuté výnimky sú buď objekty triedy java.lang.exception alebo jej podtriedy (okrem java.lang.RuntimeException a jej podtried). Zaškrtnuté výnimky sú „skontrolované“ v čase kompilácie. To znamená, že programátor musí tieto výnimky buď chytiť alebo vyhodiť, inak by sa kompilácia sťažovala (spôsobila chybu kompilátora). Z tohto dôvodu je veľa kontrolovaných výnimiek programátorom veľmi dobre známe. Napríklad, IOException a jeho podtriedy sú kontrolované výnimky a vždy, keď programátor pracuje s prístupom alebo úpravou súboru, kompilátor skontroluje, či programátor zabezpečuje všetky možné IOException..
Čo je výnimka Runtime?
Výnimky za behu sa skladajú z java.lang.RuntimeException a všetkých jej podtried. Teoreticky slúžia na ten istý účel ako kontrolované výnimky a môžu sa s nimi hádzať alebo s nimi zaobchádzať ako s kontrolovanou výnimkou, ale kompilátor ich nevynucuje. Výnimky runtime preto patria do rodiny nekontrolovaných výnimiek. Výnimky NullPointerException, NumberFormatEception, ClassCastException a ArrayIndexOutOfBoundsException sú bežné runtime výnimky v Java.
Aký je rozdiel medzi kontrolovanou výnimkou a výnimkou za behu?
Aj keď sú kontrolované výnimky aj výnimky za behu nežiadúcim javom počas vykonávania programu, majú svoje rozdiely. Kompilátor vynucuje kontrolované spracovanie výnimiek, ale výnimky za behu nie sú. Preto sa musia kontrolované výnimky vyvolať alebo s nimi manipulovať, aby sa mohol kód skompilovať, ale neexistujú žiadne požiadavky týkajúce sa výnimiek za behu. Výnimky runtime preto patria do kategórie nekontrolovaných výnimiek spolu s chybami.
Nevýhodou kontrolovaných výnimiek je, že programátor to musí zvládnuť, aj keď nevie, ako na to. Ak teda programátor vyvolá novú výnimku bez toho, aby zalomil originál, stopa zásobníka, ktorá patrí pôvodnej výnimke, sa stratí. Tu sa hodia výnimky z runtime. Pretože všetky výnimky runtime sa dajú spracovať na jednom mieste, programátori tak môžu písať menšie množstvo kódu. Na druhej strane, keďže sa musia zachytiť kontrolované výnimky, nie je pre programátora žiadne prekvapenie. Vždy bude vedieť, ktorá kontrolovaná výnimka môže byť vyvolaná určitým spôsobom. Na rozdiel od tohto, rôzne runtime výnimky môžu byť vyvolané bez vedomia programátora.