Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Podobné dokumenty
Z. Kotala, P. Toman: Java ( Obsah )

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Výjimky. v C# a Javě

Java - výjimky. private void vstup() throws IOException {... }

Soubor jako posloupnost bytů

Výjimky. Tomáš Pitner, upravil Marek Šabo

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Zpracování výjimečných situací

8. přednáška: Soubory a proudy

KTE / ZPE Informační technologie

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Dědičnost (inheritance)

Obsah 7. přednášky: Tato tematika je zpracována v Záznamy přednášek: str

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

1. Téma 12 - Textové soubory a výjimky

Java Výjimky Java, zimní semestr

Úvod do programování - Java. Cvičení č.4

Algoritmizace a programování. Terminálový vstup a výstup

RMI Remote Method Invocation

PB161 programování v C++ Výjimky Bezpečné programování

17. Projekt Trojúhelníky

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Algoritmizace a programování

Programování v C++ 1, 17. cvičení

Abstraktní datové typy: zásobník

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Programování v Javě I. Únor 2009

KTE / ZPE Informační technologie

Teoretické minimum z PJV

Více o konstruktorech a destruktorech

Java a XML. 10/26/09 1/7 Java a XML

Programování v Javě I. Leden 2008

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Úvod do programovacích jazyků (Java)

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

7. Datové typy v Javě

Java Řetězce Java, zimní semestr

Úvod do programovacích jazyků (Java)

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

9. přednáška - třídy, objekty

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Generické programování

Výčtový typ strana 67

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Datové struktury. alg12 1

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Typický prvek kolekce pro české řazení

1. Programování proti rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Jazyk C++ II. Výjimky

7. Dynamické datové struktury

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Regulární výrazy. Vzory

Připravil: David Procházka. Programovací jazyk C++

Výjimky a soubory. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

1. Úvodní informace. BI-EP1 Efektivní programování Martin Kačer

3 KTE / ZPE Informační technologie

Ošetřování chyb v programech

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Principy objektově orientovaného programování

C# konzole Podíl dvou čísel, podmínka IF

Řídicí struktury. alg3 1

1. Dědičnost a polymorfismus

Textové soubory. alg9 1

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

PB161 Programování v jazyce C++ Přednáška 8

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Výjimky a soubory. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Seminář Java II p.1/43

Část I Výjimky. Část 1 Výjimky. Výjimky a soubory. Část 2 Soubory. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

typová konverze typová inference

Programovací jazyk Java

Projekty pro výuku programování v jazyce Java

6. Příkazy a řídící struktury v Javě

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Mělká a hluboká kopie

8 Třídy, objekty, metody, předávání argumentů metod

PREPROCESOR POKRAČOVÁNÍ

Dědění, polymorfismus

Ošetření chyb a výjimky

5 Přehled operátorů, příkazy, přetypování

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Transkript:

Výjimky A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Obsah Výjimky Pojem výjimky Princip mechanismu zpracování výjimek, try + catch Kompletní zpracování výjimek Vyhození výjimky, propagace výjimek Generování vlastní výjimky Hierarchie výjimek Blok finally 2

Výjimky Vyjímka je nestandardní situace za běhu programu: 1. Situace, které jsou nestandardní či které my považujeme za nestandardní, měli bychom reagovat a můžeme a dokážeme reagovat (RuntimeException), např.: Pokus o čtení z prázdného zásobníku EmptyStackException Dělení nulou, indexování mimo rozsah pole, špatný formát čísel AritmeticException, NumberFormatException 2. Situace, na které musíme reagovat, Java nás přinutí (Exception, IOException) Odkaz na chybějící soubor FileNotFoundException 3. Chyba v hardware, závažné chyby, nemůžeme reagovat (Error) Chyba v JVM, HW chyba (OutOfMemoryError,UnknownError) 3

Výjimky Výjimka je nestandardní situace při výpočtu programu, např.: indexace mimo meze pole, neexistující soubor, dělení nulou, málo paměti, nedovolená reakce uživatele, apod., která znemožňuje pokračovat řádným způsobem. Obecně chyba vzniká při porušení sémantických omezení jazyka Java Bezpečnostní prvek Javy: zpracování chyb a nestandardních stavů není ponecháno jen na vůli programátora!! Reakce na očekávané chyby se vynucuje na úrovni překladu, při nerespektování se překlad nepodaří Chyba při provádění programu v jazyku Java nemusí znamenat ukončení programu chybu lze ošetřit a pokračovat dál Při vzniku výjimky je automaticky vytvořen objekt, který nese informace o vzniklé výjimce. Mechanismus výjimek umožní přenést řízení z místa, kde výjimka vznikla do místa, kde bude zpracována Oddělení "výkonné" části (try) od části "chybové" - catch 4

Výjimky vznik nestandardní situace metoda metoda crash wow!!!! 5

import java.util.scanner; import java.io.*; Neošetření výjimky public class XVyjimka { public static void main(string[] args) throws IOException { Scanner sc = new Scanner(new File("cisla.txt")); System.out.print("Precte cislo ze souboru"); int i = sc.nextint(); System.out.println("Cislo je: " + i); 6

Ošetření výjimky import java.util.scanner; import java.io.*; public class XVyjimka_Osetreni { public static void main(string[] args) throws Exception { try { String s = "cisla1.txt"; Scanner sc = new Scanner(new File(s)); System.out.print("Precte cislo ze souboru " + s); int i = sc.nextint(); System.out.println(" Cislo je: " + i); catch (IOException e) { System.out.println("Cislo je: " + 100002);

Výjimky ideální ošetření metoda metoda ošetření výjimky 8

Mechanismus šíření výjimek v jazyku Java Jestliže vznikne výjimka, potom JVM hledá odpovídající řešení, které je schopné výjimku ošetřit (tj. převzít řízení): pokud výjimka vznikla v bloku příkazu try, hledá se odpovídající klauzule catch v tomto příkazu, další příkazy bloku try se neprovedou a řízení se předá konstrukci ošetřující výjimku daného typu do místa ošetření výjimky (tzv. handler) pokud výjimka vznikne mimo příkaz try, předá se řízení do místa volání metody a pokračuje se podle předchozího bodu pokud taková konstrukce v těle funkce (metody, konstruktoru) není, skončí funkce nestandardně a výjimka se šíří na dynamicky nadřazenou úroveň není-li výjimka ošetřena ani ve funkci main, vypíše se a program skončí pro rozlišení různých typů výjimek je v jazyku Java zavedena řada knihovních tříd, výjimky jsou instancemi těchto tříd 9

Bloky try a catch try? catch další kód 10

Výjimky, způsoby ošetření 1. Bez ošetření vyjímky - CHYBA 2. Ošetření předáme výše, výjimku nelze či nechceme ošetřit 3. Zachytíme, (částečně) ošetříme a mimo to ji předáme výše 4. Zachytíme a kompletně ošetříme Poznámka: Nevíme-li dopředu, jak uživatel chce naložit se vzniklou výjimkou, snažíme se použít poslední možnost 11

Výjimka zachytíme a kompletně ošetříme metoda metoda try catch ošetření výjimky 12

Kompletní ošetření výjimky Při vzniku výjimky se řízení (provádění) programu přenese z místa vzniku výjimky do místa ošetření výjimky. Místo ošetření výjimky (tzv. handler) je klauzule catch příslušná příkazu try: class XVyjimka0 { void m(int[] pole) { try { int i = 10; pole[i] = 0; Ignoruji prekroceni... a pokracuji catch (ArrayIndexOutOfBoundsException ioe) { System.out.println("Ignoruji prekroceni..."); public static void main(string[] args) { int[] pole={1,2,3; new XVyjimka0().m(pole); System.out.print("a pokracuji\n"); 13

Kompletní ošetření výjimky Řešení jazykovou konstrukcí try-catch Jedná se o systém: průchodu kritickou částí - tzv. chráněný úsek - try s případnou následnou reakcí na vzniklou výjimečnou událost v bloku (catch), označovaný jako handler klauzule catch odpovídá výjimce tehdy, pokud je objekt výjimky kompatibilní pro přiřazení s parametrem catch klauzule klauzulí catch může být i více pro různé typy výjimek 14

Ošetření výjimky a předání výš metoda metoda ošetření výjimky try catc h 15

Ošetření výjimky a předání výš, nevhodně! public class XVyjimka1 { public static int XctiInt() { // ošetření ve funkci try { Scanner sc = new Scanner(System.in); int i = sc.nextint(); return i; catch (Exception e) { System.out.println("Chyba v udaji"); return -1; 16

Ošetření výjimky a předání výš, nevhodně! public static void main(string[] args) { for (int j = 1; j < 3; j++) { System.out.println("\nZadej pocet cihel: "); int i = XctiInt(); if (i!= -1) { System.out.println("Cihel je: " + i); else { System.out.println("Počet cihel neudán "); Zadej počet cihel: č Chyba v údaji Počet cihel neudán Poznámka Ve volající funkci main se testuje "chybový" kód zaslaný zachycenou výjimkou Nekonzistentní řešení, lépe pomocí příkazu throw Způsob řešení typu C 17

Výjimka zachytíme, ošetříme + předáme výše throws metoda metoda ošetření výjimky try catch throw e; 18

Ošetření výjimky a předání výš, throw public class XVyjimka2 { public static int XctiInt() throws Exception { try { Scanner sc = new Scanner(System.in); int i = sc.nextint(); return i; catch (Exception e) { System.out.println("Chyba v udaji"); throw e; 19

Ošetření výjimky a předání výš, throw public static void main(string[] args) { for (int j = 1; j < 3; j++) { try { System.out.println("\nZadej pocet cihel: "); int i = XctiInt(); System.out.println("Cihel je: " + i); catch (Exception e) { System.out.println("Počet cihel neudán "); Zadej pocet cihel: r Chyba v udaji Počet cihel neudán

Ošetření výjimky a předání výš, throw - komentář Zpracování výjimky: 1. Odchycení pomocí catch (Exception e) v cxctiint() 2. Ošetření: System.out.println("Chyba v udaji"); 3. Předání výše pomocí throw e; (e typu Exception) 4. Odchycení ve funkci main pomocí catch(exception e) 5. Ošetření: System.out.println( Počet cihel neudan "); Funkce main by mohla výjimku předat výše: public static void main(string[] args) throws Exception { Proměnná e funguje jako formální parametr metody: catch (IOException e) { System.out.println("Chyba v udaji"); throw e; // vyhození výjimky 21

Neošetření výjimky předáním výše metoda metoda throws 22

Neošetření výjimky předáním výše Předání výjimky do volající metody - tzv. propagace výjimek, šíření výjimek v případě "neošetření" výjimky, "zřeknutí se odpovědnosti" a předání klauzulí throws Nejjednodušší řešení, žádný zásah do kódu doplněním hlavičky metody public static int ctiint() throws IOException { Podobně i metoda main, Výjimku pak řeší JVM public static void main(string[] args) throws IOException { Nevýhoda: Nutíme uživatele metody se postarat o "vyhozenou" výjimku Oprávnění použití: Závisí-li chod dalšího programu na korektní funkci metody, nemá cenu ji ošetřovat a přitom by činnost programu stejně nemohla pokračovat (prostě tu hodnotu musíme mít a ne jen "nespadnutý" program!) 23

Neošetření výjimky předáním výše Java sama ohlásí při překladu, které části jsou kritické a je je třeba ošetřit, nejsou-li, pak minimálně "vyhozením" na vyšší úroveň pomocí klauzule throws, jinak nedojde k překladu. 24

Neošetření výjimky předáním výše public class XVyjimka1NE { public static int XctiInt() throws Exception { Scanner sc = new Scanner(System.in); int i = sc.nextint(); return i; public static void main(string[] args) { for (int j = 1; j < 3; j++) { try { System.out.println("\nZadej pocet cihel: "); int i = XctiInt(); System.out.println("Cihel je: " + i); catch (Exception e) { System.out.println("Počet cihel neudán "); Zadej pocet cihel: r Počet cihel neudán 25

Vygenerování vlastní výjimky Ve vlastních třídách může nastat stav, který chceme ošetřit standardně výjimečným stavem Vlastní výjimka je potomkem třídy Exception: jedná se o tzv.synchronní výjimku, vzniká na přesně definovaném místě většinou se jedná o výjimku, na kterou chceme reakci uživatele Poznámka: Není doporučeníhodné používat vyhození výjimky jako náhrady break (čas!) 26

Vygenerování výjimky - příklad public class XVyjimka3 { public static int XctiInt() throws Exception { try { Scanner sc = new Scanner(System.in); int i = sc.nextint(); if (i == 0) { throw new Exception(); // generujeme vyjímku return i; catch (Exception e) { System.out.println("Chyba v udaji"); throw e; 27

Vygenerování výjimky příklad, dokončení for (int j = 1; j < 3; j++) { try { System.out.println("\nZadej pocet cihel: "); int i = XctiInt(); System.out.println("Cihel je: " + i); catch (Exception e) { System.out.println("Počet cihel neudán "); Zadej pocet cihel: r Chyba v udaji Počet cihel neudán Zadej pocet cihel: 0 Chyba v udaji Počet cihel neudán 28

Vytvoření a vygenerování vlastní výjimky V praktickém programování potřebujeme ošetřit mimořádné situace formou výjimek Třídy výjimek vzniknou děděním od třídy Exception Vznik výjimečné situace bude charakterizován generováním instance objektu třídy výjimky, Reakci na vlastní výjimky systém vyžaduje

Vytvoření a vygenerování vlastní výjimky class MojeVyjimka extends Exception { int n; // deklarace třídy vyjímky int d; MojeVyjimka(int i, int j) { /* super("hodnota " + n + "/" + d + " není integer."); */ n = i; d = j; public String tostring() { return "Hodnota " + n + "/" + d + " není integer."; 30

Vygenerování vlastní výjimky, příklad II public class CustomExceptDemo1 { public static void main(string args[]) { int numer[] = { 4, 8, 15, 32, 64, 127, 256, 512 ; int denom[] = { 2, 0, 4, 4, 0, 8 ; for(int i=0; i<numer.length; i++) { try { System.out.print((i+1) + ". "); if((numer[i] % denom[i])!= 0) throw new MojeVyjimka(numer[i], denom[i]); System.out.println(numer[i] + "/" + denom[i] + " je " + numer[i]/denom[i]); 31

Vygenerování vlastní výjimky, příklad III catch (ArithmeticException exc) { System.out.println("Nelze dělit nulou!"); catch (ArrayIndexOutOfBoundsException exc) { System.out.println("Mimo rozsah"); catch (MojeVyjimka exc) { // ošetření System.out.println(exc); // vlastní výjimka 32

Vygenerování vlastní výjimky, příklad, výsledek Výsledek činnosti: 1. 4/2 je 2 2. Nelze dělit nulou! 3. Hodnota 15/4 není integer. 4. 32/4 je 8 5. Nelze dělit nulou! 6. Hodnota 127/8 není integer. 7. Mimo rozsah 8. Mimo rozsah 33

Ošetřování výjimek, které "nikdy nenastanou" Nešvar: nevyplnění těla catch: catch (Exception e) { I v případě, že máme pocit, že chyba nemůže nastat, ponecháme na kritickém místě otestování a výpis informací o výjimce pomocí: catch (Exception e) { e.printstacktrace(); // vypisuje chybové hlášení Pozn.: Výpis je na konzoli, pro grafické prostředí lépe do souboru: System.setErr(PrintStream err) Systém.setOut(PrintStream out) 34

Bloky try a catch a jak dál po? try? catch?? finally další kód 35

Blok finally V běhu programu je často třeba vykonat nějaké akce, ať dojde k vyvolání výjimky či nikoli typicky ukončení práce se soubory Tuto situaci řeší blok finally: try { // hlídaný blok catch (TypVyjimky e) { // ošetření výjimky e, proběhne pouze v případě vzniku výjimky finaly { // akce, které proběhnou vždy Blok finally se vykoná i v případě (!!), že v blocích tryči catch je: příkaz return vyvolána i nezachycená výjimka, propagovaná výše 36

Blok finally, příklad class UseFinally { public static void genexception(int what) { int t; int nums[] = new int[2]; System.out.println("Přečteno " + what); try { switch(what) { case 0: t = 10 / what; // dělení nulou break; case 1: nums[4] = 4; // mimo rozsah break; case 2: return; // výskok z try bloku, bez výjimky 37

Blok finally, příklad, pokr. I catch (ArithmeticException exc) { System.out.println("Nelze dělit nulou!"); catch (ArrayIndexOutOfBoundsException exc) { System.out.println("Mimo rozsah"); finally { System.out.println(" Společná větev"); class FinallyDemo { public static void main(string args[]) { for(int i=0; i < 3; i++) { UseFinally.genException(i); 38

Výstup: Přečteno 0 Blok finally, příklad, pokr. II Nelze dělit nulou! Společná větev Přečteno 1 Mimo rozsah Společná větev Přečteno 2 Společná větev Poznámka: Konstrukci try-catch-finally lze zkrátit i na try-finally: důvodem může být požadavek bezpodmínečného vykonání části kódu při výjimce, která směřuje mimo, nemusí jít o ošetření výjimky 39

Seskupování výjimek V programu mohou nastat výjimky různých typů a úrovní, např.: IOException (třída Exception) - musí být uvedena NumberFormatException (třída RuntimeException) - měla by být uvedena, nenumerický vstup Pro každou výjimku - vlastní blok catch Bloky catch jsou procházeny v pořadí, jak jsou uvedeny: Jakmile vzniklá výjimka vyhovuje třídě uvedené v bloku catch (či rodičovské třídě), provede se tento blok a ostatní jsou přeskočeny ("break") Pozor, je-li v prvním catch zachycena výjimka Exeption, ostatní bloky jsou zbytečné Lze tak rozlišovat různé úrovně výjimek: catch (NumberFormatException e) { System.out.println("Chyba ve formatu cisla"); catch (IOException e) { // nadtřída NumberFormatException System.out.println("Jina běhová chyba"); 40

Struktura tříd výjimek Object Neumíme OŠETŘIT!! Throwable Povinně OŠETŘIT!! Error Exception Vhodné OŠETŘIT!! Vlastní výjimky RuntimeException 41

Kontrolované a nekontrolované výjimky Kontrolované výjimky musí být na rozdíl od nekontrolovaných explicitně deklarovány v hlavičce metody, ze které se mohou šířit, jedná se o výjimky třídy Exception, je nutné je povinně obsloužit. Označují se též jako výjimky synchronní: void m() throws Exception { if ( ) throw new Exception(); Nekontrolované výjimky jsou takové, které se mohou šířit z většiny metod a proto by jejich deklarování obtěžovalo, tzv. asynchronní výjimky: běžný uživatel není schopen výjimku ošetřit třída Error: MemoryOverflowError ~ přetečení paměti chyby, které ošetřujeme podle potřeby, překladač nekontroluje, zda tyto výjimky jsou ošetřeny - podtřídy třídy RuntimeException: ArithmeticException ~ dělění 0 IndexOutOfBoundsException ~ indexace mimo meze 42

Třída Error Představuje závažné chyby na úrovní virtuálního stroje (JVM) Nejsme schopni je opravit, tedy neopravujeme Třída Error je nadtřída všech výjimek, které převážně vznikají v důsledku softwarových či hardwarových chyb výpočetního systému a které většinou nelze v aplikaci smysluplně ošetřit (např. ClassFormatError). Příklad: ClassFormatError ~ chybný formát byte-kódu MemoryOverflowError ~ přetečení paměti 43

Třída RuntimeException (podtřída Exception) Představuje třídu chyb, která se můžeme s úspěchem ošetřit Je třeba je očekávat, jedná se tzv. asynchronní výjimky, např.: dělení nulou - ArithemeticExeption nedovolený převod znaků na číslo - NumberFormatException Nemusíme na ně reagovat, ale můžeme je předat "výše", překladač nás k reakci nenutí Reagujeme na ně podle našeho odhadu jejich výskytu Pokud to špatně odhadneme a nastane chyba, Java nám indikuje místo chyby, které opravíme tak, že tam vložíme ošetření výjimky Prakticky není možné ošetřit všechny výjimky RuntimeException - nepřehledný kód ArithmeticException - dělení nulou ClassCastException - nedovolené přetypování IndexOutOfBoundsException - indexace mimo meze NegativeArraySizeException - vytváření pole se zápornou délkou NullPointerException - dereference odkazu null NumberFormatException - přečtení nenumerické hodnoty 44

Třída Exception Označovány jako kontrolované (checked), nebo též synchronní, nemohou se vyskytovat kdekoli, jen v souvislosti s voláním "nebezpečných" metod, typicky metody vstupu/výstupu (IOException) Potomek třídy Exception může ošetřovat i "naše" výjimky, jednoznačně synchronní, vznikají na námi specifikovaném místě Vyžadují povinné ošetření, jinak se ohlásí překladač! Třída Exception je nadtřída výjimek, které převážně vznikají vlastní chybou aplikace a má smysl je ošetřovat typicky ošetření chyb vstupu/výstupu (IOException) 45

Neošetření výjimky Překladač: G:\Priprava VYUKA 2010\PR2\PROJEKTY\PR2-05-VYJIMKY\src\pr2_05\XVyjimka.java:18: unreported exception java.io.filenotfoundexception; must be caught or declared to be thrown Scanner sc = new Scanner(new File("cisla.txt")); 1 error Výjimka špatná data: Exception in thread "main" java.util.inputmismatchexception at java.util.scanner.throwfor(scanner.java:840) at java.util.scanner.next(scanner.java:1461) at java.util.scanner.nextint(scanner.java:2091) Precte cislo ze souboru at java.util.scanner.nextint(scanner.java:2050) at pr2_05.xvyjimka.main(xvyjimka.java:22) Java Result: 1 Výjimka chybí soubor: Exception in thread "main" java.io.filenotfoundexception: cisla.txt1 (Systém nemůže nalézt uvedený soubor) at java.io.fileinputstream.open(native Method) at java.io.fileinputstream.<init>(fileinputstream.java:106) at java.util.scanner.<init>(scanner.java:636) at pr2_05.xvyjimka.main(xvyjimka.java:19) Java Result: 1 BUILD SUCCESSFUL (total time: 1 second) 47