Opis
Książka przedstawia sposoby i techniki programowania użyteczne we wszelkich zastosowaniach języka Java. W publikacji akcentowany jest kontekst praktyczny: jak i do czego poszczególnych narzędzi językowych używać. Specjalna uwaga zwracana jest na nowe elementy języka, dostępne w wersjach 8 i 9. Rozbudowane rozdziały o kolekcjach, wejściu-wyjściu, programowaniu współbieżnym i dynamicznym stanowią swoiste kompendia, które dają nie tylko orientację co do zestawu dostępnych środków programowania, ale również omawiają ważne szczegóły i niuanse ich zastosowań. Zakłada się, że czytelnik ma orientację w podstawach programowania w języku Java, ale niekoniecznie musi być zaawansowanym programistą. Dlatego ważne bloki tematyczne (takie jak np. programowanie obiektowe i funkcyjne w Javie) omawiane są od podstaw. Do interesujących szczegółowych tematów poruszanych w książce należą: - definiowanie metod w interfejsach (w tym metod prywatnych, poczynając od Javy w wersji 9), - lambda-wyrażenia i przetwarzanie strumieniowe, - obiekty typu Optional jako monady oraz ich użycie, - spliteratory, - zadania typu CountedCompleter jako kontynuacje oraz ich zastosowania, - zadania typu CompletableFuture (dostępne od Javy 8) i ich praktyczne użycie, - wyspecjalizowane synchronizatory, w tym - nowe w Javie 8 - obiekty typu StampedLock, - zastosowanie refleksji oraz uchwytów metod (MethodHandle), - tworzenie dynamicznych klas i obiektów typu proxy, - zastosowania JavaBeans i delegacyjnego modelu obsługi zdarzeń zmian ich właściwości, - definiowanie i przetwarzanie adnotacji (w tym definiowanie procesorów adnotacji), - użycie skryptów z poziomu aplikacji Javy. Spis treściWstęp 9 1. Klasy 13 1.1. Abstrakcja i hermetyzacja 15 1.2. Enumeracje 17 1.3. Definiowanie klas 22 1.4. Wykorzystanie składowych statycznych 25 1.5. Przeciążanie metod i konstruktorów 26 1.6. Klasy i obiekty niezmienne 27 1.7. Inicjowanie 28 1.8. Singletony 35 1.9. Klasy opakowujące typy proste 36 2. Ponowne wykorzystanie klas 41 2.1. Dziedziczenie 43 2.2. Konwersje referencyjne 48 2.3. Stwierdzanie typu 50 2.4. Dziedziczenie w Javie 52 2.5. Przedefiniowanie metod 52 2.6. Kowariancja typów wyników 56 2.7. Przedefiniowanie metod w wyliczeniach 57 2.8. Przedefiniowanie a wyjątki 58 2.9. Przedefiniowanie a przeciążanie, przesłanianie i pokrywanie 59 2.10. Adnotacja @override 60 2.11. Metody wirtualne i polimorfizm 62 2.12. Kompozycja 67 2.13. Kompozycja a dziedziczenie 68 2.14. Reguły ponownego wykorzystania klas 71 3. Wyjątki 73 3.1. Obsługa wyjątków 75 3.2. Zgłaszanie wyjątków 83 3.3. Ponowne zgłaszanie wyjątków 85 3.4. Niskopoziomowe przyczyny i łańcuchowanie wyjątków 90 3.5. Wykorzystanie informacji o śladzie stosu 91 4. Interfejsy i klasy wewnętrzne 93 4.1. Metody i klasy abstrakcyjne 95 4.2. Pojęcie interfejsu 97 4.3. Problem wielodziedziczenia 97 4.4. Definiowanie i implementowanie interfejsów 99 4.5. Interfejsy jako typy danych 102 4.6. Implementacja metod w interfejsach 106 4.7. Mixiny 107 4.8. Właściwości metod domyślnych 108 4.9. Prywatne metody w interfejsach 111 4.10. Pojęcie klasy wewnętrznej 113 4.11. Przykładowe zastosowanie klasy wewnętrznej 114 4.12. Anonimowe klasy wewnętrzne 117 4.13. Lokalne klasy wewnętrzne 119 5. Typy i metody sparametryzowane (generics) 123 5.1. Definiowanie typów sparametryzowanych. Typy surowe i czyszczenie typów 125 5.2. Ograniczenia parametrów typu 128 5.3. Restrykcje 129 5.4. Metody sparametryzowane 131 5.5. Uniwersalne argumenty typu 131 6. Elementy programowania funkcyjnego w Javie 8. Przegląd pragmatyczny 137 6.1. O programowaniu funkcyjnym 139 6.2. Interfejsy na pomoc 140 6.3. Lambda-wyrażenia: pierwsze spotkanie 141 6.4. O gotowych interfejsach funkcyjnych 144 6.5. O przetwarzaniu strumieniowym 145 7. Lambda-wyrażenia 149 7.1. Interfejsy funkcyjne i lambda-wyrażenia 151 7.2. Składnia i cechy lambda-wyrażeń 152 7.3. Referencje do metod i konstruktorów 158 7.4. Gotowe interfejsy funkcyjne 161 7.5. Interfejsy z pakietu java.util.function a wyjątki kontrolowane 169 7.6. Lambda-wyrażenia i obiekty typu Optional 172 8. Proste narzędzia 177 8.1. Analiza składniowa tekstów i wyrażenia regularne 179 8.2. Uproszczenia stosowania wyrażeń regularnych w klasach String i Scanner 191 8.3. Działania na liczbach 199 8.4. Daty i czas 204 8.4.1. Tradycyjna klasa Calendar i operacje na datach 204 8.4.2. Daty i czas w Javie 8 – elementy nowego API 210 8.5. Formatowanie liczb i dat 217 8.6. Metody tablicowe 222 9. Kolekcje 225 9.1. Architektura kolekcji (JCF). Interfejsy i implementacje 227 9.2. Programowanie w kategoriach interfejsów 231 9.3. Ogólne operacje na kolekcjach 233 9.4. Operacje opcjonalne oraz wyjątki zgłaszane przez metody kolekcyjne 234 9.5. Przekształcanie kolekcji. Kolekcje z tablic 235 9.6. Przykłady ogólnych operacji na kolekcjach 237 9.7. Iterowanie po kolekcjach 243 9.7.1. Tradycyjny iterator i rozszerzone for 243 9.7.2. Iteracje wewnętrzne 247 9.7.3. Spliteratory 249 9.7.4. Konkurencyjne modyfikacje 256 9.8. Listy 258 9.8.