JAVA. Zdrojové soubory

Podobné dokumenty
JAVA V Assertions Java, zimní semestr

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

Java. Generické typy

Java Výjimky Java, zimní semestr

Java. Platformy apod.

Java. Platformy apod.

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

Algoritmizace a programování

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

Algoritmizace a programování

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

Úvod do programovacích jazyků (Java)

Návrhové vzory Tvorba objektů

Úvod do programovacích jazyků (Java)

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

Generické programování

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/

typová konverze typová inference

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

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

Programování v Javě I. Leden 2008

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

Generické programování v jazyce Java Generics programming in Java

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

Seminář Java IV p.1/38

Typický prvek kolekce pro české řazení

Úvod do programování v jazyce Java

Zápis programu v jazyce C#

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

KTE / ZPE Informační technologie

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

Datové typy strana 29

Java Enum Java, zimní semestr ,2017 1

Seminář Java II p.1/43

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

Algoritmizace a programování

7. Dynamické datové struktury

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

Teoretické minimum z PJV

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

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

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

Java Řetězce Java, zimní semestr

7. Datové typy v Javě

Jazyk C# a platforma.net

Programování v jazyce JavaScript

1. Programování proti rozhraní

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

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

20. Projekt Domácí mediotéka

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

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

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

Abstraktní datové typy: zásobník

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

JAVA Unit testing Java, zimní semestr

Principy objektově orientovaného programování

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

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

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

Programovací jazyk Pascal

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

Proměnné a datové typy

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

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.

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

Úvod do programování v jazyce Java

Úvod do programování - Java

PREPROCESOR POKRAČOVÁNÍ

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

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

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

RMI Remote Method Invocation

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

Novinky, s nimiž přichází Java 5.0

Regulární výrazy. Vzory

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

Konstruktory překladačů

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

Dědičnost (inheritance)

JAVA. Krátke poznámky:

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í. Terminálový vstup a výstup

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

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

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

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.

Jazyk C# (seminář 6)

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

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

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

Textové soubory. alg9 1

2. Základy jazyka. Proměnné. Základy jazyka

Programovací jazyk Java

Transkript:

JAVA Zdrojové soubory 1

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 2

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 3

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 4

Encoding parametr pro javac -encoding kódování zdrojových souborů bez parametru defaultní kódování v IDE typicky vlastnost projektu 5

Literály integer literály desítkové... 0 1 23-3 šestnáctkové... 0xa 0xA 0x10 osmičkové... 03 010 0777 používejte binární... 0b101 0B1001 velké L 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 6

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 7

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 8

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

Identifikátory identifikátor jméno třídy, metody, atributu,... povolené znaky číslice a písmena nesmí začínat číslicí ze speciálních znaků pouze _ a $ samotné podtržítko není povoleno od Java 9 10

Identifikátory pojmenovávání balíčky všechna písmena malá cz.cuni.mff.java třídy, interfacy ListArray, InputStreamReader složeniny slov mixed case první písmeno velké metody, atributy getsize, setcolor složeniny slov mixed case první písmeno malé konstanty MAX_SIZE vše velké skládání přes podtržítko 11

JAVA Assertions 12

Assertion od Java 1.4 příkaz obsahující výraz typu boolean programátor předpokládá, že výraz bude vždy splněn (true) pokud je výraz vyhodnocen na false -> chyba používá se pro ladění assertions lze zapnout nebo vypnout pro celý program nebo jen pro některé třídy implicitně vypnuty nesmí mít žádné vedlejší efekty 13

Použití assert Vyraz1; assert Vyraz1 : Vyraz2; vypnuté assertions příkaz nedělá nic výrazy se nevyhodnocují! zapnuté assetions Výraz1 je true nic se neděje, program pokračuje normálně Výraz1 je false Výraz2 je přítomen throw new AssertionError(Vyraz2) Výraz2 není přítomen throw new AssertionError() 14

Zapnutí a vypnutí parametry pro virtual machine zapnutí -ea[:packagename... :ClassName] -enableassertions[:packagename... :ClassName] vypnutí -da[:packagename... :ClassName] -disableassertions[:packagename... :ClassName] bez třídy nebo balíku pro všechny třídy assertions v "systémových" třídách -esa -enablesystemasserions -dsa -disablesystemasserions zda se mají assetions provádět, se určí pouze jednou při inicializaci třídy (předtím, než se na ní cokoliv provede) 15

java.lang.assertionerror dědí od java.lang.error konstruktory AssertionError() AssertionError(boolean b) AssertionError(char c) AssertionError(double d) AssertionError(float f) AssertionError(int i) AssertionError(long l) AssertionError(Object o) 16

Příklady použití invarianty if (i%3 == 0) {... else if (i%3 == 1) {... else { assert i%3 == 2;... 17

Příklady použití "nedosažitelná místa" v programu class Directions { public static final int RIGHT = 1; public static final int LEFT = 2;... switch(direction) { case Directions.LEFT:... case Directions.RIGHT:... default: assert false; 18

Příklady použití preconditions testování parametrů private metod private void setinterval(int i) { assert i>0 && i<=max_interval;... nevhodné na testování parametrů public metod public void setinterval(int i) { if (i<=0 && i>max_interval) throw new IllegalArgumentException();... 19

Příklady použití postconditions public String foo() { String ret;... assert ret!= null; return ret; 20

Java Generické typy 21

Úvod od Java 5 podobné generickým typům v C# parametry pro typy cíl přehlednější kód typová bezpečnost 22

Motivační příklad bez gen. typů (<=Java 1.4) List myintlist = new LinkedList(); myintlist.add(new Integer(0)); Integer x = (Integer) myintlist.iterator().next(); >= Java 5 List<Integer> myintlist = new LinkedList<Integer>(); myintlist.add(new Integer(0)); Integer x = myintlist.iterator().next(); bez explicitního přetypování kontrola typů během překladu 23

Definice generických typů public interface List<E> { void add(e x); Iterator<E> iterator(); E get(int i); public interface Iterator<E> { E next(); boolean hasnext(); List<Integer> si lze představit jako public interface IntegerList { void add(integer x); Iterator<Integer> iterator(); ve skutečnosti ale takový kód nikde neexistuje 24

Překlad gen. typů zjednodušeně při překladu se vymažou všechny informace o generických typech erasure List<Integer> myintlist = new LinkedList<Integer>(); myintlist.add(new Integer(0)); Integer x = myintlist.iterator().next(); při běhu se kód chová jako List myintlist = new LinkedList(); myintlist.add(new Integer(0)); Integer x = (Integer) myintlist.iterator().next(); 25

Překlad gen. typů stále stejná třída, i když je parametrizována čímkoliv LinkedList<String> LinkedList<Integer> LinkedList<Foo> pouze jeden byte-code nelze parametrizovat primitivními typy List<int> 26

Vytváření objektů ArrayList<Integer> list = new ArrayList<Integer>(); ArrayList<ArrayList<Integer>> list2 = new ArrayList<ArrayList<Integer>>(); HashMap<String, ArrayList<ArrayList<Integer>>> h = new HashMap<String, ArrayList<ArrayList<Integer>>>(); od Java 7 (operátor diamant ) ArrayList<Integer> list = new ArrayList<>(); ArrayList<ArrayList<Integer>> list2 = new ArrayList<>(); HashMap<String, ArrayList<ArrayList<Integer>>> h = new HashMap<>(); 27

Vztahy mezi typy nejsou povoleny žádné změny v typových parametrech List<String> ls = new ArrayList<String>(); List<Object> lo = ls; lo.add(new Object()); String s = ls.get(0); chyba přiřazení Object do String druhý řadek způsobí chybu při překladu 28

Vztahy mezi typy příklad - tisk všech prvků kolekci <= Java 1.4 void printcollection(collection c) { Iterator i = c.iterator(); for (k = 0; k < c.size(); k++) { System.out.println(i.next()); naivní pokus v Java 5 void printcollection(collection<object> c) { for (Object e : c) { System.out.println(e); nefunguje (viz předchozí příklad) 29

Vztahy mezi typy Collection<Object> není nadtyp všech kolekcí správně void printcollection(collection<?> c) { for (Object e : c) { System.out.println(e); Collection<?> je nadtyp všech kolekcí kolekce neznámého typu (collection of unknown) lze přiřadit kolekci jakéhokoliv typu pozor - do Collection<?> nelze přidávat Collection<?> c = new ArrayList<String>(); c.add(new Object()); <= chyba při překladu volat get() lze - výsledek do typu Object 30

Vztahy mezi typy? - wildcard omezený? (bounded wildcard) public abstract class Shape { public abstract void draw(canvas c); public class Circle extends Shape {... public class Canvas { public void drawall(list<shape> shapes) { for (Shape s:shapes) { s.draw(this) umožní vykreslit pouze seznamy přesně typu List<Shape>, ale už ne List<Circle> 31

Vztahy mezi typy řešení - omezený? public void drawall(list<? extends Shape> shapes){ for (Shape s:shapes) { s.draw(this) do tohoto Listu stále nelze přidávat shapes.add(0, new Rectangle()); chyba při překladu 32

Generické metody static void fromarraytocollection(object[] a, Collection<?> c) { for (Object o : a) { c.add(o); chyba při překladu static <T> void fromarraytocollection(t[] a, Collection<T> c) { for (T o : a) { c.add(o); OK 33

Generické metody použití překladač sám určí typy Object[] oa = new Object[100]; Collection<Object> co = new ArrayList<Object>(); fromarraytocollection(oa, co); // T Object String[] sa = new String[100]; Collection<String> cs = new ArrayList<String>(); fromarraytocollection(sa, cs); // T String fromarraytocollection(sa, co); // T Object i u metod lze použít omezený typ class Collections { public static <T> void copy(list<t> dest, List<? extends T> src){... 34

Pole a generické typy pole gen. typů lze deklarovat nelze naalokovat List<String>[] lsa = new List<String>[10]; nelze! List<?>[] lsa = new List<?>[10]; OK + varování proč - pole lze přetypovat na Object List<String>[] lsa = new List<String>[10]; Object[] oa = (Object[]) lsa; List<Integer> li = new ArrayList<Integer>(); li.add(new Integer(3)); oa[1] = li; String s = lsa[1].get(0); ClassCastException 35

Starý a nový kód starý kód bez generických typů public class Foo { public void add(list lst) {... public List get() {... nový kód používající starý List<String> lst1 = new ArrayList<String>(); Foo o = new Foo(); o.add(lst1); OK - List odpovídá List<?> List<String> lst2 = o.get(); varování překladače 36

Starý a nový kód nový kód s generickými typy public class Foo { public void add(list<string> lst) {... public List<String> get() {... starý kód používající nový List lst1 = new ArrayList(); Foo o = new Foo(); o.add(lst1); varování překladače List lst2 = o.get(); OK - List odpovídá List<?> 37

Další vztahy mezi typy class Collections { public static <T> void copy(list<t> dest, List<? extends T> src){... ve skutečnosti class Collections { public static <T> void copy(list<? super T> dest, List<? extends T> src){... 38

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