Search
Základní typy výjimek:
Error
RuntimeException
Exception
Závažné chyby, které se mohou vyskytnout ve virtuálním stroji. Neošetřujeme, nereagujeme na ně, protože to nemá smysl (danou chybu stejně nemůžeme opravit).
Příklad: OutOfMemoryError
OutOfMemoryError
Ne tyto výjimky reagovat můžeme, považujeme-li to za vhodné. Jsou to ale výjimky, na které reaguje JVM. Označují se jako asynchronní výjimy.
Příklad: ArithmeticException, NumberFormatException
ArithmeticException
NumberFormatException
Překladač nás nenutí na tyto výjimky reagovat.
Tzv. kontrolované výjimky. O tyto výjimky se musíme v programu postarat. Označují se také jako synchronní výjimky. Nemohou se vyskytnout kdekoliv (jako asynchronní), ale pouze při volání některých metod.
Příklad: IOException
IOException
Pokud budeme vytvářet vlastní výjimky, budeme je dědit ze třídy Exception.
/* ad 1 */ public int myMethod() throws IOException { ... System.in.read(...); ... } /* ad 2 */ public int myMethod() { ... try { System.in.read(...); } catch (IOException e) { // Zpracovani chyby return -1; } } /* ad 3 */ public int myMethod() throws IOException { ... try { System.in.read(...); } catch (IOException e) { // Castecne zpracovani chyby throw e; } }
Kdo tohle udělá v DU, nebo v semestrálce, toho vyrazím…
... try { ... System.in.read(...); } catch (IOException) { // Zde není žádný kód a to je velmi špatně!!!!! } ...
Pokud jse přesvědčeni, že výjimka skutečně nikdy nenastane (jak naivní ) a nechceme plýtvat časem na psaní obsluhy, je možné (a vhodné) řešení toto:
catch (IOException e) { e.printStackTree(); }