Výjimka vs. chyba
Neočekávané chování musí nastat, když je program spuštěn. Může to být způsobeno výjimkami nebo chybami. Výjimkou jsou události, které mohou narušit normální tok programu. Chyby jsou podmínky, 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 je program spuštěn.
Co je výjimka?
Výjimka je událost, která může narušit normální tok programu. Výjimka názvu pochází z „výjimečné události“. Házení výjimky je proces vytvoření objektu výjimky a jeho předání runtime systému. Objekt výjimky je vytvořen metodou, ve které došlo k výjimce. Objekt výjimky obsahuje užitečné informace, jako je typ a popis výjimky. Když systém runtime obdrží objekt výjimky, pokusí se najít někoho, kdo by s ním manipuloval v rámci zásobníku volání jeho procházením v opačném pořadí (ve kterém byly metody vyvolány). Zásobník volání je uspořádaný seznam metod, které byly vyvolány před metodou, ve které došlo k výjimce. Runtime systém je úspěšný, pokud najde metodu s obsluhou výjimky. Obsluha výjimek je blok kódu, který může oficiálně zpracovat uvedenou výjimku. Pokud runtime systém najde vhodný obslužný program (tj. Typ výjimky odpovídá typu, který lze zpracovat), předá objekt výjimky manipulátoru. Tomu se říká chytání výjimky. Pokud však výjimku nelze zpracovat, program se ukončí. V Javě jsou zděděny výjimky z „Throwable class“. NullPointerException a ArrayIndexOutOfBoundsException jsou dvě běžné výjimky v Javě.
Co je chyba?
Chyba je stav, který lze považovat za nenapravitelný, jako je například program vyžadující větší množství paměti, než je k dispozici. Tyto chyby nelze za běhu řešit. Pokud dojde k chybě, program se ukončí. V jazyce Java dědí chyby třída Throwable. Chyby obvykle znamenají vážné problémy, které by se programátor (nebo aplikace) neměl pokusit zachytit. Chyby jsou prostě neobvyklé podmínky, které se za normálních okolností nikdy neočekávají, a proto se nikdy nepředvídají. Takovými chybami jsou například OutOfMemoryError, StackOverflowError a ThreadDead. Metody by nikdy neměly mít popisovače chyb.
Jaký je rozdíl mezi výjimkami a chybami?
Chyby i výjimky jsou nežádoucím výskytem během provádění programu. Mají však zásadní rozdíly. Programátor může předpokládat výjimky, zatímco je obtížné předvídat chybu. Výjimky lze zkontrolovat nebo odškrtnout. Chyby jsou však vždy nezaškrtnuté. 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 proto měly být řešeny na úrovni aplikace, zatímco chyby by měly být řešeny 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ž dojde k chybě, 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ělení kódu pro zpracování chyb od běžného kódu.