Výjimky v Javě
Z MiS
(Rozdíly mezi verzemi)
(Založení stránky.) |
(Vytvořen obsah stránky.) |
||
Řádka 1: | Řádka 1: | ||
[[Category:VSE]][[Category:Informatika]][[Category:Java]] | [[Category:VSE]][[Category:Informatika]][[Category:Java]] | ||
− | ... | + | |
+ | == 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. | ||
+ | |||
+ | <div class="Poznamka"> | ||
+ | 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.''' | ||
+ | </div> | ||
+ | |||
+ | |||
+ | |||
+ | == 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:<br /><code>try { </code> ... <code> } </code> | ||
+ | # 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):<br /> <code>catch (''TypVýjimky'' ''názevVýjimky'') { </code> ... jak zareagovat ... <code> } </code> | ||
+ | # A nakonec můžeme uvést kód, který se má provést každopádně:<br /> <code> finally { </code> ... Co se má stát vždy na konci bloku ... <code> } </code> | ||
+ | |||
+ | ; Š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 == | ||
+ | |||
+ | |||
== Související stránky == | == Související stránky == | ||
* [[Práce se soubory v Javě]] | * [[Práce se soubory v Javě]] | ||
* [[Java: Textový vstup a výstup]] | * [[Java: Textový vstup a výstup]] | ||
+ | |||
+ | |||
== Zdroje == | == Zdroje == | ||
* [https://www.tutorialspoint.com/java/java_exceptions.htm TutorialsPoint.com → Java Exceptions] | * [https://www.tutorialspoint.com/java/java_exceptions.htm TutorialsPoint.com → Java Exceptions] | ||
+ | * [https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html Java Documentation → Exceptions] |
Verze z 14. 4. 2020, 12:47
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
Související stránky