Java Řetězce Java, zimní semestr

Podobné dokumenty
Java Výjimky 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

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

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

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

Úvod do programovacích jazyků (Java)

Iterator & for cyklus

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

JAVA. Krátke poznámky:

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

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

Java Enum Java, zimní semestr ,2017 1

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ů

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

Abstraktní datové typy: zásobník

Programování v Javě I. Leden 2008

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

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

Seminář Java II p.1/43

Typický prvek kolekce pro české řazení

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

Teoretické minimum z PJV

Dědičnost (inheritance)

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

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

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

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

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

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

Algoritmizace a programování

typová konverze typová inference

Výčtový typ strana 67

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

Výjimky. v C# a Javě

Generické programování

KTE / ZPE Informační technologie

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

Principy objektově orientovaného programování

RMI Remote Method Invocation

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/

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

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

Úvod do programovacích jazyků (Java)

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

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

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

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

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.

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

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

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

Seminář Java IV p.1/38

1. Programování proti rozhraní

20. Projekt Domácí mediotéka

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

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

PREPROCESOR POKRAČOVÁNÍ

Abstraktní třída a rozhraní

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

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.

Objektově orientované programování

Zápis programu v jazyce C#

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

Jazyk C# (seminář 6)

Regulární výrazy. Vzory

Úvod do programovacích jazyků (Java)

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Jazyk C++ II. Výjimky

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

17. Projekt Trojúhelníky

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

Programovací jazyk Java

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

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

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

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

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

JAVA. Další jazyky kompilovatelné do Java byte-code

Jazyk C++ I. Šablony 2

Algoritmizace a programování

Více o konstruktorech a destruktorech

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

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

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Java - řazení objektů

Třída jako zdroj funkcí

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

KTE / ZPE Informační technologie

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

7. Dynamické datové struktury

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Pokročilé programování na platformě Java. Úvod

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

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

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Transkript:

Java Řetězce 1

Řetězec instance třídy java.lang.string kompilátor s nimi zachází téměř jako s primit. typy řetězcové konstanty = instance třídy String nezměnitelné!!! pro změny třídy StringBuffer, StringBuilder operátor + spojování řetězců pokud je ve výrazu aspoň jeden řetězec -> vše se zkonvertuje na řetězec metoda tostring() definována na třídě Object obvyklý kandidát na předefinování vznikne nový řetězec 2

java.lang.string konstruktory String(); String(char[] value); String(byte[] bytes); String(byte[] bytes, String charsetname); String(String value); String(StringBuffer value); String(StringBuilder value); 3

java.lang.string metody int length(); char charat(int index); IndexOutOfBoundException boolean equals(object o); porovnává řetězce == porovnává reference String a = new String("ahoj"); String b = new String("ahoj"); System.out.println(a==b); // false System.out.println(a.equals(b)); //true 4

java.lang.string metody int compareto(string s); porovnává lexikograficky int comparetoignorecase(string s); int indexof(char c); int indexof(string s); vracejí -1, pokud se nevyskytuje String substring(int beginindex); String substring(int beginindex, int endindex); String replacefirst(string regexp, String repl); String replaceall(string regexp, String repl); 5

Řetězce metody (pokrač.) String join(charsequence delimiter, CharSequence... elements); od Java 8 metody lze volat i na řetězcových konstantách String s;... if ("ahoj".equals(s)) {... 6

Java Wrapper typy 7

Wrapper typy neměnitelné Integer konstruktory od Java 9 jsou deprecated Integer(int value) Integer(String s) metody int intvalue() static Integer valueof(int i) static int parseint(string s)... ostatní wrapper typy obdobně 8

Java Ještě k metodám 9

Lokální proměnné definice kdekoliv v těle viditelnost v bloku viz první přednášku neinicializované lze definovat jako final konstanta jiný modifikátor nelze effectively final není definována jako final, ale po inicializaci se hodnota nemění 10

Přetížení metod více metod se stejným jménem a různými parametry různý počet a/nebo typ public void draw(string s) {... public void draw(int i) {... public void draw(int i, double f) {... nelze přetížit jen pomocí změny návratového typu 11

Rekurzivní volání rekurze metoda volá sebe sama public static long factorial(int n) { if (n == 1) return 1; return n * factorial(n-1); pozor na ukončení neukončení -> přetečení zásobníku velikost lze nastavit 12

Java Výjimky 13

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 14

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 15

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 16

try/catch/finally lze vynechat catch nebo finally nelze vynechat oboje zároveň 17

Rozšířený try (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 18

Rozšířený try lze vynechat catch i finally zároveň try (Resource r = new Resource()) {... od Java 9 lze v hlavičce try použít (effectively) final proměnné final Resource resource1 = new Resource("res1"); Resource resource2 = new Resource("res2"); try (resource1; resource2) {... 19

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) {... 20

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 21

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; 22

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 23

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() 24

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); 25

Ř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 26

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 27

JAVA Vnitřní třídy 28

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(); 29

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(); 30

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(); 31

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(); 32

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(); 33

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); 34

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í 35

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; ; 36

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... 37

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 getiterator() { return new AIterator(); 38

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 39

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 40

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(); 41

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); 42

Vnořené (nested) třídy definovány s static nemají referenci na objekt vnější třídy může mít statické metody a atributy 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 NestedClass { public static void main(string[] args) { MyClass.NestedClass nc = new MyClass.NestedClass(); 43

Vnořené třídy lze je definovat uvnitř interfacu vnitřní třídy nelze interface MyInterface { static class Nested { int a, b; public Nested() { void m(); 44

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

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

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