Š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
NumberFormatException Hierarchie výjimek Throwable jakákoliv chyba musí se odchytávat nemusí se odchytávat Error RuntimeException Exception například například IOException například ArythmeticException NumberFormatException Java cv6
Typy výjimek Error RuntimeException a její potomci 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 Předat výš Kombinace obojího 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) throws Exception { if (plat < 0) throw new Exception(); 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 package za 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 package mujbalik; class TridaVBaliku { … //telo tridy } soubor TridaVBaliku.java package mujbalik; class TridaVBaliku { … //telo tridy } 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