Herb Schildt - jest jednym z najpopularniejszych autorów książek o programowaniu. Jest autorytetem w sprawach języków C, C++, Java i C#, a także doskonałym programistą systemu Windows. Był członkiem komitetu ANSI/ISO, który dokonał standaryzacji języka C++. Jego książki sprzedały się na całym świecie w ponad 3 milionach egzemplarzy i zostały przetłumaczone na większość języków.
Spis treści
O autorze 23
O redaktorze merytorycznym 24
Przedmowa 25
CZĘŚĆ I. JĘZYK JAVA
1. Historia i ewolucja języka Java 31
- Rodowód Javy 31
- Narodziny nowoczesnego języka - C 31
- Język C++ - następny krok 33
- Podwaliny języka Java 33
- Powstanie języka Java 33
- Powiązanie z językiem C# 35
- Jak Java wywarła wpływ na internet 35
- Aplety Javy 35
- Bezpieczeństwo 36
- Przenośność 36
- Magia języka Java - kod bajtowy 37
- Wychodząc poza aplety 38
- Szybszy harmonogram udostępniania 38
- Serwlety - Java po stronie serwera 39
- Hasła języka Java 39
- Prostota 40
- Obiektowość 40
- Niezawodność 40
- Wielowątkowość 40
- Neutralność architektury 41
- Interpretowalność i wysoka wydajność 41
- Rozproszenie 41
- Dynamika 41
- Ewolucja Javy 41
- Kultura innowacji 46
2. Podstawy języka Java 47
- Programowanie obiektowe 47
- Dwa paradygmaty 47
- Abstrakcja 48
- Trzy zasady programowania obiektowego 48
- Pierwszy przykładowy program 52
- Wpisanie kodu programu 52
- Kompilacja programów 53
- Bliższe spojrzenie na pierwszy przykładowy program 53
- Drugi prosty program 55
- Dwie instrukcje sterujące 56
- Instrukcja if 57
- Pętla for 58
- Bloki kodu 59
- Kwestie składniowe 60
- Znaki białe 60
- Identyfikatory 60
- Stałe 60
- Komentarze 61
- Separatory 61
- Słowa kluczowe języka Java 61
- Biblioteki klas Javy 62
3. Typy danych, zmienne i tablice 63
- Java to język ze ścisłą kontrolą typów 63
- Typy proste 63
- Typy całkowitoliczbowe 64
- Typ byte 64
- Typ short 65
- Typ int 65
- Typ long 65
- Typy zmiennoprzecinkowe 65
- Typ float 66
- Typ double 66
- Typ znakowy 66
- Typ logiczny 68
- Bliższe spojrzenie na stałe 68
- Stałe całkowitoliczbowe 68
- Stałe zmiennoprzecinkowe 69
- Stałe logiczne 70
- Stałe znakowe 70
- Stałe łańcuchowe 71
- Zmienne 71
- Deklaracja zmiennej 71
- Inicjalizacja dynamiczna 72
- Zasięg i czas życia zmiennych 72
- Konwersja typów i rzutowanie 74
- Automatyczna konwersja typów 74
- Rzutowanie niezgodnych typów 75
- Automatyczne rozszerzanie typów w wyrażeniach 76
- Zasady rozszerzania typu 76
- Tablice 77
- Tablice jednowymiarowe 77
- Tablice wielowymiarowe 79
- Alternatywna składnia deklaracji tablicy 82
- Wnioskowanie typów zmiennych lokalnych 83
- Kilka słów o łańcuchach 85
4. Operatory 87
- Operatory arytmetyczne 87
- Podstawowe operatory arytmetyczne 88
- Operator reszty z dzielenia 88
- Operatory arytmetyczne z przypisaniem 89
- Inkrementacja i dekrementacja 90
- Operatory bitowe 91
- Logiczne operatory bitowe 92
- Przesunięcie w lewo 94
- Przesunięcie w prawo 95
- Przesunięcie w prawo bez znaku 96
- Operatory bitowe z przypisaniem 97
- Operatory relacji 98
- Operatory logiczne 99
- Operatory logiczne ze skracaniem 100
- Operator przypisania 101
- Operator ? 101
- Kolejność wykonywania operatorów 102
- Stosowanie nawiasów okrągłych 102
5. Instrukcje sterujące 105
- Instrukcje wyboru 105
- Instrukcja if 105
- Instrukcja switch 108
- Instrukcje iteracyjne 111
- Pętla while 112
- Pętla do-while 113
- Pętla for 115
- Wersja for-each pętli for 118
- Wnioskowanie typów zmiennych lokalnych w pętlach 122
- Pętle zagnieżdżone 123
- Instrukcje skoku 123
- Instrukcja break 124
- Instrukcja continue 127
- Instrukcja return 128
6. Wprowadzenie do klas 129
- Klasy 129
- Ogólna postać klasy 129
- Prosta klasa 130
- Deklarowanie obiektów 132
- Bliższe spojrzenie na operator new 133
- Przypisywanie zmiennych referencyjnych do obiektów 133
- Wprowadzenie do metod 134
- Dodanie metody do klasy Box 134
- Zwracanie wartości 136
- Dodanie metody przyjmującej parametry 137
- Konstruktor 139
- Konstruktor sparametryzowany 140
- Słowo kluczowe this 141
- Ukrywanie zmiennych składowych 141
- Mechanizm odzyskiwania pamięci 142
- Klasa stosu 142
7. Dokładniejsze omówienie metod i klas 145
- Przeciążanie metod 145
- Przeciążanie konstruktorów 147
- Obiekty jako parametry 149
- Dokładniejsze omówienie przekazywania argumentów 151
- Zwracanie obiektów 152
- Rekurencja 153
- Wprowadzenie do kontroli dostępu 155
- Składowe statyczne 158
- Słowo kluczowe final 159
- Powtórka z tablic 160
- Klasy zagnieżdżone i klasy wewnętrzne 161
- Omówienie klasy String 164
- Wykorzystanie argumentów wiersza poleceń 165
- Zmienna liczba argumentów 166
- Przeciążanie metod o zmiennej liczbie argumentów 169
- Zmienna liczba argumentów i niejednoznaczności 170
- Stosowanie wnioskowania typów zmiennych lokalnych z typami referencyjnymi 171
8. Dziedziczenie 173
- Podstawy dziedziczenia 173
- Dostęp do składowych a dziedziczenie 174
- Bardziej praktyczny przykład 175
- Zmienna klasy bazowej może zawierać referencję do obiektu klasy pochodnej 177
- Słowo kluczowe super 178
- Wykorzystanie słowa kluczowego super do wywołania konstruktora klasy bazowej 178
- Drugie zastosowanie słowa kluczowego super 181
- Tworzenie hierarchii wielopoziomowej 182
- Kiedy są wykonywane konstruktory? 184
- Przesłanianie metod 185
- Dynamiczne przydzielanie metod 187
- Dlaczego warto przesłaniać metody? 188
- Zastosowanie przesłaniania metod 188
- Klasy abstrakcyjne 190
- Słowo kluczowe final i dziedziczenie 192
- Słowo kluczowe final zapobiega przesłanianiu 192
- Słowo kluczowe final zapobiega dziedziczeniu 193
- Wnioskowanie typów zmiennych lokalnych a dziedziczenie 193
- Klasa Object 195
9. Pakiety i interfejsy 197
- Pakiety 197
- Definiowanie pakietu 197
- Znajdowanie pakietów i ścieżka CLASSPATH 198
- Prosty przykład pakietu 199
- Dostęp do pakietów i składowych 199
- Import pakietów 203
- Interfejsy 204
- Definiowanie interfejsu 205
- Implementacja interfejsu 206
- Interfejsy zagnieżdżone 208
- Stosowanie interfejsów 209
- Zmienne w interfejsach 211
- Interfejsy można rozszerzać 213
- Metody domyślne 214
- Podstawy metod domyślnych 215
- Bardziej praktyczny przykład 216
- Problemy wielokrotnego dziedziczenia 217
- Metody statyczne w interfejsach 217
- Stosowanie metod prywatnych w interfejsach 218
- Ostatnie uwagi dotyczące pakietów i interfejsów 219
10. Obsługa wyjątków 221
- Podstawy obsługi wyjątków 221
- Typy wyjątków 222
- Nieprzechwycone wyjątki 222
- Stosowanie instrukcji try i catch 223
- Wyświetlenie opisu wyjątku 224
- Wiele klauzul catch 225
- Zagnieżdżone instrukcje try 226
- Instrukcja throw 228
- Klauzula throws 229
- Słowo kluczowe finally 229
- Wyjątki wbudowane w język Java 231
- Tworzenie własnej klasy pochodnej wyjątków 231
- Łańcuch wyjątków 234
- Trzy dodatkowe cechy wyjątków 235
- Wykorzystanie wyjątków 236
11. Programowanie wielowątkowe 237
- Model wątków języka Java 238
- Priorytety wątków 239
- Synchronizacja 239
- Przekazywanie komunikatów 240
- Klasa Thread i interfejs Runnable 240
- Wątek główny 240
- Tworzenie wątku 242
- Implementacja interfejsu Runnable 242
- Rozszerzanie klasy Thread 244
- Wybór odpowiedniego podejścia 244
- Tworzenie wielu wątków 245
- Stosowanie metod isAlive() i join() 246
- Priorytety wątków 248
- Synchronizacja 249
- Synchronizacja metod 249
- Instrukcja synchronized 251
- Komunikacja międzywątkowa 252
- Zawieszanie, wznawianie i zatrzymywanie wątków 258
- Uzyskiwanie stanu wątku 260
- Stosowanie metody wytwórczej do tworzenia i uruchamiania wątku 261
- Korzystanie z wielowątkowości 262
12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 263
- Typy wyliczeniowe 263
- Podstawy wyliczeń 263
- Metody values() i valueOf() 265
- Wyliczenia Javy jako typy klasowe 266
- Wyliczenia dziedziczą po klasie Enum 268
- Inny przykład wyliczenia 269
- Opakowania typów 271
- Klasa Character 271
- Klasa Boolean 271
- Opakowania typów numerycznych 272
- Automatyczne opakowywanie typów prostych 273
- Automatyczne opakowywanie i metody 274
- Automatyczne opakowywanie i rozpakowywanie w wyrażeniach 274
- Automatyczne opakowywanie typów znakowych i logicznych 276
- Automatyczne opakowywanie pomaga zapobiegać błędom 276
- Słowo ostrzeżenia 277
- Adnotacje 277
- Podstawy tworzenia adnotacji 278
- Określanie strategii zachowywania adnotacji 278
- Odczytywanie adnotacji w trakcie działania programu za pomocą refleksji 279
- Interfejs AnnotatedElement 283
- Wartości domyślne 283
- Adnotacje znacznikowe 285
- Adnotacje jednoelementowe 285
- Wbudowane adnotacje 287
- Adnotacje typów 288
- Adnotacje powtarzalne 292
- Ograniczenia 294
13. Wejście-wyjście, instrukcja try z zasobami i inne tematy 295
- Podstawowa obsługa wejścia i wyjścia 295
- Strumienie 296
- Strumienie znakowe i bajtowe 296
- Predefiniowane strumienie 298
- Odczyt danych z konsoli 298
- Odczyt znaków 298
- Odczyt łańcuchów 299
- Wyświetlanie informacji na konsoli 301
- Klasa PrintWriter 301
- Odczyt i zapis plików 302
- Automatyczne zamykanie pliku 307
- Modyfikatory transient i volatile 310
- Operator instanceof 311
- Modyfikator strictfp 313
- Metody napisane w kodzie rdzennym 313
- Stosowanie asercji 313
- Opcje włączania i wyłączania asercji 315
- Import statyczny 316
- Wywoływanie przeciążonych konstruktorów za pomocą this() 318
- Kilka słów o kompaktowych profilach API 320
14. Typy sparametryzowane 321
- Czym są typy sparametryzowane? 321
- Prosty przykład zastosowania typów sparametryzowanych 322
- Typy sparametryzowane działają tylko dla typów referencyjnych 325
- Typy sparametryzowane różnią się, jeśli mają inny argument typu 325
- W jaki sposób typy sparametryzowane zwiększają bezpieczeństwo? 325
- Klasa sparametryzowana z dwoma parametrami typu 327
- Ogólna postać klasy sparametryzowanej 328
- Typy ograniczone 328
- Zastosowanie argumentów wieloznacznych 330
- Ograniczony argument wieloznaczny 333
- Tworzenie metody sparametryzowanej 337
- Konstruktory sparametryzowane 338
- Interfejsy sparametryzowane 339
- Typy surowe i starszy kod 341
- Hierarchia klas sparametryzowanych 343
- Zastosowanie sparametryzowanej klasy bazowej 343
- Podklasa sparametryzowana 345
- Porównywanie typów w hierarchii klas sparametryzowanych w czasie wykonywania 346
- Rzutowanie 348
- Przesłanianie metod w klasach sparametryzowanych 348
- Wnioskowanie typów a typy sparametryzowane 349
- Wnioskowanie typów zmiennych lokalnych a typy sparametryzowane 350
- Znoszenie 350
- Błędy niejednoznaczności 352
- Pewne ograniczenia typów sparametryzowanych 353
- Nie można tworzyć egzemplarza parametru typu 353
- Ograniczenia dla składowych statycznych 354
- Ograniczenia tablic typów sparametryzowanych 354
- Ograniczenia wyjątków typów sparametryzowanych 355
15. Wyrażenia lambda 357
- Wprowadzenie do wyrażeń lambda 357
- Podstawowe informacje o wyrażeniach lambda 358
- Interfejsy funkcyjne 358
- Kilka przykładów wyrażeń lambda 359
- Blokowe wyrażenia lambda 362
- Sparametryzowane interfejsy funkcyjne 364
- Przekazywanie wyrażeń lambda jako argumentów 365
- Wyrażenia lambda i wyjątki 368
- Wyrażenia lambda i przechwytywanie zmiennych 369
- Referencje do metod 370
- Referencje do metod statycznych 370
- Referencje do metod instancyjnych 371
- Referencje do metod a typy sparametryzowane 374
- Referencje do konstruktorów 376
- Predefiniowane interfejsy funkcyjne 380
16. Moduły 383
- Podstawowe informacje o modułach 383
- Przykład prostego modułu 384
- Kompilowanie i uruchamianie przykładowej aplikacji 388
- Dokładniejsze informacje o instrukcjach requires i exports 389
- java.base i moduły platformy 390
- Stary kod i moduł nienazwany 390
- Eksportowanie do konkretnego modułu 391
- Wymagania przechodnie 392
- Stosowanie usług 396
- Podstawowe informacje o usługach i dostawcach usług 396
- Słowa kluczowe związane z usługami 397
- Przykład stosowania usług i modułów 397
- Grafy modułów 403
- Trzy wyspecjalizowane cechy modułów 404
- Moduły otwarte 404
- Instrukcja opens 404
- Instrukcja requires static 404
- Wprowadzenie do jlink i plików JAR modułów 405
- Dołączanie plików dostarczonych jako struktura katalogów 405
- Konsolidacja modularnych plików JAR 405
- Pliki JMOD 406
- Kilka słów o warstwach i modułach automatycznych 406
- Końcowe uwagi dotyczące modułów 407
CZĘŚĆ II. BIBLIOTEKA JĘZYKA JAVA
17. Obsługa łańcuchów 411
- Konstruktory klasy String 411
- Długość łańcucha 413
- Specjalne operacje na łańcuchach 413
- Literały tekstowe 413
- Konkatenacja łańcuchów 414
- Konkatenacja łańcuchów z innymi typami danych 414
- Konwersja łańcuchów i metoda toString() 415
- Wyodrębnianie znaków 416
- Metoda charAt() 416
- Metoda getChars() 416
- Metoda getBytes() 416
- Metoda toCharArray() 417
- Porównywanie łańcuchów 417
- Metody equals() i equalsIgnoreCase() 417
- Metoda regionMatches() 418
- Metody startsWith() i endsWith() 418
- Metoda equals() kontra operator == 418
- Metoda compareTo() 419
- Przeszukiwanie łańcuchów 420
- Modyfikowanie łańcucha 421
- Metoda substring() 421
- Metoda concat() 422
- Metoda replace() 422
- Metody trim() i strip() 423
- Konwersja danych za pomocą metody valueOf() 424
- Zmiana wielkości liter w łańcuchu 424
- Łączenie łańcuchów 425
- Dodatkowe metody klasy String 425
- Klasa StringBuffer 426
- Konstruktory klasy StringBuffer 427
- Metody length() i capacity() 427
- Metoda ensureCapacity() 427
- Metoda setLength() 428
- Metody charAt() i setCharAt() 428
- Metoda getChars() 428
- Metoda append() 429
- Metoda insert() 429
- Metoda reverse() 430
- Metody delete() i deleteCharAt() 430
- Metoda replace() 431
- Metoda substring() 431
- Dodatkowe metody klasy StringBuffer 431
- Klasa StringBuilder 432
18. Pakiet java.lang 433
- Opakowania typów prostych 433
- Klasa Number 434
- Klasy Double i Float 434
- Metody isInfinite() i isNan() 437
- Klasy Byte, Short, Integer i Long 437
- Klasa Character 445
- Dodatki wprowadzone w celu obsługi punktów kodowych Unicode 446
- Klasa Boolean 449
- Klasa Void 449
- Klasa Process 450
- Klasa Runtime 451
- Zarządzanie pamięcią 452
- Wykonywanie innych programów 453
- Runtime.Version 453
- Klasa ProcessBuilder 455
- Klasa System 457
- Wykorzystanie metody currentTimeMillis() do obliczania czasu wykonywania programu 458
- Użycie metody arraycopy() 459
- Właściwości środowiska 459
- Interfejs System.Logger i klasa System.LoggerFinder 460
- Klasa Object 460
- Wykorzystanie metody clone() i interfejsu Cloneable 460
- Klasa Class 462
- Klasa ClassLoader 465
- Klasa Math 465
- Funkcje trygonometryczne 465
- Funkcje wykładnicze 466
- Funkcje zaokrągleń 466
- Inne metody klasy Math 467
- Klasa StrictMath 469
- Klasa Compiler 469
- Klasy Thread i ThreadGroup oraz interfejs Runnable 469
- Interfejs Runnable 469
- Klasa Thread 470
- Klasa ThreadGroup 472
- Klasy ThreadLocal i InheritableThreadLocal 475
- Klasa Package 475
- Klasa Module 476
- Klasa ModuleLayer 477
- Klasa RuntimePermission 477
- Klasa Throwable 477
- Klasa SecurityManager 477
- Klasa StackTraceElement 477
- Klasa StackWalker i interfejs StackWalker.StackFrame 478
- Klasa Enum 478
- Klasa ClassValue 479
- Interfejs CharSequence 479
- Interfejs Comparable 480
- Interfejs Appendable 480
- Interfejs Iterable 480
- Interfejs Readable 481
- Interfejs AutoCloseable 481
- Interfejs Thread.UncaughtExceptionHandler 481
- Podpakiety pakietu java.lang 481
- Podpakiet java.lang.annotation 482
- Podpakiet java.lang.instrument 482
- Podpakiet java.lang.invoke 482
- Podpakiet java.lang.management 482
- Podpakiet java.lang.module 482
- Podpakiet java.lang.ref 482
- Podpakiet java.lang.reflect 482
19. Pakiet java.util, część 1. - kolekcje 483
- Wprowadzenie do kolekcji 484
- Interfejsy kolekcji 485
- Interfejs Collection 486
- Interfejs List 488
- Interfejs Set 489
- Interfejs SortedSet 490
- Interfejs NavigableSet 490
- Interfejs Queue 491
- Interfejs Deque 492
- Klasy kolekcji 493
- Klasa ArrayList 494
- Klasa LinkedList 497
- Klasa HashSet 498
- Klasa LinkedHashSet 499
- Klasa TreeSet 499
- Klasa PriorityQueue 501
- Klasa ArrayDeque 501
- Klasa EnumSet 502
- Dostęp do kolekcji za pomocą iteratora 502
- Korzystanie z iteratora Iterator 504
- Pętla typu for-each jako alternatywa dla iteratora 505
- Spliteratory 506
- Przechowywanie w kolekcjach własnych klas 509
- Interfejs RandomAccess 510
- Korzystanie z map 510
- Interfejsy map 510
- Klasy map 516
- Komparatory 520
- Wykorzystanie komparatora 522
- Algorytmy kolekcji 526
- Klasa Arrays 531
- Starsze klasy i interfejsy 535
- Interfejs Enumeration 535
- Klasa Vector 536
- Klasa Stack 539
- Klasa Dictionary 540
- Klasa Hashtable 541
- Klasa Properties 544
- Wykorzystanie metod store() i load() 547
- Ostatnie uwagi na temat kolekcji 548
20. Pakiet java.util, część 2. - pozostałe klasy użytkowe 549
- Klasa StringTokenizer 549
- Klasa BitSet 551
- Klasy Optional, OptionalDouble, OptionalInt oraz OptionalLong 553
- Klasa Date 556
- Klasa Calendar 557
- Klasa GregorianCalendar 560
- Klasa TimeZone 561
- Klasa SimpleTimeZone 562
- Klasa Locale 563
- Klasa Random 564
- Klasy Timer i TimerTask 566
- Klasa Currency 568
- Klasa Formatter 569
- Konstruktory klasy Formatter 570
- Metody klasy Formatter 570
- Podstawy formatowania 570
- Formatowanie łańcuchów i znaków 573
- Formatowanie liczb 573
- Formatowanie daty i godziny 574
- Specyfikatory %n i %% 575
- Określanie minimalnej szerokości pola 576
- Określanie precyzji 577
- Używanie znaczników (flag) formatów 578
- Wyrównywanie danych wyjściowych 578
- Znaczniki spacji, plusa, zera i nawiasów 579
- Znacznik przecinka 580
- Znacznik # 580
- Opcja wielkich liter 580
- Stosowanie indeksu argumentu 581
- Zamykanie obiektu klasy Formatter 582
- Metoda printf() w Javie 582
- Klasa Scanner 582
- Konstruktory klasy Scanner 583
- Podstawy skanowania 584
- Kilka przykładów użycia klasy Scanner 587
- Ustawianie separatorów 590
- Pozostałe elementy klasy Scanner 591
- Klasy ResourceBundle, ListResourceBundle i PropertyResourceBundle 592
- Dodatkowe klasy i interfejsy użytkowe 596
- Podpakiety pakietu java.util 597
- java.util.concurrent, java.util.concurrent.atomic oraz java.util.concurrent.locks 598
- java.util.function 598
- java.util.jar 600
- java.util.logging 600
- java.util.prefs 600
- java.util.regex 600
- java.util.spi 601
- java.util.stream 601
- java.util.zip 601
21. Operacje wejścia-wyjścia: analiza pakietu java.io 603
- Klasy i interfejsy obsługujące operacje wejścia-wyjścia 604
- Klasa File 604
- Katalogi 607
- Stosowanie interfejsu FilenameFilter 608
- Alternatywna metoda listFiles() 609
- Tworzenie katalogów 609
- Interfejsy AutoCloseable, Closeable i Flushable 609
- Wyjątki operacji wejścia-wyjścia 610
- Dwa sposoby zamykania strumieni 610
- Klasy strumieni 611
- Strumienie bajtów 612
- Klasa InputStream 612
- Klasa OutputStream 613
- Klasa FileInputStream 613
- Klasa FileOutputStream 615
- Klasa ByteArrayInputStream 617
- Klasa ByteArrayOutputStream 618
- Filtrowane strumienie bajtów 620
- Buforowane strumienie bajtów 620
- Klasa SequenceInputStream 623
- Klasa PrintStream 625
- Klasy DataOutputStream i DataInputStream 627
- Klasa RandomAccessFile 628
- Strumienie znaków 629
- Klasa Reader 629
- Klasa Writer 629
- Klasa FileReader 629
- Klasa FileWriter 631
- Klasa CharArrayReader 632
- Klasa CharArrayWriter 633
- Klasa BufferedReader 634
- Klasa BufferedWriter 636
- Klasa PushbackReader 636
- Klasa PrintWriter 637
- Klasa Console 638
- Serializacja 639
- Interfejs Serializable 640
- Interfejs Externalizable 640
- Interfejs ObjectOutput 640
- Klasa ObjectOutputStream 641
- Interfejs ObjectInput 642
- Klasa ObjectInputStream 642
- Przykład serializacji 643
- Korzyści wynikające ze stosowania strumieni 645
22. System NIO 647
- Klasy systemu NIO 647
- Podstawy systemu NIO 648
- Bufory 648
- Kanały 648
- Zestawy znaków i selektory 651
- Udoskonalenia dodane w systemie NIO.2 651
- Interfejs Path 651
- Klasa Files 651
- Klasa Paths 654
- Interfejsy atrybutów plików 655
- Klasy FileSystem, FileSystems i FileStore 657
- Stosowanie systemu NIO 657
- Stosowanie systemu NIO dla operacji wejścia-wyjścia na kanałach 658
- Stosowanie systemu NIO dla operacji wejścia-wyjścia na strumieniach 666
- Stosowanie systemu NIO dla operacji na ścieżkach i systemie plików 668
23. Obsługa sieci 675
- Podstawy działania sieci 675
- Klasy i interfejsy pakietu java.net obsługujące komunikację sieciową 676
- Klasa InetAddress 677
- Metody wytwórcze 677
- Metody klasy 678
- Klasy Inet4Address oraz Inet6Address 679
- Gniazda klientów TCP/IP 679
- URL 682
- Klasa URLConnection 683
- Klasa HttpURLConnection 685
- Klasa URI 687
- Pliki cookie 687
- Gniazda serwerów TCP/IP 688
- Datagramy 688
- Klasa DatagramSocket 689
- Klasa DatagramPacket 689
- Przykład użycia datagramów 690
- Prezentacja pakietu java.net.http 692
- Trzy kluczowe elementy 692
- Prosty przykład użycia API klienta HTTP 695
- Czego jeszcze warto dowiedzieć się o pakiecie java.net.http? 696
24. Obsługa zdarzeń 697
- Dwa mechanizmy obsługi zdarzeń 697
- Model obsługi zdarzeń oparty na ich delegowaniu 698
- Zdarzenia 698
- Źródła zdarzeń 698
- Obiekty nasłuchujące zdarzeń 699
- Klasy zdarzeń 699
- Klasa ActionEvent 701
- Klasa AdjustmentEvent 701
- Klasa ComponentEvent 702
- Klasa ContainerEvent 702
- Klasa FocusEvent 703
- Klasa InputEvent 704
- Klasa ItemEvent 704
- Klasa KeyEvent 705
- Klasa MouseEvent 706
- Klasa MouseWheelEvent 707
- Klasa TextEvent 708
- Klasa WindowEvent 708
- Źródła zdarzeń 709
- Interfejsy nasłuchujące zdarzeń 710
- Interfejs ActionListener 711
- Interfejs AdjustmentListener 711
- Interfejs ComponentListener 711
- Interfejs ContainerListener 711
- Interfejs FocusListener 711
- Interfejs ItemListener 711
- Interfejs KeyListener 711
- Interfejs MouseListener 712
- Interfejs MouseMotionListener 712
- Interfejs MouseWheelListener 712
- Interfejs TextListener 712
- Interfejs WindowFocusListener 712
- Interfejs WindowListener 712
- Stosowanie modelu delegowania zdarzeń 713
- Kluczowe zagadnienia tworzenia aplikacji graficznych z użyciem AWT 713
- Obsługa zdarzeń generowanych przez mysz 714
- Obsługa zdarzeń generowanych przez klawiaturę 717
- Klasy adapterów 720
- Klasy wewnętrzne 722
- Anonimowa klasa wewnętrzna 724
25. Wprowadzenie do AWT: praca z oknami, grafiką i tekstem 727
- Klasy AWT 728
- Podstawy okien 730
- Klasa Component 730
- Klasa Container 730
- Klasa Panel 730
- Klasa Window 731
- Klasa Frame 731
- Klasa Canvas 731
- Praca z oknami typu Frame 731
- Ustawianie wymiarów okna 731
- Ukrywanie i wyświetlanie okna 732
- Ustawianie tytułu okna 732
- Zamykanie okna typu Frame 732
- Metoda paint() 732
- Wyświetlanie łańcuchów znaków 732
- Określanie koloru tekstu i tła 733
- Żądanie ponownego wyświetlenia zawartości okna 733
- Tworzenie aplikacji korzystających z klasy Frame 734
- Wprowadzenie do stosowania grafiki 735
- Rysowanie odcinków 735
- Rysowanie prostokątów 735
- Rysowanie elips, kół i okręgów 736
- Rysowanie łuków 736
- Rysowanie wielokątów 736
- Prezentacja metod rysujących 737
- Dostosowywanie rozmiarów obiektów graficznych 738
- Praca z klasą Color 739
- Metody klasy Color 740
- Ustawianie bieżącego koloru kontekstu graficznego 741
- Program demonstrujący zastosowanie klasy Color 741
- Ustawianie trybu rysowania 742
- Praca z czcionkami 743
- Określanie dostępnych czcionek 745
- Tworzenie i wybieranie czcionek 746
- Uzyskiwanie informacji o czcionkach 748
- Zarządzanie tekstowymi danymi wyjściowymi z wykorzystaniem klasy FontMetrics 749
26. Stosowanie kontrolek AWT, menedżerów układu graficznego oraz menu 753
- Podstawy kontrolek AWT 754
- Dodawanie i usuwanie kontrolek 754
- Odpowiadanie na zdarzenia kontrolek 754
- Wyjątek HeadlessException 755
- Etykiety 755
- Stosowanie przycisków 756
- Obsługa zdarzeń przycisków 757
- Stosowanie pól wyboru 760
- Obsługa zdarzeń pól wyboru 761
- Klasa CheckboxGroup 762
- Kontrolki list rozwijanych 764
- Obsługa zdarzeń list rozwijanych 765
- Stosowanie list 766
- Obsługa zdarzeń generowanych przez listy 767
- Zarządzanie paskami przewijania 769
- Obsługa zdarzeń generowanych przez paski przewijania 770
- Stosowanie kontrolek typu TextField 772
- Obsługa zdarzeń generowanych przez kontrolkę TextField 773
- Stosowanie kontrolek typu TextArea 774
- Wprowadzenie do menedżerów układu graficznego komponentów 776
- FlowLayout 777
- BorderLayout 778
- Stosowanie obramowań 779
- GridLayout 781
- Klasa CardLayout 782
- Klasa GridBagLayout 785
- Menu i paski menu 789
- Okna dialogowe 794
- Przesłanianie metody paint() 797
27. Obrazy 799
- Formaty plików 799
- Podstawy przetwarzania obrazów: tworzenie, wczytywanie i wyświetlanie 800
- Tworzenie obiektu obrazu 800
- Ładowanie obrazu 800
- Wyświetlanie obrazu 801
- Podwójne buforowanie 802
- Interfejs ImageProducer 804
- Klasa MemoryImageSource 805
- Interfejs ImageConsumer 806
- Klasa ImageFilter 809
- Klasa CropImageFilter 809
- Klasa RGBImageFilter 810
- Dodatkowe klasy obsługujące obrazy 821
28. Narzędzia współbieżności 823
- Pakiety interfejsu Concurrent API 824
- Pakiet java.util.concurrent 824
- Pakiet java.util.concurrent.atomic 825
- Pakiet java.util.concurrent.locks 825
- Korzystanie z obiektów służących do synchronizacji 825
- Klasa Semaphore 825
- Klasa CountDownLatch 830
- CyclicBarrier 832
- Klasa Exchanger 834
- Klasa Phaser 835
- Korzystanie z egzekutorów 842
- Przykład prostego egzekutora 842
- Korzystanie z interfejsów Callable i Future 844
- Typ wyliczeniowy TimeUnit 846
- Kolekcje współbieżne 847
- Blokady 847
- Operacje atomowe 850
- Programowanie równoległe przy użyciu frameworku Fork/Join 851
- Najważniejsze klasy frameworku Fork/Join 852
- Strategia dziel i zwyciężaj 855
- Prosty przykład użycia frameworku Fork/Join 855
- Znaczenie poziomu równoległości 858
- Przykład użycia klasy RecursiveTask 860
- Asynchroniczne wykonywanie zadań 862
- Anulowanie zadania 863
- Określanie statusu wykonania zadania 863
- Ponowne uruchamianie zadania 863
- Pozostałe zagadnienia 863
- Wskazówki dotyczące stosowania frameworku Fork/Join 865
- Pakiet Concurrency Utilities a tradycyjne metody języka Java 866
29. API strumieni 867
- Podstawowe informacje o strumieniach 867
- Interfejsy strumieni 868
- Jak można uzyskać strumień? 870
- Prosty przykład stosowania strumieni 871
- Operacje redukcji 874
- Stosowanie strumieni równoległych 876
- Odwzorowywanie 878
- Tworzenie kolekcji 882
- Iteratory i strumienie 885
- Stosowanie typu Iterator i strumieni 885
- Stosowanie spliteratorów 886
- Inne możliwości API strumieni 889
30. Wyrażenia regularne i inne pakiety 891
- Przetwarzanie wyrażeń regularnych 891
- Klasa Pattern 892
- Klasa Matcher 892
- Składnia wyrażeń regularnych 893
- Przykład dopasowywania do wzorca 893
- Dwie opcje dopasowywania do wzorca 898
- Przegląd wyrażeń regularnych 898
- Refleksje 898
- Zdalne wywoływanie metod (RMI) 901
- Prosta aplikacja typu klient-serwer wykorzystująca RMI 902
- Formatowanie dat i czasu przy użyciu pakietu java.text 905
- Klasa DateFormat 905
- Klasa SimpleDateFormat 906
- Interfejs API dat i czasu - java.time 908
- Podstawowe klasy do obsługi dat i czasu 908
- Formatowanie dat i godzin 910
- Analiza łańcuchów zawierających daty i godziny 912
- Inne możliwości pakietu java.time 913
CZĘŚĆ III. WPROWADZENIE DO PROGRAMOWANIA GUI PRZY UŻYCIU PAKIETU SWING
31. Wprowadzenie do pakietu Swing 917
- Geneza powstania biblioteki Swing 917
- Bibliotekę Swing zbudowano na bazie zestawu narzędzi AWT 918
- Podstawowe cechy biblioteki Swing 918
- Komponenty biblioteki Swing są lekkie 918
- Biblioteka Swing obsługuje dołączany wygląd i sposób obsługi 919
- Podobieństwo do architektury MVC 919
- Komponenty i kontenery 920
- Komponenty 920
- Kontenery 921
- Panele kontenerów najwyższego poziomu 921
- Pakiety biblioteki Swing 922
- Prosta aplikacja na bazie biblioteki Swing 922
- Obsługa zdarzeń 926
- Rysowanie w bibliotece Swing 929
- Podstawy rysowania 929
- Wyznaczanie obszaru rysowania 930
- Przykład rysowania 930
32. Przewodnik po pakiecie Swing 933
- Klasy JLabel i ImageIcon 933
- Klasa JTextField 935
- Przyciski biblioteki Swing 936
- Klasa JButton 937
- Klasa JToggleButton 939
- Pola wyboru 940
- Przyciski opcji 942
- Klasa JTabbedPane 944
- Klasa JScrollPane 946
- Klasa JList 948
- Klasa JComboBox 951
- Drzewa 953
- Klasa JTable 955
33. Wprowadzenie do systemu menu pakietu Swing 959
- Podstawy systemu menu 959
- Przegląd klas JMenuBar, JMenu oraz JMenuItem 961
- Klasa JMenuBar 961
- Klasa JMenu 962
- Klasa JMenuItem 963
- Tworzenie menu głównego 963
- Dodawanie mnemonik i kombinacji klawiszy do opcji menu 967
- Dodawanie obrazów i etykiet ekranowych do menu 969
- Stosowanie klas JRadioButtonMenuItem i JCheckBoxMenuItem 970
- Tworzenie menu podręcznych 972
- Tworzenie paska narzędzi 974
- Stosowanie akcji 977
- Finalna postać programu MenuDemo 981
- Dalsze poznawanie pakietu Swing 987
CZĘŚĆ IV. STOSOWANIE JAVY W PRAKTYCE
34. Java Beans 991
- Czym jest komponent typu Java Bean? 991
- Zalety komponentów Java Beans 992
- Introspekcja 992
- Wzorce właściwości 992
- Wzorce projektowe dla zdarzeń 993
- Metody i wzorce projektowe 994
- Korzystanie z interfejsu BeanInfo 994
- Właściwości ograniczone 994
- Trwałość 995
- Interfejs Customizer 995
- Interfejs Java Beans API 995
- Klasa Introspector 997
- Klasa PropertyDescriptor 997
- Klasa EventSetDescriptor 997
- Klasa MethodDescriptor 997
- Przykład komponentu Java Bean 997
35. Serwlety 1001
- Podstawy 1001
- Cykl życia serwletu 1002
- Sposoby tworzenia serwletów 1002
- Korzystanie z serwera Tomcat 1003
- Przykład prostego serwletu 1004
- Tworzenie i kompilacja kodu źródłowego serwletu 1004
- Uruchamianie serwera Tomcat 1005
- Uruchamianie przeglądarki i generowanie żądania 1005
- Interfejs Servlet API 1005
- Pakiet javax.servlet 1005
- Interfejs Servlet 1006
- Interfejs ServletConfig 1006
- Interfejs ServletContext 1007
- Interfejs ServletRequest 1007
- Interfejs ServletResponse 1007
- Klasa GenericServlet 1007
- Klasa ServletInputStream 1007
- Klasa ServletOutputStream 1009
- Klasy wyjątków związanych z serwletami 1009
- Odczytywanie parametrów serwletu 1009
- Pakiet javax.servlet.http 1010
- Interfejs HttpServletRequest 1011
- Interfejs HttpServletResponse 1011
- Interfejs HttpSession 1011
- Klasa Cookie 1013
- Klasa HttpServlet 1014
- Obsługa żądań i odpowiedzi HTTP 1014
- Obsługa żądań GET protokołu HTTP 1014
- Obsługa żądań POST protokołu HTTP 1016
- Korzystanie ze znaczników kontekstu użytkownika 1017
- Śledzenie sesji 1019
DODATKI
A. Komentarze dokumentujące 1023
- Znaczniki narzędzia javadoc 1023
- Znacznik @author 1024
- Znacznik {@code} 1024
- Znacznik @deprecated 1025
- Znacznik {@docRoot} 1025
- Znacznik @exception 1025
- Znacznik @hidden 1025
- Znacznik {@index} 1025
- Znacznik {@inheritDoc} 1025
- Znacznik {@link} 1025
- Znacznik {@linkplain} 1026
- Znacznik {@literal} 1026
- Znacznik @param 1026
- Znacznik @provides 1026
- Znacznik @return 1026
- Znacznik @see 1026
- Znacznik @serial 1026
- Znacznik @serialData 1027
- Znacznik @serialField 1027
- Znacznik @since 1027
- Znacznik {@summary} 1027
- Znacznik @throws 1027
- Znacznik @uses 1027
- Znacznik {@value} 1027
- Znacznik @version 1028
- Ogólna postać komentarzy dokumentacyjnych 1028
- Wynik działania narzędzia javadoc 1028
- Przykład korzystający z komentarzy dokumentacyjnych 1028
B. Wprowadzenie do JShell 1031
- Podstawy JShell 1031
- Wyświetlanie, edytowanie i ponowne wykonywanie kodu 1033
- Dodanie metody 1034
- Utworzenie klasy 1035
- Stosowanie interfejsu 1036
- Przetwarzanie wyrażeń i wbudowane zmienne 1037
- Importowanie pakietów 1037
- Wyjątki 1038
- Inne polecenia JShell 1038
- Dalsze poznawanie możliwości JShell 1039
C. Kompilowanie i uruchamianie prostych programów w jednym kroku 1041