Java - Vyjímky (31.díl)

Napsal O webu (») 2. 5. 2008 v kategorii Programování, přečteno: 2970×
obrazky/java_logo.png

Výjimky

Doposud jsme předpokládali, že naše programy budou fungovat za všech situací, tj. že v nich nemůže dojít za běhu k chybě. Toto je však poměrně idealizovaný model, programátor by měl mít možnost reakce jak na chyby vlastní (odmocnina ze záporného čísla, dělení nulou, atd.), tak na chyby vyplývající z komunikace
programu se svým okolím (špatné zadání hodnoty u formátovaného vstupu, nenalezení potřebného souboru, atd.). Pokud by tyto stavy nebyly ošetřeny, mohlo by dojít ke ztrátám dat a z nich vyplývajícím škodám. K takovému programu nebude mít uživatel důvěru a nebude ho používat, navíc může být i nebezpečný (týká se to zejména software pro průmyslové zpracování dat).

Pokud k takové chybě dojde, lze na ní reagovat různými způsoby. Program můžeme ukončit a sdělit, že došlo k chybě, dojde však ke ztrátě dat, takové řešení je nevhodné. Můžeme se také pokusit ošetřit všechny možné chybové stavy, ke kterým by potenciálně mohlo dojít. Tato varianta je lepší, v řadě případů zabráníme ztrátám dat, její implementace však není jednoduchá. Navíc znepřehledňujeme vlastní zdrojový zaváděním pomocných proměnných indikujících, zda výpočet proběhl úspěšně. Nejvýhodnější je použití tzv. mechanismu výjimek. Umožňuje chybu zachytit a ošetřit ji na vhodném místě. Pro úplnost uveďme, že práce s výjimkami v jazyce Java je podobná práci s výjimkami v jazyce C++, navíc ho rozšiřuje o nové principy.

V zájmu bezpečnosti Java nutí programátora používat u některých potenciálně nebezpečných konstrukcí výjimky, jinak není možné program zkompilovat.

Výjimky

Výjimku můžeme definovat jako stav programu v okamžiku, kdy dojde při jeho vykonávání k chybě. Při vyvolání výjimky v Javě je vytvořen objekt, který nese informaci o typu chyby (a mnohé další informace). Na výjimku JVM upozorní zasláním zprávy ve formě chybového hlášení. Pro vyvolání výjimky je často používán termín throw exception; někdy tuto činnost můžeme provádět uměle. Ukázka výjimky generované JVM.
Exception in thread "main" java.lang.NumberFormatException:
For input string: "dw" at sun.misc.FloatingDecimal.
readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at balicek.Nacti.getDouble(Nacti.java:31)
at balicek.Obdelnik.<init>(Obdelnik.java:13)
at balicek.Main.main(Main.java:16)


Druhy výjimek

V Javě existují tři základní typy tříd (potomků třídy Object), které slouží pro přenos informací o vzniklých výjimkách. Jsou přímými potomky třídy Throwable.

Podívejme se podrobněji na jejich popis.
Třída Throwable. Se třídou Throwable ve velké většině případů nepracujeme (pracujeme však s jejími potomky), neposkytuje žádné konkrétní informace o typu výjimky.

Třída Error. Třída Error a výjimky od ní odvozené se používají většinou pouze v souvislosti s chybami JVM. Tyto chyby nedokážeme opravit, ani jim efektivně předcházet. V takovém případě dojde k ukončení programu a zobrazení příslušného chybového hlášení. Touto třídou se proto dále zabývat nebudeme.

Třída RuntimeException. S výjimkami odvozenými od této třídy můžeme již pracovat. Jedná se o výjimky, které vznikají za běhu programu. Typickým příkladem jsou výjimky vznikající jako důsledek provádění aritmetických operací s nevhodnými operandy (např. dělení nulou, odmocnina ze záporného čísla: ArithmeticException, atd.) nebo konverzních operací s nevhodnými operandy (konverze textového řetězce na číslo: NumberFormatException). Poměrně často se jedná o nevhodné vstupné údaje zadané uživatelem v místech, kde programátor zapomněl takto vzniklé chyby ošetřit. V programu je proto vhodné tyto stavy
ošetřit (nic nás k tomu však nenutí), aby např. při zadání nevhodných vstupních údajů nedošlo ke ztrátě dat. Výjímky zařazené do této třídy nazýváme asynchronní.

Třída Exception. Výjimky zařazené do této třídy je na rozdíl od výjimek zařazených do třídy RuntimeException nutné vždy ošetřit, v opačném případě nebude proveden překlad. Jedná se zejména o potenciálně nebezpečné operace týkající se např. prací se soubory, formátovaným vstupem, databázemi.
Java je proto poměrně bezpečný jazyk, nutí programátora na tato místa v programu reagovat. Výjimky nazýváme synchronní, pracuje se s nimi stejně jako s výjimkami asynchronními.

Autor: Filip Koval
Štítky: Java
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel šest a jedna