Zaškrtnutá výjimka vs výjimka za běhu
Výjimky jsou speciální typy událostí, které mohou narušit normální průběh programu. Název výjimka pochází z „výjimečné události“. Vyhození výjimky je proces vytvoření objektu výjimky a jeho předání běhovému systému. Když runtime systém obdrží objekt výjimky, pokusí se najít někoho, kdo by jej zpracoval v zásobníku volání tak, že jej projde v opačném pořadí (ve kterém byly volány metody). Běhový systém je úspěšný, pokud najde metodu s obslužnou rutinou výjimky. Obsluha výjimky je blok kódu, který oficiálně zvládne uvedenou výjimku. Pokud runtime systém najde vhodný handler, předá objekt výjimky handleru. Tomu se říká zachycení výjimky. Pokud však výjimku nelze zpracovat, program se ukončí. V Javě výjimky dědí z Throwable třídy. Zaškrtnuté výjimky jsou výjimky, u kterých je zpracování vynuceno kompilátorem. Výjimky za běhu jsou typem výjimek, které kompilátor nekontroluje.
Co je zaškrtnutá výjimka?
Checked Exceptions jsou buď objekty třídy java.lang.exception nebo její podtřídy (kromě java.lang. RuntimeException a jejích podtříd). Zaškrtnuté výjimky jsou „kontrolovány“v době kompilace. To znamená, že programátor musí tyto výjimky buď zachytit nebo vyhodit, jinak by si kompilace stěžovala (způsobila chybu kompilátoru). Z tohoto důvodu jsou mnohé zaškrtnuté výjimky programátorům velmi dobře známé. Například IOException a její podtřídy jsou kontrolované výjimky, a kdykoli se programátor zabývá přístupem nebo úpravou souboru, kompilátor zkontroluje, zda se programátor postará o všechny možné IOExceptions.
Co je výjimka za běhu?
Výjimky runtime se skládají z java.lang. RuntimeException a všech jejích podtříd. Teoreticky řečeno, slouží stejnému účelu jako kontrolované výjimky a mohou být vyvolány nebo zpracovány jako kontrolovaná výjimka, ale jejich zpracování není vynuceno kompilátorem. Proto výjimky Runtime patří do rodiny nekontrolovaných výjimek. NullPointerException, NumberFormatEception, ClassCastException a ArrayIndexOutOfBoundsException jsou běžné výjimky za běhu v Javě.
Jaký je rozdíl mezi Checked Exception a Runtime Exception?
Přestože jsou jak kontrolované výjimky, tak výjimky za běhu nechtěným výskytem během provádění programu, mají své rozdíly. Zpracování zaškrtnutých výjimek je vynuceno kompilátorem, ale výjimky za běhu nikoli. Zkontrolované výjimky proto musí být vyvolány nebo zpracovány, aby se kód zkompiloval, ale žádný takový požadavek ohledně výjimek za běhu neexistuje. V důsledku toho patří výjimky za běhu do kategorie nekontrolovaných výjimek spolu s chybami.
Nevýhoda zaškrtnutých výjimek je, že programátorka to musí zvládnout, i když si neví rady. Pokud tedy programátor pouze vyvolá novou výjimku bez zabalení původní, trasování zásobníku patřící k původní výjimce bude ztraceno. Zde se hodí výjimky za běhu. Protože všechny výjimky za běhu lze zpracovat na jednom místě, programátoři tak mohou psát menší množství kódu. Na druhou stranu, protože kontrolované výjimky se musí chytat, není to pro programátora žádné překvapení. Vždy bude vědět, která kontrolovaná výjimka by mohla být vyvolána určitou metodou. Na rozdíl od toho mohou být různé runtime výjimky vyvolány bez vědomí programátora.