Výjimky ( exceptions )

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

Programování v jazyku Java hierarchie tříd, přetypování, výjimky

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

Java Výjimky Java, zimní semestr

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

Poruchy modul pro rychlé hlášení poruch z provozu.

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

Z. Kotala, P. Toman: Java ( Obsah )

Java Řetězce Java, zimní semestr

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

SEZNAM PŘÍLOH. Příloha č. 1 Dohoda o individuální hmotné odpovědnosti podle 252 zákoníku práce 114

MS Word 2007 REVIZE DOKUMENTU A KOMENTÁŘE

Rovnice s neznámou pod odmocninou I

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

Java a Caché IV: Manipulace s objekty

Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1. Podpora digitalizace a využití ICT na SPŠ CZ.1.07/1.5.00/34.

Výrazy lze též zavést v nečíselných oborech, pak konstanty označuji jeden určitý prvek a obor proměnné není množina čísel.

Teoretické minimum z PJV

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

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.

2.8.8 Kvadratické nerovnice s parametrem

Účetní případ MD D DOTACE OD ZŘIZOVATELE. Neinvestiční dotace (1/12, čtvrtletní platby, mimořádné platby) předpis x úhrada

Změna sazby DPH v HELIOS Red po

Programování v Javě I. Leden 2008

ÚVOD DO HRY PRINCIP HRY

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

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

Asymptoty grafu funkce

Grafické řešení soustav lineárních rovnic a nerovnic

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Modul pro testování elektrických obvodů

Penzijní připojištění a Doplňkové penzijní spoření

MEZINÁRODNÍ ORGANIZACE

PROBLEMATIKA TERÉNNÍCH ÚPRAV

NUMEROLOGIE CO JE NUMEROSKOP

JAK ZVLÁDNOUT E-LEARNINGOVÝ KURZ

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

Principy objektově orientovaného programování

Ž Á D O S T O POSKYTNUTÍ NEINVESTIČNÍ DOTACE Z ROZPOČTU MORAVSKOSLEZSKÉHO KRAJE 2016/2017 OBECNÁ ČÁST

Základní stavební prvky algoritmu

Karty externích médií

Prostorové indexační techniky. Zdeněk Kouba

Struktury a obsah výstupních zpráv pro MultiCash ČSOB

Prostory jmen. #include<iostream.h> namespace RadimuvProstor { int secti(int a, int b); class Trida { private: int Atribut; public: void metoda();

Utility library for DirectX 9.0 Technická dokumentace

Business Contact Manager Správa kontaktů pro tisk štítků

Rostislav Horčík. 13. října 2006

KTE / ZPE Informační technologie

Pokyn pro příjemce dotace

LÉKAŘI ČR A KOUŘENÍ SOUČASNOSTI

Abstraktní datové typy: zásobník

Cílem kapitoly je seznámit studenta se strukturou programu a jeho překladem.

RMI Remote Method Invocation

Městský úřad Krnov, Odbor sociální, oddělení sociálních služeb a sociální pomoci, Vodní 1, Krnov

EHLED OSV za rok 2015 vykonávajících pouze hlavní SV

Adresa příslušného úřadu

NÁVOD NA PŘIHLÁŠENÍ DO INTERNETOVÉHO BANKOVNICTVÍ PRO SPRÁVU KREDITNÍ KARTY

Autor: Datum vytvoření: Ročník: Tematická oblast: Předmět: Klíčová slova: Anotace: Metodické pokyny:

DMX512 PC Control Stručný návod k použití programu Verze 1.0 Copyright 2007 Dokumentace: Ing. Jaroslav Nušl

2.1. Pojem funkce a její vlastnosti. Reálná funkce f jedné reálné proměnné x je taková

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

ŘÍZENÍ ABSORBERU KMITŮ POMOCÍ MATLABU

Výjimky. v C# a Javě

Úvod do programovacích jazyků (Java)

METODICKÉ DOPORUČENÍ Ministerstva vnitra. ze dne 17. prosince 2015

Otázky k teoretické části zkoušky z předmětu IAJCE 2006/2007

TESTY Legislativa FAČR. Stanovy. 1. Fotbalová asociace ČR je. a) akciová společnost b) občanské sdružení c) společnost s ručením omezením

Obsahuje barevné palety PANTONE v prostoru CMYK: FASHION + HOME COLOR GUIDE barev NEW COLORS barev

Lineární algebra. Vektorové prostory

Soubor jako posloupnost bytů

Algoritmus (nebo dřívějším pravopisem algorithmus)

Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY

Obsah ÚVOD. Participanti. Nastavení testu. - úvod - participanti - nastavení testu - přehled úkolů testu - soupis problémů a návrh řešení - závěr

Druhá mocnina. Druhá odmocnina Druhá odmocnina. Předpoklady: V této hodině jsou kalkulačky zakázány.

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Typický prvek kolekce pro české řazení

(k 1)x k + 1. pro k 1 a x = 0 pro k = 1.

Adresa příslušného úřadu: ČÁST A

( ) ( ) Sčítání vektorů. Předpoklady: 7201

Matrika otázky a odpovědi Vidimace částečné listiny. Ing. Markéta Hofschneiderová Eva Vepřková

Definice z = f(x,y) vázané podmínkou g(x,y) = 0 jsou z geometrického hlediska lokálními extrémy prostorové křivky k, Obr Obr. 6.2.

M-10. AU = astronomická jednotka = vzdálenost Země-Slunce = přibližně 150 mil. km. V následující tabulce je závislost doby

Vítězslav Bártl. prosinec 2013

JAVA. Krátke poznámky:

Ekonomika Společnost s ručením omezeným

Python. Zdeněk Philipp - Seznam.cz

16. února 2015, Brno Připravil: David Procházka

Formulář návrhu projektu pro 4. veřejnou soutěž programu ALFA

Novinky verze ArCon 14 Small Business

Veřejnoprávní smlouva o poskytnutí dotace

7. Silně zakřivený prut

PREPROCESOR POKRAČOVÁNÍ

MOŽNOSTI ZAJIŠTĚNÍ TÍSŇOVÉ PÉČE AREÍON A MĚSÍČNÍ ÚHRADY ZA POSKYTOVÁNÍ SOCIÁLNÍ SLUŽBY

Český účetní standard pro některé vybrané účetní jednotky. č Zásoby

AMU1 Monitorování bezpečného života letounu (RYCHLÝ PŘEHLED)

Modul: Cvičebnice programování ISO - soustruh

Návrhové vzory. Každý návrhový vzor má následující strukturu: Většina publikací návrhové vzory člení do následujících kategorií:

Metodický pokyn č. 45. ke změně Pokynů pro zadávání veřejných zakázek ROP SV v souvislosti s novelou zákona o veřejných zakázkách

Žádost o prodej nemovitostí

Transkript:

Výjimky ( exceptions ) Výjimky jsou objekty sloužící k indikaci a nápravě závad v běhu programu. Typem patří do stromu třídy Throwable - odtud dědí téměř všechny metody. Výjimky pojednává: Kompilátor v čase kompilace ( compile-time ) rozeznává výjimky: - kontrolované ( checked ) u nichž vyžaduje ošetření klauzulí try catch anebo vyznačení throws v hlavičkách metod. Za tyto závady programátor zpravidla nemůže, ale měl by zajistit jejich zvládnutí. - nekontrolované ( unchecked ), u nichž nevyžaduje vyznačení ani ošetření. Tyto závady se považují za programátorovy chyby, které doufejme posléze odstraní. - pokud výjimka patří do stromu java.lang.runtimeexception, je nekontrolovaná, jinak je kontrolovaná. JVM v čase běhu ( run-time ) případně vytvoří objekt příslušného typu popisující vzniklou závadu, ten se tzv. vyhodí ( throw ) v naději, že se v nějaké klauzuli try najde řešení, které problém zmírní nebo alespoň vhodně navenek vyjeví. PJV03 1

Hierarchie výjimek java.lang.object --- java.lang.throwable --- java.lang.error --- java.lang.virtualmachineerror --- java.lang.exception --- java.lang.runtimeexception // Unchecked tree --- java.lang.arithmeticexception --- java.lang.nullpointerexception --- java.lang.indexoutofboundsexception --- java.util.nosuchelementexception --- java.io.ioexception --- java.net.socketexception --- java.net.connectexception PJV03 2

Třída Throwable Třída Throwable obsahuje několik užitečných metod pro: String tostring( ) - výpis výjimky v textovém tvaru, String getmessage( ) - získání doprovodné zprávy z výjimky, výpis zásobníku pro vysledování volaných metod, manipulace s předchozími výjimkami. Strom Throwable obsahuj podstrom Error, který obsahuje třídy indikující těžké a neopravitelné chyby a to i systému Java. Všechny Error jsou kompilátorem nekontrolované ( unchecked ). Errorči její podtyp lze záměrně vyhodit, ale patrně to nemá smysl, kromě AssertionError. PJV03 3

Výjimky Výjímky jsou buď JVM vyhazuje je JVM ( např. NullPointerException ), či programatické záměrně vyhazované pomoci throw v programu či API. Java má mechanizmus vytváření, vyhazování a odchytávání výjimek: Klauzule try se skládá nejméně ze dvou bloků. Bloky jsou tří typů: hlídač - try ( právě jeden ) řešitel - catch ( libovolný počet ) uklízeč - finally ( nanejvýš jeden ) Klauzule try může mít tři tvary: try - catch - finally try - catch try - finally Klauzule try - může být vnořena do kteréhokoli bloku a tedy i do bloku jiné klauzule try. PJV03 4

Výjimky Konkrétně: try {... // hlídač - hlídá tento blok } catch ( xxxexception ex ) { } // řešitel - blok řešící xxx catch ( yyyexception ex ) { } // řešitel - blok řešící yyy... catch ( zzzexception ex ) { } // řešitel - blok řešící zzz finally { } // uklízeč - úklidový blok // následné příkazy ( anebo ukončovací závorka nadbloku ) Je-li uklízeč přítomen, pak vždy dostane řízení těsně před ukončením zpracování klauzule - aby se dalo leccos uklidit. Nemá přímý přístup k vyhozené výjimce a nemůže. Řešiteléřeší jen ty výjimky patřící do typu jejich parametru. V seznamu musejí být uváděni od specifického k obecnému - jinak je specifický řešitel nedostupným kódem - to kompilátor nepřipustí. PJV03 5

Hlídač Hlídač dozírá, byla-li v bloku vyhozena výjimka ( nezáměrněči záměrně ): - Ne: Před odchodem z hlídaného bloku předářízení uklízeči. - Ano: Další příkazy v try bloku se již neprovedou. Hlídač zjistí typ výjimky a procházením řešitelů shora dolů se snaží najít prvního kompetentního řešitele, tj. takového, jehož parametr je typem nebo nadtypem výjimky: - Nalezne-li ho, předá mu řízení. - Nenalezne-li řešitele, předářízení uklízeči a pak nevyřešenou výjimku vyhodí do nadbloku. Je-li tím blokem obalová try klauzule postupuje se obdobně. Je-li tím blokem metoda, pak tato metoda vyhodí výjimku do příkazu metody odkud byla zavolána a tam se postupuje obdobně. Nenalezne-li se žádný kompetentnířešitel, vyhodí se výjimka do obalové klauzule JVM - odtud byla zavolána metoda main(string[ ] args) - pak JVM vypíše hlášení a ukončí běh. PJV03 6

Řešení výjimek Řešitel má prostřednictvím parametru referenci k aktuální výjimce i dalším proměnným a může situaci trochu napravit anebo alespoňřádně ohlásit. Nelze však nijak zařídit pokračování v nedokončeném hlídaném bloku. I kdyžřešitel vůbec nic neudělá, je odchycená výjimka vyřešena. Vede-li odchod z bloků přes: zavírací závorku, pak se řízení předá ( event. po úklidu ) následujícímu příkazu za klauzulí try - catch. příkaz ( return, break, continue, throw ), pak se řízení předá ( event. po úklidu ) onomu příkazu. I řešitelé a uklízeč mohou vyhodit nějakou výjimku - tu však zpracuje ( dynamicky ) obalová try klauzule. Též lze sestrojit novou výjimku a jako její příčinu vložit tu původní. PJV03 7

Vyznačení výjimek Metody a konstruktory vyznačují ve svých hlavičkách typy kontrolovaných výjimek, které mohou vyhazovat. Řešení je pak na volajících metodách. Syntax:...... m1(... ) [ throws AaaException, BbbException,... ] { }...... m2(... ) [ throws AaaException, BbbException,... ] ; Mechanizmus výjimek ječasově náročný - má se využívat jen při závadách a nikoli pro testy podmínek. Deklarované výjimky se objeví ve standardní dokumentaci metod. Při jednoduchých pokusech lze obejít nepřehledné try klauzule připsáním throws Exception do hlaviček. PJV03 8

Vlastní výjimky Vlastní výjimky se vytvoří jako potomek existující. Většina výjimek nepřidává žádné vlastní atributy ani metody obvykle jen definuje dva konstruktory ( jeden bez parametrů, druhý s parametrem String pro uložení doprovodné zprávy ). Vše ostatní dědí z třídy Throwable. Hlavním indikátorem závady je (často velmi dlouhé ) jméno výjimky tím vzniká integrovaný "chybník" pro run-time. Příklad ukazuje definice výjimky pro případ chyby v tabulce. public class TableException extends Exception { int row, col; public TableException( int row, int col ) { // konstruktor vytvoří super( "Wrong item at: " +row+ " " +col ); // zprávu this.row = row; this.col = col; // i explicitní indikaci } } Výjimka se vytvoří a vyhodí např. takto: throw new TableException( 333, 7 ); PJV03 9

Příkaz assert byl přidán od v. 1.4 ke kontrole platnosti podmínek zejména při ladění programu. Příkazy assert jsou zevně ovladatelné - v běžném provozu bývají potlačené. proto. Užívat jen v private metodách či částech které by se neměly vlastně provádět. Syntax: assert podmínka [ : výraz vracející hodnotu ] ; při podmínce false se vyhodí chyba. Nepovolit vedlejší efekty výrazu. java.lang.assertionerror: [ hodnota výrazu jako řetěz ] tuto chybu nemá smysl odchytávat pomocí try - catch Má-li se chápat assert jako příkaz a ne jako jméno, nutno kompilovat: javac source { 1.4 1.5 1.6... } Příkazy assert se ovládají spuštěním: java -ea... / java -da ClassLoader umožní en/dis-abled dle stromu balíčkůči tříd. java -ea -da:com.pack1 či java -ea -da:com.pack1.myprogram Více: http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html PJV03 10