Naučte se Javu – výjimky
Pomocí mechanismu výjimek můžeme lépe reagovat na chybové a nestandardní stavy běhu programu. Místo toho, abyste po každém vykonaném příkazu kontrolovali chyby, které mohou nastat, umístíte ošetření chyb celého bloku kódu na jedno místo. Ukáži vám, jak se s výjimkami pracuje a jak je používat.
Objekty výjimek
Výjimky v Javě jsou objekty, které jsou potomky objektu java.lang.Throwable
. Tato třída má dvě podtřídy java.lang.Error
a java.lang.Exception
(pro obě se používá společný název výjimky). Pokud v programu dojde k výjimečnému stavu, vznikne objekt výjimky a program může na tuto výjimku reagovat, odchytit ji.
Třída java.lang.Error
a její podtřídy obvykle představují vážné chyby při běhu, ze kterých se program nemůže zotavit, například nedostatek paměti či chyby virtuálního stroje. Tyto výjimky by aplikace neměla odchytávat a měly by vést ke skončení programu.
Třída java.lang.Exception
a její podtřídy představují výjimky, ze kterých se lze zotavit a program by je měl odchytávat a ošetřovat. Například java.io.IOException
indikuje chybu při vstupně-výstupních operacích nebo java.io.EOFException
indikuje čtení za koncem souboru.
Ošetření výjimek
Výjimky se ošetřují pomocí konstrukce try-catch-finally
. Blok za klíčovým slovem try
obsahuje nebezpečný kód, ve kterém může dojít k výjimce. Za ním následuje žádný nebo více bloků catch
, ve kterých jsou ošetřeny jednotlivé typy výjimek, které mohou nastat v bloku try
. Nepovinný blok finally
obsahuje kód, který je vždy spuštěn nezávisle na tom, jak dopadl blok try
(zda proběhl bezchybně či skončil výjimkou).
|
Postup zpracování
Při vstupu do bloku try
se příkazy vykonávají v pořadí, ve kterým jsou zapsány. Pokud vše proběhne bezchybně, je po bloku try
spuštěn případný blok finally
. Pokud v průběhu bloku try
nastane výjimka, přeruší se jeho vykonávání. Pokud některá klausule catch
ošetřuje daný typ výjimky, spustí se blok kódu první takové. Nakonec se spustí blok finally
, pokud je přítomen.
Za klíčovým slovem catch
následuje v kulatých závorkách typ výjimky a jméno proměnné, která na ni bude odkazovat. Tato klausule odchytává pouze výjimky tohoto typu a jeho podtypů. Proměnná odkazující na výjimku je platná pouze v daném bloku catch
.
Pokud výjimku neodchytí blok, který ji vyhodil, výjimka se šíří k následujícímu ohraničujícímu bloku. Pokud se nedochytí ani v něm, propaguje se dále. Pokud se neodchytí nikde v metodě, šíří se do nadřazené metody (která tuto metodu vyvolala) a dále po struktuře volání metod směrem ven. Pokud výjimku neodchytí nikdo, dostane se až do metody main()
, kde způsobí ukončení interpretu Javy.
Metody výjimek
V objektu java.lang.Throwable
je definováno několik užitečných metod. Metoda getMessge()
poskytuje krátkou zprávu čitelnou pro člověka (může být však rovna null
). Metoda toString()
vrátí název třídy dané výjimky a zprávu (výstup getMessage()
). Metoda printStackTrace() vypíše (na chybový výstup) výstup metody toString()
, dále pak zásobník volání metod aktuální v době chyby s názvy tříd, metod a čísly řádků, kde k chybě došlo. Výstup může vypadat například takto:
|
Výstup by odpovídal tomuto objektu:
|
Deklarace výjimek
Je nutné, aby každá metoda, která může způsobit výjimku, ji buď odchytila nebo specifikovala, že tuto výjimku způsobuje. Používá se k tomu klíčové slovo throws
v deklaraci metody:
|
Není nutné ošetřovat ani deklarovat výjimky (pod)typu java.lang.Error
ani java.lang.RuntimeException
, protože je může potenciálně vyvolat každá metoda a měly by vést k přerušení programu.
Vlastní výjimky
Pomocí klíčového slova throw
můžeme vyvolávat také své vlastní výjimky (nebo standardní výjimky). Vlastní výjimku definujeme jako objekt dědící od objektu java.lang.Throwable
nebo nějakého jeho podobjektu:
|
|
Pokud vyhodíte vlastní výjimku, zpracovává se stejným mechanismem jako standardní výjimky (konstrukcemi try-catch-finally
a propagací po struktuře kódu).
S výjimkami se budeme často setkávat v následujících článcích, kdy budeme mluvit o práci se vstupy a výstupy a o síťové komunikaci. Hned v příštím článku se k výjimkám ještě vrátíme, uvedeme si seznam těch nejčastěji používaných výjimek s krátkým popisem.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Vstupte do éry umělé inteligence: ASOME Max Studio s AMD Ryzen™ 9 7940HS
14. listopadu 2023 -
Vaše pošta může být špatně nastavena – svěřte ji profesionálům
13. července 2023 -
Monitory OLED: klíčové pojmy a funkce
13. května 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024