JAVA V jar Java, zimní semestr

Podobné dokumenty
JAVA V Vlákna Java, zimní semestr

JAVA. java.lang.system

Java Enum Java, zimní semestr ,2017 1

JAVA. Krátce o Reflection API

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

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

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

JAVA. Krátke poznámky:

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

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

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

30. Vlákna, jejich atributy, metody, organizace a stavy. Možnosti synchronizace. (A7B36PVJ)

Principy objektově orientovaného programování

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

Programování v Javě I. Leden 2008

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

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

Java Výjimky Java, zimní semestr

Úvod do programovacích jazyků (Java)

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

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

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

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

Teoretické minimum z PJV

typová konverze typová inference

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

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

Iterator & for cyklus

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

Algoritmizace a programování

Vícevláknové aplikace

Abstraktní datové typy: zásobník

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

Seminář Java II p.1/43

Typický prvek kolekce pro české řazení

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

Programovací jazyk Java

20. Projekt Domácí mediotéka

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

Seminář Java IV p.1/38

Výčtový typ strana 67

Generické programování

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Soubor jako posloupnost bytů

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

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

7. Statické prvky třídy

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

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Java Řetězce Java, zimní semestr

Procházka na provázku

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

JAVA V RMI Java, letní semestr

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

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

RMI Remote Method Invocation

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.

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

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

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

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

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Procesy a vlákna - synchronizace

Programování v jazyku Java vlákna a procesy

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é

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

UJO Framework. revoluční architektura beans. verze

Abstraktní třída a rozhraní

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

JAVA RMI Java, letní semestr 2018

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/

Úvod do programovacích jazyků (Java)

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

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

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

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

1. Programování proti rozhraní

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

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

5 Rekurze a zásobník. Rekurzivní volání metody

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

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

Úvod do programovacích jazyků (Java)

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

Algoritmizace a programování

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

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

Regulární výrazy. Vzory

Konstruktory a destruktory

PREPROCESOR POKRAČOVÁNÍ

GUI. Systémová integrace pro desktopové aplikace

KTE / ZPE Informační technologie

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

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

Jazyk C# (seminář 3)

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Transkript:

JAVA jar 1

Přehled vytváření souborů sdružujících.class soubory JAR ~ Java Archive soubor přípona.jar formát ZIP soubor META-INF/MANIFEST.MF popis obsahu použití distribuce softwaru do CLASSPATH lze psát.jar soubory lze přímo spouštět.jar soubory nemusí obsahovat jen.class soubory obrázky audio cokoliv 2

Použití vytvoření archivu jar cf soubor.jar *.class vytvoří soubor.jar se všemi.class soubory přidá do něj MANIFEST.MF soubor jar cmf manifest soubor.jar *.class vytvoří soubor.jar s daným MANIFEST souborem jar cf0 soubor.jar *.class nepoužije se komprese pro další parametry viz dokumentaci práce s jar archivy v programu java.util.jar, java.util.zip 3

MANIFEST.MF soubor seznam dvojic jméno : hodnota inspirováno standardem RFC822 dvojice lze seskupovat do skupin skupinu odděleny prázdným řádkem hlavní skupina (první) skupiny pro jednotlivé položky archivu délka řádků max. 65535 konce řádků CR LF, LF, CR 4

MANIFEST.MF soubor hlavní sekce Manifest-Version Created-By Signature-Version Class-Path Main-Class aplikace lze spouštět java -jar archiv.jar vedlejší sekce první položka Name: cesta_k_položce_v_archivu 5

Jar a Ant task jar v Antu parametry destfile, basedir, includes, excludes, manifest vnořené elementy manifest příklady <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes" excludes="**/test.class" /> <jar destfile="test.jar" basedir="."> <include name="build"/> <manifest> <attribute name="built-by" value="${user.name}"/> <section name="common/class1.class"> <attribute name="sealed" value="false"/> </section> </manifest> </jar> 6

JAVA Vlákna 7

Přehled (thread) podpora pro vícevláknové aplikace přímo v jazyce "hlavní" vlákno aplikace metoda main() v JVM je vždy několik vláken záleží na implementaci JVM skončí až skončí všechna vlákna (která nejsou nastavena jako daemon) vlákna a skupiny vláken (thread groups) podpora pro synchronizaci synchronized 8

Vytvoření vlákna implementace vlákna 1.dědění od třídy java.lang.thread 2.implementování interface java.lang.runnable potomek třídy Thread předefinování metody void run() vlákno se spustí zavoláním metody start() interface Runnable jediná metoda void run() objekt ji implementuje vytvoření vlákna new Thread(Runnable).start() 9

Příklad public class SimpleThread extends Thread { private int id; private static int cnt = 0; public SimpleThread() { id = cnt++; start(); } public void run() { for (int i=0; i<5; i++) System.out.println(id + " : "+i); } public static void main(string[] args) { for (int i=0; i<5; i++) { new SimpleThread(); } } } 10

yield metoda třídy Thread dočasné pozastavení vlákna, aby mohlo běžet jiné vlákno je to jen doporučení static metoda úprava předchozího příkladu public void run() { for (int i=0; i<5; i++) { System.out.println(id + " : "+i); yield(); } } 11

sleep dvě metody třídy Thread sleep(int milis) sleep(int milis, int nanos) nanos v rozsahu 0-999999 static metoda uspí vlákno na požadovanou dobu může být přerušeno (metodou interrupt()) vyhodí výjimku InterruptedException 12

join tři metody na třídě Thread join() čeká, dokud dané vlákno neskončí join(int milis) join(int milis, int nanos) čekají dokud dané vlákno neskončí, maximálně však zadanou dobu (0...jako join() bez parametrů) opět můžou být přerušeny výjimka InterruptedException 13

Priorita každé vlákno má prioritu void setpriority(int newpriority) int getpriority() 10 úrovní priority konstanty MAX_PRIORITY = 10 MIN_PRIORITY = 1 NORM_PRIORITY = 5 skupina vláken (ThreadGroup) getmaxpriority() setpriority vláknu nastaví maximálně prioritu povolenou pro skupinu vláken, do které vlákno náleží 14

Daemon vlákna "servisní" vlákna běží "na pozadí" nepatří přímo do aplikace např. vlákno pro garbage collector JVM skončí pokud skončila všechna ne-daemon vlákna metody void setdaemon(boolean daemon) lze volat jen na ještě nenastartovaném vláknu boolean isdaemon() 15

Synchronizace s každou instancí objektu je asociován jeden zámek s každou třídou je asociován jeden zámek příkaz/modifikátor synchronized příkaz synchronized (Výraz) Blok výraz se musí vyhodnotit na referenci na objekt než se začne Blok vykonávat, vlákno musí získat pro sebe zámek na objektu určeném pomocí Výrazu po skončení Bloku se zámek uvolní 16

Synchronizace modifikátor metody synchronized v hlavičce metody chová se stejně jako příkaz synchronized vlákno než začne vykonávat metodu musí získat zámek na objektu po skončení metodu se zámek uvolní static synchronized metody získává se zámek asociovaný se třídou vzájemně vyloučeny jsou jen synchronized metody a bloky nějaké vlákno má zámek na objektu ostatní vlákna mohou používat atributy objektu i volat ne-synchronized metody 17

wait & notify s každým objektem je asociována fronta čekajících vláken při vytvoření objektu je prázdná používají ji metody wait, notify a notifyall definovány na java.lang.object void wait() lze volat jen pokud volající vlákno drží zámek na daném objektu (tj. v synchronized sekci) jinak výjimka IllegalMonitorStateException vloží vlákno do fronty čekajících vláken uvolní zámek na objektu jiná vlákna mohou získat zámek, tj. začít provádět synchronized blok 18

wait & notify po wait je vlákno ve frontě čekajících vláken dokud někdo nezavolá notify nebo notifyall void notify() "probudí" jedno (nějaké) vlákno z fronty čekajících (pokud není prázdná) lze volat jen ze synchronized sekcí jinak výjimka IllegalMonitorStateException probuzené vlákno pokračuje ve výpočtu až získá zámek (tj. vlákno, co drželo zámek (a zavolalo notify) opustí synchonized sekci) void notifyall() probudí všechna vlákna ve frontě vlákna budou pokračovat, až získají zámek 19

wait & notify tři varianty wait void wait() void wait(int milis) void wait(int milis, int nanos) čekají ve frontě, dokud někdo neprobudí, maximálně však zadanou dobu čekání ve wait lze přerušit (metoda interrupt()) vyhodí InterruptedException wait, notify i notifyall jsou final metoda sleep() neuvolňuje zámek 20

Příklad Jednoduchý zámek public class SimpleLock { private boolean locked; public SimpleLock() { locked = false; } synchronized public boolean lock() { try { while (locked) wait(); locked = true; } catch (InterruptedException e) { return false; } return true; } } synchronized public void unlock() { locked = false; notify(); } Java, winter semester 2015 21

Zastavení vlákna stop() suspend() resume() všechny jsou od JDK 1.2 deprecated nebezpečné mohly způsobovat nekonzistentní stav aplikace nebo způsobovat deadlock 22

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 stromová hierarchie lze zjistit všechny vlákna ve skupině nadřazenou skupinu v hierarchii aktivní vlákna ve skupině lze je ignorovat 23

Jméno vlákna vlákno má jméno lze ho určit při vytváření vlákna konstruktory Thread(String name) Thread(Runnable obj, String name) za běhu setname(string name) zjištění jména String getname() pokud se jméno nezadá, vytvoří se automaticky "Thread-"+n n je pořadové číslo 24

Ostatní metody static Thread currentthread() vratí referenci na právě prováděné vlákno boolean isalive() test zda je vlákno prováděno false pokud vlákno není nastartováno, nebo pokud už skončilo boolean isinterrupted() test, zda má vlákno nastavený příznak interrupted boolean interrupted() jako isinterrupted(), ale zároveň zruší příznak interrupted String tostring() řetězcová reprezentace je složena z jméno priorita skupina 25

java.util.concurrent java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks balíky od JDK 5.0 obsahují třídy pro paralelní přístup k datům, zámky, semafory,... 26

JAVA java.lang.object 27

Metody clone equals finalize getclass hashcode notify notifyall tostring wait 28

Poznámka o equals boolean equals(object obj) pozor na signaturu metody definována s parametrem typu Object při předefinovávání je nutno zachovat typ Object příklad class Complex { long x,y; public boolean equals(object obj) { if (obj instanceof Complex) { Complex c = (Complex) obj; if (c.x == x && c.y == y) { return true; } } return false; } } 29

Poznámka o equals je vhodné definovat metodu s anotací @Override @Override public boolean equals(object obj) při definici s jiným typem je metoda přetížena, ale ne předefinována class Complex { long x,y; public boolean equals(complex obj) {... } } třída obsahuje 2 metody equals 30

hashcode int hashcode() hashovací kód objektu používá se např. v java.util.hashtable a dalších pro stejný objekt vrací stále stejnou hodnotu nemusí být stejná mezi různými běhy programu pokud jsou dva objekty stejné ve smyslu metody equals(), pak hashcode musí vracet u obou stejné číslo dva různé objekty nemusí mít nutně různý hashcode je to ale velmi vhodné 31

clone Object clone() throws CloneNotSupportedException vytvoří kopii objektu platí x.clone()!= x mělo by platit (ale nemusí) x.clone().equals(x) aby metoda fungovala, musí objekt implementovat interface Cloneable jinak vyhodí výjimku CloneNotSupportedException pole se berou jako by implementovali Cloneable "klonují" se jen objekty, ne jejich atributy mělká kopie pokud chcete jinak, je nutno metodu předefinovat 32

clone předefinování clone typická implementace ne nezbytně nutná protected Object clone() { Object clonedobj = super.clone();... return clonedobj; } při klonování by mělo platit a.clone()!= a a.clone().equals(a) 33

tostring vrací textovou reprezentaci objektu implicitně vrací getclass().getname() + '@' + Integer.toHexString(hashCode()) vhodné předefinovat class MyClass {... }... MyClass o = new MyClass(); System.out.println(o); // zavola se tostring() 34

JAVA java.lang.system 35

java.lang.system obsahuje jen statické elementy nelze od ní vytvářet instance atributy java.io.inputstream in standardní vstup java.io.printstream out standardní výstup java.io.printstream err standardní chybový výstup 36

Metody void arraycopy(object src, int srcpos, Object dest, int destpos, int length) kopíruje pole funguje i pokud src==dest long currenttimemillis() aktuální čas v milisekundách od 1.1.1970 přesnost záleží na OS long nanotime() hodnota systémového timeru v nanosekundách počet nanosekund od nějakého pevného času i v budoucnosti, tj. hodnota může být záporná pro počítaní nějaké doby od JDK 5 37

Metody void exit(int status) ukončí JVM void gc() doporučení pro JVM, ať pustí garbage collector void runfinalization() doporučení pro JVM, ať provede všechny dosud neprovedené a naplánované finalizátory void setin(inputstream s) void setout(printstream s) void seterr(printstream s) znovu nastaví daný vstup nebo výstup int identityhashcode(object x) vrátí implicitní hash kód objektu 38

Properties dvojice klíč hodnota String (klíč i hodnota) systémové i vlastní Properties getproperties() vrátí všechny nastavené properties java.util.properties potomek java.util.hashtable String getproperty(string key) vrátí hodnotu pokud klíč není nastaven, vrací null String getproperty(string key, String def) vrátí hodnotu pokud klíč není nastaven, vrací def 39

Properties void setproperties(properties props) nastaví properties v props String setproperty(string key, String val) nastaví danou property vrací původní hodnotu nebo null String clearproperty(string key) zruší danou property nastavení properties při startu JVM parametr -Dkey=value př. java -DdefaultDir=/usr Program typicky se jako klíče používají hierarchická jména oddělená tečkami 40

Vždy nastavené properties java.version java.home adresář, ve kterém je instalace JAVy java.class.path java.io.tmpdir kde se budou vytvářet dočasné soubory os.name, os.architecture, os.version identifikace operačního systému file.separator oddělovač souborů v cestě (unix "/", win "\") path.separator odděloač cest (unix ":", win ";") line.separator oddělovač řádků (unix "LF", win "CR LF") 41

Vždy nastavené properties user.name název učtu aktuálního uživatele user.home domovský adresář user.dir aktuální adresář dále několik properties identifikujích VM 42

Proměnné prostředí Map<String, String> getenv() všechny proměnné prostředí nemodifikovatelná kolekce String getenv(string name) proměnná s daným jménem nebo null 43

JAVA java.lang.runtime 44

Runtime vždy existuje jedna instance nelze vytvářet další instance Runtime getruntime() statická metoda vrátí instanci Runtime int availableprocessors() závisí na implementaci vrácená hodnota se může za běhu programu měnit long freememory() volná paměť dostupná pro JVM long maxmemory() maximální dostupná paměť pro JVM void halt(int status) ukončení JVM, na nic nečeká 45

Runtime void addshutdownhook(thread hook) nastaví vlákno, které se má provést při ukončování JVM hook vytvořené, ale nenastartované vlákno může být nastaveno více vláken začnou se provádět v "nějakém" pořadí daemon vlákna běží i během ukončování JVM nastavená vlákna se nevykonají, pokud JVM byla ukončena pomocí halt() boolean removeshutdownhook(thread hook) odstraní dříve nastavené vlákno vrací false, pokud dané vlákno nebylo nastaveno 46

Runtime Process exec(string command) spustí externí proces několik variant funkce (různé parametry) nemusí vždy spolehlivě fungovat třída Process reprezentuje externí proces metody void destroy() zabije proces int exitvalue() návratová hodnota int waitfor() čeká, dokud proces neskončí vrací návratovou hodnotu procesu může být přerušen 47

JAVA java.lang.math 48

java.lang.math statické atributy a metody pro základní matematické konstanty a operace atributy PI, E metody abs, ceil, floor, round, min, max,... pow, sqrt,... sin, cos, tan, asin, acos, atan,... todegrees, toradians,...... 49

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