Niemal od chwili swojego powstania Java jest jednym z najważniejszych i najpopularniejszych języków programowania. Dzieje się tak dzięki konsekwentnemu rozwijaniu tego języka i poszukiwaniu coraz to nowszych technologii. Sprawia to, że Java jest pierwszym i najlepszym wyborem dla programistów zainteresowanych tworzeniem aplikacji internetowych. Oprócz tego nadaje się do wielu innych zastosowań. Łatwo się można przekonać, że większość współczesnego świata korzysta z kodu Javy. Dotyczy to nie tylko komputerów czy smartfonów, ale także ogromnej liczby różnych innych urządzeń.
Ta książka jest IX wydaniem znakomitego podręcznika, w pełni zaktualizowanym o informacje dotyczące Java SE 9. W przystępny sposób wyjaśniono tu, jak pisać, kompilować, debugować i uruchamiać kod Javy. Znalazły się tu także informacje o kluczowych elementach biblioteki Java API, takich jak obsługa wejścia-wyjścia, Collections Framework, biblioteka strumieni oraz narzędzia do programowania współbieżnego. W praktyczny sposób przedstawiono bibliotekę Swing, JavaFX, technologię JavaBeans oraz serwletów. Książka zawiera także szczegółowy opis modułów i praktyczne wprowadzenie do JShell, narzędzia do interaktywnego programowania w Javie.
Najważniejsze zagadnienia ujęte w książce:
- typy danych, zmienne, tablice i operatory oraz instrukcje sterujące
- programowanie obiektowe i dziedziczenie
- interfejsy i pakiety oraz obsługa wyjątków
- programowanie wielowątkowe
- wyrażenia lambda, moduły, programowanie sieciowe
- obsługa zdarzeń i programowanie współbieżne
Java. Klasyka w programowaniu!
Rozdziały:
- O autorze
- O redaktorze merytorycznym
- Przedmowa
- Książka dla wszystkich programistów
- Zawartość książki
- Nie zapomnij: kody źródłowe do pobrania
- Specjalne podziękowania
- Warto przeczytać
- CZĘŚĆ I Język Java
- Rozdział 1. Historia i ewolucja języka Java
- Rodowód Javy
- Narodziny nowoczesnego języka C
- Język C++ następny krok
- Podwaliny języka Java
- Powstanie języka Java
- Jak Java wywarła wpływ na internet
- Aplety Javy
- Bezpieczeństwo
- Przenośność
- Magia języka Java kod bajtowy
- Wychodząc poza aplety
- Serwlety Java po stronie serwera
- Hasła języka Java
- Prostota
- Obiektowość
- Niezawodność
- Wielowątkowość
- Neutralność architektury
- Interpretowalność i wysoka wydajność
- Rozproszenie
- Dynamika
- Ewolucja Javy
- Java SE 9
- Kultura innowacji
- Rozdział 2. Podstawy języka Java
- Programowanie obiektowe
- Dwa paradygmaty
- Abstrakcja
- Trzy zasady programowania obiektowego
- Hermetyzacja
- Dziedziczenie
- Polimorfizm
- Połączenie polimorfizmu, hermetyzacji i dziedziczenia
- Pierwszy przykładowy program
- Wpisanie kodu programu
- Kompilacja programów
- Bliższe spojrzenie na pierwszy przykładowy program
- Drugi prosty program
- Dwie instrukcje sterujące
- Bloki kodu
- Kwestie składniowe
- Znaki białe
- Identyfikatory
- Stałe
- Komentarze
- Separatory
- Słowa kluczowe języka Java
- Biblioteki klas Javy
- Rozdział 3. Typy danych, zmienne i tablice
- Java to język ze ścisłą kontrolą typów
- Typy proste
- Typy całkowitoliczbowe
- Typ byte
- Typ short
- Typ int
- Typ long
- Typy zmiennoprzecinkowe
- Typ znakowy
- Typ logiczny
- Bliższe spojrzenie na stałe
- Stałe całkowitoliczbowe
- Stałe zmiennoprzecinkowe
- Stałe logiczne
- Stałe znakowe
- Stałe łańcuchowe
- Zmienne
- Deklaracja zmiennej
- Inicjalizacja dynamiczna
- Zasięg i czas życia zmiennych
- Konwersja typów i rzutowanie
- Automatyczna konwersja typów
- Rzutowanie niezgodnych typów
- Automatyczne rozszerzanie typów w wyrażeniach
- Tablice
- Tablice jednowymiarowe
- Tablice wielowymiarowe
- Alternatywna składnia deklaracji tablicy
- Kilka słów o łańcuchach
- Rozdział 4. Operatory
- Operatory arytmetyczne
- Podstawowe operatory arytmetyczne
- Operator reszty z dzielenia
- Operatory arytmetyczne z przypisaniem
- Inkrementacja i dekrementacja
- Operatory bitowe
- Logiczne operatory bitowe
- Operator negacji bitowej
- Operator iloczynu bitowego
- Operator sumy bitowej
- Operator sumy bitowej modulo 2
- Wykorzystanie operatorów bitowych
- Przesunięcie w lewo
- Przesunięcie w prawo
- Przesunięcie w prawo bez znaku
- Operatory bitowe z przypisaniem
- Operatory relacji
- Operatory logiczne
- Operatory logiczne ze skracaniem
- Operator przypisania
- Operator ?
- Kolejność wykonywania operatorów
- Stosowanie nawiasów okrągłych
- Rozdział 5. Instrukcje sterujące
- Instrukcje wyboru
- Instrukcja if
- Zagnieżdżanie instrukcji if
- Sekwencja if-else-if
- Instrukcja switch
- Zagnieżdżone instrukcje switch
- Instrukcje iteracyjne
- Pętla while
- Pętla do-while
- Pętla for
- Deklaracja zmiennej sterującej wewnątrz pętli for
- Wykorzystanie przecinka
- Odmiany pętli for
- Wersja for-each pętli for
- Przejście przez tablicę wielowymiarową
- Wykorzystanie rozszerzonej pętli for
- Pętle zagnieżdżone
- Instrukcje skoku
- Instrukcja break
- Wykorzystanie instrukcji break do opuszczenia pętli
- Wykorzystanie instrukcji break jako instrukcji goto
- Instrukcja continue
- Instrukcja return
- Rozdział 6. Wprowadzenie do klas
- Klasy
- Ogólna postać klasy
- Prosta klasa
- Deklarowanie obiektów
- Bliższe spojrzenie na operator new
- Przypisywanie zmiennych referencyjnych do obiektów
- Wprowadzenie do metod
- Dodanie metody do klasy Box
- Zwracanie wartości
- Dodanie metody przyjmującej parametry
- Konstruktor
- Konstruktor sparametryzowany
- Słowo kluczowe this
- Ukrywanie zmiennych składowych
- Mechanizm odzyskiwania pamięci
- Klasa stosu
- Rozdział 7. Dokładniejsze omówienie metod i klas
- Przeciążanie metod
- Przeciążanie konstruktorów
- Obiekty jako parametry
- Dokładniejsze omówienie przekazywania argumentów
- Zwracanie obiektów
- Rekurencja
- Wprowadzenie do kontroli dostępu
- Składowe statyczne
- Słowo kluczowe final
- Powtórka z tablic
- Klasy zagnieżdżone i klasy wewnętrzne
- Omówienie klasy String
- Wykorzystanie argumentów wiersza poleceń
- Zmienna liczba argumentów
- Przeciążanie metod o zmiennej liczbie argumentów
- Zmienna liczba argumentów i niejednoznaczności
- Rozdział 8. Dziedziczenie
- Podstawy dziedziczenia
- Dostęp do składowych a dziedziczenie
- Bardziej praktyczny przykład
- Zmienna klasy bazowej może zawierać referencję do obiektu klasy pochodnej
- Słowo kluczowe super
- Wykorzystanie słowa kluczowego super do wywołania konstruktora klasy bazowej
- Drugie zastosowanie słowa kluczowego super
- Tworzenie hierarchii wielopoziomowej
- Kiedy są wykonywane konstruktory?
- Przesłanianie metod
- Dynamiczne przydzielanie metod
- Dlaczego warto przesłaniać metody?
- Zastosowanie przesłaniania metod
- Klasy abstrakcyjne
- Słowo kluczowe final i dziedziczenie
- Słowo kluczowe final zapobiega przesłanianiu
- Słowo kluczowe final zapobiega dziedziczeniu
- Klasa Object
- Rozdział 9. Pakiety i interfejsy
- Pakiety
- Definiowanie pakietu
- Znajdowanie pakietów i ścieżka CLASSPATH
- Prosty przykład pakietu
- Dostęp do pakietów i składowych
- Import pakietów
- Interfejsy
- Definiowanie interfejsu
- Implementacja interfejsu
- Dostęp do implementacji za pośrednictwem referencji do interfejsu
- Implementacja częściowa
- Interfejsy zagnieżdżone
- Stosowanie interfejsów
- Zmienne w interfejsach
- Interfejsy można rozszerzać
- Metody domyślne
- Podstawy metod domyślnych
- Bardziej praktyczny przykład
- Problemy wielokrotnego dziedziczenia
- Metody statyczne w interfejsach
- Stosowanie metod prywatnych w interfejsach
- Ostatnie uwagi dotyczące pakietów i interfejsów
- Rozdział 10. Obsługa wyjątków
- Podstawy obsługi wyjątków
- Typy wyjątków
- Nieprzechwycone wyjątki
- Stosowanie instrukcji try i catch
- Wyświetlenie opisu wyjątku
- Wiele klauzul catch
- Zagnieżdżone instrukcje try
- Instrukcja throw
- Klauzula throws
- Słowo kluczowe finally
- Wyjątki wbudowane w język Java
- Tworzenie własnej klasy pochodnej wyjątków
- Łańcuch wyjątków
- Trzy dodatkowe cechy wyjątków
- Wykorzystanie wyjątków
- Rozdział 11. Programowanie wielowątkowe
- Model wątków języka Java
- Priorytety wątków
- Synchronizacja
- Przekazywanie komunikatów
- Klasa Thread i interfejs Runnable
- Wątek główny
- Tworzenie wątku
- Implementacja interfejsu Runnable
- Rozszerzanie klasy Thread
- Wybór odpowiedniego podejścia
- Tworzenie wielu wątków
- Stosowanie metod isAlive() i join()
- Priorytety wątków
- Synchronizacja
- Synchronizacja metod
- Instrukcja synchronized
- Komunikacja międzywątkowa
- Zawieszanie, wznawianie i zatrzymywanie wątków
- Uzyskiwanie stanu wątku
- Stosowanie metody wytwórczej do tworzenia i uruchamiania wątku
- Korzystanie z wielowątkowości
- Rozdział 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje
- Typy wyliczeniowe
- Podstawy wyliczeń
- Metody values() i valueOf()
- Wyliczenia Javy jako typy klasowe
- Wyliczenia dziedziczą po klasie Enum
- Inny przykład wyliczenia
- Opakowania typów
- Klasa Character
- Klasa Boolean
- Opakowania typów numerycznych
- Automatyczne opakowywanie typów prostych
- Automatyczne opakowywanie i metody
- Automatyczne opakowywanie i rozpakowywanie w wyrażeniach
- Automatyczne opakowywanie typów znakowych i logicznych
- Automatyczne opakowywanie pomaga zapobiegać błędom
- Słowo ostrzeżenia
- Adnotacje
- Podstawy tworzenia adnotacji
- Określanie strategii zachowywania adnotacji
- Odczytywanie adnotacji w trakcie działania programu za pomocą refleksji
- Drugi przykład refleksji
- Odczytywanie wszystkich adnotacji
- Interfejs AnnotatedElement
- Wartości domyślne
- Adnotacje znacznikowe
- Adnotacje jednoelementowe
- Wbudowane adnotacje
- Adnotacja @Retention
- Adnotacja @Documented
- Adnotacja @Target
- Adnotacja @Inherited
- Adnotacja @Override
- Adnotacja @Deprecated
- Adnotacja @FunctionalInterface
- Adnotacja @SafeVarargs
- Adnotacja @SuppressWarnings
- Adnotacje typów
- Adnotacje powtarzalne
- Ograniczenia
- Rozdział 13. Wejście-wyjście, instrukcja try z zasobami i inne tematy
- Podstawowa obsługa wejścia i wyjścia
- Strumienie
- Strumienie znakowe i bajtowe
- Klasy strumieni bajtów
- Klasy strumieni znaków
- Predefiniowane strumienie
- Odczyt danych z konsoli
- Odczyt znaków
- Odczyt łańcuchów
- Wyświetlanie informacji na konsoli
- Klasa PrintWriter
- Odczyt i zapis plików
- Automatyczne zamykanie pliku
- Modyfikatory transient i volatile
- Operator instanceof
- Modyfikator strictfp
- Metody napisane w kodzie rdzennym
- Stosowanie asercji
- Opcje włączania i wyłączania asercji
- Import statyczny
- Wywoływanie przeciążonych konstruktorów za pomocą this()
- Kilka słów o kompaktowych profilach API
- Rozdział 14. Typy sparametryzowane
- Czym są typy sparametryzowane?
- Prosty przykład zastosowania typów sparametryzowanych
- Typy sparametryzowane działają tylko dla typów referencyjnych
- Typy sparametryzowane różnią się, jeśli mają inny argument typu
- W jaki sposób typy sparametryzowane zwiększają bezpieczeństwo?
- Klasa sparametryzowana z dwoma parametrami typu
- Ogólna postać klasy sparametryzowanej
- Typy ograniczone
- Zastosowanie argumentów wieloznacznych
- Ograniczony argument wieloznaczny
- Tworzenie metody sparametryzowanej
- Konstruktory sparametryzowane
- Interfejsy sparametryzowane
- Typy surowe i starszy kod
- Hierarchia klas sparametryzowanych
- Zastosowanie sparametryzowanej klasy bazowej
- Podklasa sparametryzowana
- Porównywanie typów w hierarchii klas sparametryzowanych w czasie wykonywania
- Rzutowanie
- Przesłanianie metod w klasach sparametryzowanych
- Wnioskowanie typów a typy sparametryzowane
- Znoszenie
- Błędy niejednoznaczności
- Pewne ograniczenia typów sparametryzowanych
- Nie można tworzyć egzemplarza parametru typu
- Ograniczenia dla składowych statycznych
- Ograniczenia tablic typów sparametryzowanych
- Ograniczenia wyjątków typów sparametryzowanych
- Rozdział 15. Wyrażenia lambda
- Wprowadzenie do wyrażeń lambda
- Podstawowe informacje o wyrażeniach lambda
- Interfejsy funkcyjne
- Kilka przykładów wyrażeń lambda
- Blokowe wyrażenia lambda
- Sparametryzowane interfejsy funkcyjne
- Przekazywanie wyrażeń lambda jako argumentów
- Wyrażenia lambda i wyjątki
- Wyrażenia lambda i przechwytywanie zmiennych
- Referencje do metod
- Referencje do metod statycznych
- Referencje do metod instancyjnych
- Referencje do metod a typy sparametryzowane
- Referencje do konstruktorów
- Predefiniowane interfejsy funkcyjne
- Rozdział 16. Moduły
- Podstawowe informacje o modułach
- Przykład prostego modułu
- Kompilowanie i uruchamianie przykładowej aplikacji
- Dokładniejsze informacje o instrukcjach requires i exports
- java.base i moduły platformy
- Stary kod i moduł nienazwany
- Eksportowanie do konkretnego modułu
- Wymagania przechodnie
- Stosowanie usług
- Podstawowe informacje o usługach i dostawcach usług
- Słowa kluczowe związane z usługami
- Przykład stosowania usług i modułów
- Interfejsy usługi
- Klasy implementacji
- Pliki definicji modułów
- Prezentacja użycia dostawców usługi w aplikacji MyModAppDemo
- Kompilacja i uruchamianie modularnej aplikacji korzystającej z usług
- Grafy modułów
- Trzy wyspecjalizowane cechy modułów
- Moduły otwarte
- Instrukcja opens
- Instrukcja requires static
- Wprowadzenie do jlink i plików JAR modułów
- Dołączanie plików dostarczonych jako struktura katalogów
- Konsolidacja modularnych plików JAR
- Pliki JMOD
- Kilka słów o warstwach i modułach automatycznych
- Końcowe uwagi dotyczące modułów
- Część II Biblioteka języka Java
- Rozdział 17. Obsługa łańcuchów
- Konstruktory klasy String
- Długość łańcucha
- Specjalne operacje na łańcuchach
- Literały tekstowe
- Konkatenacja łańcuchów
- Konkatenacja łańcuchów z innymi typami danych
- Konwersja łańcuchów i metoda toString()
- Wyodrębnianie znaków
- Metoda charAt()
- Metoda getChars()
- Metoda getBytes()
- Metoda toCharArray()
- Porównywanie łańcuchów
- Metody equals() i equalsIgnoreCase()
- Metoda regionMatches()
- Metody startsWith() i endsWith()
- Metoda equals() kontra operator ==
- Metoda compareTo()
- Przeszukiwanie łańcuchów
- Modyfikowanie łańcucha
- Metoda substring()
- Metoda concat()
- Metoda replace()
- Metoda trim()
- Konwersja danych za pomocą metody valueOf()
- Zmiana wielkości liter w łańcuchu
- Łączenie łańcuchów
- Dodatkowe metody klasy String
- Klasa StringBuffer
- Konstruktory klasy StringBuffer
- Metody length() i capacity()
- Metoda ensureCapacity()
- Metoda setLength()
- Metody charAt() i setCharAt()
- Metoda getChars()
- Metoda append()
- Metoda insert()
- Metoda reverse()
- Metody delete() i deleteCharAt()
- Metoda replace()
- Metoda substring()
- Dodatkowe metody klasy StringBuffer
- Klasa StringBuilder
- Rozdział 18. Pakiet java.lang
- Opakowania typów prostych
- Klasa Number
- Klasy Double i Float
- Metody isInfinite() i isNan()
- Klasy Byte, Short, Integer i Long
- Konwersja liczb z i do postaci tekstowej
- Klasa Character
- Dodatki wprowadzone w celu obsługi punktów kodowych Unicode
- Klasa Boolean
- Klasa Void
- Klasa Process
- Klasa Runtime
- Zarządzanie pamięcią
- Wykonywanie innych programów
- Runtime.Version
- Klasa ProcessBuilder
- Klasa System
- Wykorzystanie metody currentTimeMillis() do obliczania czasu wykonywania programu
- Użycie metody arraycopy()
- Właściwości środowiska
- Interfejs System.Logger i klasa System.LoggerFinder
- Klasa Object
- Wykorzystanie metody clone() i interfejsu Cloneable
- Klasa Class
- Klasa ClassLoader
- Klasa Math
- Funkcje trygonometryczne
- Funkcje wykładnicze
- Funkcje zaokrągleń
- Inne metody klasy Math
- Klasa StrictMath
- Klasa Compiler
- Klasy Thread i ThreadGroup oraz interfejs Runnable
- Interfejs Runnable
- Klasa Thread
- Klasa ThreadGroup
- Klasy ThreadLocal i InheritableThreadLocal
- Klasa Package
- Klasa Module
- Klasa ModuleLayer
- Klasa RuntimePermission
- Klasa Throwable
- Klasa SecurityManager
- Klasa StackTraceElement
- Klasa StackWalker i interfejs StackWalker.StackFrame
- Klasa Enum
- Klasa ClassValue
- Interfejs CharSequence
- Interfejs Comparable
- Interfejs Appendable
- Interfejs Iterable
- Interfejs Readable
- Interfejs AutoCloseable
- Interfejs Thread.UncaughtExceptionHandler
- Podpakiety pakietu java.lang
- Podpakiet java.lang.annotation
- Podpakiet java.lang.instrument
- Podpakiet java.lang.invoke
- Podpakiet java.lang.module
- Podpakiet java.lang.management
- Podpakiet java.lang.ref
- Podpakiet java.lang.reflect
- Rozdział 19. Pakiet java.util, część 1. kolekcje
- Wprowadzenie do kolekcji
- Interfejsy kolekcji
- Interfejs Collection
- Interfejs List
- Interfejs Set
- Interfejs SortedSet
- Interfejs NavigableSet
- Interfejs Queue
- Interfejs Deque
- Klasy kolekcji
- Klasa ArrayList
- Pobranie tablicy z obiektu ArrayList
- Klasa LinkedList
- Klasa HashSet
- Klasa LinkedHashSet
- Klasa TreeSet
- Klasa PriorityQueue
- Klasa ArrayDeque
- Klasa EnumSet
- Dostęp do kolekcji za pomocą iteratora
- Korzystanie z iteratora Iterator
- Pętla typu for-each jako alternatywa dla iteratora
- Spliteratory
- Przechowywanie w kolekcjach własnych klas
- Interfejs RandomAccess
- Korzystanie z map
- Interfejsy map
- Interfejs Map
- Interfejs SortedMap
- Interfejs NavigableMap
- Interfejs Map.Entry
- Klasy map
- Klasa HashMap
- Klasa TreeMap
- Klasa LinkedHashMap
- Klasa IdentityHashMap
- Klasa EnumMap
- Komparatory
- Wykorzystanie komparatora
- Algorytmy kolekcji
- Klasa Arrays
- Starsze klasy i interfejsy
- Interfejs Enumeration
- Klasa Vector
- Klasa Stack
- Klasa Dictionary
- Klasa Hashtable
- Klasa Properties
- Wykorzystanie metod store() i load()
- Ostatnie uwagi na temat kolekcji
- Rozdział 20. Pakiet java.util, część 2. pozostałe klasy użytkowe
- Klasa StringTokenizer
- Klasa BitSet
- Klasy Optional, OptionalDouble, OptionalInt oraz OptionalLong
- Klasa Date
- Klasa Calendar
- Klasa GregorianCalendar
- Klasa TimeZone
- Klasa SimpleTimeZone
- Klasa Locale
- Klasa Random
- Klasy Timer i TimerTask
- Klasa Currency
- Klasa Formatter
- Konstruktory klasy Formatter
- Metody klasy Formatter
- Podstawy formatowania
- Formatowanie łańcuchów i znaków
- Formatowanie liczb
- Formatowanie daty i godziny
- Specyfikatory %n i %%
- Określanie minimalnej szerokości pola
- Określanie precyzji
- Używanie znaczników (flag) formatów
- Wyrównywanie danych wyjściowych
- Znaczniki spacji, plusa, zera i nawiasów
- Znacznik przecinka
- Znacznik #
- Opcja wielkich liter
- Stosowanie indeksu argumentu
- Zamykanie obiektu klasy Formatter
- Metoda printf() w Javie
- Klasa Scanner
- Konstruktory klasy Scanner
- Podstawy skanowania
- Kilka przykładów użycia klasy Scanner
- Ustawianie separatorów
- Pozostałe elementy klasy Scanner
- Klasy ResourceBundle, ListResourceBundle i PropertyResourceBundle
- Dodatkowe klasy i interfejsy użytkowe
- Podpakiety pakietu java.util
- java.util.concurrent, java.util.concurrent.atomic oraz java.util.concurrent.locks
- java.util.function
- java.util.jar
- java.util.logging
- java.util.prefs
- java.util.regex
- java.util.spi
- java.util.stream
- java.util.zip
- Rozdział 21. Operacje wejścia-wyjścia: analiza pakietu java.io
- Klasy i interfejsy obsługujące operacje wejścia-wyjścia
- Klasa File
- Katalogi
- Stosowanie interfejsu FilenameFilter
- Alternatywna metoda listFiles()
- Tworzenie katalogów
- Interfejsy AutoCloseable, Closeable i Flushable
- Wyjątki operacji wejścia-wyjścia
- Dwa sposoby zamykania strumieni
- Klasy strumieni
- Strumienie bajtów
- Klasa InputStream
- Klasa OutputStream
- Klasa FileInputStream
- Klasa FileOutputStream
- Klasa ByteArrayInputStream
- Klasa ByteArrayOutputStream
- Filtrowane strumienie bajtów
- Buforowane strumienie bajtów
- Klasa BufferedInputStream
- Klasa BufferedOutputStream
- Klasa PushbackInputStream
- Klasa SequenceInputStream
- Klasa PrintStream
- Klasy DataOutputStream i DataInputStream
- Klasa RandomAccessFile
- Strumienie znaków
- Klasa Reader
- Klasa Writer
- Klasa FileReader
- Klasa FileWriter
- Klasa CharArrayReader
- Klasa CharArrayWriter
- Klasa BufferedReader
- Klasa BufferedWriter
- Klasa PushbackReader
- Klasa PrintWriter
- Klasa Console
- Serializacja
- Interfejs Serializable
- Interfejs Externalizable
- Interfejs ObjectOutput
- Klasa ObjectOutputStream
- Interfejs ObjectInput
- Klasa ObjectInputStream
- Przykład serializacji
- Korzyści wynikające ze stosowania strumieni
- Rozdział 22. System NIO
- Klasy systemu NIO
- Podstawy systemu NIO
- Bufory
- Kanały
- Zestawy znaków i selektory
- Udoskonalenia dodane w systemie NIO.2
- Interfejs Path
- Klasa Files
- Klasa Paths
- Interfejsy atrybutów plików
- Klasy FileSystem, FileSystems i FileStore
- Stosowanie systemu NIO
- Stosowanie systemu NIO dla operacji wejścia-wyjścia na kanałach
- Odczytywanie pliku za pośrednictwem kanału
- Zapisywanie pliku za pośrednictwem kanału
- Kopiowanie pliku za pomocą systemu NIO
- Stosowanie systemu NIO dla operacji wejścia-wyjścia na strumieniach
- Stosowanie systemu NIO dla operacji na ścieżkach i systemie plików
- Uzyskiwanie informacji o ścieżce i pliku
- Generowanie listy reprezentującej zawartość katalogu
- Przeszukiwanie drzewa katalogów za pomocą metody walkFileTree()
- Rozdział 23. Obsługa sieci
- Podstawy działania sieci
- Klasy i interfejsy obsługujące komunikację sieciową
- Klasa InetAddress
- Metody wytwórcze
- Metody klasy
- Klasy Inet4Address oraz Inet6Address
- Gniazda klientów TCP/IP
- URL
- Klasa URLConnection
- Klasa HttpURLConnection
- Klasa URI
- Pliki cookie
- Gniazda serwerów TCP/IP
- Datagramy
- Klasa DatagramSocket
- Klasa DatagramPacket
- Przykład użycia datagramów
- Rozdział 24. Obsługa zdarzeń
- Dwa mechanizmy obsługi zdarzeń
- Model obsługi zdarzeń oparty na ich delegowaniu
- Zdarzenia
- Źródła zdarzeń
- Obiekty nasłuchujące zdarzeń
- Klasy zdarzeń
- Klasa ActionEvent
- Klasa AdjustmentEvent
- Klasa ComponentEvent
- Klasa ContainerEvent
- Klasa FocusEvent
- Klasa InputEvent
- Klasa ItemEvent
- Klasa KeyEvent
- Klasa MouseEvent
- Klasa MouseWheelEvent
- Klasa TextEvent
- Klasa WindowEvent
- Źródła zdarzeń
- Interfejsy nasłuchujące zdarzeń
- Interfejs ActionListener
- Interfejs AdjustmentListener
- Interfejs ComponentListener
- Interfejs ContainerListener
- Interfejs FocusListener
- Interfejs ItemListener
- Interfejs KeyListener
- Interfejs MouseListener
- Interfejs MouseMotionListener
- Interfejs MouseWheelListener
- Interfejs TextListener
- Interfejs WindowFocusListener
- Interfejs WindowListener
- Stosowanie modelu delegowania zdarzeń
- Kluczowe zagadnienia tworzenia aplikacji graficznych z użyciem AWT
- Obsługa zdarzeń generowanych przez mysz
- Obsługa zdarzeń generowanych przez klawiaturę
- Klasy adapterów
- Klasy wewnętrzne
- Anonimowa klasa wewnętrzna
- Rozdział 25. Wprowadzenie do AWT: praca z oknami, grafiką i tekstem
- Klasy AWT
- Podstawy okien
- Klasa Component
- Klasa Container
- Klasa Panel
- Klasa Window
- Klasa Frame
- Klasa Canvas
- Praca z oknami typu Frame
- Ustawianie wymiarów okna
- Ukrywanie i wyświetlanie okna
- Ustawianie tytułu okna
- Zamykanie okna typu Frame
- Metoda paint()
- Wyświetlanie łańcuchów znaków
- Określanie koloru tekstu i tła
- Żądanie ponownego wyświetlenia zawartości okna
- Tworzenie aplikacji korzystających z klasy Frame
- Wprowadzenie do stosowania grafiki
- Rysowanie odcinków
- Rysowanie prostokątów
- Rysowanie elips, kół i okręgów
- Rysowanie łuków
- Rysowanie wielokątów
- Prezentacja metod rysujących
- Dostosowywanie rozmiarów obiektów graficznych
- Praca z klasą Color
- Metody klasy Color
- Stosowanie barwy, nasycenia i jasności
- Metody getRed(), getGreen() i getBlue()
- Metoda getRGB()
- Ustawianie bieżącego koloru kontekstu graficznego
- Program demonstrujący zastosowanie klasy Color
- Ustawianie trybu rysowania
- Praca z czcionkami
- Określanie dostępnych czcionek
- Tworzenie i wybieranie czcionek
- Uzyskiwanie informacji o czcionkach
- Zarządzanie tekstowymi danymi wyjściowymi z wykorzystaniem klasy FontMetrics
- Rozdział 26. Stosowanie kontrolek AWT, menedżerów układu graficznego oraz menu
- Podstawy kontrolek AWT
- Dodawanie i usuwanie kontrolek
- Odpowiadanie na zdarzenia kontrolek
- Wyjątek HeadlessException
- Etykiety
- Stosowanie przycisków
- Obsługa zdarzeń przycisków
- Stosowanie pól wyboru
- Obsługa zdarzeń pól wyboru
- Klasa CheckboxGroup
- Kontrolki list rozwijanych
- Obsługa zdarzeń list rozwijanych
- Stosowanie list
- Obsługa zdarzeń generowanych przez listy
- Zarządzanie paskami przewijania
- Obsługa zdarzeń generowanych przez paski przewijania
- Stosowanie kontrolek typu TextField
- Obsługa zdarzeń generowanych przez kontrolkę TextField
- Stosowanie kontrolek typu TextArea
- Wprowadzenie do menedżerów układu graficznego komponentów
- FlowLayout
- BorderLayout
- Stosowanie obramowań
- GridLayout
- Klasa CardLayout
- Klasa GridBagLayout
- Menu i paski menu
- Okna dialogowe
- Przesłanianie metody paint()
- Rozdział 27. Obrazy
- Formaty plików
- Podstawy przetwarzania obrazów: tworzenie, wczytywanie i wyświetlanie
- Tworzenie obiektu obrazu
- Ładowanie obrazu
- Wyświetlanie obrazu
- Podwójne buforowanie
- Interfejs ImageProducer
- Interfejs ImageConsumer
- Klasa ImageFilter
- Klasa CropImageFilter
- Klasa RGBImageFilter
- Klasa ImageFilterDemo.java
- Interfejs PlugInFilter.java
- Klasa LoadedImage.java
- Klasa Grayscale.java
- Klasa Invert.java
- Klasa Contrast.java
- Klasa Convolver.java
- Klasa Blur.java
- Klasa Sharpen.java
- Dodatkowe klasy obsługujące obrazy
- Rozdział 28. Narzędzia współbieżności
- Pakiety interfejsu Concurrent API
- Pakiet java.util.concurrent
- Pakiet java.util.concurrent.atomic
- Pakiet java.util.concurrent.locks
- Korzystanie z obiektów służących do synchronizacji
- Klasa Semaphore
- Klasa CountDownLatch
- CyclicBarrier
- Klasa Exchanger
- Klasa Phaser
- Korzystanie z egzekutorów
- Przykład prostego egzekutora
- Korzystanie z interfejsów Callable i Future
- Typ wyliczeniowy TimeUnit
- Kolekcje współbieżne
- Blokady
- Operacje atomowe
- Programowanie równoległe przy użyciu frameworku Fork/Join
- Najważniejsze klasy frameworku Fork/Join
- Klasa ForkJoinTask
- Klasa RecursiveAction
- Klasa RecursiveTask
- Klasa ForkJoinPool
- Strategia dziel i zwyciężaj
- Prosty przykład użycia frameworku Fork/Join
- Znaczenie poziomu równoległości
- Przykład użycia klasy RecursiveTask
- Asynchroniczne wykonywanie zadań
- Anulowanie zadania
- Określanie statusu wykonania zadania
- Ponowne uruchamianie zadania
- Pozostałe zagadnienia
- Wybrane elementy klasy ForkJoinTask
- Wybrane elementy klasy ForkJoinPool
- Wskazówki dotyczące stosowania frameworku Fork/Join
- Pakiet Concurrency Utilities a tradycyjne metody języka Java
- Rozdział 29. API strumieni
- Podstawowe informacje o strumieniach
- Interfejsy strumieni
- Jak można uzyskać strumień?
- Prosty przykład stosowania strumieni
- Operacje redukcji
- Stosowanie strumieni równoległych
- Odwzorowywanie
- Tworzenie kolekcji
- Iteratory i strumienie
- Stosowanie typu Iterator i strumieni
- Stosowanie spliteratorów
- Inne możliwości API strumieni
- Rozdział 30. Wyrażenia regularne i inne pakiety
- Przetwarzanie wyrażeń regularnych
- Klasa Pattern
- Klasa Matcher
- Składnia wyrażeń regularnych
- Przykład dopasowywania do wzorca
- Korzystanie ze znaków zastępczych i kwantyfikatorów
- Korzystanie z klas znaków
- Korzystanie z metody replaceAll()
- Korzystanie z metody split()
- Dwie opcje dopasowywania do wzorca
- Przegląd wyrażeń regularnych
- Refleksje
- Zdalne wywoływanie metod (RMI)
- Prosta aplikacja typu klient-serwer wykorzystująca RMI
- Krok pierwszy: napisanie i kompilacja kodu źródłowego
- Krok drugi: wygenerowanie procedury pośredniczącej
- Krok trzeci: instalacja plików na kliencie i serwerze
- Krok czwarty: uruchomienie rejestru RMI na serwerze
- Krok piąty: uruchomienie serwera
- Krok szósty: uruchomienie klienta
- Formatowanie dat i czasu przy użyciu pakietu java.text
- Klasa DateFormat
- Klasa SimpleDateFormat
- Interfejs API dat i czasu java.time
- Podstawowe klasy do obsługi dat i czasu
- Formatowanie dat i godzin
- Analiza łańcuchów zawierających daty i godziny
- Inne możliwości pakietu java.time
- Część III Wprowadzenie do programowania GUI przy użyciu pakietu Swing
- Rozdział 31. Wprowadzenie do pakietu Swing
- Geneza powstania biblioteki Swing
- Bibliotekę Swing zbudowano na bazie zestawu narzędzi AWT
- Podstawowe cechy biblioteki Swing
- Komponenty biblioteki Swing są lekkie
- Biblioteka Swing obsługuje dołączany wygląd i sposób obsługi
- Podobieństwo do architektury MVC
- Komponenty i kontenery
- Komponenty
- Kontenery
- Panele kontenerów najwyższego poziomu
- Pakiety biblioteki Swing
- Prosta aplikacja na bazie biblioteki Swing
- Obsługa zdarzeń
- Rysowanie w bibliotece Swing
- Podstawy rysowania
- Wyznaczanie obszaru rysowania
- Przykład rysowania
- Rozdział 32. Przewodnik po pakiecie Swing
- Klasy JLabel i ImageIcon
- Klasa JTextField
- Przyciski biblioteki Swing
- Klasa JButton
- Klasa JToggleButton
- Pola wyboru
- Przyciski opcji
- Klasa JTabbedPane
- Klasa JScrollPane
- Klasa JList
- Klasa JComboBox
- Drzewa
- Klasa JTable
- Rozdział 33. Wprowadzenie do systemu menu pakietu Swing
- Podstawy systemu menu
- Przegląd klas JMenuBar, JMenu oraz JMenuItem
- Klasa JMenuBar
- Klasa JMenu
- Klasa JMenuItem
- Tworzenie menu głównego
- Dodawanie mnemonik i kombinacji klawiszy do opcji menu
- Dodawanie obrazów i etykiet ekranowych do menu
- Stosowanie klas JRadioButtonMenuItem i JCheckBoxMenuItem
- Tworzenie menu podręcznych
- Tworzenie paska narzędzi
- Stosowanie akcji
- Finalna postać programu MenuDemo
- Dalsze poznawanie pakietu Swing
- Część IV Wprowadzenie do programowania GUI przy użyciu platformy JavaFX
- Rozdział 34. Wprowadzenie do tworzenia interfejsów graficznych z użyciem JavaFX
- Podstawowe pojęcia z zakresu JavaFX
- Pakiety JavaFX
- Klasy Stage i Scene
- Węzły i graf sceny
- Układy
- Klasa Application i metody cyklu życia
- Uruchamianie aplikacji JavaFX
- Szkielet aplikacji JavaFX
- Kompilacja i uruchamianie programów JavaFX
- Wątek aplikacji
- Prosta kontrolka JavaFX: Label
- Stosowanie przycisków i zdarzeń
- Podstawowe informacje o zdarzeniach
- Prezentacja kontrolki Button
- Przedstawienie obsługi zdarzeń i kontrolki Button
- Bezpośrednie rysowanie na płótnie
- Rozdział 35. Prezentacja kontrolek JavaFX
- Stosowanie klas Image i ImageView
- Dodawanie obrazów do etykiet
- Stosowanie obrazów w przyciskach
- Kontrolka ToggleButton
- Kontrolka RadioButton
- Obsługa zdarzeń w grupie
- Alternatywne sposoby obsługi przycisków opcji
- Kontrolka CheckBox
- Kontrolka ListView
- Paski przewijania w kontrolkach ListView
- Włączanie możliwości wielokrotnego wyboru
- Kontrolka ComboBox
- Kontrolka TextField
- Kontrolka ScrollPane
- Kontrolka TreeView
- Prezentacja efektów i transformacji
- Efekty
- Transformacje
- Prezentacja zastosowania efektów i transformacji
- Dodawanie etykiet ekranowych
- Dezaktywacja kontrolek
- Rozdział 36. Prezentacja systemu menu platformy JavaFX
- Podstawowe informacje o menu
- Prezentacja klas MenuBar, Menu oraz MenuItem
- Klasa MenuBar
- Klasa Menu
- Klasa MenuItem
- Tworzenie menu głównego
- Dodawanie mnemonik i akceleratorów do elementów menu
- Dodawanie obrazów do elementów menu
- Stosowanie klas RadioMenuItem i CheckMenuItem
- Tworzenie menu podręcznego
- Tworzenie paska narzędzi
- Kompletna nowa wersja programu demonstracyjnego
- Dalsze poznawanie platformy JavaFX
- CZĘŚĆ V Stosowanie Javy w praktyce
- Rozdział 37. Java Beans
- Czym jest komponent typu Java Bean?
- Zalety komponentów Java Beans
- Introspekcja
- Wzorce właściwości
- Właściwości proste
- Właściwości indeksowane
- Wzorce projektowe dla zdarzeń
- Metody i wzorce projektowe
- Korzystanie z interfejsu BeanInfo
- Właściwości ograniczone
- Trwałość
- Interfejs Customizer
- Interfejs Java Beans API
- Klasa Introspector
- Klasa PropertyDescriptor
- Klasa EventSetDescriptor
- Klasa MethodDescriptor
- Przykład komponentu Java Bean
- Rozdział 38 Serwlety
- Podstawy
- Cykl życia serwletu
- Sposoby tworzenia serwletów
- Korzystanie z serwera Tomcat
- Przykład prostego serwletu
- Tworzenie i kompilacja kodu źródłowego serwletu
- Uruchamianie serwera Tomcat
- Uruchamianie przeglądarki i generowanie żądania
- Interfejs Servlet API
- Pakiet javax.servlet
- Interfejs Servlet
- Interfejs ServletConfig
- Interfejs ServletContext
- Interfejs ServletRequest
- Interfejs ServletResponse
- Klasa GenericServlet
- Klasa ServletInputStream
- Klasa ServletOutputStream
- Klasy wyjątków związanych z serwletami
- Odczytywanie parametrów serwletu
- Pakiet javax.servlet.http
- Interfejs HttpServletRequest
- Interfejs HttpServletResponse
- Interfejs HttpSession
- Klasa Cookie
- Klasa HttpServlet
- Obsługa żądań i odpowiedzi HTTP
- Obsługa żądań GET protokołu HTTP
- Obsługa żądań POST protokołu HTTP
- Korzystanie ze znaczników kontekstu użytkownika
- Śledzenie sesji
- Dodatki
- Dodatek A Komentarze dokumentujące
- Znaczniki narzędzia javadoc
- Znacznik @author
- Znacznik {@code}
- Znacznik @deprecated
- Znacznik {@docRoot}
- Znacznik @exception
- Znacznik @hidden
- Znacznik {@index}
- Znacznik {@inheritDoc}
- Znacznik {@link}
- Znacznik {@linkplain}
- Znacznik {@literal}
- Znacznik @param
- Znacznik @provides
- Znacznik @return
- Znacznik @see
- Znacznik @serial
- Znacznik @serialData
- Znacznik @serialField
- Znacznik @since
- Znacznik @throws
- Znacznik @uses
- Znacznik {@value}
- Znacznik @version
- Ogólna postać komentarzy dokumentacyjnych
- Wynik działania narzędzia javadoc
- Przykład korzystający z komentarzy dokumentacyjnych
- Dodatek B Przegląd technologii Java Web Start
- Czym jest Java Web Start?
- Cztery kluczowe aspekty Java Web Start
- Aplikacje Java Web Start wymagają pliku JAR
- Aplikacje Java Web Start są podpisywane cyfrowo
- Java Web Start bazuje na JNLP
- Tworzenie odnośnika do pliku JNLP
- Eksperymenty z Java Web Start z wykorzystaniem lokalnego systemu plików
- Utworzenie pliku JAR aplikacji ToggleButtonDemo
- Utworzenie magazynu kluczy i podpisanie pliku ButtonDemo.jar
- Utworzenie pliku JNLP dla aplikacji ToggleButtonDemo
- Utworzenie pliku HTML o nazwie StartTBD.html
- Dodanie pliku ToggleButtonDemo.jnlp do listy wyjątków w aplikacji Java Control Panel
- Wykonanie aplikacji ButtonDemo z poziomu przeglądarki
- Uruchamianie aplikacji Java Web Start przy użyciu programu javaws
- Stosowanie technologii Java Web Start z apletami
- Dodatek C Wprowadzenie do JShell
- Podstawy JShell
- Wyświetlanie, edytowanie i ponowne wykonywanie kodu
- Dodanie metody
- Utworzenie klasy
- Stosowanie interfejsu
- Przetwarzanie wyrażeń i wbudowane zmienne
- Importowanie pakietów
- Wyjątki
- Inne polecenia JShell
- Dalsze poznawanie możliwości JShell
- Dodatek D Podstawy apletów
- Dwa rodzaje apletów
- Podstawy apletów
- Klasa Applet
- Architektura apletów
- Szkielet apletu
- Inicjalizacja i zakończenie działania apletu
- Metoda init()
- Metoda start()
- Metoda paint()
- Metoda stop()
- Metoda destroy()
- Aplety Swinga