JAVA. Krátke poznámky:



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

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

Java Enum Java, zimní semestr ,2017 1

Java Řetězce Java, zimní semestr

Úvod do programovacích jazyků (Java)

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

Algoritmizace a programování

Seminář Java II p.1/43

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

Seminář Java IV p.1/38

Teoretické minimum z PJV

typová konverze typová inference

Výčtový typ strana 67

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Generické programování

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

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

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

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

JAVA V Assertions Java, zimní semestr

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

Programování v Javě I. Leden 2008

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

Vlákna. První jednoduchý program s vlákny:

JAVA V Vlákna Java, zimní semestr

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Typický prvek kolekce pro české řazení

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

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

Principy objektově orientovaného programování

Abstraktní datové typy: zásobník

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

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

JAVA V jar Java, zimní semestr

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

Vlákna. První jednoduchý program s vlákny:

Iterator & for cyklus

Abstraktní třída a rozhraní

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

PREPROCESOR POKRAČOVÁNÍ

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.

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

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

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

7. Dynamické datové struktury

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

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

3. Třídy. Základní pojmy objektového programování. Třídy

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

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

KTE / ZPE Informační technologie

Design time - vytváří se program - metadata - vytváří se např. třída. Run time - běh programu - ukládá se do paměti počítače - vytváří se např.

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

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

OOP - Objektově Orientované Programování

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

boolean hasnext() Object next() void remove() Kolekce

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

Úvod do programovacích jazyků (Java)

11. Dědičnost. Dědičnost strana 103

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

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

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

Úvod do programovacích jazyků (Java)

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

Dědičnost (inheritance)

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

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.

7. Datové typy v Javě

20. Projekt Domácí mediotéka

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

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

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

Dědění, polymorfismus

Jazyk C# (seminář 3)

Programování v jazyku Java základy OOP

Proměnné a datové typy

KTE / ZPE Informační technologie

ADT/ADS = abstraktní datové typy / struktury

Jazyk C# (seminář 6)

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě

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

Jazyk C# a platforma.net

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

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

Soubor jako posloupnost bytů

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

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

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Ukazka knihy z internetoveho knihkupectvi

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

Programovací jazyk Java

1. Programování proti rozhraní

RMI Remote Method Invocation

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

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

Transkript:

JAVA Krátke poznámky: Vše je definováno ve třídách; Žádné funkce mimo třídy Skoro všetko je objekt, výnimka sú premenné (napr. int) Neexistuje operátor delete Rušenie objektov výlučne cez Garbage Collector Tesne pred deštrukciou objektu sa zavolá finalize, nie je to deštruktor, nie je záruka jeho zavolania Implicitní hodnoty Atributy: boolean false, ostatní primitivní typy 0, reference - null Pozor, lokální proměnné nejsou inicializovány chyba při překladu Předávání parametrů hodnotou, predávanie objektov cez referenciu Balík (package) obdoba v C++ namespace "obdoba knihoven" každá třída patří do právě jednoho balíku příslušnost k balíku: package jmenobaliku triedy z iného balíka: import jmenobaliku.jmenotridy balík java.lang je importován vždy Verejné a neverejné triedy Každá veřejná (public) třída jeden soubor neveřejné třídy (bez public) viditelné pouze ze svého balíku Priradenie: int x = 1 (opačne nejde) Primitivní typy kopírování hodnoty (včetne String) Objekty kopírování reference na objekt Přetečení a podtečení jsou tichá negeneruje se žádná výjimka max -> min pri pretečení a opačne Porovnanie rôznych referencií (aj keby tá istá hodnota) = vždy false int x1 = new Integer(7); // je tiež referencia, ale pri priradení kopíruje hodnotu Logické operátory: skrátené aj neskrátené vyhodnocovanie (& vs. &&) Operátor čárka, jedine vo for cykle: for (int i=1,j=1; i<5; i++, j=i*10) Label, návestie: label: vnejsi-cyklus { vnitrni-cyklus { break; continue; continue label; break label; vždy má tvar: označenie: (označenie, dvojbodka); za ním následuje cyklus slúži na riadenie vonkajších cyklov z cyklu vnútorného goto sa nepoužíva (rezervované slovo) Trieda [public] [abstract] [final] class Jmeno [extends Predek] [implements SeznamInterfacu] {... maximálne 1 predok; interfaceov môže byť viac final nelze vytvářet potomky final pre atribúty - po inicializácii nejde do nich nič priradiť konstruktor: modifikátor pouze viditelnost (public / private / protected) více konstruktorů - různé parametry

konstruktor předka super() jiný konstruktor stejného objektu - this() vždy se nejdřív volá konstruktor předka, i když není explicitně uveden static inicializátor: class MyClass { static int a; static { a = 10;... ne-static inicializátor: class MyClass { int a; { a = 5;... třída java.lang.object každá třída je jejím potomkem, jediná třída která nemá předka public / protected / private Public: viditelné odkudkoliv (pokud je viditelná i třída) Protected: viditelné ve stejném balíku a v potomcích Private: viditelné jen ve třídě, kde jsou definovány Bez uvedení: viditelné ve stejném balíku Není modifikátor virtual - všechny metody jsou virtuální statické metody nejsou virtuální super - přístup k členům přímého předka; nelze použít super.super; Interface - pouze definice rozhraní, žádná implementace atributy musejí být inicializovány ( int a = 5; ); môžu aj dediť: interface Iface3 extends Iface1, Iface2 {... Třída musí implementovat všechny metody interface neplatí pro abstract třídy - nie je nutné implementovať všetky metódy abstraktnej triedy v abstraktnej triede už môžu byť metódy aj implementované statická inicializácia poľa: int[] a = { 1, 2, 3, 4, 5 dynamická inicializácia poľa: int[] array = new int [10]; pole: vždy se kontrolují meze nelze vypnout - ArrayIndexOutOfBoundException String: nemeniteľný + operátor spojování řetězců; jediný preťažený operátor v Jave konštruktor napr. String(char[] value) equals pre porovnanie, nepoužívať ==! Implementace metod se hledají dynamicky za běhu Abstraktní metody nesmí být static ani private a mohou být jen v abstraktní třídě boolean - není možné přetypovat: (int) true, (boolean) 1! Výnimky java.lang.error "nezotavitelné" chyby, neměly by se odchytávat, OutOfMemoryError java.lang.exception - indikují zotavitelné chyby, lze je odchytávat, ArrayIndexOutOfBounds obaja potomci java.lang.throwable pokud se výnimka dostane až do main() a není odchycena, způsobí ukončení interpretu Javy metoda, která může způsobit výjimku musí výjimku odchytit, nebo specifikovat typ výjimky pomocí throws, napr. IOException neplatí pre potomkov java.lang.error a java.lang.runtimeexception java.lang.runtimeexception je potomok java.lang.exception napr. ArrayIndexOutOfBoundException Reťazenie výnimiek reakce na výjimku jinou výjimkou

v některých případech jedna výjimka může potlačit jinou výjimku - to už nie je reťazenie try {... catch (Exception1 e) {... throw new Exception2(e); Vvšechny primitivní typy v Javě kromě charu jsou signed a mají přesně daný počet bytů (napr. byte má 1B, int 4B) v metodě main(), parametr args[] obsahuje jen parametry, nikoliv jméno třídy nebo programu na pozici 0; na rozdiel od napr. C++ Unicode escape sekvence: \u0041... A prekladá sa ešte pred samotným prekladom zvyškú kódu Zápisy hodnôt atribútov; tzv. literály (napr. false), príklady: 1L = longový zápis 3.2e-4 double (čokoľvek s bodkou) 2.34f float 1234_5678 podtržítka sa ignorujú pri preklade Vnorené triedy vonkajšia môže vraciať referenciu na vnútornú instance vnitřní třídy může přistupovat ke všem položkám pre anonymnú triedu to funguje len, keď je vonkajšia final nelze vytvořit objekt vnitřní třídy bez objektu vnější třídy pri dedení od vnútornej triedy je nutné explicitne uviesť referenciu na vonkajšiu triedu, napr. class InheritInner extends Vonkajsia.Vnutorna { InheritInner(Vonkajsia xx) { xx.super(); // konštruktor proste musí byť takto uvedený, inak chyba pri preklade statické vnitřní třídy nemají referenci na objekt vnější třídy => může mít statické metody a atributy nestatická vnitřní třída nemůže mít statické členy x ^= y; je bitový x xor y, prideliť do x Integer.MAX_VALUE Threads hlavné vlákno je vždy main() možno vytvárať aj ďalšie; podpora priamo v jazyku Vytváranie nových vláken dědění od třídy java.lang.thread předefinování metody void run(); vlákno se spustí zavoláním metody start() implementování interface java.lang.runnable jediná metoda void run() - objekt ji implementuje vytvoření vlákna: new Thread(new myrunnable()).start() Metódy riadenia yield() - doporučenie pre pozastavenie vlákna, aby mohlo ísť iné vlákno sleep(int milis, int nanos) príp. len milis, musí ošetriť InterruptedException setpriority(int newpriority); int getpriority() => určovanie a získanie priority vláken, ide o konštanty (10=max, 5=normal, nemali by byť medzistupne...) setdaemon(boolean daemon); boolean isdaemon()

S každou instancí objektu je asociován jeden zámek; s každou třídou je asociován jeden zámek Synchronized ako modifikátor metody: chová se stejně jako příkaz synchronized vlákno než začne vykonávat metodu musí získat zámek na objektu static synchronized metody - získává se zámek asociovaný se třídou void wait() lze volat jen pokud volající vlákno drží zámek na daném objektu vloží vlákno do fronty čekajících vláken; stratí zámok v tej chvíli notify() - "probudí" jedno (nějaké) vlákno z fronty čekajících (pokud není prázdná) void notifyall() probudí všechna vlákna ve frontě metoda sleep() neuvolňuje zámek! Zastavenie vlákna je deprecated (z iného vlákna) Skupiny vláken vlákna patří do skupiny vláken třída ThreadGroup skupina vláken může obsahovat jak vlákna tak další skupiny vláken java object equals; hashcode() - tu platí, čo má rovnaký equals, má rovnaký hashcode; metóda tostring(); Kolekce ~ objekt obsahující jiné objekty Collection<E> skupina jednotlivých prvků List<E> drží prvky v nějakém daném pořadí Set<E> každý prvek obsahuje právě jednou Map<K,V> skupina dvojic klíč hodnota metódy, napr. add(), contains(), clear(), isempty(), size() pro každý druh kolekce existuje alespoň jedna implementace (napr. ArrayList, LinkedList pre List<E>) Kolekce nemusí přímo podporovat přístup k prvkům => iterátor Iterator<E> iterator(); E next(); boolean hasnext(); void remove(); Většina kolekcí není bezpečná vůči vláknům java.util.arrays - pre prácu s poliami void sort(typ[] arr, int from, int to); enum normální třída má atributy, metody, i metodu main potomek třídy java.lang.enum vlastný konštruktor, ale volanie iné (nie pri new) public enum Color { BLUE, RED, GREEN public Color clr = Color.BLUE; implementácia: class Color { private int value; public static final Color RED = new Color(0); public static final Color GREEN = new Color(1); public static final Color BLUE = new Color(2); protected Color(int v) { value = v;

Príklad s planétami : public enum Planet { MERCURY (3.303e+23, 2.4397e6), VENUS (4.869e+24, 6.0518e6), EARTH (5.976e+24, 6.37814e6); private final double mass; private final double radius; Planet(double mass, double radius){ this.mass = mass; this.radius = radius; Priradenie - jednoduché: Planet pl = Planet.EARTH; Príklad s metódou v enum-e: double eval(double x, double y){ switch(this) { case PLUS: return x + y; case MINUS: return x - y;... { Dosiahnuteľnosť: int x=10; // dosazitelne je x { int y=11; // dosazitelne je x i y // dosazitelne je pouze x