JAVA. java.lang.system

Podobné dokumenty
JAVA. java.lang.stringbuffer java.lang.stringbuilder

JAVA V Vlákna Java, zimní semestr

JAVA V jar Java, zimní semestr

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

7. Dynamické datové struktury

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

typová konverze typová inference

Úvod do programovacích jazyků (Java)

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

6. Problém typové anonymity prvků v kolekci Sjednocení typově rozdílných prvků pomocí rozhraní Kolekce pro jeden typ prvků...

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

Pole ( Array ) p2[1] = new Point(5, 6); // assignment PJV04 1

Pole a kolekce. v C#, Javě a C++

Šablony, kontejnery a iterátory

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

Seminář Java IV p.1/38

Iterator & for cyklus

Kolekce, cyklus foreach

Šablony, kontejnery a iterátory

Datové struktury strana 81

Výčtové typy a kolekce v Javě, generické typy

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

Výčtové typy a kolekce v Javě, generické typy

Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy

Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy Příklad - Spojový seznam

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

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

Výčtový typ strana 67

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

Lineární datové struktury

Algoritmizace a programování

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Abstraktní datové typy: zásobník

Programování v Javě I. Leden 2008

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

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

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

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

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

Zadání k 2. programovacímu testu

Kolekce. BD6B36PJV 5 Fakulta elektrotechnická České vysoké učení technické

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

Algoritmizace prostorových úloh

Algoritmizace a programování

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

Generické programování

ADT/ADS = abstraktní datové typy / struktury

Jazyk C# (seminář 3)

JAVA. Krátke poznámky:

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

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

Regulární výrazy. Vzory

Teoretické minimum z PJV

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

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

Úvod do programovacích jazyků (Java)

Seminář Java V p.1/49

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

Algoritmizace prostorových úloh

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

Úvod do programovacích jazyků (Java)

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

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

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

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

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

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Programování v jazyku Java pole, kolekce, typované kolekce

Algoritmizace řazení Bubble Sort

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

Java Enum Java, zimní semestr ,2017 1

Seminář Java II p.1/43

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

Implementace abstraktních datových typů. Zásobník (Stack) Fronta (Queue) Obousměrná fronta (Dequeue) Vektor (Vector) Seznam (List)

20. Projekt Domácí mediotéka

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/

Algoritmizace a programování

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

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Návrh softwarových systém. Návrh softwarových systémů

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

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

Java Řetězce Java, zimní semestr

Abstraktní datové typy

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

UJO Framework. revoluční architektura beans. verze

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.

Obsah přednášky. Výjimky, výčtové typy a kolekce v Javě. Nestandardní situace. Výjimky (Exceptions)

Výjimky, výčtové typy a kolekce v Javě

Úvod do programování v jazyce Java

Část I Spojové struktury

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Da D to t v o é v ty t py IB111: Datové typy

Konstruktory a destruktory

Algoritmizace a programování

7. Statické prvky třídy

Transkript:

JAVA java.lang.system 1

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 2

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 3

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 4

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 5

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 6

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") 7

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 8

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 9

JAVA java.lang.runtime 10

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á 11

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 12

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 13

JAVA java.lang.stringbuffer java.lang.stringbuilder 14

Přehled "měnitelný" řetězec instance třídy String jsou neměnitelné nejsou potomky String String, StringBuffer, StringBuilder jsou final StringBuffer bezpečný vůči vláknům StringBuilder není bezpečný vůči vláknům od JDK 5 mají stejné metody vše pro StringBuffer platí i pro StringBuilder 15

Přehled operátor + na řetězcích je implementován pomocí třídy StringBuffer výraz x = "a" + 4 + "c" je přeložen do x = new StringBuffer().append("a").append(4). append("c").tostring() základní metody append a insert definovány pro všechny typy 16

Konstruktory StringBuffer() prázdný bufer StringBuffer(String str) bufer obsahující str StringBuffer(int length) prázdný bufer s iniciální kapacitou length kapacita je během práce s bufrem dle potřeby zvětšována StringBuffer(CharSequence chs) CharSequence interface implementují ho String, StringBuffer, StringBuilder,... 17

Metody StringBuffer append(typ o) definována pro všechny primitivní typy, Object, String a StringBuffer převede parametr na řetězec a připojí na konec vrací referenci na sebe (this) StringBuffer insert(int offset, typ o) definována pro všechny typy jako append vloží řetězec na danou pozici offset musí být >=0 a < aktuální délka řetězce v bufru StringBuffer replace(int start, int end, String str) nahradí znaky v bufru daným řetezcem StringBuffer reverse() převrátí pořadí znaků v bufru 18

Metody StringBuffer delete(int start, int end) odstraní znaky z bufru start, end indexy do bufru StringBuffer deletecharat(int i) odstraní znak na dané pozici char charat(int i) znak na dané pozici int length() aktuální délka řetězce v bufru String substring(int start) String substring(int start, int end) vratí podřetezec 19

JAVA java.lang.math 20

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,...... 21

JAVA Kolekce 22

Přehled (collections) kolekce ~ objekt obsahující jiné objekty např. pole jen pole nestačí mnoho výhod (vestavěný typ, rychlý přístup, prvky i primitivní typy,... omezení např. pevná velikost Java collection library sada interfaců a tříd poskytujích dynamická pole, hašovací tabulky, stromy,... součást balíku java.util ne vše v java.util je kolekce 23

Kolekce a JDK 5 JDK < 5 prvky kolekcí typ Object nelze vkládat primitivní typy JDK 5 kolekce pomocí generických typu fungují kolekce i bez <> - "raw" types stále nelze pro primitivní typy List<int> - chyba při překladu metody zůstaly stejné 24

Ještě k polím: java.util.arrays java.util.arrays sada metod pro práci s poli součást knihovny kolekcí metody všechny jsou statické většinou definovány pro všechny primitivní typy a pro Object int binarysearch(typ[] arr, typ key) hledání prvku v poli binární vyhledávání pole musí být setříděno vzestupně vrací index prvku pokud v poli je nebo zápornou hodnotu indexu, kam by prvek patřil, kdyby v poli byl 25

Ještě k polím: java.util.arrays boolean equals(typ[] a1, typ[] a2) porovnává, zda jsou pole stejná, tj. stejně dlouhá a obsahují stejné prvky prvky jsou stejné, pokud (e1==null? e2==null : e1.equals(e2)) void fill(typ[] arr, typ val) vyplní všechny prvky pole parametrem val void fill(typ[] arr, int from, int to, typ val) vyplní zadanou část pole parametrem val void sort(typ[] arr) setřídí pole vzestupně quicksort pro primitivní typy, mergesort pro Object void sort(typ[] arr, int from, int to) setřídí zadanou část pole 26

Třídění pole void sort(object[] arr) prvky pole musí být porovnatelné, tj. implementovat interface java.lang.comparable<t> metoda int compareto(t o) void sort(t[] arr, Comparator<? super T> c) prvky stále musí být porovnatelné na porovnávání se použije objekt c interface java.util.comparator<t> int compare(t o1, T o2) pro vyhledávání int binarysearch(t[] a, T key, Comparator<? super T> c) 27

Základní kolekce dva základní druhy interface Collection a Map 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 pro každý druh kolekce existuje alespoň jedna implementace většinou více 28

Hierarchie kolekcí (JDK 1.4) 29

Hierarchie kolekcí kolekce neimplementují přímo daný interface implementují třídy AbstractSet, AbstractList, AbstractMap abstraktní třídy poskytují základní funkčnost dané kolekce každá implementace interfacu Set, List, Map by měla rozšiřovat danou Abstract třídu používání kolekcí obvykle přes interface daného druhu kolekce př. List c = new ArrayList() lze potom v aplikaci snadno vyměnit implementaci 30

Iterator<E> kolekce nemusí přímo podporovat přístup k prvkům kolekce mají metodu Iterator<E> iterator() vrací objekt typu Iterator<E>, který umožní projít všechny prvky v kolekci metody E next() vrací další prvek kolekce boolean hasnext() true, pokud jsou další prvky void remove() odstraní poslední vrácený prvek z kolekce 31

Iterator<E> implementace iteratoru a vztah k prvkům kolekce záleží na konkrétní kolekci List c = new...... Iterator e = c.iterator(); while (e.hasnext()) { System.out.println(e.next()); } nový cyklus for na kolekce s iteratorem for (x:c) { System.out.println(x); } 32

Collection<E> boolean add(e o) přidá objekt do kolekce vrací false, pokud se nepodařilo objekt přidat volitelná metoda boolean addall(collection<? extends E> c) přidá všechny prvky vrací true, pokud přidala nějaký prvek volitelná metoda void clear() odstraní všechny objekty volitenlná metoda boolean contains(e o) vrací true, pokud je objekt v kolekci 33

Collection<E> boolean containsall(collection<?> c) vrací true, pokud jsou všechny dané objekty v kolekci boolean isempty() Iterator<E> iterator() boolean remove(e o) vrací true, pokud odstranila objekt z kolekce volitelná metoda boolean removeall(collection<?> c) snaží se odstranit dané objekty z kolekce vrací true, pokud něco odstranila volitelná metoda boolean retainall(collection<?> c) odstraní objekty, které nejsou v c volitelná metoda 34

Collection<E> int size() počet prvků v kolekci Object[] toarray() vrátí pole obsahující všechny prvky kolekce T[] toarray(t[] a) vrátí pole obsahující všechny prvky kolekce vrácené pole je stejného typu jako je pole a List<String> c;... String[] str = c.toarray(new String[1]); 35

List<E> potomek Collection udržuje prvky v nějakém pořadí může obsahovat jeden prvek vícekrát má metodu E get(int index) vrátí prvek na dané pozici v kolekci kromě Iteratoru umožňuje získat i ListIterator ListIterator potomek iteratoru umožňuje procházet prvky i v obráceném pořadí metody previous(), hasprevious() přidávat a nahrazovat prvky metody add(), set() 36

List<E> dvě implementace ArrayList implementován polem rychlý náhodný přístup k položkám pomalé přidávání doprostřed LinkedList rychlý sekvenční přístup pomalý náhodný přístup má navíc metody addfirst() removefirst() addlast() removelast() getfirst() getlast() 37

Set<E> potomek Collection nepřidává žádnou novou metodu každý prvek může obsahovat pouze jednou několik implementací HashSet velmi rychlé vyhledání prvku v kolekci nedodržuje pořadí TreeSet Set implementovaný pomocí červeno-černých stromů implementuje SortedSet prvky jsou setříděny umožňuje vrátit část (podmnožinu) kolekce LinkedHashSet jako HashSet, ale udržuje pořadí prvků (pořadí vkládání) 38

Map<K,V> není potomek Collection kolekce dvojic klíč hodnota ~ asociativní pole každý klíč obsahuje pouze jednou metody V put(k key, V value) asociuje klíč s hodnotou vrací původní hodnotu asociovanou s klíčem (null, pokud klíč v kolekci nebyl) V get(k key) vrací hodnotu asociovanou s klíčem boolean containskey(object key) boolean containsvalue(object val) Set<K> keyset() Collection<V> values() 39

Map<K,V>: implementace několik implementací HashMap implementace pomocí hašovací tabulky konstantní čas přidávání a vyhledávání LinkedHashMap jako HashMap navíc při iterování dodržuje pořadí (pořadí přidávání nebo LRU) o něco pomalejší iterování je rychlejší TreeMap implementace pomocí červeno-černých stromů implementuje interface SortedMap prvky jsou setříděny 40

HashMap<K,V> prvky musí správně implementovat metody hashcode() dva objekty, které jsou stejné (ve smyslu metody equals) musí vracet stejný hashcode různé objekty nemusí nutně vracet různý hashcode používá se hašování s řetězci různé objekty se stejným hashcode budou ve stejném řetězci HashMap má na začátku nějaký počet "políček", do kterých se hašuje = kapacita faktor využití = počet prvků / kapacita při dosažení daného faktoru (implicitně 0.75) se kapacita zvětší a tabulka se "přehašuje" kvůli rychlosti přístupu 41

Třída Collections obdoba třídy Arrays sada statických metod pro práci s kolekcemi metody binarysearch fill sort rotate shuffle reverse... 42

Nemodifikovatelné kolekce metody na Collections unmodifiablecollection unmodifiablelist unmodifiableset unmodifiablemap mají jeden parametr (daný druh kolekce) vrací "read-only verzi" kolekce, která obsahuje stejné položky jako dodaná kolekce 43

Synchronizace většina kolekcí není bezpečná vůči vláknům bezpečné (synchronizované) kolekce se vytvářejí stejně jako nemodifikovatelné metody na na Collections synchronizedcollection synchronizedlist synchronizedset synchronizedmap 44

"Staré" kolekce (Java 1.0, 1.1) Java collection library od verze Javy 1.2 přetvořena (List, Set, Map) původní kolekce neměly by se používat ale občas se použití nelze vyhnout byly zahrnuty do nové verze (tj. také implementují List, Set nebo Map) Vector obdoba ArrayList Enumeration obdoba Iterator Hashtable obdoba HashMap... 45