Java Výjimky Java, zimní semestr

Podobné dokumenty
Java Řetězce Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Iterator & for cyklus

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

JAVA. Zdrojové soubory

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

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

Úvod do programovacích jazyků (Java)

JAVA. Krátke poznámky:

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

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

Programování v Javě I. Leden 2008

Algoritmizace a programování

Podmínky na zápočet. Java, zimní semestr

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

Soubor jako posloupnost bytů

Seminář Java II p.1/43

Algoritmizace a programování

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

Úvod do programovacích jazyků (Java)

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

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

RMI Remote Method Invocation

Java Enum Java, zimní semestr ,2017 1

Typický prvek kolekce pro české řazení

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/

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

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

Dědičnost (inheritance)

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

KTE / ZPE Informační technologie

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

Výjimky. v C# a Javě

Teoretické minimum z PJV

1. Programování proti rozhraní

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

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

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

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

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

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

20. Projekt Domácí mediotéka

typová konverze typová inference

Úvod do programovacích jazyků (Java)

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

Výčtový typ strana 67

17. Projekt Trojúhelníky

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

Abstraktní datové typy: zásobník

Algoritmizace a programování

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

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

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

Generické programování

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

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

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.

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

PREPROCESOR POKRAČOVÁNÍ

Seminář Java IV p.1/38

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

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

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Regulární výrazy. Vzory

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

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

Zápis programu v jazyce C#

7. Datové typy v Javě

Ošetřování chyb v programech

Principy objektově orientovaného programování

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

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

8 Třídy, objekty, metody, předávání argumentů metod

KTE / ZPE Informační technologie

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

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Textové soubory. alg9 1

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

Paměť počítače. alg2 1

UJO Framework. revoluční architektura beans. verze

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

JAVA V Assertions Java, zimní semestr

GUI. Systémová integrace pro desktopové aplikace

Abstraktní třída a rozhraní

Proměnné a datové typy

Objektově orientované programování

PB161 Programování v jazyce C++ Přednáška 9

Programování v C++ 3, 3. cvičení

Objektově orientované programování v PHP 5. Martin Klíma

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

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.

Konstruktory překladačů

Jazyk C# (seminář 6)

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

IRAE 07/08 Přednáška č. 1

4IT101 otázky k závěrečnému testu verze pro zimní semestr 2007/2008

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

PŘETĚŽOVÁNÍ OPERÁTORŮ

Transkript:

Java Výjimky 1

Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní výjimky jejich potomci java.lang.error "nezotavitelné" chyby neměly by se odchytávat př. OutOfMemoryError java.lang.exception indikují zotavitelné chyby lze je odchytávat př. ArrayIndexOutOfBounds 2

Zpracování výjimek příkaz try/catch/finally try {... // zde je blok kodu, kde muze nastat // chyba a chceme ji osetrit catch (Exception1 e) { // osetreni vyjimky typu Exception1 // pripadne jejich podtypu catch (Exception2 e) { // osetreni vyjimky typu Exception2 // pripadne jejich podtypu finally { // provede se vzdy 3

Zpracování výjimek pokud výjimku neodchytí blok, kde nastala, šíří se do následujícího vyššího bloku pokud není odchycena v metodě, šíří se do volající metody pokud se dostane až do main() a není odchycena, způsobí ukončení interpretu Javy vypíšou se informace o výjimce + kde nastala a jak se šířila 4

try/catch/finally od Java 7 interface AutoClosable a rozšířený try př: class Foo implements AutoClosable {... public void close() { try ( Foo f1 = new Foo(); Foo f2 = new Foo() ) {... catch (...) {... finaly {... při ukončení try (normálně nebo výjimkou) se vždy zavolá close() na objekty z deklarace v try volá se v opačném pořadí než deklarováno 5

multi catch (od Java 7) class Exception1 extends Exception { class Exception2 extends Exception { try { boolean test = true; if (test) { throw new Exception1(); else { throw new Exception2(); catch (Exception1 Exception2 e) {... 6

Deklarace výjimek metoda, která může způsobit výjimku musí výjimku odchytit nebo specifikovat typ výjimky pomocí throws public void openfile() throws IOException {... pomocí throws nemusejí být deklarovány potomci java.lang.error potomci java.lang.runtimeexception je potomek java.lang.exception př. NullPointerException, ArrayIndexOutOfBoundException 7

Generování výjimek příkaz throw vyhodí výjimku "parametr" reference na objekt typu Throwable throw new MojeVyjimka(); vyhazovat lze existující výjimky, častěji však vlastní výjimky výjimky lze znovu-vyhazovat try {... catch (Exception e) {... throw e; 8

Znovu-vyhození výjimky (Java 7) class Exception1 extends Exception { class Exception2 extends Exception { public static void main(string[] args) throws Exception1, Exception2 { try { boolean test = true; if (test) { throw new Exception1(); else { throw new Exception2(); catch (Exception e) { throw e; od Java 7 si výjimka pamatuje svůj typ na Java 6 nelze přeložit vyžadovalo by throws Exception 9

java.lang.throwable má atribut (private) typu String obsahuje podrobnější popis výjimky metoda String getmessage() konstruktory Throwable() Throwable(String mesg) Throwable(String mesg, Throwable cause) // od 1.4 Throwable(Throwable cause) // od 1.4 metody void printstacktrace() 10

Vlastní výjimky public class MyException extends Exception { public MyException() { super(); public MyException(String s) { super(s); public MyException(String s, Throwable t) { super(s, t); public MyException(Throwable t) { super(t); 11

Řetězení výjimek... try {...... catch (Exception1 e) {... throw new Exception2(e);... reakce na výjimku jinou výjimkou běžná praxe reakce na systémovou výjimku vlastní výjimkou 12

Potlačení výjimek v některých případech jedna výjimka může potlačit jinou výjimku není to řetězení výjimek! typicky se může stát při výjimce ve finally bloku v rozšířeném try bloku (Java 7) Throwable[] getsuppressed() metoda na Throwable vrátí pole potlačených výjimek 13

JAVA Zdrojové soubory 14

Unicode programy ~ Unicode komentáře, identifikátory, znakové a řetězcové konstanty ostatní ~ ASCII (<128) nebo Unicode escape sekvence < 128 Unicode escape sekvence \uxxxx \u0041... A rozvinutá sekvence se už nepoužije pro další sekvence \u005cu005a šest znaků \ u 0 0 5 a 15

Postup zpracování programu 1.překlad unicode escape sekvencí (a celého programu) do posloupnosti unicode znaků 2.posloupnost z bodu 1 do posloupnosti znaků a ukončovačů řádků 3.posloupnost z bodu 2 do posloupnosti vstupních elementů (bez "bílých znaků" a komentářů) ukončovače řádků CR LF CR LF 16

Test public class Test { public static void main(string[] argv) { int i = 1; i += 1; // to same jako \u000a i = i + 1; System.out.println(i); Program vypíše: a) 1 b) 2 c) 3 d) nepřeloží se e) runtime exception 17

Encoding parametr pro javac -encoding kódování zdrojových souborů bez parametru defaultní kódování 18

Literály integer literály desítkové... 0 1 23-3 šestnáctkové... 0xa 0xA 0x10 osmičkové... 03 010 0777 binární... 0b101 0B1001 od Java 7 implicitně typu int typ long... 1L 33l 077L 0x33L 0b10L floating-point literály 0.0 2.34 1..4 1e4 3.2e-4 implicitně typu double typ float... 2.34f 1.F.4f 1e4F 3.2e-4f boolean literály true, false 19

Literály podtržítka v numerických literálech od Java 7 zlepšení čitelnosti 1234_5678_9012_3456L 999_99_9999L 3.14_15F 0xFF_EC_DE_5E 0xCAFE_BABE 0x7fff_ffff_ffff_ffffL 0b0010_0101 0b11010010_01101001_10010100_10010010 20

Literály znakové literály 'a' '%' '\\' '\'' '\u0045' '\123' escape sekvence \b \u0008 back space \t \u0009 tab \n \u000a line feed \f \u000c form feed \r \u000d carriage return \" \u0022 \' \u0027 \\ \u005c 21

Literály řetězcové literály "" "\"" "tohle je retezec" null literál 22

JAVA Hlavní program (metoda main) 23

main void main(string[] args) parametry args ~ parametry z příkazové řádky obsahuje pouze parametry neobsahuje jako v C/C++ název programu návratová hodnota programu návratová hodnota metody void System.exit(3); 24

JAVA Vnitřní třídy 25

Vnitřní třídy inner classes definice třídy v těle třídy public class MyClass { class InnerClass { int i = 0; public int value() { return i; public void add() { InnerClass a = new InnerClass(); 26

Vnitřní třídy vnější třída může vracet reference na vnitřní public class MyClass { class InnerClass { int i = 0; public int value() { return i; public InnerClass add() { return new InnerClass(); public static void main(string[] args){ MyClass p = new MyClass(); MyClass.InnerClass a = p.add(); 27

Skrytí vnitřní třídy vn. třída může být private i protected přístup k ní přes interface public interface MyIface { int value(); public class MyClass { private class InnerClass implements MyIface { private i = 0; public int value() {return i; public MyIface add() {return new InnerClass();... public static void main(string[] args) { MyClass p = new MyClass(); MyIface a = p.add(); // nelze - MyClass.InnerClass a = p.add(); 28

Vn. třídy v metodách vn. třídy lze definovat i v metodách nebo jen v bloku platnost jen v dané metodě (bloku) public class MyClass { public MyIface add() { class InnerClass implements MyIface { private i = 0; public int value() {return i; return new InnerClass(); public static void main(string[] args) { MyClass p = new MyClass(); MyIface a = p.add(); // nelze - MyClass.InnerClass a = p.add(); 29

Anonymní vn. třídy public class MyClass { public MyIface add() { return new MyIface() { private i = 0; public int value() {return i; ; public static void main(string[] args) { MyClass p = new MyClass(); MyIface a = p.add(); 30

Anonymní vn. třídy public class Wrap { private int v; public Wrap(int value) { v = value; public int value() { return v; public class MyClass { public Wrap wrap(int v) { return new Wrap(v) { public int value() { return super.value() * 10; ; public static void main(string[] args) { MyClass p = new MyClass(); Wrap a = p.wrap(5); 31

Anon. vn. třídy: inicializace objekty mimo anon. vn. třídu potřebné v anon. vn. třídě final bez final chyba při překladu od Java 8 stačí effectively final tj. lze i bez modifikátoru final, ale obsah se nesmí měnit public class MyClass { public MyIface add(final int val) { return new MyIface() { private int i = val; public int value() {return i; ; do Java 7 je zde final nutné od Java 8 lze i bez final obsah val se nemění 32

Anon. vn. třídy: inicializace anon. vn. třídy nemůžou mít konstruktor protože jsou anonymní inicializátor objektu public class MyClass { public MyIface add(final int val) { return new MyIface() { private i; { if (val < 0) i = 0; else i = val; public int value() {return i; ; 33

Vztah vnitřní a vnější třídy instance vnitřní třídy může přistupovat ke všem členům nadřazené třídy interface Iterator { boolean hasnext(); Object next(); public class Array { private Object[] o; private int next = 0; public Array(int size) { o = new Object [size]; public void add(object x) { if (next < o.length) { o[next] = x; next++; // pokracovani... 34

Vztah vnitřní a vnější třídy // pokracovani... private class AIterator implements Iterator { int i = 0; public boolean hasnext() { return i < o.length; public Object next() { if (i < o.length) return o[i++]; else throw new NoNextElement(); public Iterator geiterator() { return new AIterator(); 35

Vztah vnitřní a vnější třídy reference na objekt vnější třídy JmenoTridy.this předchozí příklad třídy Array a AIterator reference na objekt Array z Array.AIterator Array.this 36

Vztah vnitřní a vnější třídy vytvoření objektu vnitřní třídy vně třídy s definicí vnitřní třídy public class MyClass { class InnerClass { public static void main(string[] args) { MyClass p = new MyClass(); MyClass.InnerClass i = p.new InnerClass(); nelze vytvořit objekt vnitřní třídy bez objektu vnější třídy objekt vnitřní třídy má vždy (skrytou) referenci na objekt vnější třídy 37

Vícenásobné vnoření tříd při vícenásobném vnoření lze z vnitřních přistupovat na vnější třídy na libovolné úrovni class A { private void f() { class B { private void g() { class C { void h() { g(); f(); public class X { public static void main(string[] args) { A a = new A(); A.B b = a.new B(); A.B.C c = b.new C(); c.h(); 38

Dědění od vnitřní třídy explicitně předat referenci na objekt vnější třídy class WithInner { class Inner { class InheritInner extends WithInner.Inner { InheritInner(WithInner wi) { wi.super(); // InheritInner() { // spatne, chyba pri prekladu public static void main(string[] argv) { WithInner wi = new WithInner(); InheritInner ii = new InheritInner(wi); 39

Statické vnitřní třídy nemají referenci na objekt vnější třídy může mít statické metody a atributy ne-statická vnitřní třída nemůže mít statické členy pro vytváření instancí nepotřebují objekt vnější třídy nemají na něj referenci v podstatě normální třídy, pouze umístěné do jmenného prostoru vnější třídy public class MyClass { public static class InnerClass { public static void main(string[] args) { MyClass.InnerClass ic = new MyClass.InnerClass(); 40

Statické vnitřní třídy lze je definovat uvnitř interfacu ne-statické nelze interface MyInterface { static class Inner { int a, b; public Inner() { void m(); 41

Vnitřní třídy a.class soubory vnitřní třída vlastní.class soubor JmenoVnejsi$JmenoVnitrni.class MyClass$InnerClass.class anonymní vnitřní třídy JmenoVnejsi$PoradoveCislo.class MyClass$1.class vnitřní (static) třída může obsahovat metodu main spuštění programu: java JmenoVnejsi$JmenoVnitrni 42

Důvody použití vnitřních tříd ukrytí implementace přístup ke všem prvkům vnější třídy "callbacks"... 43

Java, zimní semestr Verze prezentace 2015 J03.cz.2015.01 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 44