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

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

Výjimky. v C# a Javě

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

KTE / ZPE Informační technologie

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. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

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

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

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.

Dědičnost (inheritance)

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

Java Výjimky Java, zimní semestr

Java - Kresba. 2/28/11 1/8 Java - kresba

Úvod do programovacích jazyků (Java)

Soubor jako posloupnost bytů

RMI Remote Method Invocation

Algoritmizace a programování

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

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

Typický prvek kolekce pro české řazení

Programování v Javě I. Leden 2008

Algoritmizace a programování

Aplikace s grafickým uživatelským rozhraním

Práce se soubory v Javě

20. Projekt Domácí mediotéka

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

VIII. Seminář Java VIII p.1/36

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

17. Projekt Trojúhelníky

3 KTE / ZPE Informační technologie

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

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

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

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

Java Řetězce Java, zimní semestr

Abstraktní datové typy: zásobník

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.

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

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

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

Abstraktní třída a rozhraní

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

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

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

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/

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

1. Programování proti rozhraní

Generické programování

Principy objektově orientovaného programování

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

Vláknové programování část V

Úvod do programovacích jazyků (Java)

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.

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

OOPR_05. Případové studie

Výčtový typ strana 67

Iterator & for cyklus

7. Dynamické datové struktury

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

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

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

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

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

RMI - Distribuované objekty v Javě

Teoretické minimum z PJV

KTE / ZPE Informační technologie

Výjimky (exceptions), generické metody a třídy v C#

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

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

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

Seminář Java II p.1/43

Java aplety. Předávání parametrů z HTML

Regulární výrazy. Vzory

GUI v Javě a událostmi řízené programování

Java - řazení objektů

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

Úvod do programovacích jazyků (Java)

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

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

JUnit příklad na použití

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

GUI v Javě a událostmi řízené programování

JSR tutorial 2 Transformace v JSR-184

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Vytváření a použití knihoven tříd

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

7. Datové typy v Javě

Textové soubory. alg9 1

Řídicí struktury. alg3 1

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

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

Transkript:

Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace výjimek Výjimka - exception znamená vyjímečný stav, chyba programu nechceme, aby k ní došlo druhy výjimek: Error - závažné chyby, nedokážeme opravit, proto na ně nereagujeme (chyby JVM) Exception - kontrolovatelné výjimky, měli bychom na ni (nebo někdy i musíme - vstupy a výstupy) na ně reagovat Reakce na výjimky na vznik výjimky můžeme reagovat více způsoby: ošetření výjimky pomocí bloku try-catch (zdrojový kód, ve kterém očekáváme, že může dojít ke vzniku chyby, uzavřeme do bloku try, hned za blokem try musí následovat blok catch, do kterého se program dostane, pokud k chybě dojde těsně za blokem catch můžeme ještě přidat blok finally, který se provede vždy, ať k chybě dojde nebo ne předání výjimky výše (propagace výjimek) - za deklarací metody, ve které může dojít k výjimce, napíšeme příkaz throws a za ním třídu výjimek, na které chceme reagovat (reakci na výjimku necháme na metodě, která bude tuto metodu volat): private void vstup() throws IOException {... Hierarchie a dědičnost výjimek třída Exception zahrnuje veškeré kontrolovatelné výjimky různé druhy výjimek jsou potomky třídy Exception, např. ArrayIndexOutBoundsException (přetečení pole) ArithmeticException (např. dělení nulou) IOException (chyby vstupu a výstupu) NumberFormatException (chyba nesprávného formátu) můžeme si vytvořit i svoji třídu výjimky = potomka již existující třídy: class MojeVyjimka extends Exception {... výjimku můžeme také v bloku try uměle vyvolat příkazem throw if (cislo == 0) throw new InputMismatchException() ; 2012-03-01 Java - výjimky 1/6

Příklad 1: Neošetřená výjimka class UkazChybu1 { public static void main(string args[]) { int cisla[] = new int[5]; // deklarace pole typu int o délce 5 System.out.println("Pred generovanim chyby"); cisla[7] = 11; // přetečení indexu pole System.out.println("Po chybe"); /* výstup: Pred generovanim chyby Exception in thread "main" java.lang.arrayindexoutboundsexception: 7 at UkazChybu1.main(UkazChybu.java: 7) */ Příklad 2: Ošetřená výjimka class UkazChybu2 { public static void main(string args[]) { int cisla[] = new int[5]; // blok kódu hlídající chyby System.out.println("Pred generovanim chyby"); cisla[7] = 11; // přetečení indexu pole System.out.println("Sem se nedostanu"); catch(arrayindexoutofboundsexception exc) { // zachycení výjimky System.out.println("*ERR: Preteceni indexu"); System.out.println("Po chybe"); /* výstup: Pred generovanim chyby *ERR: Preteceni indexu Po chybe */ Příklad 3: Ošetření více chyb naráz class UkazChybu3 { public static void main(string args[]) { int cisla[] = new int[5]; // deklarace pole typu int o délce 5 int a = 5; int b = 0; // blok kódu hlídající chyby System.out.println("Pred generovanim chyby"); int c = a/b; // dělení nulou cisla[7] = 11; // přetečení indexu pole System.out.println("Sem se nedostanu"); catch(arrayindexoutofboundsexception exc) { // zachycení přetečení indexu System.out.println("****ERR: Preteceni indexu"); catch(arithmeticexception exc) { // zachycení dělení nulou System.out.println("****ERR: Deleni nulou"); c = 0; catch(exception exc) { // zachycení jiné výjimky System.out.println("****ERR: Jakákoliv jiná chyba"); System.out.println("Po chybe: c = " + c); /* výstup: Pred generovanim chyby ****ERR: Deleni nulou Po chybe: a = 0 */ 2012-03-01 Java - výjimky 2/6

Příklad 4: Ošetření vstupu argumentů metody main z příkazové řádky: public class VstupCisla { public static void main(string [] args) { int pocet = 0; double prum = 0; for (int i=0;i<args.length;i++) { if (jetocislo(args[i])) { prum += Double.parseDouble(args[i]); pocet ++; System.out.println((i+1)+". vstup: "+args[i]); else { System.out.println((i+1)+". vstup: Neni cislo: "+args[i]); System.out.println("\nZapsaných čísel: "+ pocet); System.out.println("Suma vsech "+ pocet +" čísel: "+prum); prum /= pocet; System.out.println("Prumer: "+prum); 2012-03-01 Java - výjimky 3/6

private static boolean jetocislo(string in) { Double.parseDouble(in); catch (NumberFormatException ex) { return false; return true; Příklad 5: Ošetření vstupu čísel v GUI, tvorba vlastních tříd výjimek: Pomocí GUI budeme chtít od uživatele, aby zadával jen určité hodnoty. První vstup musí být celé kladné číslo, druhý vstup bude kladné reálné číslo. Proto musíme ohlídat, aby uživatel: zadal do vstupů obě hodnoty aby obě hodnoty byly číselné, první celé číslo obě hodnoty byly kladné Tomu přizpůsobíme hlídání výjimek. Na kontrolu formátu vstupních dat použijeme výjimku NumberFormatException, na druhé 2 výjimky si napíšeme 2 vlastní třídy výjimek. import java.awt.container; import java.awt.flowlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.*; /** * @author Marek Pernica + Jaroslav Janíček 2012-03-01 Java - výjimky 4/6

*/ public class Vyjimky extends JFrame { Container obsah; JButton but; JLabel vysledek; JTextField celevstup,desetinnevstup; public Vyjimky() { nastavvlastnosti(); obsahokna(); zviditelneni(); private void nastavvlastnosti() { this.settitle("ohlídání výjimky"); this.setresizable(true); this.setsize(220,280); obsah = this.getcontentpane(); obsah.setlayout(new FlowLayout()); private void obsahokna() { celevstup = new JTextField(20); desetinnevstup = new JTextField(20); but = new JButton("Vyhodnotit"); vysledek = new JLabel("Vysledek: "); obsah.add(new JLabel("Zadej cele kladne cislo: ")); obsah.add(celevstup); obsah.add(new JLabel("Zadej cele kladne desetinne cislo: ")); obsah.add(desetinnevstup); obsah.add(but); obsah.add(vysledek); but.addactionlistener(new ReakceNaStisk()); // přihlášení posluchače události /* vnitřní třída implementující patřičné rozhraní */ class ReakceNaStisk implements ActionListener { public void actionperformed(actionevent e) { kontrola(); private void kontrola() { porovnani(celevstup.gettext(),desetinnevstup.gettext()); int i = Integer.parseInt(celeVstup.getText()); double j = Double.parseDouble(desetinneVstup.getText()); mensineznula(i,j); vysledek.settext("výsledek: \n celé " + i + "\n desetinné " + j); catch (Nezadano e) { vysledek.settext("prázdný vstup, debile."); catch (NumberFormatException e) { vysledek.settext("napsal jsi špatný formát čísla!"); catch (MensiNezNula e) { vysledek.settext("menší než nula. NULA, NULA."); catch (Exception e) { vysledek.settext("došlo k neznámé chybě."); 2012-03-01 Java - výjimky 5/6

System.out.println(e.toString()); /* řízení předáno výš, metodě, která metodu volala */ private void porovnani(string a,string b) throws Nezadano { /* vytvoření instance vlastní výjimky */ if (a.equals("")) throw new Nezadano(); if (b.equals("")) throw new Nezadano(); private void mensineznula (int a, double b) throws MensiNezNula { if(a <0 b<0) throw new MensiNezNula(); private void zviditelneni() { this.setdefaultcloseoperation(jframe.exit_on_close); this.setvisible(true); ----------------------------------------------------------------------------------- /** * @author Marek Pernica + Jaroslav Janíček */ public class Nezadano extends Exception { public Nezadano () { super("nezadaná hodnota"); ----------------------------------------------------------------------------------- /** * @author Marek Pernica + Jaroslav Janíček */ public class MensiNezNula extends Exception { public MensiNezNula () { super("hodnota čísla je menší než nula"); 2012-03-01 Java - výjimky 6/6