Szczegóły ebooka

Nauka Javy. Wprowadzenie do tworzenia aplikacji do rzeczywistych zastosowań. Wydanie V

Nauka Javy. Wprowadzenie do tworzenia aplikacji do rzeczywistych zastosowań. Wydanie V

Marc Loy, Patrick Niemeyer, Daniel Leuck

Ebook

Twórcy Javy od początku historii tego języka śmiało wprowadzali kolejne awangardowe innowacje, a pisane w niej aplikacje miały swój udział w napędzaniu internetowego postępu. Obecnie Java jest uważana za najpopularniejszy język programowania na świecie, a miliony deweloperów wciąż tworzą za jej pomocą oprogramowanie dla niemal każdego urządzenia wyposażonego w procesor. Java jest wyjątkowo wszechstronnym narzędziem: pozwala napisać zarówno prostą aplikację mobilną, jak i złożony system internetowy. Pozostaje przy tym stosunkowo prosta w nauce - co sprawia, że jest idealnym językiem dla początkujących, którzy mają ambicję dojścia do profesjonalnego poziomu.

Ta książka jest praktycznym przewodnikiem dla każdego, kto chce zdobyć doświadczenie w tworzeniu rzeczywistych aplikacji w Javie. To również znakomity kurs programowania obiektowego dla początkujących, umożliwiający gruntowne zrozumienie podstaw języka Java i jego interfejsów API. Wyczerpująco opisano tu biblioteki klas, techniki programowania oraz idiomy. Nie zabrakło zaawansowanych zagadnień, takich jak wyrażenia lambda czy serwlety. W tym przejrzanym i zaktualizowanym wydaniu ujęto zmiany wprowadzone zarówno w wersji 11 Javy, jak i w przeglądowych wersjach 12, 13 i 14. Przedstawiono więc takie nowości jak interferencja typów w typach sparametryzowanych, ulepszenia w obsłudze wyjątków czy nowe środowisko testowe jshell.

W książce między innymi:

  • przygotowanie środowiska pracy i konfiguracja przydatnych narzędzi
  • typy, instrukcje, wyrażenia oraz obiekty w Javie
  • obsługa wątków i pakiet współbieżności Javy
  • błędy i wyjątki
  • interfejs API wyrażeń regularnych
  • tworzenie zaawansowanych aplikacji i usług sieciowych

Java: niezawodny kod, aplikacja, która działa!


Przedmowa 11

1. Nowoczesny język 17

  • Java 17
    • Pochodzenie Javy 18
    • Okres dojrzewania 19
  • Maszyna wirtualna 20
  • Java a inne języki programowania 23
  • Bezpieczeństwo projektowania 26
    • Upraszczaj, upraszczaj i jeszcze raz upraszczaj 26
    • Bezpieczeństwo typów i wiązanie metod 27
    • Realizacja przyrostowa 28
    • Dynamiczne zarządzanie pamięcią 28
    • Obsługa błędów 29
    • Wątki 30
    • Skalowalność 30
  • Bezpieczeństwo implementacji 31
    • Weryfikator 32
    • Ładowarka klas 33
    • Zarządca bezpieczeństwa 34
  • Bezpieczeństwo na poziomie aplikacji i użytkownika 35
  • Harmonogram Javy 35
    • Przeszłość: Java 1.0 - Java 11 36
    • Teraźniejszość: Java 14 38
    • Przyszłość 39
    • Dostępność 40

2. Pierwsza aplikacja 41

  • Narzędzia i środowisko Javy 41
    • Instalowanie JDK 42
    • Instalowanie OpenJDK w systemie Linux 43
    • Instalowanie OpenJDK w systemie macOS 43
    • Instalowanie OpenJDK w systemie Windows 44
    • Konfigurowanie środowiska IntelliJ IDEA i tworzenie projektu 46
    • Uruchomienie projektu 50
    • Pobieranie przykładów kodu 51
  • HelloJava 51
    • Klasy 54
    • Metoda main() 55
    • Klasy i obiekty 56
    • Zmienne i typy klasowe 56
    • HelloComponent 57
    • Dziedziczenie 58
    • Klasa JComponent 59
    • Relacje i szukanie winnego 59
    • Pakiety i importowanie 60
    • Metoda paintComponent() 62
  • HelloJava2: drugie podejście 63
    • Zmienne instancyjne 64
    • Konstruktory 65
    • Zdarzenia 67
    • Metoda repaint() 69
    • Interfejsy 70
  • Żegnaj i ponownie witaj 71

3. Narzędzia pracy 73

  • Środowisko JDK 73
  • Maszyna wirtualna Javy 74
  • Uruchamianie aplikacji Javy 74
    • Właściwości systemowe 76
  • Ścieżka klas (classpath) 76
    • Narzędzie javap 78
    • Moduły 78
  • Kompilator Javy 78
  • Natychmiastowe sprawdzanie działania kodu Javy 80
  • Pliki JAR 85
    • Kompresja plików 85
    • Narzędzie jar 86
    • Narzędzie pack200 88
  • Czas przygotowań 89

4. Język Java 91

  • Kodowanie tekstu 92
  • Komentarze 94
    • Komentarze javadoc 94
  • Zmienne i stałe 96
  • Typy 98
    • Typy proste 99
    • Typy referencyjne 103
    • Inferencja typów 104
    • Przekazywanie referencji 105
    • Kilka słów na temat obiektów String 106
  • Instrukcje i wyrażenia 106
    • Instrukcje 107
    • Wyrażenia 115
  • Tablice 120
    • Typy tablicowe 121
    • Tworzenie i inicjowanie tablicy 121
    • Używanie tablic 123
    • Tablice anonimowe 125
    • Tablice wielowymiarowe 125
  • Typy, klasy i tablice, o rany! 127

5. Obiekty w Javie 129

  • Klasy 129
    • Deklarowanie klas i tworzenie ich instancji 131
    • Uzyskiwanie dostępu do pól i metod 132
    • Składowe statyczne 137
  • Metody 139
    • Zmienne lokalne 140
    • Przesłanianie 141
    • Metody statyczne 142
    • Inicjowanie zmiennych lokalnych 144
    • Przekazywanie argumentów i referencje 145
    • Klasy opakowujące dla typów prostych 146
    • Przeciążanie metod 148
  • Tworzenie obiektów 149
    • Konstruktory 150
    • Praca z konstruktorami przeciążonymi 151
  • Niszczenie obiektów 152
    • Mechanizm odzyskiwania pamięci 153
  • Pakiety 154
    • Importowanie klas 154
    • Pakiety niestandardowe 156
    • Widoczność i dostępność składowych 157
    • Kompilowanie pakietów 159
  • Zaawansowane projektowanie klas 160
    • Tworzenie podklas i dziedziczenie 160
    • Interfejsy 165
    • Klasy wewnętrzne 167
    • Anonimowe klasy wewnętrzne 168
  • Organizowanie zawartości i uwzględnianie występowania błędów 170

6. Obsługa błędów i rejestrowanie 173

  • Wyjątki 174
    • Klasy błędów i wyjątków 174
    • Obsługa wyjątków 176
    • Bąbelkowanie 179
    • Ślady stosu 180
    • Wyjątki sprawdzane i niesprawdzane 181
    • Rzucanie wyjątków 182
    • Kłopotliwe try 185
    • Klauzula finally 186
    • try-with-resources 186
    • Kwestie związane z wydajnością 188
  • Asercje 188
    • Włączanie i wyłączanie asercji 189
    • Używanie asercji 190
  • API rejestrowania 191
    • Przegląd 191
    • Poziomy rejestrowania 193
    • Prosty przykład 194
    • Właściwości konfiguracyjne rejestrowania 195
    • Klasa Logger 197
    • Wydajność 197
  • Wyjątki w praktyce 198

7. Kolekcje oraz typy i metody sparametryzowane 199

  • Kolekcje 199
    • Interfejs Collection 200
    • Typy kolekcji 201
    • Interfejs Map 202
  • Ograniczenia typów 204
    • Kontenery, czyli budowanie lepszej pułapki na myszy 205
    • Czy kontenery można naprawić? 206
  • Wprowadzenie do typów i metod sparametryzowanych 206
    • Kilka słów o typach 209
  • "Łyżka nie istnieje" 210
    • Wymazywanie 210
    • Typy surowe 212
  • Relacje typów sparametryzowanych 213
    • Dlaczego Listnie jest typem List? 215
  • Rzutowania 216
    • Konwertowanie między kolekcjami a tablicami 217
    • Iterator 217
  • Działanie metody sort() 218
  • Aplikacja: drzewa na planszy 219
  • Podsumowanie 220

8. Praca z tekstem i podstawowe narzędzia 223

  • Łańcuchy znaków - klasa String 223
    • Konstruowanie łańcuchów znaków 224
    • Tekstowe reprezentacje z różnych elementów 225
    • Porównywanie łańcuchów znaków 226
    • Wyszukiwanie 227
    • Podsumowanie metod klasy String 227
  • Różne elementy z tekstowych reprezentacji 229
    • Parsowanie liczb prostych 229
    • Tokenizacja tekstu 230
  • Wyrażenia regularne 232
    • Notacja wyrażeń regularnych 232
    • Interfejs API java.util.regex 238
  • Narzędzia matematyczne 242
    • Klasa java.lang.Math 243
    • Duże i dokładne liczby 246
  • Daty i godziny 248
    • Lokalne daty i godziny 248
    • Porównywanie oraz zmiana dat i godzin 249
    • Strefy czasowe 250
    • Parsowanie i formatowanie dat i godzin 251
    • Błędy parsowania 253
    • Znaczniki czasu 254
  • Inne przydatne narzędzia 254

9. Wątki 257

  • Wprowadzenie do wątków 258
    • Klasa Thread i interfejs Runnable 258
    • Sterowanie wątkami 261
    • "Śmierć" wątku 266
  • Synchronizacja 268
    • Szeregowanie dostępu do metod 268
    • Uzyskiwanie dostępu do zmiennych klasowych i instancyjnych z wielu wątków 273
  • Planowanie i priorytety 274
    • Stany wątku 275
    • Podział czasu 276
    • Priorytety 277
    • Oddawanie sterowania 278
  • Wydajność wątków 279
    • Koszt synchronizacji 279
    • Wykorzystywanie zasobów wątku 279
  • Narzędzia do obsługi współbieżności 280

10. Aplikacje desktopowe 283

  • Przyciski, suwaki oraz pola tekstowe, o rety! 284
    • Hierarchie komponentów 284
    • Architektura Model-Widok-Kontroler 284
    • Etykiety i przyciski 286
    • Komponenty tekstowe 292
    • Inne komponenty 299
  • Kontenery i układy 303
    • Ramki i okna 303
    • Klasa JPanel 305
    • Menedżery układu 306
  • Zdarzenia 314
    • Zdarzenia myszy 315
    • Zdarzenia działań 318
    • Zdarzenia zmian 320
    • Inne zdarzenia 321
  • Okna modalne i wyskakujące okienka 322
    • Okna dialogowe z komunikatami 322
    • Okna dialogowe z potwierdzeniem 325
    • Okna dialogowe z danymi wejściowymi 326
  • Rozważania na temat obsługi wątków 326
    • Klasa SwingUtilities i aktualizacje komponentów 327
    • Minutniki 330
  • Kolejne kroki 332
    • Menu 333
    • Preferencje 335
    • Komponenty niestandardowe oraz Java2D 335
    • JavaFX 335
  • Interfejs użytkownika i doświadczenie użytkownika 336

11. Obsługa sieci i operacje we-wy 337

  • Strumienie 337
    • Podstawowe operacje we-wy 339
    • Strumienie znaków 341
    • Klasy opakowujące dla strumieni 342
    • Klasa java.io.File 346
    • Strumienie plików 351
    • Klasa RandomAccessFile 353
  • Interfejs API plików NIO 354
    • Klasy FileSystem i Path 355
    • Operacje interfejsu plików NIO 356
  • Pakiet NIO 360
    • Asynchroniczne operacje we-wy 360
    • Wydajność 361
    • Pliki zmapowane i zablokowane 361
    • Kanały 361
    • Bufory 362
    • Kodery i dekodery znaków 365
    • FileChannel 367
  • Programowanie sieciowe 370
  • Gniazda 372
    • Klienty i serwery 373
    • Klient DateAtHost 376
    • Gra rozproszona 378
  • Więcej do odkrycia 387

12. Programowanie aplikacji internetowych 389

  • Adresy URL 389
  • Klasa URL 390
    • Strumień danych 391
    • Pobieranie zawartości jako obiektu 392
    • Zarządzanie połączeniami 393
    • Procedury obsługi w praktyce 394
    • Przydatne frameworki procedur obsługi 394
  • Komunikacja z aplikacjami internetowymi 395
    • Korzystanie z metody GET 395
    • Korzystanie z metody POST 396
    • Obiekt HttpURLConnection 399
    • SSL i bezpieczna komunikacja internetowa 400
  • Aplikacje internetowe Javy 400
    • Cykl życia serwletu 402
    • Serwlety 402
    • Serwlet HelloClient 404
    • Odpowiedź serwletu 405
    • Parametry serwletu 406
    • Serwlet ShowParameters 408
    • Zarządzanie sesjami użytkowników 409
    • Serwlet ShowSession 410
  • Kontenery serwletów 412
    • Konfigurowanie za pomocą pliku web.xml oraz adnotacji 413
    • Mapowania wzorców adresów URL 416
    • Wdrażanie serwletu HelloClient 416
  • WWW - sieć na cały świat rozległa 417

13. Rozszerzanie Javy 419

  • Wydania Javy 419
    • JCP i JSR 420
  • Wyrażenia lambda 420
    • Modernizacja kodu 421
  • Rozszerzanie Javy poza podstawowe funkcjonalności 426
  • Końcowe podsumowanie i kolejne kroki 427

A. Przykłady kodu i program IntelliJ IDEA 429

Słowniczek 443

  • Tytuł: Nauka Javy. Wprowadzenie do tworzenia aplikacji do rzeczywistych zastosowań. Wydanie V
  • Autor: Marc Loy, Patrick Niemeyer, Daniel Leuck
  • Tytuł oryginału: Learning Java: An Introduction to Real-World Programming with Java, 5th Edition
  • Tłumaczenie: Lech Lachowski, Rafał Jońca
  • ISBN: 978-83-283-7129-3, 9788328371293
  • Data wydania: 2021-02-16
  • Format: Ebook
  • Identyfikator pozycji: najav5
  • Wydawca: Helion