Tytuł JAVA. Uniwersalne techniki programowania. Rozdział 11-12 Autor Krzysztof Barteczko Język polski Wydawnictwo Wydawnictwo Naukowe PWN ISBN 978-83-01-18916-7 kolekcja Minibook Rok wydania 2015 Warszawa Format epub, mobi Spis treści Wstęp 9 1. Klasy 13 1.1. Abstrakcja i hermetyzacja 15 1.2. Enumeracje 17 1.3. Definiowanie klas 22 1.4. Zastosowanie 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 użycie 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. Kompilacja 67 2.13. Kompozycja a dziedziczenie 68 2.14. Reguły ponownego zastosowania 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 informacji 102 4.6. Implementacja metod w interfejsach 106 4.7. Mixiny 107 4.8. Atrybuty metod domyślnych 108 4.9. Prywatne metody w interfejsach 111 4.10. Pojęcie klasy wewnętrznej 113 4.11. Przykładowe użycie 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 używania 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. Konwencjonalna 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 serii (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, a także 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. Klasyczny iterator i powiększone 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.1. Podstawowe implementacje i operacje 258 9.8.2. Szczególne implementacje list: niuanse metody Arrays.asList(...) 264 9.8.3. Iteratory listowe 267 9.8.4. Przykłady operacji na listach 269 9.9. Kolejki 273 9.10. Zbiory typu HashSet, metody hashCode() i equals() 276 9.11. Porównywanie i porządkowanie elementów kolekcji 283 9.12. Zbiory uporządkowane i nawigowalne 291 9.13. Mapy 293 9.13.1. Wprowadzenie 293 9.13.2. Implementacje i interfejsy. Ogólne operacje na mapach 296 9.13.3. Iterowanie po mapach 301 9.13.4. Użycie domyślnych metod interfejsu Map 304 9.13.5. Sortowanie map 307 9.14. Algorytmy, widoki, fabrykatory linii 313 9.15. Własne implementacje serii 316 10. Przetwarzanie strumieniowe 317 10.1. Pojęcie strumienia. Warianty i właściwości operacji strumieniowych 319 10.2. Uzyskiwanie strumieni 321 10.3. Przegląd operacji na strumieniach 322 10.4. Przefiltrowanie i leniwość strumieni 325 10.5. Metoda forEach dla strumieni 326 10.6. Sortowanie strumieni 327 10.7. Redukcja 328 10.8. Proste kolektory 329 10.9. Kolektory stwarzające mapy 330 10.10. Generatory 332 10.11. Strumienie równoległe 334 10.12. Przykłady innych praktycznych metod 336 11. Wejście-wyjście 339 11.1. Programowanie wejścia-wyjścia: obraz ogólny 341 11.2. Abstrakcyjne strumienie wejścia-wyjścia. Operacje elementarne 342 11.3. Strumieniowe klasy przedmiotowe 346 11.4. Instrukcja try-with-resources. Automatyczne zarządzanie zasobami a obsługa tłumionych wyjątków 349 11.5. Strumieniowe klasy przetwarzające – przegląd 356 11.6. Buforowanie 359 11.7. Binarne strumienie wejścia-wyjścia 360 11.8. Kodowanie-dekodowanie przy użyciu strumieni wejścia-wyjścia 362 11.9. Serializacja obiektów 364 11.10. Potoki 369 11.11. Analiza składniowa strumieni – StreamTokenizer 371 11.12. Obiekty plikowe i klasa File 373 11.13. Wygodne metody klasy java.nio.fi le.Files 374 11.14. Skaner 378 11.15. Oglądanie katalogów 381 11.16. Archiwa 390 11.17. Pliki o dostępie swobodnym 397 11.18. Nowe wejście-wyjście (NIO): przegląd 398 11.19. NIO: bufory 401 11.20. NIO: kanały i bufory. Kanały plikowe 406 11.21. Widoki buforów bajtowych 410 11.22. NIO: bufory – uporządkowanie bajtów (endianess) 414 11.23. NIO: bufory znakowe. Kodowanie i dekodowanie 416 11.24. NIO: operacje kanałowe na wielu buforach (scattering i gathering) 418 11.25. NIO: mapowanie plików 420 11.26. NIO: bezpośrednie transfery kanałowe 424 12. Programowanie współbieżne i równoległe 425 12.1. Procesy i wątki 427 12.2. Uruchamianie równoległych działań. Tworzenie wątków 428 12.3. Zadania i wykonawcy 432 12.4. Zamykanie wykonawców. Oczekiwanie na zakończenie zadań i serwis kompletacji (CompletionService) 439 12.5. Zadania powtarzalne, opóźnione i okresowe 444 12.6. Wykonawcy a pule wątków 449 12.7. ForkJoinPool i zadania rekursywne 452 12.8. Kompletery rodzaju CountedCompleter 463 12.9. CountedCompleter jako kontynuacja 469 12.10. Kiedy i jak używać zadań typu ForkJoinTask? poręczny przykład wykorzystania kompleterów 473 12.11. Zadania kompletowalne (CompletableFuture) 478 12.12. Przerywanie zadań z zewnątrz i kończenie pracy wątków 491 12.13. Synchronizacja 498 12.14. Synchronizacja przy pomocy jawnego ryglowania 507 12.15. Rygle do odczytu i zapisu: ReentrantReadWriteLock i StampedLock 510 12.16. Synchronizatory wyższego poziomu 514 12.17. Unikanie synchronizacji: struktura kodu, volatile, atomiki i konkurencyjne kolekcje 519 12.18. Koordynacja pracy wątków – mechanizm wait-notify 526 12.19. Koordynacja: warunki 532 13. Dynamiczna Java 535 13.1. Mechanizm refleksji 537 13.2. Uchwyty metod 543 13.3. Znaczenie refleksji – praktyczne przykłady 551 13.4. Refleksja a generics 558 13.5. Dynamiczne klasy proxy 562 13.6. JavaBeans 568 13.6.1. Koncepcja JavaBeans 568 13.6.2. Nasłuch i wetowanie zmian parametry za pomocą obsługi zdarzeń 569 13.6.3. Introspekcja 575 13.7. Adnotacje 576 13.7.1. Istota adnotacji i sposoby ich definiowana 576 13.7.2. Przetwarzanie adnotacji w fazie wykonania 580 13.7.3. Przetwarzanie adnotacji w fazie kompilacji. Transformowanie kodu bajtowego 582 13.8. Skrypty w Javie 589 14. Lokalizacja i internacjonalizacja aplikacji 595 14.1. Lokalizacje 597 14.2. Jeszcze trochę o formatorach liczbowych 602 14.3. Waluty 603 14.4. Strefy czasowe 604 14.5. Kalendarze i zlokalizowane daty 606 14.6. Porównywanie i sortowanie napisów 607 14.7. Internacjonalizacja aplikacji i dodatkowe zasoby (resource bundle) 608 Literatura 614