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

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

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

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

Úvod do programovacích jazyků (Java)

Úvod do programování v jazyce Java

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

Algoritmizace a programování

Úvod do programovacích jazyků (Java)

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

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

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/

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

5 Přehled operátorů, příkazy, přetypování

Algoritmizace a programování

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

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

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

Programování v Javě I. Leden 2008

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

7. Datové typy v Javě

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

Úvod do programování v jazyce Java

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

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

Jazyk C# a platforma.net

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

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

Zápis programu v jazyce C#

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

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

Objektově orientované programování

NPRG031 Programování II --- 2/2 Z, Zk

Teoretické minimum z PJV

První kapitola úvod do problematiky

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

Řídicí struktury. alg3 1

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

Programování v jazyce JavaScript

KTE / ZPE Informační technologie

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

Základy programovaní 3 (Java)

Algoritmizace a programování

Výrazy, operace, příkazy

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

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Úvod do programování - Java

Abstraktní datové typy: zásobník

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.

Data, výrazy, příkazy

KTE / ZPE Informační technologie

Datové typy strana 29

Generické programování

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Výrazy, operace, příkazy

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

Opakování programování

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Příkazy a řídicí struktury v Javě. Tomáš Pitner, upravil Marek Šabo

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

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Programovací jazyk Java

ADT/ADS = abstraktní datové typy / struktury

6. Příkazy a řídící struktury v Javě

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

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO 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é

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

Výčtový typ strana 67

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

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

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

NPRG031 Programování II 1 / :47:55

JAVA. Krátke poznámky:

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

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Textové soubory. alg9 1

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

Generování vnitřní reprezentace programu

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

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

Operátory. Základy programování 1 Tomáš Kühr

přetížení operátorů (o)

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

Java Enum Java, zimní semestr ,2017 1

Ukazka knihy z internetoveho knihkupectvi

Algoritmizace a programování

Algoritmizace a programování. Terminálový vstup a výstup

Studijní zdroje. Studijní zdroje. Studijní zdroje. Podmínky ukončení předmětu. Vlastnosti a použití jazyka Java. Semestrální projekt

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

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

URČITÝM ZPŮSOBEM PODOBNÉ

Proměnné a datové typy

JAVA Moduly Java, letní semestr 2018

Transkript:

JAVA Úvod

Úvodní informace Petr Hnětynka hnetynka@d3s.mff.cuni.cz http://d3s.mff.cuni.cz/~hnetynka/java/ 2/2 Zk/Z zkouška písemný test zápočet zápočtový test u počítače zápočtový program "rozumná" velikost téma do 11. 1. 2019 emailem cvičícímu domácí úkoly 225 bodů (z 450) docházka víc než 3 absence 315 bodů 2

Úvodní informace Virtuální cvičení pro repetenty a ty co nechtějí chodit na cvičení Seznam "zakázaných" témat na zápočťák piškvorky lodě tetris započťáky/příklady na algoritmy, grafiku téma vždy dohodnout s cvičícím cvičení ve St 12:20 je v angličtině 3

Literatura, odkazy Vše o Javě http://www.oracle.com/technetwork/java/ Java tutorial https://docs.oracle.com/javase/tutorial/index.html Java Language Specification http://docs.oracle.com/javase/specs/ 4

Java objektově orientovaný vše (téměř) je objekt interpretovaný zdrojový kód (.java) překlad do tzv. bytecode bytecode (.class) interpretován v tzv. virtual machine just-in-time compilation překlad bytecode do nativního kódu před/během vykonávání programu nezávislý na architektuře programy běží ve virtual machine od Java 9 ahead-of-time compilation 5

Historie 1.0 (1996) 1.1 (1997) Vnitřní třídy Java 2 platform (2000) 1.2, 1.3 změny pouze v knihovnách 1.4 (2002) Assert 5.0 (2004) změny v jazyce generické typy, anotace,... 6 (2006) změny v knihovnách 7 (2011) změny (malé) v jazyce 8 (2014) velké změny v jazyce lambda typy,... 9 (2017) změny v jazyce moduly 10 (2018) změny v jazyce odvození typu lok. prom (var) 11 (2018) změny v knihovnách (redukce std knihovny) long-term support 6

Java platform JSE standard edition JEE enterprise edition JME micro edition JEE JSE JME Java Card API 7

Získání Javy http://www.oracle.com/technetwork/java/javase/ /downloads/index.html JDK překladač, virtual machine, debugger,... Windows, Linux, Solaris JRE bez nástrojů pro vývoj (tj. bez překladače,...) Windows, Linux, Solaris dokumentace IDE Netbeans http://www.netbeans.org/ Eclipse http://www.eclipse.org/ IntelliJ IDEA https://www.jetbrains.com/idea/ Ant obdoba programu make http://ant.apache.org/ Maven like Ant on Steroids http://mave.apache.org/ 8

Přibližný průběh přednášky Jazyk třídy, primitivní typy, programové konstrukce,... Základní nástroje Základní třídy vlákna, kolekce, vstup/výstup... 9

Popularita TIOBE index https://www.tiobe.com/tiobe-index/

JAVA Jazyk 11

Komentáře Komentář /* komentar */ // komentar do konce radku "dokumentační" komentáře (javadoc) /** komentar */ 12

Objekty Vše je objekt Objekt instance třídy (class) nebo pole nová instance pomocí operátoru new Vše je definováno ve třídách tj. žádné funkce mimo třídy (jako jsou třeba v C++) Manipulace s objekty reference Neexistují ukazatele String s; String s = new String("ahoj"); 13

Reference StringBuilder s1 = new StringBuilder("ahoj"); StringBuilder s2 = s1; s1.append(" svete"); System.out.println(s2); // vytiskne "ahoj svete" 14

Primitivní typy Výjimka ne zcela vše je objekt proměnné nejsou reference pevná velikost, pouze se znaménkem int a = 10; Typ Velikost Min Max Wrapper boolean - - - Boolean char 16-bit Unicode 0 Unicode 2 16-1 Character byte 8-bit -128 +127 Byte short 16-bit -2 15 +2 15-1 Short int 32-bit -2 31 +2 31-1 Integer long 64-bit -2 63 +2 63-1 Long float 32-bit IEEE754 IEEE754 Float double 64-bit IEEE754 IEEE754 Double 15

Primitivní typy proměnné int i1 = 42; int i2 = i1; i1 += 1; System.out.println(i2); // prints out 42 16

Primitivní typy Vnitřní reprezentace celočíselných typů signed two's-complement integers př. typ byte 0 ~ 00000000 127 ~ 01111111-1 ~ 11111111-128 ~ 10000000 Typy s pohyblivou řádovou čárkou umožňují reprezentovat hodnotu NaN (not-a-number) jakékoliv porovnání dvou NaN je vždy false 17

Autoboxing, autounboxing od Java 5 automatická konverze mezi primitivními typy a wrapper typy int a = 5; Integer b = a; int c = b; // autoboxing // autounboxing 18

Pole kontrola mezí definice polí int[] iarray; int i2array[]; vícerozměrná pole int[][] iiarray; vytvoření pole pouze dynamicky iarray = new int [10]; délka pole iarray.length 19

Rušení objektů garbage collector 20

Definice třídy class MyClass { /* telo tridy */ } tělo třídy atributy metody vnitřní třídy 21

Třída: Atributy class MyClass { int i; float f; boolean b; String s; }... MyClass m = new MyClass(); m.i = 5; m.f = 3.7; m.b = true; m.s = new String(); 22

Třída: Atributy Implicitní hodnoty boolean false ostatní primitivní typy 0 reference null Pozor lokální proměnné nejsou inicializovány chyba při překladu 23

Třída: Metody navratovytyp jmenometody ( parametry ){ telo metody; } class MyClass { int pow2(int a) { return a*a; } } void nothing() {} 24

Třída: Metody volání metody objekt.jmenometody(parametry) MyClass m = new MyClass(); int a = m.pow2(5); Předávání parametrů hodnotou class Foo { void plusone(int a) { a = a + 1; } void use() { int a = 5; plusone(a); System.out.println(a); // 5 } } class Bar { void appenda(stringbuilder sb) { sb.append("a"); } void use() { StringBuilder sb = new StringBuilder("A"); appenda(sb); System.out.println(sb); // AA } } 25

enum od Java 5 enum Planet { MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE, PLUTO };... public Planet pl = MARS; 26

Balíky (packages) oddělené prostory viditelnosti jmen tříd balík (package) množina tříd logicky patřících k sobě obdoba v C#, C++ namespace každá třída patří do právě jednoho balíku explicitně uvedený implicitní neuvedený příslušnost k balíku package jmenobaliku; 27

Balíky hierarchická jména "obrácená" internetová adresa tvůrce cz.cuni.mff.java.example01 org.w3c.dom plný název třídy jmenobaliku.jmenotridy třídy z vlastního balíku "krátké" jméno třídy z jiného balíku plné jméno zjednodušení používání import import jmenobaliku.jmenotridy; import jmenobaliku.*; balík java.lang vždy naimportován 28

Klíčové slovo static static atributy a metody nejsou svázány s konkrétní instancí (objektem) někdy "class data", "class methods" class MyClass { static int i; } class MyClass2 { static void incr() { MyClass.i++; } } 29

static import od Java 5 import statických položek používaní bez jména třídy import static java.lang.math.pi; import static java.lang.math.tan;... tan(pi/4); 30

Viditelnost lokálních prom. { } int x=10; // dosazitelne je x { int y=11; // dosazitelne je x i y } // dosazitelne je pouze x { int x = 1; { int x = 2; // chyba pri prekladu }} 31

Třídy a soubory každá veřejná (public) třída jeden soubor stejné jméno jako třída +.java balíky ~ adresáře package jmenobaliku; import...; import...; public class JmenoTridy {... } neveřejné třídy (bez public) viditelné pouze ze svého balíku 32

Program package cz.cuni.mff.java.example01; public class Hello { public static void main(string[] args){ System.out.println("Hello world!"); } } uložit do adresař.../cz/cuni/mff/java/example01 soubor Hello.java 33

Program překlad javac Hello.java vznikne Hello.class spuštění java cz.cuni.mff.java.example01.hello nastavení CLASSPATH seznam adresářů, kde se hledají třídy proměnná prostředí CLASSPATH parametry -cp, -classpath např. /home/petr/java/cz/cuni/mff/java/example01/hello.class java -cp /home/petr/java cz.cuni.mff.java.example01.hello 34

Spouštění zdrojáků od Java 11 java HelloWorld.java 35

Moduly od Java 9 modul pojmenovaná kolekce tříd (a dalších elementů) (sada balíčků) deklaruje na kterých modulech závisí které balíčky exportuje (tj. které balíčky jsou viditelné z jiných modulů) mění se viditelnost (dosažitelnost) tříd module-info.java module com.foo.bar { requires com.foo.baz; exports com.foo.bar.alpha; exports com.foo.bar.beta; } 36

Moduly od Java 9 MODULEPATH obdoba CLASSPATH moduly lze ignorovat bez určeného modulu => třída je v nepojmenovaném modulu závisí na všech modulech exportuje všechny balíčky zejména kvůli zpětné kompatibilitě 37

Operátory: přiřazení Přiřazení int i; int[] array; i = 4; array[4] = 5; 4 = i; // spatne Primitivní typy kopírování hodnoty Objekty kopírování reference na objekt ne kopírování objektu! 38

Operátory: aritmetika unární + - binární + - * / % "zkratky" pro přiřazení += -= *= /= %= inkrementace a dekrementace prefix i postfix i-- i++ --i ++i přetečení a podtečení jsou tichá negeneruje se žádná výjimka 39

Operátory: porovnání generují boolean výsledek ==!= lze porovnat všechny typy < > <= >= pouze primitivní mimo boolean test co vypíše? Integer i1 = new Integer(1); Integer i2 = new Integer(1); if (i1 == i2) System.out.println("ANO"); else System.out.println("NE"); tyto konstruktory jsou deprecated 40

Operátory: logické generují boolean výsledek lze použít jen na boolean &&! zkrácené vyhodnocování 41

Operátory: bitové lze použít na short, int, long, char a boolean & ^ ~ zkratky &= = ^= není zkrácené vyhodnocování typ boolean považován za 1-bit hodnotu nelze na něj použít ~ 42

Operátory: posunutí lze použít na short, int, long, char posun vlevo << doplňuje nuly do dolních bitů posun vpravo >> pokud je číslo kladné, doplňuje nuly pokud je číslo záporné, doplňuje jedničky posun vpravo >>> vždy doplňuje nuly char, byte, short vždy nejdřív převedeny na int výsledek je int long výsledek je long 43

Operátory: různé Ternární operátor int a; a = a > 0? a : 0; Operátor čárka pouze v for cyklu Operátor + na String spojuje Stringy pokud je ve výrazu aspoň jeden String a jen operátory +, tak se vše ostatní ve výrazu převede na String a spojí Přetypování int i = 1; long x = (long) i; Není sizeof operátor není potřeba 44

Operátory: priorita Typ operátoru Operátory unarní + - ++ -- aritmetika a posun * / % + - << >> porovnávání > < >= <= ==!= logické a bitové && & ^ ternární?: přiřazení = (zkratky typu +=) Při stejné prioritě se výrazy vyhodnocují zleva 45

if - else if (boolean-vyraz) prikaz else prikaz else větev lze vynechat příkaz jeden příkaz složený příkaz {...} 46

while, do - while while (boolean-vyraz) prikaz do prikaz while (boolean-vyraz); provádějí se, dokud podmínka platí 47

for for (inicializace; boolean-vyraz; krok) prikaz v inicializace a v krok lze použít operátor čárka for (int i=1,j=1; i<5; i++, j=i*10) {... } 48

for (od Java 5) int[] arr = new int [10]; for (int i:arr) {... } pole třídy s iterátorem 49

break, continue break ukončí provádění cyklu continue ukončí aktuální provádění cyklu a začne novou smyčku návěští (labels) význam pouze před cyklem label: vnejsi-cyklus { vnitrni-cyklus { break; continue; continue label; break label; }} 50

goto goto je rezervované slovo není použito! http://xkcd.com/292/ 51

switch int a;... switch (a) { case 1: case 2: System.out.println("1, 2"); break; case 3: System.out.println("3"); break; default: System.out.println("3.."); } od Java 7 lze v switch použít i typ String 52