Výjimka vs chyba
Když je program spuštěn, může dojít k neočekávanému chování. Může to být způsobeno výjimkami nebo chybami. Výjimkou jsou události, které mohou narušit běžný chod programu. Chyby jsou stavy, které lze považovat za nenapravitelné. Výjimky se většinou týkají samotné aplikace, zatímco chyby se týkají systému, na kterém program běží.
Co je to výjimka?
Výjimka je událost, která může 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. Objekt výjimky je vytvořen metodou, ve které k výjimce došlo. Objekt výjimky obsahuje užitečné informace, jako je typ a popis výjimky. 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). Zásobník volání je uspořádaný seznam metod, které byly volány před metodou, ve které došlo k výjimce. 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 (tj. typ výjimky odpovídá typu, který lze zpracovat), 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 class.‘NullPointerException a ArrayIndexOutOfBoundsException jsou dvě běžné výjimky v Javě.
Co je to chyba?
Chyba je stav, který lze považovat za neodstranitelný, například program vyžaduje větší množství paměti, než je dostupné. Tyto chyby nelze za běhu ošetřit. Pokud dojde k chybě, program se ukončí. V Javě se chyby dědí z třídy Throwable. Chyby obvykle znamenají vážné problémy, které by se programátor (nebo aplikace) neměl snažit zachytit. Chyby jsou prostě abnormální stavy, které se za normálních okolností nikdy neočekávají, a proto nejsou nikdy předvídány. Takovými chybami jsou například OutOfMemoryError, StackOverflowError a ThreadDead. Metody by nikdy neměly mít ovladače pro chyby.
Jaký je rozdíl mezi výjimkou a chybou?
Chyby i výjimky jsou nechtěným výskytem během provádění programu. Mají však zásadní rozdíly. Výjimky může předvídat programátor, zatímco chyba je těžko předvídatelná. Výjimky lze zaškrtnout nebo odškrtnout. Ale chyby jsou vždy nekontrolované. Výjimky obvykle označují chybu způsobenou programátorem. K chybám však dochází v důsledku systémové chyby nebo nevhodného použití zdroje. Výjimky by se proto měly řešit na úrovni aplikace, zatímco chyby by se měly řešit na úrovni systému (pouze pokud je to možné). Po zpracování výjimky je zaručeno, že se vrátíte k normálnímu toku programu. Ale i když je zachycena chyba, programátor nemusí vědět, jak s ní zacházet. Na rozdíl od tradičního zpracování chyb umožňují výjimky oddělit kód pro zpracování chyb od běžného kódu.