Nauka Javy

Book description

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.

Table of contents

  1. Przedmowa
    1. Kto powinien przeczytać tę książkę?
    2. Nowe wydania
      1. Nowości w tym wydaniu (Java 11, 12, 13, 14)
    3. Korzystanie z tej książki
    4. Zasoby internetowe
    5. Konwencje stosowane w tej książce
    6. Przykłady kodu
    7. Podziękowania
  2. Rozdział 1. Nowoczesny język
    1. Java
      1. Pochodzenie Javy
      2. Okres dojrzewania
    2. Maszyna wirtualna
    3. Java a inne języki programowania
    4. Bezpieczeństwo projektowania
      1. Upraszczaj, upraszczaj i jeszcze raz upraszczaj
      2. Bezpieczeństwo typów i wiązanie metod
      3. Realizacja przyrostowa
      4. Dynamiczne zarządzanie pamięcią
      5. Obsługa błędów
      6. Wątki
      7. Skalowalność
    5. Bezpieczeństwo implementacji
      1. Weryfikator
      2. Ładowarka klas
      3. Zarządca bezpieczeństwa
    6. Bezpieczeństwo na poziomie aplikacji i użytkownika
    7. Harmonogram Javy
      1. Przeszłość: Java 1.0 – Java 11
      2. Teraźniejszość: Java 14
        1. Przegląd funkcjonalności
      3. Przyszłość
      4. Dostępność
  3. Rozdział 2. Pierwsza aplikacja
    1. Narzędzia i środowisko Javy
      1. Instalowanie JDK
      2. Instalowanie OpenJDK w systemie Linux
      3. Instalowanie OpenJDK w systemie macOS
      4. Instalowanie OpenJDK w systemie Windows
      5. Konfigurowanie środowiska IntelliJ IDEA i tworzenie projektu
      6. Uruchomienie projektu
      7. Pobieranie przykładów kodu
    2. HelloJava
      1. Klasy
      2. Metoda main()
      3. Klasy i obiekty
      4. Zmienne i typy klasowe
      5. HelloComponent
      6. Dziedziczenie
      7. Klasa JComponent
      8. Relacje i szukanie winnego
      9. Pakiety i importowanie
      10. Metoda paintComponent()
    3. HelloJava2: drugie podejście
      1. Zmienne instancyjne
      2. Konstruktory
      3. Zdarzenia
      4. Metoda repaint()
      5. Interfejsy
    4. Żegnaj i ponownie witaj
  4. Rozdział 3. Narzędzia pracy
    1. Środowisko JDK
    2. Maszyna wirtualna Javy
    3. Uruchamianie aplikacji Javy
      1. Właściwości systemowe
    4. Ścieżka klas (classpath)
      1. Narzędzie javap
      2. Moduły
    5. Kompilator Javy
    6. Natychmiastowe sprawdzanie działania kodu Javy
    7. Pliki JAR
      1. Kompresja plików
      2. Narzędzie jar
        1. Manifesty plików JAR
        2. Tworzenie wykonywalnych plików JAR
      3. Narzędzie pack200
    8. Czas przygotowań
  5. Rozdział 4. Język Java
    1. Kodowanie tekstu
    2. Komentarze
      1. Komentarze javadoc
        1. Javadoc jako metadane
        2. Adnotacje
    3. Zmienne i stałe
    4. Typy
      1. Typy proste
        1. Dokładność liczb zmiennoprzecinkowych
        2. Deklarowanie i inicjowanie zmiennych
        3. Literały liczb całkowitych
        4. Literały liczb zmiennoprzecinkowych
        5. Literały znaków
      2. Typy referencyjne
      3. Inferencja typów
      4. Przekazywanie referencji
      5. Kilka słów na temat obiektów String
    5. Instrukcje i wyrażenia
      1. Instrukcje
        1. Instrukcje warunkowe if-else
        2. Instrukcje switch
        3. Pętle do-while
        4. Pętla for
        5. Ulepszona pętla for
        6. Instrukcje break i continue
        7. Instrukcje nieosiągalne
      2. Wyrażenia
        1. Operatory
        2. Przypisanie
        3. Wartość null
        4. Uzyskiwanie dostępu do zmiennej
        5. Wywoływanie metod
        6. Instrukcje, wyrażenia i algorytmy
        7. Tworzenie obiektu
        8. Operator instanceof
    6. Tablice
      1. Typy tablicowe
      2. Tworzenie i inicjowanie tablicy
      3. Używanie tablic
      4. Tablice anonimowe
      5. Tablice wielowymiarowe
    7. Typy, klasy i tablice, o rany!
  6. Rozdział 5. Obiekty w Javie
    1. Klasy
      1. Deklarowanie klas i tworzenie ich instancji
      2. Uzyskiwanie dostępu do pól i metod
        1. Przegląd modyfikatorów dostępu
      3. Składowe statyczne
    2. Metody
      1. Zmienne lokalne
      2. Przesłanianie
        1. Referencja this
      3. Metody statyczne
      4. Inicjowanie zmiennych lokalnych
      5. Przekazywanie argumentów i referencje
      6. Klasy opakowujące dla typów prostych
      7. Przeciążanie metod
    3. Tworzenie obiektów
      1. Konstruktory
      2. Praca z konstruktorami przeciążonymi
    4. Niszczenie obiektów
      1. Mechanizm odzyskiwania pamięci
    5. Pakiety
      1. Importowanie klas
        1. Importowanie poszczególnych klas
        2. Importowanie całych pakietów
        3. Pomijanie importów
      2. Pakiety niestandardowe
      3. Widoczność i dostępność składowych
      4. Kompilowanie pakietów
    6. Zaawansowane projektowanie klas
      1. Tworzenie podklas i dziedziczenie
        1. Zmienne przesłonięte
        2. Nadpisywanie metod
      2. Interfejsy
      3. Klasy wewnętrzne
      4. Anonimowe klasy wewnętrzne
    7. Organizowanie zawartości i uwzględnianie występowania błędów
  7. Rozdział 6. Obsługa błędów i rejestrowanie
    1. Wyjątki
      1. Klasy błędów i wyjątków
      2. Obsługa wyjątków
      3. Bąbelkowanie
      4. Ślady stosu
      5. Wyjątki sprawdzane i niesprawdzane
      6. Rzucanie wyjątków
        1. Łączenie wyjątków w łańcuch i ponowne ich rzucanie
        2. Zawężanie ponownego rzucania
      7. Kłopotliwe try
      8. Klauzula finally
      9. try-with-resources
      10. Kwestie związane z wydajnością
    2. Asercje
      1. Włączanie i wyłączanie asercji
      2. Używanie asercji
    3. API rejestrowania
      1. Przegląd
        1. Rejestratory
        2. Procedury obsługi
        3. Filtry
        4. Formatowanie
      2. Poziomy rejestrowania
      3. Prosty przykład
      4. Właściwości konfiguracyjne rejestrowania
      5. Klasa Logger
      6. Wydajność
    4. Wyjątki w praktyce
  8. Rozdział 7. Kolekcje oraz typy i metody sparametryzowane
    1. Kolekcje
      1. Interfejs Collection
      2. Typy kolekcji
        1. Interfejs Set
        2. Interfejs List
        3. Interfejs Queue
      3. Interfejs Map
    2. Ograniczenia typów
      1. Kontenery, czyli budowanie lepszej pułapki na myszy
      2. Czy kontenery można naprawić?
    3. Wprowadzenie do typów i metod sparametryzowanych
      1. Kilka słów o typach
    4. „Łyżka nie istnieje”
      1. Wymazywanie
      2. Typy surowe
    5. Relacje typów sparametryzowanych
      1. Dlaczego List<Date> nie jest typem List<Object>?
    6. Rzutowania
      1. Konwertowanie między kolekcjami a tablicami
      2. Iterator
        1. Wykonywanie pętli for przez kolekcje
    7. Działanie metody sort()
    8. Aplikacja: drzewa na planszy
    9. Podsumowanie
  9. Rozdział 8. Praca z tekstem i podstawowe narzędzia
    1. Łańcuchy znaków — klasa String
      1. Konstruowanie łańcuchów znaków
      2. Tekstowe reprezentacje z różnych elementów
      3. Porównywanie łańcuchów znaków
      4. Wyszukiwanie
      5. Podsumowanie metod klasy String
    2. Różne elementy z tekstowych reprezentacji
      1. Parsowanie liczb prostych
      2. Tokenizacja tekstu
        1. Klasa StringTokenizer
    3. Wyrażenia regularne
      1. Notacja wyrażeń regularnych
        1. Pisz uniwersalnie, czyli „write once, run anywhere — WORA”
        2. Znaki ucieczki
        3. Znaki i klasy znaków
        4. Niestandardowe klasy znaków
        5. Znaczniki pozycji
        6. Iteracje (wielokrotność wystąpień)
        7. Alternatywa
        8. Opcje specjalne
      2. Interfejs API java.util.regex
        1. Klasa Pattern
        2. Klasa Matcher
        3. Dzielenie i tokenizacja łańcuchów znaków
    4. Narzędzia matematyczne
      1. Klasa java.lang.Math
        1. Klasa Math w akcji
      2. Duże i dokładne liczby
    5. Daty i godziny
      1. Lokalne daty i godziny
      2. Porównywanie oraz zmiana dat i godzin
      3. Strefy czasowe
      4. Parsowanie i formatowanie dat i godzin
      5. Błędy parsowania
      6. Znaczniki czasu
    6. Inne przydatne narzędzia
  10. Rozdział 9. Wątki
    1. Wprowadzenie do wątków
      1. Klasa Thread i interfejs Runnable
        1. Tworzenie i uruchamianie wątków
        2. Wątki powstające w sposób naturalny
      2. Sterowanie wątkami
        1. Metody przestarzałe
        2. Metoda sleep()
        3. Metoda join()
        4. Metoda interrupt()
        5. Refaktoryzacja animacji przy użyciu wątków
      3. „Śmierć” wątku
    2. Synchronizacja
      1. Szeregowanie dostępu do metod
        1. Synchronizowanie kolejki adresów URL
      2. Uzyskiwanie dostępu do zmiennych klasowych i instancyjnych z wielu wątków
    3. Planowanie i priorytety
      1. Stany wątku
      2. Podział czasu
      3. Priorytety
      4. Oddawanie sterowania
    4. Wydajność wątków
      1. Koszt synchronizacji
      2. Wykorzystywanie zasobów wątku
    5. Narzędzia do obsługi współbieżności
  11. Rozdział 10. Aplikacje desktopowe
    1. Przyciski, suwaki oraz pola tekstowe, o rety!
      1. Hierarchie komponentów
      2. Architektura Model-Widok-Kontroler
      3. Etykiety i przyciski
        1. Przyciski
      4. Komponenty tekstowe
        1. Pola tekstowe
        2. Obszary tekstowe
        3. Przewijanie tekstu
      5. Inne komponenty
        1. Klasa JSlider
        2. Klasa JList
    2. Kontenery i układy
      1. Ramki i okna
      2. Klasa JPanel
      3. Menedżery układu
        1. Klasa BorderLayout
        2. Klasa GridLayout
        3. Klasa GridBagLayout
    3. Zdarzenia
      1. Zdarzenia myszy
        1. Klasa MouseAdapter
      2. Zdarzenia działań
      3. Zdarzenia zmian
      4. Inne zdarzenia
    4. Okna modalne i wyskakujące okienka
      1. Okna dialogowe z komunikatami
      2. Okna dialogowe z potwierdzeniem
      3. Okna dialogowe z danymi wejściowymi
    5. Rozważania na temat obsługi wątków
      1. Klasa SwingUtilities i aktualizacje komponentów
      2. Minutniki
        1. Animacja z minutnikiem
        2. Inne zastosowania minutnika
    6. Kolejne kroki
      1. Menu
      2. Preferencje
      3. Komponenty niestandardowe oraz Java2D
      4. JavaFX
    7. Interfejs użytkownika i doświadczenie użytkownika
  12. Rozdział 11. Obsługa sieci i operacje we-wy
    1. Strumienie
      1. Podstawowe operacje we-wy
      2. Strumienie znaków
      3. Klasy opakowujące dla strumieni
        1. Strumienie danych
        2. Strumienie buforowane
        3. Klasy PrintWriter i PrintStream
      4. Klasa java.io.File
        1. Konstruktory plików
        2. Lokalizacja ścieżki
        3. Operacje na plikach
      5. Strumienie plików
      6. Klasa RandomAccessFile
    2. Interfejs API plików NIO
      1. Klasy FileSystem i Path
        1. Ścieżka do klasycznego pliku i z powrotem
      2. Operacje interfejsu plików NIO
    3. Pakiet NIO
      1. Asynchroniczne operacje we-wy
      2. Wydajność
      3. Pliki zmapowane i zablokowane
      4. Kanały
      5. Bufory
        1. Operacje na buforach
        2. Typy buforów
        3. Kolejność bajtów
        4. Alokacja buforów
      6. Kodery i dekodery znaków
        1. Klasy CharsetEncoder i CharsetDecoder
      7. FileChannel
        1. Współbieżny dostęp
        2. Blokowanie plików
    4. Programowanie sieciowe
    5. Gniazda
      1. Klienty i serwery
        1. Klienty
        2. Serwery
        3. Gniazda i bezpieczeństwo
      2. Klient DateAtHost
      3. Gra rozproszona
        1. Konfigurowanie interfejsu użytkownika
        2. Serwer gry
        3. Klient gry
        4. Protokół gry
    6. Więcej do odkrycia
  13. Rozdział 12. Programowanie aplikacji internetowych
    1. Adresy URL
    2. Klasa URL
      1. Strumień danych
      2. Pobieranie zawartości jako obiektu
      3. Zarządzanie połączeniami
      4. Procedury obsługi w praktyce
      5. Przydatne frameworki procedur obsługi
    3. Komunikacja z aplikacjami internetowymi
      1. Korzystanie z metody GET
      2. Korzystanie z metody POST
      3. Obiekt HttpURLConnection
      4. SSL i bezpieczna komunikacja internetowa
    4. Aplikacje internetowe Javy
      1. Cykl życia serwletu
      2. Serwlety
      3. Serwlet HelloClient
        1. Wyjątki ServletException
        2. Typ zawartości
      4. Odpowiedź serwletu
      5. Parametry serwletu
        1. GET, POST i dodatkowa ścieżka
        2. GET czy POST — której metody użyć?
      6. Serwlet ShowParameters
      7. Zarządzanie sesjami użytkowników
      8. Serwlet ShowSession
    5. Kontenery serwletów
      1. Konfigurowanie za pomocą pliku web.xml oraz adnotacji
      2. Mapowania wzorców adresów URL
      3. Wdrażanie serwletu HelloClient
        1. Odświeżanie aplikacji internetowych
    6. WWW — sieć na cały świat rozległa
  14. Rozdział 13. Rozszerzanie Javy
    1. Wydania Javy
      1. JCP i JSR
    2. Wyrażenia lambda
      1. Modernizacja kodu
        1. Badanie funkcjonalności
        2. Podstawowe wyrażenia lambda
        3. Referencje do metod
        4. Wyrażenia lambda i zdarzenia
        5. Zastępowanie interfejsu Runnable
    3. Rozszerzanie Javy poza podstawowe funkcjonalności
    4. Końcowe podsumowanie i kolejne kroki
  15. Dodatek A. Przykłady kodu i program IntelliJ IDEA
    1. Pobieranie przykładów kodu
    2. Instalowanie programu IntelliJ IDEA
      1. Instalowanie w systemie Linux
      2. Instalowanie w systemie macOS
      3. Instalowanie w systemie Windows
    3. Importowanie przykładów
    4. Uruchamianie przykładów
    5. Praca z serwletami
  16. Słowniczek
    1. O autorach
    2. Kolofon

Product information

  • Title: Nauka Javy
  • Author(s): Patrick Niemeyer Marc Loy Daniel Leuck
  • Release date: February 2021
  • Publisher(s): Helion
  • ISBN: 9788328371286