wprowadź własne kryteria wyszukiwania książek: (jak szukać?)
Twój koszyk:   1 egz. / 202.60 192,47   zamówienie wysyłkowe >>>
Strona główna > opis książki
English version
Książki:

polskie
podział tematyczny
 
anglojęzyczne
podział tematyczny
 
Newsletter:

Zamów informacje o nowościach z wybranego tematu
 
Informacje:

o księgarni

koszty wysyłki

kontakt

Cookies na stronie

 
Szukasz podpowiedzi?
Nie znasz tytułu?
Pomożemy Ci, napisz!


Podaj adres e-mail:


możesz też zadzwonić
+48 512 994 090

JAVA KOMPENDIUM PROGRAMISTY


SCHILDT H.

wydawnictwo: HELION, 2020, wydanie I

cena netto: 202.60 Twoja cena  192,47 zł + 5% vat - dodaj do koszyka

Java

Kompendium programisty

Mimo upływu lat Java wciąż pozostaje jednym z najważniejszych języków programowania, konsekwentnie wybieranym przez profesjonalnych deweloperów. Jest równocześnie nowoczesna i dojrzała. Twórcy Javy od początku jej istnienia stawiali na elastyczność i stale dostosowywali ten język do zmieniających się warunków pracy programistów. Od pierwszego wydania Java zapewnia narzędzia do programowania rozwiązań internetowych, jest więc naturalnym wyborem programistów tworzących aplikacje internetowe. Jej możliwości jednak są o wiele większe - i rosną z każdą kolejną wersją. Konieczne jest więc sukcesywne zapoznawanie się z nowościami i ze zmianami wprowadzanymi w poszczególnych wydaniach Java SE.

Ta książka jest jedenastym wydaniem wyczerpującego kompendium programisty Javy, w pełni zaktualizowanym, uzupełnionym o nowości wprowadzone w Java SE 11.

Opisuje język kompleksowo: jego składnię, słowa kluczowe oraz najistotniejsze zasady programowania. Zawiera także informacje o najważniejszych składnikach biblioteki Javy, takich jak klasy wejścia-wyjścia, framework Collections, biblioteka strumieni oraz narzędzia programowania współbieżnego. Oczywiście szczegółowo został tu opisany inny niezwykle ważny element - system modułów Javy. Przedstawiono też interaktywne narzędzie programistyczne JShell. Podręcznik jest przejrzysty, napisany jasnym i zrozumiałym językiem, co zdecydowanie ułatwia naukę. Co ważne, poszczególne zagadnienia zilustrowano licznymi przykładowymi fragmentami kodu źródłowego. Z tak przygotowanego materiału skorzystają wszyscy programiści Javy, zarówno początkujący, jak i profesjonalni deweloperzy.

W tej książce między innymi:

  • zasady programowania obiektowego
  • klasy wejścia-wyjścia oraz obsługa wyjątków
  • interfejsy i pakiety
  • wnioskowanie typów zmiennych lokalnych
  • obsługa zdarzeń, moduły i wyrażenia lambda
  • AWT, Swing, JavaBean i serwlety

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
Ograniczenia var 85
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
Przykład dostępu 200
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
Zakleszczenie 256
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
Metody mostu 351
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 PixelGrabber 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

1048 stron, oprawa twarda

Po otrzymaniu zamówienia poinformujemy pocztą e-mail lub telefonicznie,
czy wybrany tytuł polskojęzyczny lub anglojęzyczny jest aktualnie na półce księgarni.

 
Wszelkie prawa zastrzeżone PROPRESS sp. z o.o. www.bankowa.pl 2000-2022