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
