Obsah O autorovi O odborném korektorovi Úvod Vývoj jazyka Java Java SE 8 Struktura této knihy Klíčové znalosti a pojmy Testové otázky Odpovídá expert Cvičení
Předchozí zkušenosti s programováním nejsou potřebné Potřebný software Zvláštní poděkování Zpětná vazba od čtenářů Zdrojové kódy ke knize Errata
15 15 17 17 19 20 20 20 20 20
20 20 21 21 21 21
KAPITOLA 1
Základy jazyka Java Původ jazyka Java
23 24
Vztah jazyka Java k jazykům C a C++ Vztah jazyka Java k jazyku C#
25 25
Přínos jazyka Java k rozvoji Internetu
26
Aplety Java Zabezpečení Přenositelnost
Kouzlo jazyka Java: bajtový kód Hlavní atributy jazyka Java Objektově orientované programování Zapouzdření Polymorfizmus Dědičnost
26 27 27
27 28 29 30 31 32
Jak získat sadu Java Development Kit První jednoduchý program
32 33
Zadání programu Kompilace programu První ukázkový program řádek po řádku
33 34 35
Zpracování syntaktických chyb Druhý jednoduchý program Další datový typ
37 38 40 3
K2243_sazba.indd 3
11.2.2016 12:42:28
Obsah
Cvičení 1.1: Převod galonů na litry Dva řídicí příkazy Příkaz if Cyklus for
Tvorba bloků kódu Středníky a umístění Zásady odsazování Cvičení 1.2: Zlepšení programu na převod galonů na litry Klíčová slova jazyka Java Identifikátory v jazyce Java Knihovny tříd jazyka Java Testové otázky ke kapitole 1
41 42 42 44
45 47 47 48 49 50 50 51
KAPITOLA 2
Představení datových typů a operátorů Proč jsou datové typy důležité Primitivní typy jazyka Java
53 53 53
Celá čísla Typy s plovoucí desetinnou čárkou Znaky
54 56 56
Typ boolean Cvičení 2.1: Jak daleko uhodil blesk? Literály
58 59 60
Hexadecimální, oktalové a binární literály Znakové sekvence escape Řetězcové literály
Podrobnější pohled na proměnné Inicializace proměnné Dynamická inicializace
Obor a životnost proměnných Operátory Aritmetické operátory Inkrementace a dekrementace
Relační a logické operátory Zkratové logické operátory Operátor přiřazení Zkrácená přiřazení Konverze typů v přiřazeních Přetypování nekompatibilních typů Priorita operátorů Cvičení 2.2: Zobrazení pravdivostní tabulky logických operátorů Výrazy
60 61 62
62 63 63
64 66 67 68
69 71 72 72 74 75 76 77 79
Konverze typů ve výrazech Mezery a závorky
79 81
Testové otázky ke kapitole 2
81
4
K2243_sazba.indd 4
11.2.2016 12:42:28
Obsah
KAPITOLA 3
Řídicí příkazy Vstup znaků z klávesnice Příkaz if Vnořené příkazy if Posloupnost if-else-if Příkaz switch Vnořené příkazy switch Cvičení 3.1: Začátek tvorby systému nápovědy jazyka Java Cyklus for Některé varianty cyklu for Chybějící prvky Nekonečný cyklus
Cykly bez těla Deklarace řídicích proměnných cyklu uvnitř cyklu for Vylepšený cyklus for Cyklus while Cyklus do-while Cvičení 3.2: Vylepšení systému nápovědy jazyka Java Ukončení cyklu příkazem break Použití příkazu break místo příkazu goto Použití příkazu continue Cvičení 3.3: Dokončení systému nápovědy jazyka Java Vnořené cykly Testové otázky ke kapitole 3
83 83 84 86 87 88 91 92 94 95 96 98
98 99 99 100 101 103 106 108 112 113 117 118
KAPITOLA 4
Představení tříd, objektů a metod Základy tříd Obecná forma třídy Definování třídy
Vytváření objektů Referenční proměnné a přiřazení Metody Přidání metody do třídy Vozidlo
Návrat z metody Vrácení hodnoty Použití parametrů Přidání parametrizované metody do třídy Vozidlo
Cvičení 4.1: Vytvoření třídy nápovědy Konstruktory Parametrizované konstruktory Přidání konstruktoru do třídy Vozidlo Další informace o operátoru new
121 121 122 122
125 126 127 128
130 131 133 134
136 141 142 143 144
5
K2243_sazba.indd 5
11.2.2016 12:42:28
Obsah
Úklid (garbage collection) Metoda finalize() Cvičení 4.2: Ukázka úklidu a finalizace Klíčové slovo this Testové otázky ke kapitole 4
145 145 146 149 151
KAPITOLA 5
Další datové typy a operátory Pole
153 153
Jednorozměrná pole
154
Cvičení 5.1: Řazení pole Vícerozměrná pole
157 158
Dvourozměrná pole
Nepravidelná pole Pole se třemi nebo více rozměry Inicializace vícerozměrných polí
Alternativní syntaxe deklarace pole Přiřazení odkazů na pole Použití členské proměnné length Cvičení 5.2: Třída Fronta Cyklus for ve stylu for-each Iterace vícerozměrných polí Použití vylepšeného cyklu for
Řetězce Konstrukce řetězců Zpracování řetězců Pole objektů typu String Řetězce jsou neměnné Řízení příkazu switch pomocí řetězce
Používání argumentů příkazového řádku Bitové operátory Bitové operátory AND, OR, XOR a NOT Operátory bitového posunu Bitová zkrácená přiřazení
Cvičení 5.3: Třída ZobrazBity Operátor ? Testové otázky ke kapitole 5
158
160 161 161
162 163 164 166 170 173 174
175 175 176 178 178 179
180 182 182 186 188
189 191 193
KAPITOLA 6
Podrobnější pohled na metody a třídy Řízení přístupu ke členům třídy
195 195
Modifikátory přístupu jazyka Java
196
Cvičení 6.1: Vylepšení třídy Fronta Předávání objektů metodám
200 202
Postup předání argumentů
203
6
K2243_sazba.indd 6
11.2.2016 12:42:28
Obsah
Vracení objektů Přetížení metod Přetěžování konstruktorů Cvičení 6.2: Přetížení konstruktoru třídy Fronta Rekurze Klíčové slovo static Bloky typu static
Cvičení 6.3: Algoritmus Quick sort Představení vnořených a vnitřních tříd Argumenty s proměnnou délkou Základy metod typu vararg Přetěžování metod typu vararg Parametry s proměnnou délkou a nejasnosti
Testové otázky ke kapitole 6
205 207 212 214 217 219 222
223 226 229 229 232 234
235
KAPITOLA 7
Dědičnost Základy dědičnosti Přístup ke členům a dědičnost Konstruktory a dědičnost Volání konstruktorů nadtříd pomocí klíčového slova super Přístup k členům nadtříd pomocí klíčového slova super Cvičení 7.1: Rozšíření třídy Vozidlo Vytvoření víceúrovňové hierarchie Kdy se spouštějí konstruktory? Odkazy nadtříd a objekty podtříd Přepisování metod Přepisování metod podporuje polymorfizmus K čemu slouží přepisování metod? Přepisování metod ve třídě DvourozTvar
Použití abstraktních tříd Použití klíčového slova final Klíčové slovo final znemožňuje přepisování Klíčové slovo final znemožňuje dědění Použití klíčového slova final u datových členů
Třída Object Testové otázky ke kapitole 7
237 237 240 243 245 249 250 253 256 257 261 264 266 266
270 274 274 274 275
276 277
KAPITOLA 8
Balíčky a rozhraní Balíčky Definování balíčku Hledání balíčků a proměnná CLASSPATH Krátký příklad s balíčkem
279 279 280 281 281
7
K2243_sazba.indd 7
11.2.2016 12:42:29
Obsah
Balíčky a přístup ke členům Příklad přístupu k balíčku
Seznámení s chráněnými členy Import balíčků Balíčky obsahují knihovnu tříd jazyka Java Rozhraní Implementace rozhraní Použití odkazů na rozhraní Cvičení 8.1: Vytvoření rozhraní Fronta Proměnné v rozhraních Rozhraní lze rozšířit Výchozí metody rozhraní Základy výchozích metod Praktičtější příklad výchozí metody Potíže s vícenásobnou dědičností
Použití statických metod v rozhraní Závěrečné poznámky k balíčkům a rozhraním Testové otázky ke kapitole 8
283 283
285 287 288 289 290 294 296 301 302 303 304 306 307
308 309 309
KAPITOLA 9
Zpracování výjimek Hierarchie výjimek Základy zpracování výjimek
311 312 312
Použití bloků try a catch Jednoduchý příklad výjimky
313 313
Důsledky nezachycené výjimky
315
Výjimky umožňují zpracovat chyby kontrolovaným způsobem
Použití více příkazů catch Zachycení výjimek podtřídy Bloky try lze vnořovat Způsobení výjimky Opakované způsobení výjimky
Podrobnější pohled na třídu Throwable Použití klíčového slova finally Použití klíčového slova throws Tři nedávno doplněné funkce výjimek Integrované výjimky jazyka Java Vytváření podtříd výjimek Cvičení 9.1: Přidání výjimek do třídy Fronta Testové otázky ke kapitole 9
317
318 319 320 321 322
323 324 326 328 329 331 333 336
8
K2243_sazba.indd 8
11.2.2016 12:42:29
Obsah
KAPITOLA 10
Používání vstupu a výstupu Vstupně-výstupní systém Javy je založen na datových proudech Bajtové a znakové proudy Třídy bajtových proudů Třídy znakových proudů Předem definované datové proudy Používání bajtových proudů Čtení vstupu z konzole Výpis výstupu na konzoli
Čtení a zápis souborů pomocí bajtových proudů Vstup ze souboru Zápis do souboru
339 340 340 340 341 342 343 343 345
346 346 350
Automatické uzavření souboru Čtení a zápis binárních dat Cvičení 10.1: Nástroj na porovnávání souborů Soubory s náhodným přístupem Použití znakových proudů Javy
352 355 358 359 362
Konzolový vstup pomocí znakových proudů Konzolový výstup pomocí znakových proudů
362 366
Souborový vstup a výstup pomocí znakových proudů Používání třídy FileWriter Používání třídy FileReader
Konverze číselných řetězců pomocí obálek typů jazyka Java Cvičení 10.2: Vytvoření systému nápovědy uloženého na disku Testové otázky ke kapitole 10
367 367 368
370 372 379
KAPITOLA 11
Vícevláknové programování Základy práce s více vlákny Třída Thread a rozhraní Runnable Vytvoření vlákna Několik jednoduchých vylepšení
Cvičení 11.1: Rozšíření třídy Thread Vytvoření více vláken Zjištění konce vlákna Priority vláken Synchronizace Používání synchronizovaných metod Příkaz synchronized Komunikace vláken pomocí metod notify(), wait() a notifyAll() Příklad použití metod wait() a notify()
Pozastavení, obnovení a zastavení vláken Cvičení 11.2: Použití hlavního vlákna Testové otázky ke kapitole 11
381 381 382 383 386
388 390 392 395 398 399 402 405 406
411 415 416 9
K2243_sazba.indd 9
11.2.2016 12:42:29
Obsah
KAPITOLA 12
Výčty, automatické zabalení, statický import a anotace Výčty Základy výčtů
Výčty jazyka Java jsou typy tříd Metody values() a valueOf() Konstruktory, metody, instanční proměnné a výčty Dvě důležitá omezení
Výčty dědí od typu enum Cvičení 12.1: Počítačově řízený semafor Automatické zabalení Obálky typů Základy automatického zabalení Automatické zabalení a metody Automatické zabalení a rozbalení nastává ve výrazech Upozornění
Statický import Anotace (metadata) Testové otázky ke kapitole 12
417 417 418
420 420 422 424
424 425 431 431 433 434 436 437
438 440 443
KAPITOLA 13
Genericita Základy genericity Jednoduchý příklad genericity Genericita funguje pouze s referenčními typy Generické typy se liší v závislosti na jejich argumentech typu Generická třída s dvěma parametry typu Obecná forma generické třídy
Limitované typy Použití zástupných argumentů Limitované zástupné argumenty Generické metody Generické konstruktory Generická rozhraní Cvičení 13.1: Vytvoření generické fronty Původní typy a starší kód Odvození typu pomocí operátoru diamant Mazání typu Chyby nejednoznačnosti Některá omezení genericity Nelze vytvořit instanci parametrů typu Omezení statických členů Omezení generických polí Omezení generických výjimek
445 445 446 450 450 450 452
452 456 459 461 464 464 467 471 474 475 476 477 477 477 478 479
10
K2243_sazba.indd 10
11.2.2016 12:42:29
Obsah
Další zdroje informací o genericitě Testové otázky ke kapitole 13
479 479
KAPITOLA 14
Výrazy lambda a odkazy metod Úvod do výrazů lambda Základy výrazů lambda Funkční rozhraní Výrazy lambda v praxi
Blokové výrazy lambda Generická funkční rozhraní Cvičení 14.1: Předání výrazu lambda jako argumentu Výrazy lambda a zachytávání proměnných Způsobení výjimky v rámci výrazu lambda Odkazy metod
481 481 482 483 485
490 491 493 497 499 500
Odkazy metod na metody typu static Odkazy metod na instanční metody
500 502
Odkazy konstruktoru Předem definovaná funkční rozhraní Testové otázky ke kapitole 14
506 509 510
KAPITOLA 15
Aplety, události a různá témata
513
Základy apletů Organizace apletů a klíčové prvky Architektura apletu Úplná kostra apletu Inicializace a ukončení apletů Požadavek na překreslení
513 517 517 517 519 519
Metoda update()
Cvičení 15.1: Jednoduchý aplet s pohyblivým textem Používání stavového okna Předávání parametrů apletům Třída Applet Zpracování událostí Model delegování událostí Události Zdroje událostí Naslouchací procesy událostí Třídy událostí Rozhraní naslouchacího procesu událostí
Použití modelu delegování událostí Zpracování událostí tlačítek a pohybu myši Jednoduchý aplet s podporou událostí myši
520
520 524 525 526 528 528 529 529 529 530 530
531 532 532
11
K2243_sazba.indd 11
11.2.2016 12:42:29
Obsah
Další klíčová slova jazyka Java
535
Modifikátory transient a volatile instanceof strictfp assert Nativní metody
536 536 536 537 538
Testové otázky ke kapitole 15
539
KAPITOLA 16
Rozhraní Swing Původ a princip návrhu rozhraní Swing Komponenty a kontejnery Komponenty Kontejnery Podokna kontejnerů nejvyšší úrovně
Správce rozvržení První jednoduchý program rozhraní Swing První ukázkový program Swing řádek po řádku
Použití prvku JButton Práce s prvkem JTextField Vytvoření prvku JCheckBox Práce s prvkem JList Cvičení 16.1: Nástroj na porovnávání souborů založený na rozhraní Swing Zpracování událostí pomocí anonymních vnitřních tříd nebo výrazů lambda Vytvoření apletu Swing Testové otázky ke kapitole 16
541 542 544 544 545 545
546 546 548
552 555 559 562 566 572 573 576
KAPITOLA 17
Technologie JavaFX Základní principy architektury JavaFX
579 580
Balíčky JavaFX Třídy jeviště a scény Uzly a grafy scény Rozvržení Třída Application a metody životního cyklu Spuštění aplikace JavaFX
580 580 581 581 581 582
Kostra aplikace JavaFX Kompilace a spuštění programu JavaFX Aplikační vlákno Jednoduchý ovládací prvek JavaFX: Label Používání tlačítek a událostí
582 585 586 586 588
Základy událostí Představení ovládacího prvku Button Ukázka zpracování událostí a tlačítka
589 589 590
12
K2243_sazba.indd 12
11.2.2016 12:42:29
Obsah
Tři další ovládací prvky JavaFX CheckBox
Cvičení 17.1: Použití neurčitého stavu ovládacího prvku CheckBox ListView TextField
Představení efektů a transformací Efekty Transformace Ukázka efektů a transformací
Co dále? Testové otázky ke kapitole 17
593 593
597 598 603
606 606 608 609
612 613
PŘÍLOHA A
Odpovědi na testové otázky Kapitola 1: Základy jazyka Java Kapitola 2: Představení datových typů a operátorů Kapitola 3: Řídicí příkazy Kapitola 4: Představení tříd, objektů a metod Kapitola 5: Další datové typy a operátory Kapitola 6: Podrobnější pohled na metody a třídy Kapitola 7: Dědičnost Kapitola 8: Balíčky a rozhraní Kapitola 9: Zpracování výjimek Kapitola 10: Používání vstupu a výstupu Kapitola 11: Vícevláknové programování Kapitola 12: Výčty, automatické zabalení, statický import a anotace Kapitola 13: Genericita Kapitola 14: Výrazy lambda a odkazy metod Kapitola 15: Aplety, události a různá témata Kapitola 16: Rozhraní Swing Kapitola 17: Technologie JavaFX
615 615 617 619 622 623 626 631 633 635 638 641 644 648 652 656 661 667
PŘÍLOHA B
Používání dokumentačních komentářů jazyka Java Značky nástroje javadoc @author {@code} @deprecated {@docRoot} @exception {@inheritDoc} {@link} {@linkplain} {@literal} @param
673 673 674 674 675 675 675 675 675 675 675 676
13
K2243_sazba.indd 13
11.2.2016 12:42:29
Obsah
@return @see @serial @serialData @serialField @since @throws {@value} @version
Obecná forma dokumentačního komentáře Výstup nástroje javadoc Příklad použití dokumentačních komentářů ReadMe.txt
Rejstřík
676 676 676 676 677 677 677 677 677
677 678 678 679
681
14
K2243_sazba.indd 14
11.2.2016 12:42:29