Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Java
Řízení výjimek v Javě
java
15. února 2002, 00.00 | Práce s výjimkami je jedna z rutinních potřeb programátora v Javě. Tak proč se na to nepodívat trochu podrobněji.
Narozdíl od mnoha ostatních jazyků, např. Delphi, se v Javě v jistých částech programu musíte ošetřit výjimky, které by zde mohli vzniknout jinak to nezkompilujete natož spustíte.
V základu existují 3 druhy výjimek: Runtime Exception, Exception a Error. Samozřejmě z těchto základních typů mohou vznikat odvozené typy. V datovém modelu to vypadá asi takto.
Jejich jednotlivý význam je následující. Třída Throwable je příliš obecná, a proto se sní běžně nepracuje. De facto pouze říká, že nastala výjimka, ale již ji blíže nespecifikuje.
Třída Error jsou zase abnormální výjimky, které vznikají ve Virtual Machine např. porušením kódu či častěji nedostatek paměti. Z toho je zřejmé, že tyto výjimky se neošetřují. Obvykle s nimi stejně nemůžeme nic dělat. U příkladu paměti to je vidět názorně. Pro ošetření potřebuje alokovat novou paměť, ta však již došla!? Takže program se ukončí s chybovým výpisem. Tyto výjimky se neošetřují také proto, že nikdy nevíte kde přesně se vyskytnou.
Další třída je Exception jsou výjimky, které se vztahují k určitým metodám, a tudíž zcela přesně víme, kde mohou nastat. Označují se jako synchronní. Kompiler nás nutí je bezprostředně ošetřit. Často se to nesprávně obchází prázdnou deklarací ošetřením výjimky, ve kterém se nic neudělá. Důvodem bývá ztráta času či odsunutí myšlení od problému. Typickým příkladem jsou I/O Exception, kde je pravděpodobné, že nějaká chyba vznikne.
|
Z příkladu je vidět, že výjimky se zachytávají přes blok try catch. Za povšimnutí ještě stojí to, že za jedním try může následovat několik catch, několik výjimek, které by mohli nastat.
Třída RunTime Exception na tyto výjimky lze reagovat a jednoduše je opravit . Jsou označovány jako asynchronní. To proto, že mohou nastat kdekoliv v kódu => není nutno je tedy ošetřovat. Ale doporučil bych je ošetřovat alespoň v místech se zvýšenou pravděpodobností výskytu. Např. při dělení je jistá pravděpodobnost dělení nulou. V extrémním případě je možné ošetřit všechny RunTime Exception, ale pak by byl kód zbytečně nepřehledný a extrémně zdlouhavý ale především pomalý. Způsob ošetření výjimky je naprosto stejný jako u třídy Exception.
|
Nebo to lze bez ošetření.
|
Další základní možností je nějaká vlastní odvozená výjimka. Ta se v podstatě může týkat čehokoliv, a tak reakce na ni může být opravdu různorodá.
|
Zde je uměle vyvolána moje vlastní výjimka v případě, že vybraná položka je nižší než dolní rozsah pole. Samotné vypsání obsahu pole se provede jen tehdy, nebyla-li vyvolána výjimka. Lze to řešit samozřejmě i jinak.
V dalším článku si budeme věnovat způsobům zachycení / předávání a ošetření výjimek.
Obsah seriálu (více o seriálu):
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007