načítání...
nákupní košík
Košík

je prázdný
a
b

E-kniha: Java 7 - Herbert Schildt

Java 7
-43%
sleva

Elektronická kniha: Java 7
Autor:

Zaujala vás Java díky své univerzálnosti, ale máte z programování strach? Hledáte komplexní zdroj informací, jak zvládnout tento populární programovací jazyk? Výukový kurz vás provede Javou od úplných ... (celý popis)


hodnoceni - 0%hodnoceni - 0%hodnoceni - 0%hodnoceni - 0%hodnoceni - 0%   celkové hodnocení
0 hodnocení + 0 recenzí

Specifikace
Nakladatelství: Computer press
Dostupné formáty
ke stažení:
PDF
Upozornění: většina e-knih je zabezpečena proti tisku
Médium: e-book
Počet stran: 664
Rozměr: 23 cm
Vydání: 1. vyd.
Název originálu: Java
Spolupracovali: překlad Lukáš Krejčí
Jazyk: česky
ADOBE DRM: bez
ISBN: 9788025139974
Ukázka: » zobrazit ukázku
Popis

Zaujala vás Java díky své univerzálnosti, ale máte z programování strach? Hledáte komplexní zdroj informací, jak zvládnout tento populární programovací jazyk? Výukový kurz vás provede Javou od úplných začátků, vše si důkladně vyzkoušíte na příkladech a nově nabyté znalosti si bude moct ověřit na cvičeních. V patnácti kapitolách se postupně seznámíte se všemi prostředky, které Java programátorům nabízí. Projdete základy jazyka, naučíte se pracovat s datovými typy a operátory, větvit program pomocí podmínek a cyklů. Po absolvování základů objektově orientovaného programování plně porozumíte termínům, jako je třída, metoda, dědičnost nebo rozhraní. S rostoucími znalostmi přijdou i pokročilá témata v podobě vícevláknových aplikací či apletů. V závěru knihy si vyzkoušíte i tvorbu grafi ckého uživatelského prostředí s knihovnou Swing. Publikace vás mimo jiné naučí: Používat základní programové konstrukce Javy Ošetřit vstup a výstup programu Pracovat s prvky objektově orientovaného programování Paralelně zpracovat data pomocí vláken Přenést svou aplikaci na Internet prostřednictvím apletů Vytvořit grafi cké uživatelské rozhraní ke své aplikaci O autorovi: Herbert Schildt patří mezi uznávané autority programovacích jazyků Java, C, C++ a C#. Je autorem řady knih o programování, kterých se prodaly miliony výtisků v mnoha jazycích. Byl členem komise ANSI, která standardizovala jazyk C v roce 1989. Jeho web najdete na adrese www.HerbSchildt.com. (výukový kurz)

Předmětná hesla
Související tituly dle názvu:
Java 8 Java 8
Schildt Herbert
Cena: 587 Kč
Java 7 Java 7
Schildt Herbert
Cena: 502 Kč
Mistrovství - Java Mistrovství - Java
Schildt Herbert
Cena: 1267 Kč
Java a XML Java a XML
Herout Pavel
Cena: 234 Kč
Učebnice jazyka Java 5.v. Učebnice jazyka Java 5.v.
Herout Pavel
Cena: 260 Kč
Recenze a komentáře k titulu
Zatím žádné recenze.


Ukázka / obsah
Přepis ukázky

Herbert Schildt

Java 7

Výukový kurz

Computer Press

Brno

2012


Java 7

Výukový kurz

Herbert Schildt

Překlad: Lukáš Krejčí

Obálka: Martin Sodomka

Odpovědný redaktor: Martin Herodek

Technický redaktor: Jiří Matoušek

Autorizovaný překlad z originálního anglického vydání Java, A Beginner’s Guide, 5/e.

Originální copyright: © The McGraw-Hill Companies, Inc. All rights reserved.

Překlad: © Albatros Media a. s., 2012.

Authorized translation from English language edition Java, A Beginner ́s Guide, 5/e.

Original copyright: © The McGraw-Hill Companies, Inc. All rights reserved.

Translation: © Albatros Media a. s., 2012.

Objednávky knih:

http://knihy.cpress.cz

www.albatrosmedia.cz

eshop@albatrosmedia.cz

bezplatná linka 800 555 513

ISBN 978-80-251-3748-2

Vydalo nakladatelství Computer Press v Brně roku 2012 ve společnosti Albatros Media a. s. se sídlem

Na Pankráci 30, Praha 4. Číslo publikace 16 249.

© Albatros Media a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována

a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného

souhlasu vydavatele.

1. vydání


3

Obsah

ÚVOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

Vývoj Javy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Uspořádání knihy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Klíčové dovednosti a pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18

Cvičení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18

Otázka pro experta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18

Vyzkoušejte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Zkušenost s programováním není nutná . . . . . . . . . . . . . . . . . . . . . 19 Požadovaný software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Zvláštní poděkování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Zpětná vazba od čtenářů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Zdrojové kódy ke knize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

KAPITOLA 1

ZÁKLADY JAVY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21

Počátky Javy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Java a jazyky C a C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23

Java a jazyk C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24 Přínos Javy pro Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Aplety Javy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25

Bezpečnost. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25

Přenositelnost. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 Kouzlo Javy: bajtový kód . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Základní hesla Javy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Objektově orientované programování . . . . . . . . . . . . . . . . . . . . . . . 28


4

Obsah

Zapouzdření . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30

Polymorfizmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30

Dědičnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Získání sady Java Development Kit . . . . . . . . . . . . . . . . . . . . . . . . . 31 První jednoduchý program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Zapsání programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33

Zkompilování programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33

První jednoduchý program řádek po řádku . . . . . . . . . . . . . . . . . .34 Řešení syntaktických chyb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Druhý jednoduchý program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Další datový typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Dva řídicí příkazy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Příkaz if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43

Cyklus for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 Tvorba bloků kódu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Středníky a uspořádání příkazů . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Způsoby odsazování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Klíčová slova jazyka Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Identifikátory jazyka Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Knihovny tříd Javy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

KAPITOLA 2

SEZNÁMENÍ S DATOVÝMI TYPY A OPERÁTORY. . . . . . . . . . . . . .53

Proč jsou datové typy důležité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Primitivní typy jazyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Celá čísla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55

Typy s plovoucí desetinnou čárkou . . . . . . . . . . . . . . . . . . . . . . . .56

Znaky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 Pravdivostní typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Literály . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Šestnáctkové, osmičkové a binární literály. . . . . . . . . . . . . . . . . . .61

Znakové řídicí sekvence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62

Řetězcové literály . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62 Bližší pohled na proměnné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Inicializace proměnné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64

Dynamická inicializace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 Obor a doba platnosti proměnných . . . . . . . . . . . . . . . . . . . . . . . . . 65 Operátory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Aritmetické operátory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68


5

Inkrementace a dekrementace . . . . . . . . . . . . . . . . . . . . . . . . . . . .69

Relační a logické operátory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Operátory logiky zkráceného vyhodnocování . . . . . . . . . . . . . . . . . 73

Operátor přiřazení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Zkrácená přiřazení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Převod typu v přiřazeních. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Přetypování nekompatibilních typů . . . . . . . . . . . . . . . . . . . . . . . . . 77

Priorita operátorů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Výrazy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Převod typu ve výrazech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81

Mezery a závorky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83

KAPITOLA 3

PŘÍKAZY PRO ŘÍZENÍ PROGRAMU . . . . . . . . . . . . . . . . . . . . . . . .85

Vstupní znaky z klávesnice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Příkaz if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Vnořené příkazy if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Žebřík if-else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Příkaz switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Vnořené příkazy switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Cyklus for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Několik variací cyklu for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Chybějící části . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Nekonečný cyklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102

Cykly bez těla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Deklarování řídicích proměnných cyklu uvnitř cyklu for . . . . . . . . . 103

Rozšířený cyklus for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Cyklus while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Cyklus do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Použití příkazu break pro opuštění cyklu . . . . . . . . . . . . . . . . . . . 111

Použití příkazu break jako jisté formy příkazu „goto“ . . . . . . . . . . . 113

Použití příkazu continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Vnořené cykly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 KAPITOLA 4 SEZNÁMENÍ SE TŘÍDAMI, OBJEKTY A METODAMI . . . . . . . . . .127

Základy třídy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128


6

Obsah

Obecný tvar třídy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128

Definování třídy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129 Jak se objekty vytvářejí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Referenční proměnné a přiřazení . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

Přidání metody do třídy Vozidlo . . . . . . . . . . . . . . . . . . . . . . . . . .135 Návrat z metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Vracení hodnoty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Používání parametrů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Přidání parametrizované metody do třídy Vozidlo . . . . . . . . . . . .142 Konstruktory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Parametrizované konstruktory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Přidání konstruktoru do třídy Vozidlo . . . . . . . . . . . . . . . . . . . . . . . 151 Bližší pohled na operátor new . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Uvolňování paměti a finalizační metody . . . . . . . . . . . . . . . . . . . . . 154 Metoda finalize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Klíčové slovo this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

KAPITOLA 5

DALŠÍ DATOVÉ TYPY A OPERÁTORY . . . . . . . . . . . . . . . . . . . . . .161

Pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Jednorozměrná pole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162 Vícerozměrná pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Dvourozměrná pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168 Nepravidelná pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Pole se třemi nebo více rozměry . . . . . . . . . . . . . . . . . . . . . . . . .170

Inicializace vícerozměrných polí . . . . . . . . . . . . . . . . . . . . . . . . . .171 Alternativní syntaxe pro deklaraci polí . . . . . . . . . . . . . . . . . . . . . . 172 Přiřazování odkazů na pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Členská proměnná length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Cyklus ve stylu „for-each“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Procházení vícerozměrných polí . . . . . . . . . . . . . . . . . . . . . . . . . .184

Aplikování rozšířeného příkazu for . . . . . . . . . . . . . . . . . . . . . . . .185 Řetězce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Sestrojování řetězců . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186

Práce s řetězci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187

Pole řetězců . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189

Řetězce jsou neměnitelné. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190

Používání řetězce pro řízení příkazu switch . . . . . . . . . . . . . . . . .191


7

Argumenty příkazového řádku . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

Bitové operátory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Bitové operátory AND, OR, XOR a NOT . . . . . . . . . . . . . . . . . . . .194

Operátory posunu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199

Zkrácená bitová přiřazení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201 Operátor ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

KAPITOLA 6

BLIŽŠÍ POHLED NA METODY A TŘÍDY . . . . . . . . . . . . . . . . . . . .209

Řízení přístupu ke členům třídy . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Modifikátory přístupu jazyka Java . . . . . . . . . . . . . . . . . . . . . . . .210 Předávání objektů metodám . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

Způsob předávání argumentů. . . . . . . . . . . . . . . . . . . . . . . . . . . .218 Vracení objektů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Přetěžování metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Přetěžování konstruktorů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Rekurze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Klíčové slovo static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Statické bloky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 Seznámení s vnořenými a vnitřními třídami . . . . . . . . . . . . . . . . . . 243 Variabilní počet argumentů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

Základy variabilního počtu argumentů . . . . . . . . . . . . . . . . . . . . .247

Přetěžování metody s variabilním počtem argumentů . . . . . . . . .250

Variabilní počet argumentů a nejednoznačnost . . . . . . . . . . . . . .252

KAPITOLA 7

DĚDIČNOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255

Základy dědičnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Přístup ke členům a dědičnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Konstruktory a dědičnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Volání konstruktorů nadtřídy pomocí klíčového slova super . . . . . 263

Přistupování ke členům nadtřídy pomocí klíčového slova super . . 268

Tvorba víceúrovňové hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Kdy se konstruktory volají? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Odkazy na nadtřídy a objekty podtřídy . . . . . . . . . . . . . . . . . . . . . 277

Přepisování metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Přepsané metody podporují polymorfizmus . . . . . . . . . . . . . . . . . 285

Proč přepsané metody? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287


8

Obsah

Aplikace přepisování metod na třídu Tvar2D . . . . . . . . . . . . . . . .287 Používání abstraktních tříd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Klíčové slovo final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Klíčové slovo final zabraňuje přepisování . . . . . . . . . . . . . . . . . . .296

Klíčové slovo final brání dědičnosti . . . . . . . . . . . . . . . . . . . . . . .297

Používání klíčového slova final s datovými členy . . . . . . . . . . . . .297 Třída Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

KAPITOLA 8

BALÍČKY A ROZHRANÍ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301

Balíčky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Definování balíčku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302

Hledání balíčků a proměnná prostředí CLASSPATH . . . . . . . . . .303

Krátký příklad s balíčkem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304 Balíčky a přístup ke členům . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Příklad přístupu k balíčku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307 Chráněné členství . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Importování balíčků . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Knihovna tříd Javy je obsažena v balíčcích . . . . . . . . . . . . . . . . . . 312 Rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Implementace rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Používání odkazů na rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Proměnné v rozhraních . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Rozhraní lze rozšiřovat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

KAPITOLA 9

ZPRACOVÁNÍ VÝJIMEK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329

Hierarchie výjimek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Základy zpracování výjimek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Klíčová slova try a catch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331

Jednoduchý příklad zpracování výjimky. . . . . . . . . . . . . . . . . . . .332 Důsledky nezachycené výjimky . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Díky výjimkám můžete elegantně ošetřovat chyby. . . . . . . . . . . .336 Používání několika příkazů catch . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Zachytávání výjimek podtříd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Bloky try lze vnořovat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Vyvolání výjimky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Opětovné vyvolání výjimky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .341


9

Bližší pohled na třídu Throwable . . . . . . . . . . . . . . . . . . . . . . . . . . 343

Blok finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

Klauzule throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

Nové prvky pro práci s výjimkami v sadě JDK 7 . . . . . . . . . . . . . . 348

Výjimky vestavěné v Javě . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Tvorba podtřídy třídy Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

KAPITOLA 10

VSTUPNĚ-VÝSTUPNÍ OPERACE . . . . . . . . . . . . . . . . . . . . . . . . . .359

Vstupně-výstupní operace Javy jsou založené na proudech . . . . . 360

Bajtové proudy a znakové proudy . . . . . . . . . . . . . . . . . . . . . . . . . 360

Třídy bajtového proudu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

Třídy znakového proudu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

Předdefinované proudy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Používání bajtových proudů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Čtení vstupu z konzole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364

Zapisování výstupu do konzole . . . . . . . . . . . . . . . . . . . . . . . . . .366 Čtení a zapisování do souborů pomocí bajtových proudů . . . . . . 367

Čtení vstupu ze souboru. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367

Zapisování do souboru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .372 Automatické zavírání souboru . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Čtení a zapisování binárních dat . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Soubory s náhodným přístupem . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Používání znakově založených proudů Javy . . . . . . . . . . . . . . . . . 385

Vstup z konzole pomocí znakových proudů . . . . . . . . . . . . . . . . .387

Výstup do konzole pomocí znakových proudů. . . . . . . . . . . . . . .389 Vstupně-výstupní operace se soubory s použitím znakových proudů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

Třída FileWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391

Třída FileReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392 Používání obálek typů Javy pro převod číselných řetězců . . . . . . 394

KAPITOLA 11

VÍCEVLÁKNOVÉ PROGRAMOVÁNÍ . . . . . . . . . . . . . . . . . . . . . . . .405

Základy vícevláknového programování . . . . . . . . . . . . . . . . . . . . . 406

Třída Thread a rozhraní Runnable . . . . . . . . . . . . . . . . . . . . . . . . . 407

Vytvoření vlákna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

Několik jednoduchých vylepšení . . . . . . . . . . . . . . . . . . . . . . . . .411


Obsah

10

Tvorba více vláken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

Zjištění, kdy vlákno skončí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

Priority vláken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

Synchronizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

Synchronizované metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

Příkaz synchronized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

Komunikace s vláknem pomocí metod notify(),

wait() a notifyAll() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

Příklad použití metod wait() a notify() . . . . . . . . . . . . . . . . . . . . . .433 Pozastavení, obnovení a zastavení vláken . . . . . . . . . . . . . . . . . . . 438

KAPITOLA 12

VÝČTY, AUTOMATICKÉ ZABALOVÁNÍ,

STATICKÉ IMPORTOVÁNÍ A ANOTACE. . . . . . . . . . . . . . . . . . . . .445

Výčty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Základy výčtových typů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .446 Výčty Javy jsou třídní typy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Metody values() a valueOf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Konstruktory, metody, proměnné instance a výčty . . . . . . . . . . . . 451

Dvě podstatná omezení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453 Výčty jsou odvozené od třídy Enum . . . . . . . . . . . . . . . . . . . . . . . . 453 Automatické zabalování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Obálky typů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Základy automatického zabalování . . . . . . . . . . . . . . . . . . . . . . . . 463 Automatické zabalování a metody . . . . . . . . . . . . . . . . . . . . . . . . . 464 Automatické zabalování a rozbalování ve výrazech . . . . . . . . . . . . 466

Varování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .467 Statické importování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Anotace (metadata) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

KAPITOLA 13

GENERICKÉ TYPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475

Základy generických typů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

Jednoduchý příklad s generickými typy . . . . . . . . . . . . . . . . . . . . . 477

Generické typy pracují pouze s objekty . . . . . . . . . . . . . . . . . . . .481

Generické typy se liší na základě svých typových argumentů . . .481

Generická třída se dvěma typovými parametry . . . . . . . . . . . . . .481


11

Obecný tvar generické třídy . . . . . . . . . . . . . . . . . . . . . . . . . . . . .483 Ohraničené typy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Zástupné argumenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Ohraničené zástupné argumenty . . . . . . . . . . . . . . . . . . . . . . . . . . 490 Generické metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Generické konstruktory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Generická rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Holé typy a starší kód . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Odvození typů s operátorem kosočtverec . . . . . . . . . . . . . . . . . . . 507 Vymazání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Chyby kvůli nejednoznačnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Omezení generických typů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

Nelze vytvářet instance typových parametrů . . . . . . . . . . . . . . . .510

Omezení statických členů. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .510

Omezení generických typů v souvislosti s poli . . . . . . . . . . . . . . .511

Omezení generických typů v souvislosti s výjimkami . . . . . . . . . .512 Další studium generických typů . . . . . . . . . . . . . . . . . . . . . . . . . . . 512

KAPITOLA 14

APLETY, UDÁLOSTI A DALŠÍ TÉMATA . . . . . . . . . . . . . . . . . . . . .515

Základy apletů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516

Uspořádání apletu a základní prvky . . . . . . . . . . . . . . . . . . . . . . . . 519

Architektura apletu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519

Kompletní kostra apletu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520

Inicializace a ukončení apletu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521

Žádost o překreslení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522

Metoda update() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .523 Používání stavového okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Předávání parametrů apletům . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 Třída Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 Obsluha událostí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 Delegační model událostí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 Události . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533

Zdroje událostí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .533

Posluchači událostí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .534

Třídy událostí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .534

Rozhraní posluchače událostí . . . . . . . . . . . . . . . . . . . . . . . . . . .535


Obsah

12

Používání delegačního modelu událostí . . . . . . . . . . . . . . . . . . . . . 536

Obsluha událostí myši a pohybu myši . . . . . . . . . . . . . . . . . . . . .536

Jednoduchý aplet pro události myši. . . . . . . . . . . . . . . . . . . . . . .537 Další klíčová slova jazyka Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

Modifikátory transient a volatile . . . . . . . . . . . . . . . . . . . . . . . . . .541

Klíčové slovo instanceof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .541

Klíčové slovo strictfp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542

Klíčové slovo assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542

Nativní metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543

KAPITOLA 15

SEZNÁMENÍ S KNIHOVNOU SWING . . . . . . . . . . . . . . . . . . . . . . .547

Počátky a filozofie návrhu knihovny Swing . . . . . . . . . . . . . . . . . . 548

Komponenty a kontejnery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

Komponenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .551

Kontejnery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .551

Kontejnerová podokna nejvyšší úrovně . . . . . . . . . . . . . . . . . . . .552 Správci rozvržení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 První jednoduchý program v knihovně Swing . . . . . . . . . . . . . . . . 553

První příklad s knihovnou Swing řádek po řádku . . . . . . . . . . . . .555 Použití komponenty typu JButton . . . . . . . . . . . . . . . . . . . . . . . . . 560 Práce s komponentou typu JTextField . . . . . . . . . . . . . . . . . . . . . 563 Tvorba komponenty typu JCheckBox . . . . . . . . . . . . . . . . . . . . . . 567 Práce s komponentou typu JList . . . . . . . . . . . . . . . . . . . . . . . . . 571 Použití anonymních vnitřních tříd pro obsluhu událostí . . . . . . . . . 582 Vytvoření apletu na bázi knihovny Swing . . . . . . . . . . . . . . . . . . . . 582 Co dál? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585

PŘÍLOHA A

ODPOVĚDI NA CVIČENÍ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .589

Kapitola 1: Základy Javy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589

Kapitola 2: Seznámení s datovými typy a operátory . . . . . . . . . . . 591

Kapitola 3: Příkazy pro řízení programu . . . . . . . . . . . . . . . . . . . . . 593

Kapitola 4: Seznámení se třídami, objekty a metodami . . . . . . . . . 596

Kapitola 5: Další datové typy a operátory . . . . . . . . . . . . . . . . . . . 597

Kapitola 6: Bližší pohled na metody a třídy . . . . . . . . . . . . . . . . . . 601

Kapitola 7: Dědičnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606

Kapitola 8: Balíčky a rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608


13

Kapitola 9: Zpracování výjimek . . . . . . . . . . . . . . . . . . . . . . . . . . . 610

Kapitola 10: Vstupně-výstupní operace . . . . . . . . . . . . . . . . . . . . 613

Kapitola 11: Vícevláknové programování . . . . . . . . . . . . . . . . . . . 616

Kapitola 12: Výčty, automatické zabalování,

statické importování a anotace . . . . . . . . . . . . . . . . . . . . . . . . . . . 619

Kapitola 13: Generické typy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623

Kapitola 14: Aplety, události a další témata . . . . . . . . . . . . . . . . . 628

Kapitola 15: Seznámení s knihovnou Swing . . . . . . . . . . . . . . . . . 634

PŘÍLOHA B

DOKUMENTAČNÍ KOMENTÁŘE JAVY . . . . . . . . . . . . . . . . . . . . .641

Značky nástroje javadoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641

@author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .642

{@code} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643

@deprecated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643

{@docRoot} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643

@exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643

{@inheritDoc} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643

{@link} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643

{@linkplain} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .644

{@literal} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .644

@param . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .644

@return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .644

@see . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .644

@serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .645

@serialData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .645

@serialField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .645

@since . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .645

@throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .645

{@value} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .646

@version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .646 Obecný tvar dokumentačního komentáře . . . . . . . . . . . . . . . . . . . 646 Výstup nástroje javadoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 Příklad s dokumentačními komentáři . . . . . . . . . . . . . . . . . . . . . . . 647

REJSTŘÍK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .649



15

Úvod

Java je jedním z  nejdůležitějších a  nejrozšířenějších počítačových programovacích

jazyků na světě, neboť jde o  přední jazyk Internetu. Být profesionálním webovým

vývojářem dnes znamená ovládat jazyk Java. Je-li tedy vaší budoucnostíprogramo

vání webových aplikací, rozhodli jste se naučit se správný jazyk. Java je navíc součástí

revoluce kolem chytrých telefonů, protože se používá při programování pro systém

Android. Jednoduše řečeno: programování v Javě je v základech většiny moderních

světových výpočetních prostředí.

Účelem této knihy je naučit vás základy programování v Javě. Provede vás krok za

krokem nejrůznějšími příklady, cvičeními a  projekty. Nepředpokládá žádné před

chozí zkušenosti s programováním. Začíná naprostými základy, jako je zkompilování

a spuštění programu v Javě. Potom se věnuje klíčovým slovům, prvkůma konstruk

tům, jež tvoří srdce jazyka Java. Kromě toho zde najdete výklad několikanejpokro

čilejších prvků Javy, jako je vícevláknové programování nebo generické typy. Knihu

uzavírá úvod do knihovny Swing. Po přečtení knihy budete mít základyprogramo

vání v Javě pevně v rukou.

Na začátku je důležité říci, že tato kniha je jen počátečním bodem. Java je více než jen

prvky, jež definují jazyk. Java totiž obsahuje značné množství knihoven a nástrojů,

jež pomáhají při vývoji programů. Chcete-li se stát špičkovými programátory v Javě,

musíte dokonale ovládat i tyto oblasti. Po přečtení této knihy budete mít znalosti pro

další studium všech ostatních aspektů Javy.

Vývoj Javy

Jen několik málo jazyků zcela přebudovalo samotnou podstatu programování. V této

elitní skupině se jeden zvláště vyjímá, neboť jeho účinek byl rychlý a rozsáhlý. Tímto

jazykem je samozřejmě Java. Není přehnané říci, že původní vydání verze Java 1.0

v roce 1995 společností Sun Microsystems způsobilo revoluci v programování. Tato


Úvod

16

revoluce radikálně změnila Web do vysoce interaktivního prostředí. Při tom Java

položila nový standard v návrhu počítačových jazyků.

V průběhu let pokračovala Java ve svém růstu, vývoji a dalším redefinování. Narozdíl od řady jiných jazyků, které jen pomalu začleňují nové prvky, byla Java často na

předním místě vývoje počítačových jazyků. Jedním z  důvodů byla kultura inovace

a změny, které Javu obklopovaly. Java tak prošla několika upgrady – někdy relativně

malými a jindy mnohem významnějšími.

První významnou aktualizací Javy byla verze 1.1. Prvky přidané verzí Java 1.1 byly

zásadnější, než by se podle pouhého zvýšení vedlejšího čísla revize mohlo zdát. Java

1.1 například přidala řadou nových prvků knihovny, redefinovala způsob obsluhy

událostí a rekonfigurovala řadu prvků z původní knihovny 1.0.

Další významné vydání Javy byla verze Java 2, kde 2 označuje „druhou generaci“.

Tvorba Javy 2 byla rozhodující událost značící počátek „moderního věku“ Javy. První

vydání Javy 2 neslo číslo verze 1.2. Může vypadat zvláštně, že první vydání Javy 2

používalo číslo verze 1.2. Důvodem je to, že se původně vztahovalo k internímu číslu

verze knihoven Javy, avšak později bylo zobecněno tak, aby se vztahovalo k vydání

jako celku. S verzí Java 2 společnost Sun přebalila výsledný produkt jako J2SE (Java 2

Platform Standard Edition), přičemž čísla verzí se začala aplikovat na tento produkt.

Dalším upgradem Javy byla verze J2SE 1.3. Tato verze Javy byla prvním významným

upgradem původního vydání Javy 2. Z velké části doplnila stávající funkčnosta „stmelila“ vývojové prostředí. Vydání J2SE 1.4 Javu dále vylepšilo. Toto vydání obsahovalo

několik důležitých nových prvků, mezi něž patří zřetězené výjimky, kanálovězaložené vstupně-výstupní operace a klíčové slovo assert.

Vydání J2SE 5 nevytvořilo nic menšího nežli druhou revoluci v Javě. Na rozdíl odvětšiny předchozích upgradů Javy, které nabízely důležitá, avšak přírůstková vylepšení,

vydání J2SE 5 v zásadě rozšířilo záběr, sílu a rozsah jazyka. Abyste získali představu

o velikosti změn ve vydání J2SE 5, zde je seznam jeho nejdůležitějších nových prvků,

které se probírají v této knize:

 Generické typy.

 Automatické zabalování a rozbalování.

 Výč t y.

 Vylepšený cyklus for ve stylu „for-each“.

 Variabilní počet argumentů (varargs).

 Statické importování.

 Anotace. Toto není seznam drobných úprav nebo inkrementálních upgradů. Každý prvek v  seznamu totiž představuje významný přírůstek k  jazyku Java. Některé, jako jsou generické typy, rozšířený příkaz for a variabilní počet argumentů, navíc zavedly nové syntaktické prvky. Jiné, jako je automatické zabalování a rozbalování, upravilysémantiku jazyka. Anotace přidaly do programování zcela nový rozměr.


Vývoj Javy

17

Význam těchto nových prvků odráží použité číslo verze „5“. Následující číslo verze

pro Javu by obvykle bylo 1.5. Nicméně tyto nové prvky byly tak podstatné, že posun

od 1.4 k 1.5 prostě nemohl vyjadřovat velikost této změny. Společnost Sun se proto

rozhodla zvýšit číslo verze na 5 a zdůraznit tak, že došlo k významné události. Vydání

tedy bylo pojmenované J2SE 5 a sada pro vývojáře byla pojmenována JDK 5. Nicméně

kvůli udržení konzistence se společnost Sun dále rozhodla použít 1.5 jako své interní

číslo verze, které se rovněž označuje jako vývojářské číslo verze. Číslo „5“ v J2SE 5 se

nazývá produktové číslo verze.

Další vydání Javy bylo nazváno Java SE 6 a společnost Sun se znovu rozhodlazměnit název platformy Java. Ze všeho nejdříve si všimněte, že bylo vypuštěno číslo „2“.

Platforma má nyní název Java SE a oficiálním názvem produktu bylo Java Platform,

Standard Edition 6, zatímco sada pro vývojáře v Javě se jmenovala JDK 6. Stejně jako

u J2SE 5 je „6“ v názvu Java SE 6 produktovým číslem verze. Interní, vývojářské číslo

verze je 1.6.

Vydání Java SE 6 stavělo na bázi J2SE 5, k níž přidalo inkrementální vylepšení. Do

jazyka Java sice žádné významné prvky nepřibyly, došlo však k vylepšení knihoven

API, přidání několika nových balíčků a vylepšení běhu programů. Během svéhodlouhého (z hlediska Javy) životního cyklu prošlo několika aktualizacemi, při čemž došlo

k přidání několika upgradů. Obecně lze říci, že vydání Java SE 6 sloužilo pro další

upevnění změn provedených ve verzi J2SE 5.

Nejnovější vydání Javy se nazývá Java SE 7, při čemž sada pro vývojáře v Javě seoznačuje JDK 7. Má interní číslo verze 1.7. Java SE 7 je první hlavní vydání Javy od doby,

kdy Sun Microsystems získala společnost Oracle (proces, který začal v dubnu roku

2009 a  skončil v  lednu roku 2010). Java SE 7 obsahuje řadu nových prvků, včetně

významných přírůstků k jazyku a knihoven API. Začleněny byly také upgradyběhového systému Javy, který nyní podporuje i jiné jazyky než jen Javu.

Z hlediska této knihy jsou nejdůležitější prvky zavedené vydáním Java SE 7 ty, které

byly vyvinuté v rámci projektu Project Coin. Účelem projektu Project Coin byloidentifikovat řadu malých změn jazyka Java, které by se začlenily do JDK 7. Přestože jsou

tyto nové prvky souhrnně označované jako „malé“, jejich vliv je z hlediska kódu docela

velký. Ve skutečnosti mohou být tyto změny pro programátory nejdůležitějšími novými

prvky v Javě SE 7. Zde je seznam nových prvků jazyka, kterým se věnuje tato kniha:

 Příkaz switch může řídit také objekt typu String.

 Binární celočíselné literály.

 Podtržítka v číselných literálech.

 Rozšířený příkaz try nazývanýtry-srostředky (try-with-resources), kterýpodoruje automatickou správu prostředků. (Například souborový proud lze nyní

automaticky uzavřít, není-li již potřebný.)

 Odvození typu (skrze operátor kosočtverec) při sestrojování generické instance.


Úvod

18

 Vylepšené zpracování výjimek, kdy lze jediným příkazem catch zachytit dvě

nebo více výjimek (vícenásobné zachycení), a lepší typová kontrola provýjimky, které se znovu vyvolávají.

Jak vidíte, i když byly prvky projektu Project Coin považovány za malé změny jazyka,

jejich přínos bude mnohem větší, než by se mohlo na první pohled zdát. Konkrétně

příkaztry-srostředky bude mít hluboký vliv na způsob, jakým se píše podstatná

část kódu.

Materiál v této knize byl aktualizovaný podle vydání Java SE 7 s upozorněním na řadu

nových prvků, aktualizací a přírůstků. Uspořádání knihy

Tato kniha nabízí rovnoměrně postupující výuku, v níž každá část staví na tépředchozí. Obsahuje 15 kapitol, z nichž se každá věnuje určitému aspektu Javy. Tato kniha

je jedinečná, protože zahrnuje několik speciálních prvků, které podporují osvojení

probírané látky. Klíčové dovednosti a pojmy

Každá kapitola začíná sadou kritických dovedností, které se budete učit. Cvičení

Každá kapitola končí cvičením, které vám umožní vyzkoušet si své znalosti.Odpovědi se nacházejí v příloze A. Otázka pro experta

V  celé knize jsou roztroušené speciální bloky nadepsané „Otázka pro experta“. Ty

obsahují dodatečné informace a zajímavé komentáře o probíraném tématu.Používají formát ve stylu otázek a odpovědí. Vyzkoušejte

Každá kapitola obsahuje dvě či více částí nadepsaných „Vyzkoušejte“, což jsou projekty,

které vám ukazují, jak prakticky aplikovat, co se právě učíte. V řadě případů jdeo příklady z reálného světa, které můžete použít jako výchozí body pro své vlastní programy.


Zkušenost s programováním není nutná

19

Zkušenost s programováním není nutná

Tato kniha nepředpokládá žádnou předchozí zkušenost s  programováním. Můžete

ji tedy používat i v případě, že jste nikdy dříve neprogramovali. Máte-li nějakézkušenosti s programováním, budete moci postupovat o něco rychleji. Mějte ovšem na

paměti, že Java se od jiných oblíbených počítačových jazyků v několika podstatných

věcech liší. Je důležité nedělat ukvapené závěry. I zkušený programátor by tedy měl

číst vše velmi pozorně. Požadovaný software

Pro zkompilování a spuštění všech programů v této knize budete potřebovatnejnovější sadu JDK (Java Developers Kit) od společnosti Oracle, kterou je v době psaní

této knihy JDK 7. Jedná se o JDK pro vydání Java SE 7. Pokyny pro získání sady JDK

najdete v kapitole 1.

Používáte-li starší verzi Javy, jako je třeba Java 5, budete sice moci používat tuto knihu,

nebudete však schopni zkompilovat a  spouštět programy, které používají novější

prvky Javy. Zvláštní poděkování

Zvláštní poděkování patří Dannymu Cowardovi, odbornému redaktorovi pro tuto

edici knihy. Jeho rady, vhled do problematiky a návrhy byly velmi hodnotné a ceněné. Zpětná vazba od čtenářů

Nakladatelství a  vydavatelství Computer Press, které pro vás tuto knihu přeložilo,

stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Můžete se obrátit na

následující adresy:

Computer Press

Albatros Media a.s.,

pobočka Brno

IBC

Příkop 4

602 00 Brno

nebo

sefredaktor.pc@albatrosmedia.cz

Computer Press neposkytuje rady ani jakýkoli servis pro aplikace třetích stran.

Pokud budete mít dotaz k programu, obraťte se prosím na jeho tvůrce.


Úvod

20

Zdrojové kódy ke knize

Z adresy http://knihy.cpress.cz/K2024 si po klepnutí na odkaz Soubory ke staženímůžete přímo stáhnout archiv s ukázkovými kódy. Errata

Přestože jsme udělali maximum pro to, abychom zajistili přesnost a správnostobsahu, chybám se úplně vyhnout nelze. Pokud v některé z našich knih najdete chybu, ať

už chybu v textu nebo v kódu, budeme rádi, pokud nám ji oznámíte. Ostatníuživatele tak můžete ušetřit frustrace a pomoci nám zlepšit následující vydání této knihy.

Veškerá existující errata zobrazíte na adrese http://knihy.cpress.cz/K2024 po klepnutí

na odkaz Soubory ke stažení.


21

KAPITOLA 1

Základy Javy

Klíčové dovednosti a pojmy

 Seznámení s historií a filosofií Javy.

 Porozumění přínosu Javy pro Internet.

 Pochopení významu bajtového kódu.

 Seznámení se základními hesly Javy.

 Porozumění základním principům objektově orientovaného programování.

 Vytvoření, zkompilování a spuštění jednoduchého programu Javy.

 Používání proměnných.

 Používání řídicích příkazů if a for.

 Vytváření bloků kódu.

 Porozumění způsobu, jakým se umisťují, odsazují a ukončují příkazy.

 Seznámení s klíčovými slovy jazyka Java.

 Porozumění pravidlům pro identifikátory jazyka Javy.


Kapitola 1 Základy Javy

22

Vzestup Internetu a celosvětové webové sítě (Webu) v podstatě vedl ke změně práce

s počítačem. Před příchodem Webu dominovaly kyberprostoru samostatné osobní

počítače. Dnes jsou téměř všechny osobní počítače připojené k Internetu.I samotný Internet prošel transformací – původně totiž nabízel pohodlný způsob prosdílení souborů a informací. V současnosti jde spíše o obrovský, distribuovaný výpočetní

vesmír. S těmito změnami přišel nový způsob programování: Java.

Java je přední jazyk Internetu, ale nejen to. Jazyk Java přinesl revoluciv programování, změnil způsob, jakým uvažujeme o formě a funkci programu. Odprofesionálního programátora se dnes očekává, že umí programovat v jazyce Java, z čehož je jasně

patrný význam tohoto jazyka. V této knize si osvojíte dovednosti nezbytné pro jeho

dokonalé zvládnutí. Cílem této kapitoly je seznámit vás s jazykem Java, s jehohistorií, filozofií stojící za jeho návrhem a s několika z jeho nejdůležitějších rysů.Zdaleka nejtěžší věcí při výuce programovacího jazyka je skutečnost, že žádný prvekneexistuje izolovaně. Jednotlivé složky jazyka se totiž vzájemně doplňují. Tato vzájemná

souvislost je v  jazyce Java zvláště zřetelná. Faktem je, že je obtížné hovořit o  jedné

stránce Javy bez zmínky o dalších. S překonáním tohoto problému nám pomůže tato

kapitola, poněvadž nabízí stručný přehled několika rysů jazyka Java, včetně obecného

tvaru programu v Javě a několika základních řídicích struktur a operátorů.Nepouští se do příliš mnoha detailů, ale spíše se soustřeďuje na obecné principy společné

všem programům v Javě.

Počátky Javy

Inovace v oblasti počítačových jazyků je poháněna dvěma faktory: zlepšeními v umění

programování a změnami v počítačovém prostředí. Jazyk Java není žádnou výjimkou.

K bohatému dědictví z jazyků C a C++ přidává vylepšení a rysy, jež odrážejíaktuální stav v oblasti umění programování. V reakci na vzestup online prostředínabízí vlastnosti, jež zefektivňují programování pro vysoce distribuovanou architekturu.

Javu vymysleli v roce 1991 James Gosling, Patrick Naughton, Chris Warth, Ed Frank

a  Mike Sheridan ze společnosti Sun Microsystems. Tento jazyk se původně nazýval „Oak“, ale v roce 1995 byl přejmenovaný na „Java“. Poněkud překvapivě nebyl

původním impulzem pro Javu Internetu! Hlavní motivací totiž byla potřeba jazyka

nezávislého na platformě, který by se dal použít pro tvorbu softwaru vsazovaného

do nejrůznějších zařízení spotřební elektroniky, jako jsou topinkovače,mikrovlnné trouby a dálková ovládání. Jak asi tušíte, jako řadiče se používá mnoho různých

typů výpočetních jednotek. Problém byl v tom, že většina počítačových jazyků byla

(v té době) navržena tak, aby se kompilovala pro určitý cíl. Podívejte se například

na jazyk C++.

Přestože bylo možné zkompilovat program v C++ pro téměř libovolný typ výpočetní

jednotky, vyžadovalo to kompletní kompilátor pro jazyk C++ cílený na danouvýpočetní jednotku. Problém byl ovšem v tom, že tvorba kompilátorů je drahá a časově

náročná. Ve snaze nalézt lepší řešení pracoval Gosling s kolegy na přenositelném jazyce


Počátky Javy

23

nezávislém na platformě, jenž by produkoval kód, který by běžel na rozličnýchvýpo

četních jednotkách v různých prostředích. Toto úsilí nakonec vedlo k vytvoření Javy.

V době, kdy se pracovalo na detailech Javy, se vynořil druhý, a nakonec důležitější

faktor, který by hrál zásadní roli v budoucnosti Javy. Touto druhou silou bylasamo

zřejmě celosvětová webová síť (Web). Pokud by se ve stejné době, kdy seimplemen

tovala Java, nezrodil Web, mohla Java zůstat užitečným, avšak téměř neznámým

jazykem pro programování spotřební elektroniky. Nicméně s vývojem Webu se Java

vyšvihla do popředí návrhu počítačových jazyků, protože i samotný Web požadoval

přenositelné programy.

Většina programátorů se již na počátku své kariéry naučila, že přenositelné programy

jsou stejně nepolapitelné jako žádoucí. Přestože pátrání po způsobu tvorby efektivních,

přenositelných programů (nezávislých na platformě) je téměř tak staré jako samotná

disciplína programování, uvolnilo místo jiným, naléhavějším problémům. Nicméně

s nástupem Internetu a Webu se starý problém s přenositelností vrátil s mimořádnou

silou. Ostatně Internet tvoří rozmanitý, distribuovaný vesmír obydlený mnoha typy

počítačů, operačních systémů a výpočetních jednotek.

To, co bylo kdysi otravným, avšak nevýznamným problémem, stalo se nezbytností

s prvořadým významem. Kolem roku 1993 bylo členům týmu odpovědného za návrh

Javy již zřejmé, že problémy přenositelnosti, které se často vyskytují při vytváření kódu

pro vsazené řadiče, se rovněž objevují při snaze o vytvoření kódu pro Internet. Toto

poznání způsobilo přesun Javy od spotřební elektroniky k programování pro Internet.

Přestože prvotní jiskřičkou byla touha po architektonicky neutrálním programovacím

jazyce, vedl nakonec k ohromnému úspěchu Javy až samotný Internet.

Java a jazyky C a C++

Jazyk Java přímo souvisí s  jazyky C a  C++, neboť syntaxi zdědil z  jazyka C a  svůj

objektový model převzal z jazyka C++. Vztah Javy a jazyků C a C++ je důležitý hned

z  několika důvodů. Za prvé, řada programátorů zná syntaxi jazyka C/C++. Takoví

programátoři se pak snadno naučí jazyk Java a naopak programátoři v Javě sesnad

no naučí jazyk C/C++.

Za druhé, návrháři Javy se neuchýlili k tomu, aby „znovu vynalézali kolo“. Místo toho

dále vylepšovali již tak vysoce úspěšné programovací paradigma. Moderní věkprogra

mování začal s jazykem C, poté se přesunul k jazyku C++ a nyní k jazyku Java. Díky

využití takto bohatého dědictví nabízí Java silné, logicky konzistentní programovací

prostředí, které si bere to nejlepší z minulosti a přidává nové vlastnosti vyžadované

online prostředím. Co je však nejdůležitější: Jazyky C, C++ a Java definují díky své

podobnosti obvyklý pojmový rámec pro profesionálního programátora. Programátoři

tak při přechodu od jednoho jazyka k druhému nemusejí čelit zásadním neshodám.

Jedna z ústředních filozofií návrhu obou jazyků C a C++ spočívá v tom, že zde velí

programátor! Java přebírá i tuto filozofii. S výjimkou omezení kladených prostředím

Internetu vám jakožto programátorům dává Java úplnou kontrolu. Pokud progra


Kapitola 1 Základy Javy

24

mujete dobře, odrazí se to i na vašich programech. Programujete-li špatně, projeví se

to také na vašich programech. Řečeno jinak: Java není jazyk s podpůrnými, učícími

kolečky. Jedná se o jazyk pro profesionální programátory.

Jazyk Java má ještě jeden znak společný s  jazyky C a  C++: byl navržený, testovaný

a vypilovaný skutečnými, činnými programátory. Jde tedy o jazyk založený napotřebách a zkušenostech lidí, kteří jej vymysleli. Neexistuje lepší způsob, jak vytvořitšpičkový profesionální programovací jazyk.

Vzhledem k podobnostem mezi jazyky Java a C++, zvláště jejich podpoře proobjektově orientované programování, je lákavé uvažovat o Javě prostě jakoo „internetové verzi jazyka C++“. To by ale byla velká chyba. Jazyk Java totiž obsahujevýznamné praktické a filozofické odlišnosti. Třebaže byl ovlivněný jazykem C++, nejedná se

o rozšířenou verzi jazyka C++. Například s ním tedy není v žádném směrukompatibilní. Podobnosti s jazykem C++ jsou samozřejmě značné, a pokud programujete

v jazyce C++, budete se s Javou cítit jako doma. Kromě toho nebyl jazyk Javanavržený jako náhrada za jazyk C++, ale pro řešení určité skupiny problémů. Jazyk C++

byl navržený pro řešení jiné skupiny problémů. Budou tedy existovat vedle sebe ještě

po dlouhou řadu let. Java a jazyk C#

Několik let po vytvoření Javy vyvinula společnost Microsoft jazyk C#. To jedůležité, protože jazyk C# s Javou úzce souvisí. Faktem je, že řada rysů jazyka C# má svůj

přímý protějšek v jazyce Java. Oba jazyky Java a C# sdílejí stejnou obecnou syntaxi

ve stylu jazyka C++, podporují distribuované programování a využívají stejnýobjektový model. Jsou zde samozřejmě odlišnosti, avšak celkový „vzhled“ těchto jazyků

a  „pocit“ z  nich je stejný. To znamená, že pokud již znáte jazyk C#, bude osvojení

jazyka Java velice jednoduché. A naopak, je-li ve vaší budoucnosti jazyk C#, bude se

vám znalost Javy hodit.

S ohledem na podobnost mezi jazyky Java a C# se nabízí otázka, zda C# nahradí Javu?

Odpověď je záporná. Java a C# jsou optimalizované pro dva odlišné typyvýpočetních prostředí. Stejně jako budou po dlouhou dobu vedle sebe existovat jazyky C++

a Java, budou vedle sebe koexistovat i C# a Java. Přínos Javy pro Internet

Internet pomohl katapultovat Javu na přední místo v oblasti programování a Java měla

zase výrazný vliv na Internet. Kromě obecného zjednodušení webového programování

zavedla nový typ síťového programu označovaného jako aplet, který změnil způsob,

jakým se internetový svět díval na obsah. Java dále přinesla řeše



       
Knihkupectví Knihy.ABZ.cz - online prodej | ABZ Knihy, a.s.
ABZ knihy, a.s.
 
 
 

Knihy.ABZ.cz - knihkupectví online -  © 2004-2018 - ABZ ABZ knihy, a.s. TOPlist