150 likes | 224 Views
Šesté cvičení. Výjimky Balíky. Výjimky. Výjimka chybová událost, výjimečný stav programu objekt, který chybovou událost popisuje speciální zacházení s těmito objekty Umožňuje programátorovi (nutí programátora) reagovat na chybové stavy. Error. RuntimeException. IOException.
E N D
Šesté cvičení • Výjimky • Balíky
Výjimky • Výjimka • chybová událost, výjimečný stav programu • objekt, který chybovou událost popisuje • speciální zacházení s těmito objekty • Umožňuje programátorovi (nutí programátora) reagovat na chybové stavy Java cv6
Error RuntimeException IOException Hierarchie výjimek Throwable jakákoliv chyba musí se odchytávat nemusí se odchytávat Exception například například například ArythmeticException NumberFormatException Java cv6
Typy výjimek • Error • závažná chyba programu způsobená okolím (chyba HW, nedostatek paměti, …) • Nemusíme na ní reagovat a většinou to nemá smysl • RuntimeException a její potomci • Chyba, která může nastat kdekoliv v programu (aritmetická chyba, překročení velikosti pole, …) • Nemusíme na ní reagovat, ale má to smysl tam, kde se dá očekávat • Exception a její potomci • Musíme na ní nějakým způsobem reagovat (definovat chování programu pokud nastane) Java cv6
Reakce na výjimku • Ošetření výjimky • programátor napíše kód, který se provede když výjimka nastane • Předat výš • pokud v daném místě nedokážu nebo nechci výjimku ošetřit, předám jí dál • Kombinace obojího Java cv6
Ošetření výjimky • Pomocí konstrukce try-catch-finally • Inkriminovaný kus kódu obalím blokem try a za něj napíšu co se má stát pokud k výjimce dojde. • blok finally není povinný Př.: try{ int cislo = Integer.parseInt(args[0]); } catch (NumberFormatException e) { System.out.println(“Parametr musí být číslo“); return; } Java cv6
Předání výjimky výš • Deklaruji, že metoda může vyhodit výjimku • Tím nutím programátora, aby jí ošetřil v místě, kde tuto metodu volá • Pokud není výjimka ošetřená nikde, program se ukončí a výjimka se vypíše na konzoli Př.: int prectiZnak() throws IOException { int i = System.in.read(); return i; } Java cv6
Způsoby vzniku výjimky • Výjimka vyhozená JVM • způsobená okolím • způsobená chybou v programu • Výjimka vyhozená explicitně v programu • pomocí příkazu throw Př: int spoctiPremie(int plat)throwsException { if (plat < 0) throw newException(); return plat*1.20; } Java cv6
Vlastní výjimky • Normální objekt, který je potomkem Exception nebo RuntimeException Př.: public class MojeException extends Exception { public MojeException(String popisChyby) { super(popisChyby); } } Java cv6
Balíky Java cv6
Balíky • „Něco jako knihovna“ • Balíky obsahují přeložené soubory tříd (.class) • Rozdělení tříd do logicky souvisejících celků • Vyřešení konfliktů se jmény tříd • Možnost omezení přístupu ke třídě • Balík se definuje na začátku souboru klíčovým slovem packageza kterým následuje jméno balíku Java cv6
Balíky • Každá třída je v nějakém balíku • Pokud není explicitně balík definovaný, je v balíku default • Všechny třídy, které nemají definovaný balík, jsou ve stejném balíku! • Balíky a třídy se mapují na adresáře souborového systému • Hierarchie balíků <-> hierarchie adresářů Java cv6
Balíky mujbalik package mujbalik; class TridaVBaliku { … //telo tridy } soubor TridaVBaliku.java TridaVBaliku.class podbalik soubor JinaTrida.java package mujbalik.podbalik; class JinaTrida { … //telo tridy } JinaTrida.class Java cv6
Použití tříd z jiného balíku • Vždy se dá použít plné jméno třídy (včetně balíku) • např.: java.lang.String) • Importuji třídy z balíku pomocí klíčového slova import • nejde o „vložení“ tříd z balíku pouze o rozšíření jmen tříd • import všech tříd v balíku: import java.io.*; • import jedné třídy z balíku: import java.io.InputStream; • Java vždy importuje balíky • java.lang.*; • default • aktuální balík Java cv6