Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Funkce Připomeňme si program pro výpočet faktoriálu:
Vstupy a výstupy v JavaScriptu Vstup: použitím metody prompt objektu window čtením hodnot z položek formuláře Výstup : použitím metody alert objektu window.
Příkazy Přednáška č. 4. Příkazy (statements)  Příkaz – dílčí krok programu (část kódu – zpravidla jeden řádek)  Program – posloupnost příkazů  Příkazy.
Třetí cvičení Podmíněné příkazy Cykly Break a Continue Switch Return
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Metody (funkce, procedury)
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
C# pro začátečníky Mgr. Jaromír Osčádal
If-else, do-while, switch, operátory
Algoritmizace a programování
Programování v Pascalu Přednáška 7
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
KIV/PPA1 cvičení 11 Cvičící: Pavel Bžoch. Osnova cvičení Souborový vstup a výstup Práce s textovými soubory.
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Podmíněné vykonávání a rozvětvení. Co je to? Podmíněné vykonávání = nechceme provést všechny příkazy, chceme určité části kódu něčím podmínit Rozvětvení.
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
C# - Exceptions (výjimky)
Objektové programování
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Počítače a programování 1
KIV/PPA1 cvičení 10 Cvičící: Pavel Bžoch. Osnova cvičení Výjimky a práce s nimi Nácvik na online test.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ZADÁNÍ Sestavte program, který vypočítá obvod a obsah čtverce o straně a. Zajistěte, aby výpočet byl realizován pouze v případě, kdy strana a bude mít.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
2 UDÁLOSTI ONMOUSEOVER, ONMOUSEOUT Odkaz Událost je část kódu vyvolana za určité (uživatelem vyvolané) situace (kliknutí myší, přejetím kurzorem myši,
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Šesté cvičení Výjimky Balíky.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
C# - konverze datových typů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
PŘÍKAZ while úkol 1_42.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
ÚPLNÁ PODMÍNKA V JAVĚ úkol 1_29.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
České vysoké učení technické Fakulta elektrotechnická S oubory Jazyk JAVA A0B36PRI - PROGRAMOVÁN Í v 1.01.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programovací jazyk C# 4. část - cykly.
C# konzole – Vstup a výstup
C# konzole – Podíl dvou čísel, podmínka IF
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
ZAL – 3. cvičení 2016.
Výukový materiál zpracován v rámci projektu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

Počítače a programování 1

Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek

Výjimky Mechanismus výjimek v Javě umožňuje psát “bezpečné programy”, které dokáží reagovat na chybové stavy vzniklé za běhu programu. Výjimka (exception) – událost popř. vyjímečný stav, o kterém si přejeme, aby v našem programu nenastal (např. dělění nulou, chybně zadané vstupy). Ve většině případů se jedná o kritický stav který má bez ošetření za následek předčasné ukončení programu

Druhy výjimek Výjimky třídy Error – závažné chyby, které se mohou vyskytnout pouze v JVM, v našem programu na ně nereagujeme protože je stejně neumíme opravit (např. nedostatek paměti – výjimka OutOfMemoryError ) Výjimky třídy RuntimeException (asynchronní výjimky) – mohou se v běžícím programu vyskytnout kdekoliv, tento typ výjimek vyvolává JVM ( např. dělení nulou) – překladač nás nenutí na ně reagovat, ale můžeme, považujeme-li to za užitečné Výjimky třídy Exception (synchronní výjimky) - nemohou se vyskytnout kdekoliv ale pouze v souvislosti s voláním některých metod u kterých je zvýšená pravděpodobnost že se při jejich použití může vyskytnout chyba (obvykle vstupy a výstupy) – tento typ výjimek musíme zpracovat, jinak nelze program přeložit

Způsob ošetření výjimek Programátor může na výjimku reagovat jedním ze tří způsobů : Výjimku neumí (nebo nechce) ošetřovat – informaci o jejím výskytu předá nadřazené metodě Výjimku zachytí a kompletně ošetří v metodě ve které se vyskytla Výjimku částečně nebo kompletně ošetří v metodě a zároveň pošle informaci o jejím výskytu do nadřazené metody

Předání výjimky výše Používá se v případě, že se metoda “zříká odpovědnosti“ za zpracování výjimky nebo v případě že chceme informovat volající metodu že došlo k chybě Deklarace: v hlavičce metody pomocí klíčového slova throws Př. public static int ctiInt() throws NumberFormat{ …… } Pokud dojde během provádění metody ctiInt() k výjimce je metoda ukončena a výjimka předána výše do volající metody - ve většině případů do metody main, která ji musí ošetřit nebo předat do JVM

import java.io.*; public class Vyjimka { public static int ctiInt() throws IOException { byte[] pole = new byte[20]; String nacteno; int i; System.in.read(pole); nacteno = new String(pole).trim(); i = Integer.valueOf(nacteno).intValue(); return i; } public static void main(String[] args)throws IOException { System.out.print("Zadej pocet cihel: "); System.out.println("Cihel je: " + i); }

Ošetření výjimky K ošetření výjimky se používá konstrukce try-catch Blok try ( tzv chráněný úsek) obsahuje kód ve kterém se může vyskytnout výjimka, blok catch říká na jakou výjimku (a jakým způsobem) se bude reagovat Př. Kvadratická rovnice – ošetření vstupů import vstup.*; public class Kvadrat{ public static void main(String [] args) { double a=0,b=0,c=0; double d,re,im; int koef=0; boolean rd;

do { try { switch (koef) { case 0: System.out.print("Zadej a: "); a=VstupData.ctiInt(); koef++ ; case 1: System.out.print("Zadej b: "); b=VstupData.ctiInt(); koef++ ; case 2: System.out.print("Zadej c: "); c=VstupData.ctiInt(); } rd=true; } catch ( NumberFormatException e) { rd=false; System.out.println("Chybne zadane koeficienty !!! Zadej znovu "); } } while (!rd); System.out.println("a : "+a+"\t b : "+b+"\t c : "+c ); if ((a==0) && (b==0)) {

if (c!=0) System.out.println("Rovnice nema reseni."); else System.out.println("Rovnice ma nekonecne mnoho reseni."); } else { if ((a==0) && (c!=0)) System.out.println("Rovnice je linearni. c=" + (-c/b) ); else { d=Math.pow(b,2.)-4*a*c; if (d>=0) { System.out.println("x1="+ (-b+ Math.sqrt(d))/(2*a)); System.out.println("x2="+ (-b+ Math.sqrt(d))/(2*a)); } else { System.out.println("x1="+ (-b/(2*a)) + " + j" + Math.sqrt(Math.abs(d))/(2*a)); System.out.println("x2="+ (-b/(2*a)) + " + j" + Math.sqrt(Math.abs(d))/(2*a)); } }

Ošetření výjimky a předání výše Používá se v případech kdy chceme informovat volající metodu že došlo k chybě a nechceme vymýšlet speciální návratové hodnoty

import java.io.*; public class Vyjimka { public static int ctiInt() throws NumberFormatException { byte[] pole = new byte[20]; String nacteno; int i; try { System.in.read(pole); nacteno = new String(pole).trim(); i = Integer.valueOf(nacteno).intValue(); return i; } catch (IOException e) { System.out.println("Chyba pri cteni"); return 0; } catch (NumberFormatException e) { // System.out.println("Chyba pri cteni"); throw e; // vyhozeni vyjimky }

public static void main(String[] args) { boolean opak=false; do { try { System.out.print("Zadej pocet cihel: "); int i = ctiInt(); System.out.println("Cihel je: " + i); opak=false; } catch (NumberFormatException e) { System.out.println("Chybne zadany vstup, zadejte znovu !!! "); opak=true; } } while(opak); }

Minimální doporučená reakce na výjimku Výjimku je možné “chytit” a nereagovat na ni. V tomto případě bude blok catch prázdný. Tento způsob však není vhodný a neměl by se používat !!!!! Minimálně by měl blok catch obsahovat následující volání metody: catch (Jmeno_Vyjimky e ) { e.printStackTrace(); } Která vypíše informace o tom kde chyba nastala a co bulo příčinou chyby. (tj. totéž co se vypíše v případě když výjimku vyhodíme do JVM - např. java.lang.NumberFormatException: For input string: "hodne" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.valueOf(Unknown Source) at Vyjimka.ctiInt(Vyjimka.java:12) at Vyjimka.main(Vyjimka.java:31)

Seskupování výjimek a postupná selekce Pokud potřebujeme v daném bloku reagovat na více výjimek je možné použít více bloků catch za jedním příkazem try – pozor závisí na pořadí bloků – jakmile vzniklá výjimka vyhovuje třídě výjimek uvedené v catch tak se ostatní bloky neprohledávají. Př. try { ….. } catch (NumberFormatException e) { // zpracuje konkrétní výjimku třídy RuntimeException } catch (RuntimeException e) { // reaguje na zbývající výjimky této třídy }

Vyvolání výjimky Pokud chceme vyzkoušet zda náš program správně reaguje na výjimku je možné ji programově vyvolat (kdekoliv) příkazem throw Př. import java.io.*; public class Vyjimka { public static int ctiInt() throws IOException { byte[] pole = new byte[20]; String nacteno; int i;

try { System.in.read(pole); nacteno = new String(pole).trim(); i = Integer.valueOf(nacteno).intValue(); if (i == 0) throw new IOException(); return i; } catch (IOException e) { System.out.println("Chyba cteni"); throw e; }

public static void main(String[] argv) { System.out.print("Zadej pocet cihel: "); try { int i = ctiInt(); System.out.println("Cihel je: " + i); } catch (IOException e) { System.out.println("Program neprobehl spravne"); }

Konstrukce try-catch-finally Používá se tehdy, pokud chceme, aby se určitý úsek programu provedl jak v případě výjimky tak v případě normálního úseku programu. Syntaxe : try { // hlídaný blok } catch ( TypVýjimky ) { // ošetření výjimky } finally { // tento kód se provede vždy }

Try-catch-finally Blok finally se provádí i v případě, že v blocích try nebo catch je : příkaz return vyvolána jiná vyjimka Použití: uzavírání otevřených souborů ( v případě neuzavření souboru hrozí ztráta dat) Podobným způsobem funguje konstrukce try-finally