Výjimky v Javě
Z MiS
Obsah |
Co jsou výjimky?
- V každém programu mohou za určitých okolností nastávat chyby, které programátor může předvídat, ale kterým nelze obecně zabránit.
- Typicky takové chyby nastávají:
- při práci se soubory (chybějící soubor, poškozené médium, odpojené médium, uživatel špatně zadal název souboru,...)
- při práci se sítí (nelze se připojit, připojení bylo přerušeno v průběhu komunikace,...)
- při zpracovávání vstupu od uživatele (například očekáváme celé číslo, ale uživatel zadá do vstupního pole desetinné číslo)
- Pokud bychom museli psát podmínky a testovat chyby všude, kde může potenciálně nastat problém, kód aplikace by se stal brzy nepřehledným.
- Většina moderních programovacích jazyků proto zavádí koncept tzv. výjimek.
- Zjednodušeně to funguje tak, že označíme blok, kde může nastat chyba, a ošetření chyby (správná reakce na chybu) uvedeme až na konec tohoto bloku.
Ještě jednou pro ujasnění:
- Neřešíme teď situaci, kdy je aplikace špatně naprogramovaná!
- Aplikace je správně napsaná, ale problém nastane v něčem, co programátor nemůže dopředu ovlivnit.
- Například výpadek sítě při komunikaci přes síť. Takové chyby lze předvídat a můžeme do aplikace zabudovat vhodnou reakci na takovou chybu. Ale nelze zajistit, aby taková chyba nenastala.
Jak výjimky fungují?
- Pokud víme, že v nějaké části kódu aplikace může nastat chyba, kterou lze předvídat, ale nelze ji vyloučit, potom:
- Označíme blok kódu, kde chyba může nastat:
try {
...}
- Následně zapíšeme kód bez toho, abychom museli neustále testovat chyby
- Kód tedy může tedy zůstat přehledný a stručný, bez spousty podmínek.
- Pokud chyba nastane, zbytek bloku kódu se přeskočí a ihned se provede reakce na chybu (viz další krok).
- Poté popíšeme, jak zareagovat na jednotlivé typy chyb (jak zareagovat na výjimky):
catch (TypVýjimky názevVýjimky) {
... jak zareagovat ...}
- A nakonec můžeme uvést kód, který se má provést každopádně:
finally {
... Co se má stát vždy na konci bloku ...}
Šablona kódu
try { // Začni provádět kód, ve kterém může nastat chybový stav... ... zde následuje kód, pracující se souborem... } catch (TypVýjimky1 ex) { // Co se má stát, pokud nastane chyba TypVýjimky1... } catch (TypVýjimky2 ex) { // Co se má stát, pokud nastane chyba TypVýjimky2... } finally { // Co se má stát každopádně po skončení bloku... // Provede se i tehdy, kdy nastane neočekávaná chyba. }
Příklad — práce se souborem
Delegování chyb throws
Související stránky