Proč Java jednotný, univerzální jazyk ( ne však vhodný pro cokoli )

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

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

Algoritmizace a programování

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

Jazyk C# a platforma.net

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

Úvod do programovacích jazyků (Java)

Datové typy strana 29

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

Zápis programu v jazyce C#

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/

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

Proměnné a datové typy

Algoritmizace a programování

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

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

7. Datové typy v Javě

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

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

Teoretické minimum z PJV

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

Jak v Javě příkazy, operace a výrazy. BD6B36PJV 00 Fakulta elektrotechnická České vysoké učení technické

Algoritmizace a programování

Programování v jazyce JavaScript

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

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

Programovací jazyk Pascal

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

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

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

Seminář Java II p.1/43

Opakování programování

Úvod do programování v jazyce Java

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

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

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é

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

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

Programování v jazyce JavaScript

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Výrazy, operace, příkazy

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Racionální čísla, operátory, výrazy, knihovní funkce

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

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

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

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

Data, výrazy, příkazy

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

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

Úvod do programování. Lekce 1

Programování v Javě I. Leden 2008

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

Racionální čísla, operátory, výrazy, knihovní funkce

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

Seminář Java IV p.1/38

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

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

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

Výčtový typ strana 67

Formátové specifikace formátovací řetězce

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

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

KTE / ZPE Informační technologie

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

Objektově orientované programování

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

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

Řídicí struktury. alg3 1

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Java Výjimky Java, zimní semestr

typová konverze typová inference

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Výrazy, operace, příkazy

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

ADT/ADS = abstraktní datové typy / struktury

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

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

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

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

Programovací jazyk C++ Hodina 1

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

Úvod do programování v jazyce Java

Informatika Datové formáty

URČITÝM ZPŮSOBEM PODOBNÉ

Textové soubory. alg9 1

Algoritmy a datové struktury

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

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

Regulární výrazy. Vzory

6 Příkazy řízení toku

Transkript:

Proč Java jednotný, univerzální jazyk ( ne však vhodný pro cokoli ) rozsáhlý, otevřený, rozvíjející se softwarový systém a technologie právně chráněný normotvorný - zavádířadu užitečných norem, uzancí a přístupů expanzivní, od května 1995 vykazuje nevídaný rozmach velmi efektivní při tvorbě software spolehlivý, robustní, přesně specifikovaný, dobře dokumentovaný portabilní, ( Windows / Linux / Solaris...) bezpečný deterministický - úlohy končíči havarují určitelným způsobem silně objektový - obsahuje však i neobjektové primitivní typy síťový internetový a internacionální a návazný na nativní platformu multithreadový - více vláken (úkolů) může běžet (jakoby) současně interpretovaný - s adaptací pro platformu zdarma PJV00 1

Java & IDE Tvůrcem a vlastníkem práv Javy je fa. Sun Microsystems, která vydává JavaSE, JavaEE, JavaME, Netbeans a další produkty po verzích - zdarma stáhnutelné z: http://java.sun.com/ resp. http://www.netbeans.org Verze 1.0.2 - byla první, 1.1 rozšíření o delegační model událostí 1.2. - zahrnuje JFC, 1.3, 1.4 - rozšíření assert, 1.5 - z 2004: rozšíření jazyka for, enum, autoboxing, generics, 1.6 u 7 - z 2006, 1.7 Dolphin v plánu. jre - Java Runtime Environment ( bez vývojových prostředků ) Toto software neobsahuje ani IDE, databáziči aplikační server. S Javou lze pracovat velmi nepohodlněřádkově: j2sdk1.6/bin/javac A.java B.java... kompilace j2sdk1.6/bin/java A běh či velmi pohodlně a bezpečně pomocí vyspělých IDE: Netbeans ( Sun: v. 6.1 ( prosinec 2007 ), 6.5 beta ), JBuilder - Borland, JDeveloper - Oracle, Eclipse IBM, JCreator,... PJV00 2

Podpora Javy Sun Microsystems velmi podporuje Javu tím, že vydává: různé softwarové svazky ke stažení a instalaci lze doporučit: na http://java.sun.com/javase/downloads/index.jsp JDK 6 Update 7 with NetBeans 6.1 ke každé hlavní verzi dokumentaci ve formě html stránek. Ta obsahuje zejména popis API, který je radno připojit nerozzipovaný IDE. Viz: http://java.sun.com/docs/ Nejnovější verze je: jdk-6-doc.zip. řadu tématických tutoriálů ve formě html stránek. Viz http://java.sun.com/docs/books/tutorial/index.html http://java.sun.com/docs/books/jls - Java specification 3rd edition popisuje i verze >= 1.5 Pecinovský, R: Java 5.0, CP Books, Brno, 2005, s. 152, ISBN 80-251-0615-2 PJV00 3

Jména a konvence Jméno tvoří libovolná neprázdná posloupnost písmen Unicodu ( tedy i z národních abeced ), znaků $ _, tj. dolar a podtržítko ( underscore ) a číslic, nezačínajícíčíslicí a jež není klíčovým slovem. Jména je radno volit mnemotechnická, pouze z písmen ASCII a číslic. Dolarem a podtržítkem radno šetřit - neboť se užívají i jinak. Tečka se užívá jako selektor položky. Jmény se označuje: package ( balíček ) - jen malá písmena a číslice tečkou, např: abc def2.gh3 java.util.zip class ( třída ) - a její konstruktory - podstatné jméno začínající velkým písmenem, např: String FileInputStream BankAccount Rectangle2D.Double - pro tzv. vnitřní třídy Výjimky by měly mít sufix Exception, např: MySpecialException PJV00 4

Jména a konvence interface ( rozhraní ) - přídavné jméno začínající velkým písmenem, např: Comparable Serializable Cloneable method ( metoda ) - sloveso začínající malým písmenem, např: reset parsedouble compareto vrací-li typ boolean, hodí se prefix is nebo has isletterordigit hasnextelement variable ( proměnná ) - začínající vždy malým písmenem, např: j counter totaltax currentfrequency final variable ( konstanta ) a návěští: - jen velká písmena, číslice a podtržítka, např: PI MAX_VALUE POINT_123 CYCLE3 PJV00 5

Primitivní typy Typ Formát Obalové (wrap) třídy Celáčísla - dvojkový komplement se znaménkem byte 8-bit -128 127 Byte short 16-bit -32768 32767 Short int 32-bit -2147483648 2147483647 Integer long 64-bit -9223372036854775808 9223372036854775807 Long (9.2E18 = 9.2 trilionů) char 16-bit Unicode '\u0000' to '\uffff' 0... 65535 Character "Reálná" čísla - dle normy IEEE 754 float 32-bit 2-149 (2-2 -23 )*2 127, NaN, pos/neg Infinity Float (1.4E-45... 3.4E38) double 64-bit 2-1074 (2-2 -52 )*2 1023, NaN, pos/neg Infinity Double (4.9E-324... 1.7E308) boolean true false Boolean void pomocný prázdný typ Void PJV00 6

Konverze primitivních typů Primitivní typy jsou vzájemně nekompatibilní, ale jejich hodnoty lze převádět. znaménko: 0/1 tj. +/- byte 8 rozšíření přiřazením zúžení přetypováním short 16 16 char odkrojí horní bity int 32 minimální aritmetika long 64 double exp float 32 exp mantisa mantisa 1 8 23 64 (+1023 ) 1 11 52 (+127 ) PJV00 7

Integrální aritmetika int a long + 7 000..0111 2 000..0010 011...1111 100...0000 MAX_VALUE MIN_VALUE overflow: + - * 1 0-1 000..0001 000..0000 111..1111 MAX+MAX=-2-2 111..1110 MIN+MIN=0 MAX+1=MIN -7 111..1001 MIN=-MIN PJV00 8

Numerické literály Obsahuje-li literál jenčíslice a příp. znaménko ukládá se do typu int. např.: -123, 123, +123 Pro uložení v typu long se sufixem lči L např.: 1230000000000000l nebo 1230000000000000L Obsahuje-li literál tečku nebo exponent, ukládá se do typu double např.: 123., +123.45, -123E2, -123e2, 12300e-2 Pro uložení v typu float se sufixem f či F např.: -123.0f, +123.45E+3F Oktalový literál se vyznačuje prefixem 0 (nula) např.: 077 ( dekadicky 63 ), 02313154564646L Hexadecimální literál se vyznačuje prefixem 0x (nula iks) např.: 0x77 ( dekadicky 119 ), 0x1DADA2CAFE3FEEL PJV00 9

Standardní aritmetiky Integrální aritmetika pro celáčísla int a long s těmito operátory: + - * / % << >> >>> & ^ ~ Pozor: Přetečení se nijak nehlásí! Pouze dělení nulou vyhazuje výjimku java.lang.arithmeticexception. Reálná aritmetika pro float a doublečísla má operátory: + - * / % Nevyhazuje výjimky, avšak zahrnuje tři speciální hodnoty: NaN - Not a Number, tj. nečíslo nebo neurčitý výraz POSITIVE_INFINITY NEGATIVE_INFINITY S těmito hodnotami lze provádět další operace, avšak již nelze získat opravdovéčíslo. Krom x!= NaN je každé porovnání s NaN vždy false. PJV00 10

Použití obalových tříd int imax = Integer.MAX_VALUE; // zjištění max. hodnoty int k = Integer.parseInt( "123" ); // konverze řetěz -číslo String s = Integer.toHexString(k); // konverze do hexa Integer I = new Integer( "123" ); // konverzeřetěz -číslo // obdobně pro byte, short, long double dmax = Double.MAX_VALUE; // zjištění max. hodnoty double x = Double.parseDouble( "-123.45" ); // konverze řetěz -číslo boolean b = Double.isNaN(x); // test na nečíslo // obdobně pro typ float char c = Character.toLowerCase( 'Z' ); // převod znaku boolean b = Character.isLetterOrDigit( '@' ); // je znak písmeno /číslice? int i = Character.digit( ''f", 16 ); // hexadec. hodnota znaku Java 1.5 zavedla zjednodušený zápis tzv. autoboxing, který automaticky zabaluje/rozbaluje primitivní typy do/z příslušných obalových objektů. PJV00 11

K dispozici jsou třídy: Matematické operace Pro počítání v typech int, long, float a double: java.lang.math java.lang.strictmath je identická, strictfp požaduje přesné dodržování normy IEEE 754, byť hardware umožňuje více Pro čísla s libovolnou přesností existují třídy: java.math.biginteger java.math.bigdecimal - pro celáčísla - pro desetinná reálnáčísla Výpočty provádějí metodami - nikoli operátory. PJV00 12

Znakové a řetězové literály Znakový literál představuje právě jeden znak v Unicodu a uvádí se v apostrofech např.: 'A' 'Ř' '@'. Lze ho vyjádřit čtyřmi hexadecimálními číslicemi s prefixem \u např.: '\ucafe'. Leč nelze použít \u000a či \u000a je to přechod na novou řádku. Inu trapné, užijte tedy \n či \r. Řetězový literál je posloupnost znaků Unicodu ( i prázdná ) v uvozovkách např.: "Abc123" "Řeřicha" "@" "". Lze vložit znaky Unicodu, např.: "My \ucafe & Tea". Řetězový literály se ukládají při kompilaci do poolu literálů. Řetěz není primitivní typ je to objekt referenčního typu java.lang.string, který je imutabilní. Na řetězovém literálu lze volat všechny metody třídy String. PJV00 13

Operátory = přiřazení + - sčítání / odčítání aritmetické nebo unární plus / minus ++ -- inkrement / dekrement pre a post násobení / dělení, integrální dělení jsou-li oba operandy integrálních typů % modulo, tj. zbytek po dělení << >> >>> posun vlevo/vpravo aritmetický resp. logický (nuly zleva) jen int a long. Posun o k%32 resp. k%64 pro int resp. long. + zřetězení je-li alespoň jeden operand řetěz instanceof - test referenčního typu (type) - přetypování PJV00 14

Složené přiřazovací operátory = += -= = /= %= <<= >>= >>>= &= ^= = jsou zkratky zápisu, např. pro int resp. String s lze napsat výraz: i += 2 místo i = i + 2 resp. s += XYZ místo s = s + XYZ ; Složené přiřazení udělá automatické přetypování. Kompilátor nepřipustí i = i + 2.9, kdežto i += 2.9 je jako i += 2. Přiřazovací operátory jsou zprava asociativní, tedy výraz a = b = c je ekvivalentní a = ( b = c ) Na levé straně přiřazovacího operátoru musí být proměnná. Výsledkem přiřazení je hodnota proměnné po provedeném přiřazení a proto je následující příklad chybný: double d; int i = d = 10; // Error: possible loss of precision: double, required int PJV00 15

Ternární podmíněný výraz Operátor? : vrací hodnotu jednoho nebo druhého výrazu podle hodnoty boolského výrazu: int abs(int i) { return i >= 0? i : - i; } Podmíněný operátor je zprava asociativní, takže a? b : c? d : e? f : g znamená toto: a? b : (c? d : (e? f : g)) První operand musí být typu boolean. Druhý a třetí operand musejí být kompatibilního typu. Výsledek zkonvertován na "obecnější" z obou typů: double d; boolean zaokrouhlit; return zaokrouhlit? Math.rint(d) : d; // vraci hodnotu typu double PJV00 16

Komparační operátory Výsledkem porovnání je logická hodnota ( true, false ) Porovnání primitivních typů ==!= rovno, nerovno > >= větší než, větší nebo rovno < <= menší než, menší nebo rovno Porovnání referenčních typů ==!= porovnávají se pouze reference nikoli obsah objektů Porovnatelné objekty se porovnávají zpravidla metodami boolean equals( Object o ) int compareto( Object o ) int compare( Object o1, Object o ) PJV00 17

Bitové a logické operátory Bitové a logické operátory sestupně podle priority:! unární negace pro boolean ~ bitový komplement celého čísla Oba operandy musejí být buď celočíselné anebo boolean. & AND ^ XOR OR Operátory pro zkrácené vyhodnocení typů boolean: && AND OR Je-li výsledek dán prvním operandem, zbytek výrazu se nevyhodnocuje. Pozor na vedlejší efekty, je-li dalším operandem např. volání metody. Pozor na nizší priority && a : false && true true dá false false && true true dá true ( false && true ) true dá true PJV00 18

Základní konstrukty [ public protected private ] [ static ] [ transient ] [ volatile ] // pro atributy [ final ] typ [ [ ] ] id [ = výraz ], id [ = výraz ],... ; // lokální var. s inicializací { příkaz; blok; definice... ; příkaz;... ; } // blok if ( podmínka ) příkaz1 [ else příkaz2 ] podmínka? výraz1 : výraz2 [ návěští :] while ( podmínka ) příkaz [ návěští :] do příkaz while ( podmínka ) ; [ návěští :] for ( [ inicializace ] ; [ podmínka ] ; [ modifikace ] ) příkaz [ návěští :] for ( [ final ] typ id : ( iterable pole ) ) příkaz continue [ návěští ]; // jen v cyklu typicky kolekce break [ návěští ]; // jen v: cyklu / case / default return [ výraz ]; - metasymboly PJV00 19

Základní konstrukty - switch ( index ) { // index: char, byte, shortči int, enum, // Character, Byte, Short, Integer - ne null [ case k1 : [ příkazy ] // k musí být různé a int literal anebo case k2 : [ příkazy ] // int - kompatibilní final výraz čili i case k3 : [ příkazy ] // enum konstanta. Nikoli obalená hodnota.... ] [ default : [ příkazy ] ] // nezávisle volitelné a kdekoli v pořadí [ case k4 : [ příkazy ]... ] } // typ indexu indukuje typ konstant k - try { [ příkazy ] } [ catch ( typvyjímky1 parm ) { [ příkazy ] } catch ( typvyjímky2 parm ) { [ příkazy ] }... ] [ finally { [ příkazy ] } ] // nelze vynechat catch i finally - throw Throwable // vyhoditelný objekt typu Throwable PJV00 20

Základní konstrukty - Class [ <T> ] = T.class // popisný objekt typu - synchronized ( výraz ) blok // výraz musí referovat objekt - assert podmínka [ : výraz ] ; // kontrola podmínky od v. 1.4 - enum jméno { // výčtový typ od v. 1.5 : ABC [ ( atributy ) ] [ { metody } ], DEF [ ( atributy ) ] [ { metody } ], GHI [ ( atributy ) ] [ { metody } ] ;... // další složky } PJV00 21

Syntax metod ( bez generiky ) [ public protected private ] [ static ] [ final ] [ synchronized ] [ native strictfp ] // pro konkrétní abstract [ public protected ] // pro abstraktní ( returntyp void ) jmenometody ( [ [ final ] Typ parm,... [ [ final ] Typ... varargs ] ] ) [ throws Ex1, Ex2,... ] // vyznačení vyjímek {... } // tělo pro konkrétní metody // pro returntyp void může být tělo i prázdné ; // středník pro abstraktní a nativní metody Příklad volání: jmenometody( x, y, z1, z2, z3 ); possible autoboxing Vrácená hodnota musí být kompatibilní s návratovým typem metody. PJV00 22

Klíčová slova a reservované literály literály: logické: false true referenční: null typy: primitivní(8): boolean byte short int long char float double řídící příkazy: if else for do while break continue switch case default return pro výjimky a chyby: throw try catch finally assert operátory: instanceof new this super strukturální: package import import static class enum interface extends implements modifikátory: přístupu: public protected friend se nepíše private atributů, metod a tříd: final static atributů: transient volatile metod: synchronized native void throws metod, tříd, interfejsů : abstract strictfp nefunkční: const goto Pozn: toto rozdělení neodpovídá úplně přesně specifikaci Javy. PJV00 23