Začiarknutá výnimka vs Runtime výnimka
Výnimkou je špeciálny typ udalostí, ktoré môžu narušiť normálny priebeh programu. Výnimka názvu pochádza z „výnimočnej udalosti“. Vyhodenie výnimky je proces vytvárania objektu výnimky a jeho odovzdania runtime systému. Keď runtime systém prijme objekt výnimky, pokúsi sa nájsť niekoho, kto by to spracoval v rámci zásobníka hovorov, a to tak, že ho prejde v opačnom poradí (v akom boli volané metódy). Runtime systém je úspešný, ak nájde metódu s obsluhou výnimiek. Obslužný program výnimiek je blok kódu, ktorý dokáže oficiálne spracovať uvedenú výnimku. Ak runtime systém nájde vhodný obslužný program, odovzdá objekt výnimky obslužnému programu. Tomu sa hovorí chytenie výnimky. Ak však výnimku nie je možné spracovať, program sa ukončí. V Javevýnimky dedia z triedy Throwable. Začiarknuté výnimky sú výnimky, pri ktorých je manipulácia vynútená kompilátorom. Výnimky za behu sú typom výnimiek, ktoré kompilátor nekontroluje.
Čo je začiarknutá výnimka?
Začiarknuté výnimky sú buď objekty triedy java.lang.exception, alebo jej podtriedy (okrem java.lang. RuntimeException a jej podtried). Skontrolované výnimky sa „skontrolujú“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 (čo spôsobilo chybu kompilátora). Z tohto dôvodu sú programátorom veľmi dobre známe mnohé kontrolované výnimky. Napríklad IOException a jeho podtriedy sú kontrolované výnimky a kedykoľvek sa programátor zaoberá prístupom alebo úpravou súboru, kompilátor skontroluje, či sa o všetky možné IOExceptions postará programátor.
Čo je to runtime výnimka?
Výnimky za behu pozostávajú z java.lang. RuntimeException a všetkých jeho podtried. Teoreticky povedané, slúžia rovnakému účelu ako kontrolované výnimky a je možné s nimi hádzať alebo narábať ako s kontrolovanými výnimkami, ale manipulácia s nimi nie je vynútená kompilátorom. Runtime výnimky preto patria do rodiny nekontrolovaných výnimiek. NullPointerException, NumberFormatEception, ClassCastException a ArrayIndexOutOfBoundsException sú bežné runtime výnimky v Jave.
Aký je rozdiel medzi kontrolovanou výnimkou a výnimkou za behu?
Aj keď sú kontrolované výnimky aj runtime výnimky nežiaducim výskytom počas vykonávania programu, majú svoje rozdiely. Kontrolovaná manipulácia s výnimkami je vynútená kompilátorom, ale výnimky za behu nie. Preto je potrebné za účelom kompilácie kódu vyvolať alebo spracovať skontrolované výnimky, ale pokiaľ ide o výnimky za behu, takáto požiadavka neexistuje. Následkom toho patria runtime výnimky spolu s chybami do kategórie nekontrolovaných výnimiek.
Nevýhodou kontrolovaných výnimiek je, že programátorka to musí zvládnuť, aj keď nevie, ako na to. Takže ak programátor iba zahodí novú výnimku bez zabalenia pôvodnej, stopa zásobníka patriaca k pôvodnej výnimke sa stratí. Tu sa hodia výnimky za behu. Pretože všetky runtime výnimky je možné spracovať na jednom mieste, programátori tak môžu zapisovať menšie množstvo kódu. Na druhej strane, pretože musia byť zachytené kontrolované výnimky, pre programátora nie je prekvapením. Vždy bude vedieť, ktorá kontrolovaná výnimka by mohla byť hodená určitou metódou. Napriek tomu možno bez vedomia programátora vyvolať rôzne runtime výnimky.