Programowanie w Javie. Solidna wiedza w praktyce. Wydanie XI - ebook
Programowanie w Javie. Solidna wiedza w praktyce. Wydanie XI - ebook
Tworzenie oprogramowania to wspaniała umiejętność. Zdolny programista może w zasadzie pracować w dowolnej dziedzinie. Co więcej, szalony rozwój technologii informatycznych właściwie codziennie otwiera nowe rynki i nowe nisze. Niemal wszędzie jest potrzebny procesor i oprogramowanie. I spora część tego cyfrowego torciku przypada programistom Javy. Najlepsze kąski dostają się jednak tym najlepszym, najzdolniejszym i najbardziej profesjonalnym.
Jeśli chcesz się stać właśnie takim programistą, wziąłeś do ręki właściwą książkę. Jest to klasyczny podręcznik, dzięki któremu wiele osób zdobyło mistrzostwo w programowaniu w Javie. Zawarto tu wyjątkowo rzetelne, praktyczne i aktualne wprowadzenie do języka. W książce znajdziesz wiele informacji o nowej wersji języka — Javie 9 oraz o świetnym narzędziu JShell, które ułatwia szybkie poznanie języka. Szczegółowo opisano JavaFX — najnowszy GUI i równocześnie zestaw narzędzi do nowych projektów. W przystępny i zrozumiały sposób przedstawiono dość trudne pojęcia, takie jak współbieżność, dzięki czemu bez problemu wykorzystasz moc systemów wielordzeniowych.
W tej książce między innymi:
- Solidne wprowadzenie do Javy — klasy, obiekty, metody
- Podstawy programowania, w tym programowania obiektowego
- Struktury danych, kolekcje, lambdy i strumienie
- Rozwiązania bazodanowe
- System modułów platformy Java 9
Programuj profesjonalnie — ucz się od najlepszych!
Spis treści
Przedmowa (29)
Wstęp (31)
Zanim zaczniesz (49)
1. Wprowadzenie do komputerów, internetu i Javy (55)
- 1.1. Wprowadzenie (56)
- 1.2. Sprzęt i oprogramowanie (58)
- 1.2.1. Prawo Moore'a (59)
- 1.2.2. Sposób organizacji komputera (59)
- 1.3.Hierarchia danych (61)
- 1.4. Języki maszynowe, języki asemblerowe i języki wysokiego poziomu (64)
- 1.5. Wprowadzenie do technologii obiektowej (65)
- 1.5.1. Samochód jako obiekt (65)
- 1.5.2. Metody i klasy (66)
- 1.5.3. Tworzenie egzemplarzy (66)
- 1.5.4. Wielokrotne użycie (66)
- 1.5.5. Komunikaty i wywoływanie metod (67)
- 1.5.6. Atrybuty i zmienne instancji (67)
- 1.5.7. Enkapsulacja i ukrywanie informacji (67)
- 1.5.8. Dziedziczenie (67)
- 1.5.9. Interfejsy (67)
- 1.5.10. Obiektowa analiza i projektowanie (68)
- 1.5.11. Język UML (68)
- 1.6. Systemy operacyjne (68)
- 1.6.1. Windows - własnościowy system operacyjny (69)
- 1.6.2. Linux - system operacyjny o otwartym kodzie źródłowym (69)
- 1.6.3. Systemy macOS i iOS firmy Apple dla urządzeń iPhone, iPad i iPod Touch (70)
- 1.6.4. System Android firmy Google (70)
- 1.7. Języki programowania (71)
- 1.8. Java (74)
- 1.9. Typowe środowisko programistyczne wykorzystujące Javę (74)
- 1.10. Testowanie przykładowej aplikacji napisanej w Javie (78)
- 1.11. Internet i sieć WWW (82)
- 1.11.1. Internet, czyli sieć sieci (83)
- 1.11.2. Sieć WWW - przyjazny internet (83)
- 1.11.3. Usługi sieciowe i mashupy (83)
- 1.11.4. Internet rzeczy (84)
- 1.12. Technologie związane z oprogramowaniem (85)
- 1.13. Otrzymywanie odpowiedzi na pytania (87)
2. Wprowadzenie do aplikacji Javy, wejścia - wyjścia i operatorów (91)
- 2.1. Wprowadzenie (92)
- 2.2. Twój pierwszy program - wyświetlenie wiersza tekstu (92)
- 2.2.1. Kompilacja aplikacji (97)
- 2.2.2. Wykonywanie aplikacji (98)
- 2.3. Modyfikacja pierwszego programu (99)
- 2.4. Wyświetlanie tekstu metodą printf (101)
- 2.5. Inna aplikacja - dodawanie liczb całkowitych (102)
- 2.5.1. Deklaracja import (102)
- 2.5.2. Deklaracja i utworzenie obiektu Scanner w celu pobrania danych z klawiatury (103)
- 2.5.3. Prośba o wprowadzenie danych (104)
- 2.5.4. Deklaracja zmiennej dla liczby całkowitej i pobranie wartości z klawiatury (104)
- 2.5.5. Pobranie drugiej liczby całkowitej (105)
- 2.5.6. Użycie zmiennych w obliczeniach (105)
- 2.5.7. Wyświetlenie wyniku obliczeń (105)
- 2.5.8. Dokumentacja API Javy (106)
- 2.5.9. Deklaracja i inicjalizacja zmiennej jako osobne instrukcje (106)
- 2.6. Zagadnienia dotyczące pamięci (106)
- 2.7. Operacje arytmetyczne (107)
- 2.8. Podejmowanie decyzji - operatory równości i relacji (111)
- 2.9. Podsumowanie (115)
3. Wprowadzenie do klas, obiektów, metod i tekstów (127)
- 3.1. Wprowadzenie (128)
- 3.2. Zmienne instancji, metody ustawiające i metody pobierające (129)
- 3.2.1. Klasa Account ze zmienną instancji oraz metodą ustawiającą i metodą pobierającą (129)
- 3.2.2. Klasa AccountTest, która tworzy i stosuje obiekt klasy Account (133)
- 3.2.3. Kompilacja i wykonanie aplikacji z wieloma klasami (136)
- 3.2.4. Diagram klas UML dla klasy Account (136)
- 3.2.5. Dodatkowe uwagi na temat klasy AccountTest (137)
- 3.2.6. Inżynieria oprogramowania z prywatnymi zmiennymi instancji i publicznymi metodami dostępowymi (138)
- 3.3. Klasa Account - inicjalizacja obiektów za pomocą konstruktorów (139)
- 3.3.1. Deklaracja konstruktora klasy Account dla własnej inicjalizacji obiektów (140)
- 3.3.2. Klasa AccountTest - inicjalizacja obiektów Account w momencie ich tworzenia (141)
- 3.4. Klasa Account ze stanem konta - liczby zmiennoprzecinkowe (142)
- 3.4.1. Klasa Account ze zmienną instancji balance typu double (143)
- 3.4.2. Klasa AccountTest używająca klasy Account (145)
- 3.5. Typy podstawowe i typy referencyjne (148)
- 3.6. (Opcjonalnie) Studium przypadku GUI i grafiki - prosty interfejs graficzny (149)
- 3.6.1. Czym jest interfejs graficzny? (150)
- 3.6.2. FXML i narzędzie Scene Builder (150)
- 3.6.3. Aplikacja powitalna - wyświetlenie tekstu i obrazka (150)
- 3.6.4. Uruchomienie narzędzia Scene Builder i utworzenie pliku Welcome.fxml (151)
- 3.6.5. Dodanie obrazu do folderu zawierającego plik Welcome.fxml (151)
- 3.6.6. Tworzenie kontenera układu VBox (151)
- 3.6.7. Konfiguracja kontenera układu VBox (151)
- 3.6.8. Dodanie i konfiguracja etykiety (153)
- 3.6.9. Dodanie i konfiguracja ImageView (154)
- 3.6.10. Podgląd wynikowego interfejsu aplikacji (155)
- 3.7. Podsumowanie (156)
4. Struktury sterujące, część 1.; przypisanie i operatory ++ i -- (165)
- 4.1. Wprowadzenie (166)
- 4.2. Algorytmy (166)
- 4.3. Pseudokod (167)
- 4.4. Struktury sterujące (167)
- 4.4.1. Struktury sekwencyjne w Javie (168)
- 4.4.2. Instrukcje wyboru w Javie (169)
- 4.4.3. Instrukcje iteracji w Javie (169)
- 4.4.4. Podsumowanie instrukcji sterujących Javy (170)
- 4.5. Instrukcja pojedynczego wyboru - if (170)
- 4.6. Instrukcja podwójnego wyboru - if...else (171)
- 4.6.1. Zagnieżdżone instrukcje if...else (172)
- 4.6.2. Problem wiszącego else (173)
- 4.6.3. Bloki (173)
- 4.6.4. Operator warunku (?:) (174)
- 4.7. Klasa Student - zagnieżdżone instrukcje if...else (175)
- 4.8. Instrukcja iteracji while (177)
- 4.9. Tworzenie algorytmów - iteracja sterowana licznikiem (179)
- 4.10. Tworzenie algorytmów - iteracja sterowana znacznikiem (183)
- 4.11. Tworzenie algorytmów - zagnieżdżone struktury sterujące (191)
- 4.12. Złożone operatory przypisania (195)
- 4.13. Operatory inkrementacji i dekrementacji (196)
- 4.14. Typy podstawowe (199)
- 4.15. Studium przypadku GUI i grafiki - obsługa zdarzeń i rysowanie linii (200)
- 4.15.1. Test ukończonej aplikacji (200)
- 4.15.2. Budowanie GUI aplikacji (201)
- 4.15.3. Przygotowanie do interakcji z GUI w sposób programowy (205)
- 4.15.4. Klasa DrawLinesController (207)
- 4.15.5. Klasa DrawLines - główna klasa aplikacji (209)
- 4.16. Podsumowanie (212)
5. Struktury sterujące, część 2.; operatory logiczne (229)
- 5.1. Wprowadzenie (230)
- 5.2. Podstawy iteracji sterowanej licznikiem (230)
- 5.3. Instrukcja iteracji for (231)
- 5.4. Przykłady użycia instrukcji for (236)
- 5.4.1. Aplikacja - suma liczb parzystych od 2 do 20 (236)
- 5.4.2. Aplikacja - kalkulator procentu składanego (237)
- 5.5. Instrukcja iteracji do...while (240)
- 5.6. Instrukcja switch dotycząca wielu wyborów (242)
- 5.7. Studium przypadku klasy AutoPolicy - tekst jako wartość w instrukcji switch (247)
- 5.8. Instrukcje break i continue (251)
- 5.8.1. Instrukcja break (251)
- 5.8.2. Instrukcja continue (251)
- 5.9. Operatory logiczne (252)
- 5.9.1. Operator warunkowy AND (&&) (253)
- 5.9.2. Operator warunkowy OR (||) (253)
- 5.9.3. Skrócone obliczenie wartości złożonych warunków (254)
- 5.9.4. Operatory logiczne AND (&) i OR (|) (255)
- 5.9.5. Operator logiczny XOR (^) (255)
- 5.9.6. Operator negacji logicznej (!) (256)
- 5.9.7. Przykład użycia operatorów logicznych (256)
- 5.10. Podsumowanie programowania strukturalnego (258)
- 5.11. Studium przypadku GUI i grafiki - rysowanie prostokątów i owali (263)
- 5.12. Podsumowanie (266)
6. Metody - dokładniejsze spojrzenie (279)
- 6.1. Wprowadzenie (280)
- 6.2. Jednostki programu w Javie (280)
- 6.3. Metody statyczne, pola statyczne i klasa Math (282)
- 6.4. Metody z wieloma parametrami (284)
- 6.5. Uwagi na temat deklarowania i używania metod (288)
- 6.6. Stos wywołań metod i rekordy aktywacyjne (289)
- 6.6.1. Stos wywołań metod (289)
- 6.6.2. Ramki stosu (290)
- 6.6.3. Zmienne lokalne i ramki stosu (290)
- 6.6.4. Przepełnienie stosu (290)
- 6.7. Promocja argumentu i rzutowanie (291)
- 6.8. Pakiety API Javy (292)
- 6.9. Studium przypadku - bezpieczne generowanie liczb losowych (294)
- 6.10. Studium przypadku - gra losowa i wprowadzenie do typów enum (299)
- 6.11. Zasięg deklaracji (303)
- 6.12. Przeciążanie metod (306)
- 6.12.1. Deklarowanie przeciążonych metod (306)
- 6.12.2. Rozróżnianie przeciążonych metod (307)
- 6.12.3. Typy zwracane przez metody przeciążone (308)
- 6.13. (Opcjonalnie) Studium przypadku GUI i grafiki - kolory i wypełnione kształty (308)
- 6.14. Podsumowanie (312)
7. Tablice i obiekty ArrayList (327)
- 7.1. Wprowadzenie (328)
- 7.2. Tablice (329)
- 7.3. Deklaracja i tworzenie tablic (330)
- 7.4. Przykłady użycia tablic (332)
- 7.4.1. Tworzenie i inicjalizacja tablicy (332)
- 7.4.2. Użycie inicjalizatora tablicy (333)
- 7.4.3. Obliczenie wartości elementów tablicy (334)
- 7.4.4. Sumowanie elementów tablicy (335)
- 7.4.5. Graficzne przedstawienie danych z tablicy za pomocą wykresu słupkowego (336)
- 7.4.6. Użycie elementów tablicy jako liczników (337)
- 7.4.7. Użycie tablic do analizy wyników (338)
- 7.5. Obsługa wyjątków - przetworzenie niepoprawnej odpowiedzi (340)
- 7.5.1. Instrukcja try (341)
- 7.5.2. Wykonywanie bloku catch (341)
- 7.5.3. Metoda toString parametru wyjątku (341)
- 7.6. Studium przypadku - tasowanie i rozdawanie kart (342)
- 7.7. Rozszerzona instrukcja for (346)
- 7.8. Przekazywanie tablic do metod (348)
- 7.9. Przekazywanie przez wartość kontra przekazywanie przez referencję (350)
- 7.10. Studium przypadku - klasa GradeBook wykorzystująca tablicę z ocenami (351)
- 7.11. Tablice wielowymiarowe (356)
- 7.11.1. Tablice tablic jednowymiarowych (357)
- 7.11.2. Dwuwymiarowe tablice z wierszami o różnych długościach (357)
- 7.11.3. Tworzenie tablic dwuwymiarowych za pomocą wyrażenia tworzenia tablic (357)
- 7.11.4. Przykład tablicy dwuwymiarowej - wyświetlanie wartości elementów (358)
- 7.11.5. Typowe operacje na tablicach wielowymiarowych wykonywane pętlami for (359)
- 7.12. Studium przypadku - klasa GradeBook używająca tablicy dwuwymiarowej (360)
- 7.13. Lista argumentów o zmiennej długości (365)
- 7.14. Użycie argumentów wiersza poleceń (367)
- 7.15. Klasa Arrays (369)
- 7.16. Wprowadzenie do kolekcji i klasy ArrayList (372)
- 7.17. (Opcjonalnie) Studium przypadku GUI i grafiki - rysowanie łuków (375)
- 7.18. Podsumowanie (378)
8. Obiekty i klasy - dokładniejsze spojrzenie (401)
- 8.1. Wprowadzenie (402)
- 8.2. Studium przypadku - klasa Time (402)
- 8.3. Sterowanie dostępem do składowych (407)
- 8.4. Odnoszenie się do składowych aktualnego obiektu referencją this (408)
- 8.5. Studium przypadku klasy Time - przeciążanie konstruktorów (410)
- 8.6. Konstruktory domyślne i bezargumentowe (416)
- 8.7. Uwagi dotyczące metod dostępowych (416)
- 8.8. Kompozycja (418)
- 8.9. Typ enum (420)
- 8.10. Mechanizm odśmiecania pamięci (423)
- 8.11. Składowe statyczne klasy (424)
- 8.12. Import statyczny (428)
- 8.13. Zmienne instancji typu final (429)
- 8.14. Dostęp na poziomie pakietu (430)
- 8.15. Użycie klasy BigDecimal do precyzyjnych obliczeń pieniężnych (431)
- 8.16. (Opcjonalnie) Studium przypadku GUI i grafiki - użycie obiektów z grafiką (434)
- 8.17. Podsumowanie (438)
9. Programowanie obiektowe - dziedziczenie (447)
- 9.1. Wprowadzenie (448)
- 9.2. Klasy nadrzędne i podklasy (449)
- 9.3. Składowe chronione (451)
- 9.4. Związek między klasami nadrzędnymi i podklasami (452)
- 9.4.1. Tworzenie i wykorzystywanie klasy CommissionEmployee (453)
- 9.4.2. Tworzenie i użycie klasy BasePlusCommissionEmployee (458)
- 9.4.3. Tworzenie hierarchii dziedziczenia CommissionEmployee przez BasePlusCommissionEmployee (462)
- 9.4.4. Tworzenie hierarchii dziedziczenia CommissionEmployee przez BasePlusCommissionEmployee używającej zmiennych chronionych (465)
- 9.4.5. Tworzenie hierarchii dziedziczenia CommissionEmployee przez BasePlusCommissionEmployee używającej zmiennych prywatnych (468)
- 9.5. Konstruktory w podklasach (473)
- 9.6. Klasa Object (473)
- 9.7. Projektowanie klas - kompozycja kontra dziedziczenie (474)
- 9.8. Podsumowanie (476)
10. Programowanie obiektowe - polimorfizm i interfejsy (483)
- 10.1. Wprowadzenie (484)
- 10.2. Przykłady polimorfizmu (486)
- 10.3. Przykład zachowania polimorficznego (487)
- 10.4. Metody i klasy abstrakcyjne (490)
- 10.5. Studium przypadku - system płac wykorzystujący polimorfizm (492)
- 10.5.1. Abstrakcyjna klasa nadrzędna Employee (495)
- 10.5.2. Konkretna podklasa SalariedEmployee (496)
- 10.5.3. Konkretna podklasa HourlyEmployee (498)
- 10.5.4. Konkretna podklasa CommissionEmployee (500)
- 10.5.5. Pośrednia konkretna podklasa BasePlusCommissionEmployee (501)
- 10.5.6. Przetwarzanie polimorficzne, operator instanceof i rzutowanie w dół (503)
- 10.6. Umożliwienie przypisywania między zmiennymi klas nadrzędnych i podklas (507)
- 10.7. Metody i klasy finalne (508)
- 10.8. Dokładniejszy opis problemów z wywoływaniem metod z konstruktorów (509)
- 10.9. Tworzenie i stosowanie interfejsów (509)
- 10.9.1. Tworzenie hierarchii Payable (512)
- 10.9.2. Interfejs Payable (512)
- 10.9.3. Klasa Invoice (513)
- 10.9.4. Modyfikacja klasy Employee w celu implementacji interfejsu Payable (515)
- 10.9.5. Użycie interfejsu Payable do polimorficznego przetwarzania klas Invoice i Employee (517)
- 10.9.6. Wspólne interfejsy API Javy (518)
- 10.10. Rozszerzenia interfejsów w Javie SE 8 (519)
- 10.10.1. Domyślne metody interfejsu (519)
- 10.10.2. Statyczne metody interfejsu (520)
- 10.10.3. Interfejsy funkcyjne (520)
- 10.11. Prywatne metody interfejsów w Javie SE 9 (521)
- 10.12. Konstruktory prywatne (521)
- 10.13. Programowanie do interfejsu, a nie do implementacji (522)
- 10.13.1. Dziedziczenie implementacji działa najlepiej dla niewielkiej liczby ściśle powiązanych klas (522)
- 10.13.2. Dziedziczenie interfejsów jest najlepsze dla elastyczności (522)
- 10.13.3. Modyfikacja hierarchii Employee (523)
- 10.14. Studium przypadku GUI i grafiki - rysowanie z użyciem polimorfizmu (524)
- 10.15. Podsumowanie (526)
11. Obsługa wyjątków - dokładniejsze spojrzenie (535)
- 11.1. Wprowadzenie (536)
- 11.2. Przykład - dzielenie przez 0 bez obsługi wyjątków (537)
- 11.3. Przykład - obsługa wyjątków ArithmeticException i InputMismatchException (540)
- 11.4. Kiedy używać obsługi wyjątków (545)
- 11.5. Hierarchia wyjątków Javy (546)
- 11.6. Blok finally (549)
- 11.7. Rozwijanie stosu i uzyskiwanie informacji z wyjątku (554)
- 11.8. Wyjątki łańcuchowe (557)
- 11.9. Deklarowanie nowych rodzajów wyjątków (559)
- 11.10. Warunki wstępne i warunki końcowe (560)
- 11.11. Asercje (560)
- 11.12. Instrukcja try z zasobami - automatyczne zwalnianie zasobów (562)
- 11.13. Podsumowanie (563)
12. Graficzny interfejs użytkownika JavaFX, część 1. (569)
- 12.1. Wprowadzenie (570)
- 12.2. Narzędzie Scene Builder dla JavaFX (571)
- 12.3. Struktura okna aplikacji JavaFX (572)
- 12.4. Aplikacja powitalna - wyświetlenie tekstu i obrazka (573)
- 12.4.1. Uruchomienie narzędzia Scene Builder i utworzenie pliku Welcome.fxml (574)
- 12.4.2. Dodanie obrazu do folderu zawierającego plik Welcome.fxml (574)
- 12.4.3. Tworzenie kontenera układu VBox (574)
- 12.4.4. Konfiguracja kontenera układu VBox (575)
- 12.4.5. Dodanie i konfiguracja etykiety (575)
- 12.4.6. Dodanie i konfiguracja ImageView (576)
- 12.4.7. Podgląd wynikowego interfejsu aplikacji (578)
- 12.5. Aplikacja do wyliczania napiwków - wprowadzenie do obsługi zdarzeń (578)
- 12.5.1. Testowanie kalkulatora napiwków (579)
- 12.5.2. Przedstawienie technologii (580)
- 12.5.3. Budowanie GUI aplikacji (582)
- 12.5.4. Klasa TipCalculator (589)
- 12.5.5. Klasa TipCalculatorController (591)
- 12.6. Funkcjonalności opisywane w pozostałych rozdziałach dotyczących JavaFX (596)
- 12.7. Podsumowanie (596)
13. Graficzny interfejs użytkownika JavaFX, część 2. (605)
- 13.1. Wprowadzenie (606)
- 13.2. Układanie węzłów w grafie (606)
- 13.3. Aplikacja Painter - przyciski opcji, zdarzenia myszy i kształty (608)
- 13.3.1. Omówienie technologii (608)
- 13.3.2. Utworzenie pliku Painter.fxml (611)
- 13.3.3. Tworzenie GUI (611)
- 13.3.4. Podklasa Painter klasy Application (614)
- 13.3.5. Klasa PainterController (614)
- 13.4. Aplikacja do wybierania kolorów (618)
- 13.4.1. Omówienie technologii (618)
- 13.4.2. Tworzenie GUI (620)
- 13.4.3. Podklasa ColorChooser klasy Application (622)
- 13.4.4. Klasa ColorChooserController (622)
- 13.5. Aplikacja do przeglądania okładek (625)
- 13.5.1. Omówienie technologii (625)
- 13.5.2. Dodanie obrazków do folderu aplikacji (626)
- 13.5.3. Budowanie interfejsu graficznego aplikacji (626)
- 13.5.4. Podklasa CoverViewer klasy Application (627)
- 13.5.5. Klasa CoverViewerController (628)
- 13.6. Aplikacja do przeglądania okładek - dostosowanie komórek ListView (630)
- 13.6.1. Omówienie technologii (630)
- 13.6.2. Kopiowanie przeglądarki okładek (631)
- 13.6.3. Klasa własnej fabryki komórek - ImageTextCell (631)
- 13.6.4. Klasa CoverViewerController (633)
- 13.7. Dodatkowe możliwości JavaFX (634)
- 13.8. JavaFX 9 - aktualizacja JavaFX w Javie SE 9 (636)
- 13.9. Podsumowanie (638)
14. Tekst, znaki i wyrażenia regularne (649)
- 14.1. Wprowadzenie (650)
- 14.2. Podstawy znaków i tekstów (650)
- 14.3. Klasa String (651)
- 14.3.1. Konstruktory klasy String (651)
- 14.3.2. Metody length, charAt i getChars (652)
- 14.3.3. Porównywanie tekstów (653)
- 14.3.4. Znajdowanie położenia znaków i fragmentów w tekstach (658)
- 14.3.5. Wydobywanie fragmentu tekstu (660)
- 14.3.6. Łączenie tekstów (661)
- 14.3.7. Inne metody klasy String (661)
- 14.3.8. Metoda valueOf klasy String (663)
- 14.4. Klasa StringBuilder (664)
- 14.4.1. Konstruktory StringBuilder (665)
- 14.4.2. Metody length, capacity, setLength i ensureCapacity klasy StringBuilder (665)
- 14.4.3. Metody charAt, setCharAt, getChars i reverse klasy StringBuilder (667)
- 14.4.4. Metody append klasy StringBuilder (668)
- 14.4.5. Metody wstawiania i usuwania klasy StringBuilder (670)
- 14.5. Klasa Character (671)
- 14.6. Tokenizacja tekstów (675)
- 14.7. Wyrażenia regularne, klasy Pattern i Matcher (676)
- 14.7.1. Zastępowanie fragmentów tekstu i podział tekstu (682)
- 14.7.2. Klasy Pattern i Matcher (683)
- 14.8. Podsumowanie (685)
15. Pliki, strumienie wejścia - wyjścia, NIO i serializacja XML (697)
- 15.1. Wprowadzenie (698)
- 15.2. Pliki i strumienie (698)
- 15.3. Użycie klas i interfejsów NIO do pobrania informacji o pliku lub folderze (700)
- 15.4. Sekwencyjne pliki tekstowe (704)
- 15.4.1. Tworzenie sekwencyjnego pliku tekstowego (704)
- 15.4.2. Odczyt danych z sekwencyjnego pliku tekstowego (707)
- 15.4.3. Studium przypadku - program sprawdzający salda płatności klientów (709)
- 15.4.4. Aktualizacja plików sekwencyjnych (713)
- 15.5. Serializacja XML (713)
- 15.5.1. Tworzenie sekwencyjnego pliku używającego serializacji XML (714)
- 15.5.2. Odczyt i deserializacja danych z pliku sekwencyjnego (719)
- 15.6. Okna dialogowe FileChooser i DirectoryChooser (720)
- 15.7. (Opcjonalnie) Dodatkowe klasy java.io (726)
- 15.7.1. Interfejsy i klasy dotyczące wejścia - wyjścia danych bajtowych (727)
- 15.7.2. Interfejsy i klasy dla znakowych operacji wejścia - wyjścia (729)
- 15.8. Podsumowanie (729)
16. Ogólne kolekcje (739)
- 16.1. Wprowadzenie (740)
- 16.2. Omówienie kolekcji (740)
- 16.3. Klasy otoczkowe (742)
- 16.4. Automatyczne pakowanie i rozpakowywanie (742)
- 16.5. Interfejs Collection i klasa Collections (743)
- 16.6. Listy (743)
- 16.6.1. ArrayList i Iterator (744)
- 16.6.2. Klasa LinkedList (747)
- 16.7. Metody klasy Collections (751)
- 16.7.1. Metoda sort (752)
- 16.7.2. Metoda shuffle (755)
- 16.7.3. Metody reverse, fill, copy, max i min (757)
- 16.7.4. Metoda binarySearch (759)
- 16.7.5. Metody addAll, frequency i disjoint (761)
- 16.8. Klasa PriorityQueue i interfejs Queue (763)
- 16.9. Zbiory (764)
- 16.10. Odwzorowania (767)
- 16.11. Synchronizowane kolekcje (771)
- 16.12. Kolekcje niezmienne (772)
- 16.13. Implementacje abstrakcyjne (772)
- 16.14. Java SE 9 - wygodne metody fabryczne dla niezmiennych kolekcji (773)
- 16.15. Podsumowanie (776)
17. Lambdy i strumienie (783)
- 17.1. Wprowadzenie (784)
- 17.2. Strumienie i redukcja (786)
- 17.2.1. Sumowanie liczb od 1 do 10 pętlą for (786)
- 17.2.2. Iteracja zewnętrzna za pomocą pętli for jest narażona na błędy (787)
- 17.2.3. Sumowanie za pomocą strumienia i redukcji (787)
- 17.2.4. Iteracja wewnętrzna (789)
- 17.3. Odwzorowania i lambdy (789)
- 17.3.1. Wyrażenia lambda (790)
- 17.3.2. Składnia lambd (791)
- 17.3.3. Operacje pośrednie i operacje kończące (792)
- 17.4. Filtrowanie (793)
- 17.5. Jak elementy poruszają się po potoku strumienia? (795)
- 17.6. Referencje do metod (796)
- 17.6.1. Tworzenie strumienia IntStream liczb losowych (797)
- 17.6.2. Wykonywanie zadań dla każdego elementu strumienia za pomocą metody forEach i referencji do metody (797)
- 17.6.3. Odwzorowanie liczb całkowitych na obiekty String za pomocą metody mapToObj (798)
- 17.6.4. Łączenie tekstów metodą collect (799)
- 17.7. Operacje IntStream (799)
- 17.7.1. Tworzenie obiektu IntStream i wyświetlanie jego wartości (800)
- 17.7.2. Operacje kończące count, min, max, sum i average (801)
- 17.7.3. Operacja kończąca reduce (802)
- 17.7.4. Sortowanie wartości IntStream (804)
- 17.8. Interfejsy funkcyjne (804)
- 17.9. Lambdy - dokładniejsze spojrzenie (806)
- 17.10. Obsługa Stream
(807)
- 17.10.1. Tworzenie Stream
(808) - 17.10.2. Sortowanie strumienia i zbieranie wyników (808)
- 17.10.3. Filtrowanie strumienia i przechowywanie wyników w celu ich późniejszego użycia (809)
- 17.10.4. Filtrowanie i sortowanie strumienia i zbieranie wyników (809)
- 17.10.5. Sortowanie zebranych wyników (810)
- 17.10.1. Tworzenie Stream
- 17.11. Obsługa Stream
(810)
- 17.11.1. Mapowanie tekstów na duże litery (811)
- 17.11.2. Filtrowanie tekstów i sortowanie ich rosnąco bez uwzględniania wielkości liter (812)
- 17.11.3. Filtrowanie tekstów i sortowanie ich malejąco bez uwzględniania wielkości liter (812)
- 17.12. Obsługa Stream
(812)
- 17.12.1. Tworzenie i wyświetlenie List
(814) - 17.12.2. Odfiltrowywanie pracowników z wynagrodzeniem mieszczącym się w określonym przedziale (815)
- 17.12.3. Sortowanie pracowników na podstawie wielu pól (818)
- 17.12.4. Odwzorowanie pracowników na unikatowe nazwiska (819)
- 17.12.5. Grupowanie pracowników według działów (821)
- 17.12.6. Zliczenie pracowników poszczególnych działów (822)
- 17.12.7. Suma i średnia zarobków pracowników (822)
- 17.12.1. Tworzenie i wyświetlenie List
- 17.13. Utworzenie Stream
na podstawie pliku (823) - 17.14. Strumienie wartości losowych (827)
- 17.15. Strumienie nieskończone (829)
- 17.16. Obsługa zdarzeń za pomocą lambd (831)
- 17.17. Dodatkowe uwagi na temat interfejsów Javy SE 8 (831)
- 17.18. Podsumowanie (832)
18. Rekurencja (849)
- 18.1. Wprowadzenie (850)
- 18.2. Pojęcie rekurencji (851)
- 18.3. Przykład użycia rekurencji - silnia (852)
- 18.4. Implementacja FactorialCalculator z użyciem klasy BigInteger (855)
- 18.5. Przykład użycia rekurencji - ciąg Fibonacciego (856)
- 18.6. Rekurencja i stos wywołań metod (859)
- 18.7. Rekurencja kontra iteracja (860)
- 18.8. Wieże Hanoi (862)
- 18.9. Fraktale (864)
- 18.9.1. Krzywa Kocha (865)
- 18.9.2. (Opcjonalnie) Studium przypadku - pióro Lo (866)
- 18.9.3. (Opcjonalnie) Interfejs graficzny rysujący fraktal (868)
- 18.9.4. (Opcjonalnie) Klasa FractalController (870)
- 18.10. Rekurencyjne nawracanie (875)
- 18.11. Podsumowanie (876)
19. Wyszukiwanie, sortowanie i notacja dużego O (885)
- 19.1. Wprowadzenie (886)
- 19.2. Wyszukiwanie liniowe (887)
- 19.3. Notacja dużego O (890)
- 19.3.1. Algorytmy O(1) (890)
- 19.3.2. Algorytmy O(n) (890)
- 19.3.3. Algorytmy O(n2) (891)
- 19.3.4. Duże O dla wyszukiwania liniowego (891)
- 19.4. Wyszukiwanie binarne (892)
- 19.4.1. Implementacja wyszukiwania binarnego (893)
- 19.4.2. Wydajność wyszukiwania binarnego (896)
- 19.5. Algorytmy sortujące (896)
- 19.6. Sortowanie przez wybieranie (897)
- 19.6.1. Implementacja sortowania przez wybieranie (897)
- 19.6.2. Wydajność sortowania przez wybieranie (900)
- 19.7. Sortowanie przez wstawianie (900)
- 19.7.1. Implementacja sortowania przez wstawianie (901)
- 19.7.2. Wydajność sortowania przez wstawianie (903)
- 19.8. Sortowanie przez scalanie (903)
- 19.8.1. Implementacja algorytmu sortowania przez scalanie (904)
- 19.8.2. Wydajność sortowania przez scalanie (908)
- 19.9. Podsumowanie dużego O algorytmów wyszukiwania i sortowania z tego rozdziału (908)
- 19.10. Duże zrównoleglenie i algorytmy równoległe (908)
- 19.11. Podsumowanie (909)
20. Uogólnione klasy i metody - dokładniejsze spojrzenie (917)
- 20.1. Wprowadzenie (918)
- 20.2. Po co nam metody uogólnione? (918)
- 20.3. Metody uogólnione - implementacja i przekształcenia na etapie kompilacji (920)
- 20.4. Dodatkowy problem przekształcenia w...
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-3974-3 |
Rozmiar pliku: | 27 MB |