E-book details

Java. Receptury. Wydanie III

Java. Receptury. Wydanie III

Ian F. Darwin

Ebook

Rozwiązania i przykłady dla programistów używających języka Java

Java to jeden z języków programowania najchętniej wybieranych do tworzenia zaawansowanych systemów informatycznych. Systemy bankowe, aukcyjne oraz inne zaawansowane programy wspomagające codzienną pracę tysięcy ludzi opierają się na Javie i narzędziach z nią związanych. Jeżeli chcesz śmiało wkroczyć w świat tego języka, musisz mieć tę książkę!

Książka należy do cenionej serii „Receptury”, która przedstawia różne zagadnienia w postaci krótkich przepisów. Nie inaczej jest w tym przypadku. Sięgnij po nią i zobacz, jak kompilować, uruchamiać i testować tworzony kod. W kolejnych rozdziałach zaznajomisz się z najlepszymi metodami przetwarzania ciągów znaków oraz nauczysz się korzystać z wyrażeń regularnych i wykonywać operacje na liczbach. Ponadto zdobędziesz dogłębną wiedzę na temat systemu wejścia-wyjścia, używania systemu plików, sieci oraz drukarek. Książka ta jest obowiązkową pozycją na półce każdego programisty Javy!

Przedstawione receptury obejmują:

  • Sposoby kompilacji, uruchamiania i testowania aplikacji.
  • Manipulację, porównywanie i zmianę organizacji tekstów.
  • Użycie wyrażeń regularnych do dopasowywania tekstów i wzorców.
  • Obsługę liczb, dat i czasu.
  • Określanie struktury danych przy użyciu kolekcji, tablicy i innych typów.
  • Techniki programowania obiektowego i funkcyjnego.
  • Operacje na katalogach i systemie plików.
  • Obsługę grafiki, dźwięku i wideo.
  • Tworzenia aplikacji o graficznym interfejsie użytkownika, w tym Java FX i obsługę zdarzeń.
  • Programowanie sieciowe, zarówno klientów jak i serwerów.
  • Dostęp do baz danych przy użyciu JPA, Hibernate oraz JDBC.
  • Przetwarzenie danych w formatach JSON oraz XML.
  • Wielowątkowość i współbieżność.

Najlepsze przepisy dla programistów Javy!

Wstęp (13)

1. Rozpoczynanie pracy: kompilacja, uruchamianie i testowanie (31)

  • 1.0. Wprowadzenie (31)
  • 1.1. Kompilacja i uruchamianie programów napisanych w Javie - JDK (32)
  • 1.2. Edycja i kompilacja programów przy użyciu edytorów wyposażonych w kolorowanie syntaktyczne (33)
  • 1.3. Kompilacja, uruchamianie i testowanie programów przy użyciu IDE (35)
  • 1.4. Efektywne wykorzystanie zmiennej środowiskowej CLASSPATH (42)
  • 1.5. Pobieranie przykładów dołączonych do tej książki i korzystanie z nich (44)
  • 1.6. Automatyzacja kompilacji przy użyciu programu Ant (50)
  • 1.7. Automatyzacja zależności, kompilacji, testowania i wdrażania przy użyciu programu Apache Maven (53)
  • 1.8. Automatyzacja zależności, kompilacji, testowania i wdrażania przy użyciu programu Gradle (56)
  • 1.9. Komunikaty o odrzuconych metodach (59)
  • 1.10. Testowanie warunkowe bez użycia dyrektywy #ifdef (61)
  • 1.11. Zapewnianie poprawności programu za pomocą asercji (63)
  • 1.12. Wykorzystanie programu uruchomieniowego (64)
  • 1.13. Testowanie jednostkowe - jak uniknąć konieczności stosowania programów uruchomieniowych? (66)
  • 1.14. Zarządzanie kodem z wykorzystaniem ciągłej integracji (69)
  • 1.15. Uzyskiwanie czytelnych komunikatów o wyjątkach (74)
  • 1.16. Poszukiwanie przykładowych kodów źródłowych: programy, szkielety i biblioteki (74)

2. Interakcja ze środowiskiem (79)

  • 2.0. Wprowadzenie (79)
  • 2.1. Pobieranie wartości zmiennych środowiskowych (79)
  • 2.2. Pobieranie informacji z właściwości systemowych (81)
  • 2.3. Określanie używanej wersji JDK (82)
  • 2.4. Tworzenie kodu zależnego od używanego systemu operacyjnego (84)
  • 2.5. Stosowanie rozszerzających interfejsów programistycznych lub innych API (87)
  • 2.6. Analiza argumentów podanych w wierszu wywołania programu (87)

3. Łańcuchy znaków i przetwarzanie tekstów (95)

  • 3.0. Wprowadzenie (95)
  • 3.1. Odczytywanie fragmentów łańcucha (97)
  • 3.2. Dzielenie łańcuchów na słowa (98)
  • 3.3. Łączenie łańcuchów znaków przy użyciu klasy StringBuilder (102)
  • 3.4. Przetwarzanie łańcucha znaków po jednej literze (104)
  • 3.5. Wyrównywanie łańcuchów znaków (105)
  • 3.6. Konwersja pomiędzy znakami Unicode a łańcuchami znaków (108)
  • 3.7. Odwracanie kolejności słów lub znaków w łańcuchu (110)
  • 3.8. Rozwijanie i kompresja znaków tabulacji (111)
  • 3.9. Kontrola wielkości liter (116)
  • 3.10. Wcinanie zawartości dokumentów tekstowych (117)
  • 3.11. Wprowadzanie znaków niedrukowalnych (118)
  • 3.12. Usuwanie odstępów z końca łańcucha (119)
  • 3.13. Przetwarzanie danych rozdzielonych przecinkami (120)
  • 3.14. Program - proste narzędzie do formatowania tekstów (125)
  • 3.15. Program - fonetyczne porównywanie nazwisk (127)

4. Dopasowywanie wzorców przy użyciu wyrażeń regularnych (131)

  • 4.0. Wprowadzenie (131)
  • 4.1. Składnia wyrażeń regularnych (133)
  • 4.2. Wykorzystanie wyrażeń regularnych w języku Java - sprawdzanie występowania wzorca (140)
  • 4.3. Odnajdywanie tekstu pasującego do wzorca (143)
  • 4.4. Zastępowanie określonego tekstu (146)
  • 4.5. Wyświetlanie wszystkich wystąpień wzorca (147)
  • 4.6. Wyświetlanie wierszy zawierających fragment pasujący do wzorca (149)
  • 4.7. Kontrola wielkości znaków w metodach match() i subst() (150)
  • 4.8. Dopasowywanie znaków z akcentami lub znaków złożonych (152)
  • 4.9. Odnajdywanie znaków nowego wiersza (153)
  • 4.10. Program - analiza dziennika serwera Apache (155)
  • 4.11. Program - analizowanie danych (156)
  • 4.12. Program - pełna wersja programu grep (159)

5. Liczby (165)

  • 5.0. Wprowadzenie (165)
  • 5.1. Sprawdzanie, czy łańcuch znaków stanowi poprawną liczbę (168)
  • 5.2. Zapisywanie dużych wartości w zmiennych "mniejszych" typów (170)
  • 5.3. Konwertowanie liczb na obiekty i na odwrót (171)
  • 5.4. Pobieranie ułamka z liczby całkowitej bez konwertowania go na postać zmiennoprzecinkową (172)
  • 5.5. Wymuszanie zachowania dokładności liczb zmiennoprzecinkowych (173)
  • 5.6. Porównywanie liczb zmiennoprzecinkowych (175)
  • 5.7. Zaokrąglanie wartości zmiennoprzecinkowych (177)
  • 5.8. Formatowanie liczb (178)
  • 5.9. Konwersje pomiędzy różnymi systemami liczbowymi - dwójkowym, ósemkowym, dziesiętnym i szesnastkowym (181)
  • 5.10. Operacje na grupie liczb całkowitych (182)
  • 5.11. Posługiwanie się cyframi rzymskimi (183)
  • 5.12. Formatowanie z zachowaniem odpowiedniej postaci liczby mnogiej (187)
  • 5.13. Generowanie liczb losowych (189)
  • 5.14. Obliczanie funkcji trygonometrycznych (192)
  • 5.15. Obliczanie logarytmów (192)
  • 5.16. Mnożenie macierzy (193)
  • 5.17. Operacje na liczbach zespolonych (195)
  • 5.18. Obsługa liczb o bardzo dużych wartościach (197)
  • 5.19. Program TempConverter (200)
  • 5.20. Program - generowanie liczbowych palindromów (201)

6. Daty i godziny - nowy interfejs programowania aplikacji (205)

  • 6.0. Wprowadzenie (205)
  • 6.1. Określanie bieżącej daty (208)
  • 6.2. Wyświetlanie daty i czasu w zadanym formacie (209)
  • 6.3. Konwersja liczb określających datę i czas oraz ilości sekund (211)
  • 6.4. Analiza łańcuchów znaków i ich zamiana na daty (212)
  • 6.5. Obliczanie różnic pomiędzy dwiema datami (213)
  • 6.6. Dodawanie i odejmowanie dat (214)
  • 6.7. Stosowanie starych klas Date i Calendar (215)

7. Strukturalizacja danych w języku Java (217)

  • 7.0. Wprowadzenie (217)
  • 7.1. Strukturalizacja danych przy użyciu tablic (218)
  • 7.2. Modyfikacja wielkości tablic (220)
  • 7.3. Szkielet kolekcji (221)
  • 7.4. Klasa podobna do tablicy, lecz bardziej dynamiczna (223)
  • 7.5. Stosowanie kolekcji ogólnych (225)
  • 7.6. Unikanie rzutowania dzięki zastosowaniu typów ogólnych (227)
  • 7.7. Jak przeglądać zawartość kolekcji? Wyliczenie dostępnych sposobów (230)
  • 7.8. Unikanie powtórzeń dzięki zastosowaniu zbioru (232)
  • 7.9. Iteratory lub wyliczenia - dostęp do danych w sposób niezależny od ich typów (233)
  • 7.10. Strukturalizacja danych z wykorzystaniem list połączonych (234)
  • 7.11. Odwzorowywanie z wykorzystaniem klas Hashtable oraz HashMap (238)
  • 7.12. Zapisywanie łańcuchów znaków w obiektach Properties i Preferences (240)
  • 7.13. Sortowanie kolekcji (244)
  • 7.14. Unikanie konieczności sortowania danych (248)
  • 7.15. Odnajdywanie obiektu w kolekcji (250)
  • 7.16. Zamiana kolekcji na tablicę (252)
  • 7.17. Tworzenie własnego iteratora (253)
  • 7.18. Stos (256)
  • 7.19. Struktury wielowymiarowe (259)
  • 7.20. Program - porównanie szybkości działania (261)

8. Techniki obiektowe (263)

  • 8.0. Wprowadzenie (263)
  • 8.1. Wyświetlanie obiektów - formatowanie obiektów przy użyciu metody toString() (266)
  • 8.2. Przesłanianie metod equals() oraz hashCode() (267)
  • 8.3. Porządki w aplikacji przy użyciu metody addShutdownHook() (273)
  • 8.4. Wykorzystanie klas wewnętrznych (274)
  • 8.5. Tworzenie metod zwrotnych z wykorzystaniem interfejsów (276)
  • 8.6. Polimorfizm i metody abstrakcyjne (279)
  • 8.7. Przekazywanie wartości (281)
  • 8.8. Wartości wyliczeniowe bezpieczne dla typów (284)
  • 8.9. Wymuszanie użycia wzorca Singleton (288)
  • 8.10. Zgłaszanie własnych wyjątków (290)
  • 8.11. Wstrzykiwanie zależności (291)
  • 8.12. Program Plotter (294)

9. Techniki programowania funkcyjnego: interfejsy funkcyjne, strumienie i kolekcje równoległe (299)

  • 9.0. Wprowadzenie (299)
  • 9.1. Stosowanie wyrażeń lambda lub domknięć zamiast klas wewnętrznych (301)
  • 9.2. Stosowanie predefiniowanych interfejsów lambda zamiast własnych (304)
  • 9.3. Upraszczanie przetwarzania z wykorzystaniem interfejsu Stream (306)
  • 9.4. Poprawianie przepustowości dzięki wykorzystaniu strumieni i kolekcji równoległych (308)
  • 9.5. Tworzenie własnych interfejsów funkcyjnych (309)
  • 9.6. Używanie istniejącego kodu w sposób funkcyjny dzięki wykorzystaniu odwołań do metod (311)
  • 9.7. Wstawianie istniejącego kodu metod (315)

10. Wejście i wyjście (317)

  • 10.0. Wprowadzenie (317)
  • 10.1. Odczytywanie informacji ze standardowego strumienia wejściowego (320)
  • 10.2. Odczyt z konsoli lub okna terminala; odczyt hasła bez jego wyświetlania (323)
  • 10.3. Zapis danych w standardowym strumieniu wyjściowym lub w strumieniu błędów (325)
  • 10.4. Wyświetlanie tekstów przy użyciu klasy Formatter i metody printf (327)
  • 10.5. Analiza zawartości pliku przy użyciu klasy StringTokenizer (331)
  • 10.6. Analiza danych wejściowych przy użyciu klasy Scanner (335)
  • 10.7. Analiza danych wejściowych o strukturze gramatycznej (338)
  • 10.8. Otwieranie pliku o podanej nazwie (340)
  • 10.9. Kopiowanie plików (341)
  • 10.10. Odczytywanie zawartości pliku i zapisywanie jej w obiekcie String (347)
  • 10.11. Zmiana skojarzeń standardowych strumieni (347)
  • 10.12. Powielanie strumienia podczas realizacji operacji zapisu (348)
  • 10.13. Odczyt i zapis danych zakodowanych w innym zbiorze znaków (351)
  • 10.14. Te kłopotliwe znaki końca wiersza (352)
  • 10.15. Kod operujący na plikach w sposób zależny od systemu operacyjnego (353)
  • 10.16. Odczytywanie "podzielonych" wierszy tekstu (354)
  • 10.17. Odczytywanie i zapisywanie danych binarnych (358)
  • 10.18. Przejście do określonego miejsca w pliku (359)
  • 10.19. Zapisywanie danych w strumieniu z wykorzystaniem języka C (360)
  • 10.20. Zapisywanie i odczytywanie obiektów (363)
  • 10.21. Unikanie wyjątków ClassCastException spowodowanych nieprawidłowymi wartościami SerialVersionUID (366)
  • 10.22. Odczytywanie i zapisywanie danych w archiwach JAR oraz ZIP (368)
  • 10.23. Odnajdywanie plików w sposób niezależny od systemu operacyjnego przy użyciu metod getResource() i getResourceAsStream() (371)
  • 10.24. Odczytywanie i zapisywanie skompresowanych plików (373)
  • 10.25. Poznawanie API do obsługi portów szeregowych i równoległych (374)
  • 10.26. Zapisywanie danych użytkownika na dysku (379)
  • 10.27. Program - zamiana tekstu do postaci PostScript (382)

11. Operacje na katalogach i systemie plików (387)

  • 11.0. Wprowadzenie (387)
  • 11.1. Pobieranie informacji o pliku (388)
  • 11.2. Tworzenie pliku (390)
  • 11.3. Zmiana nazwy pliku (391)
  • 11.4. Usuwanie plików (392)
  • 11.5. Tworzenie plików tymczasowych (394)
  • 11.6. Zmiana atrybutów pliku (395)
  • 11.7. Tworzenie listy zawartości katalogu (397)
  • 11.8. Pobieranie katalogów głównych (399)
  • 11.9. Tworzenie nowych katalogów (400)
  • 11.10. Stosowanie klasy Path zamiast File (401)
  • 11.11. Stosowanie usługi WatchService do uzyskiwania informacji o zmianach pliku (402)
  • 11.12. Program Find (404)

12. Multimedia: grafika, dźwięk i wideo (407)

  • 12.0. Wprowadzenie (407)
  • 12.1. Rysowanie przy użyciu obiektu Graphics (408)
  • 12.2. Testowanie komponentów graficznych (409)
  • 12.3. Wyświetlanie tekstu (410)
  • 12.4. Wyświetlanie wyśrodkowanego tekstu w komponencie (411)
  • 12.5. Rysowanie cienia (413)
  • 12.6. Wyświetlanie tekstu przy użyciu biblioteki grafiki dwuwymiarowej (415)
  • 12.7. Wyświetlanie tekstu przy użyciu czcionki aplikacji (417)
  • 12.8. Wyświetlanie obrazu (419)
  • 12.9. Odczyt i zapis obrazów przy użyciu pakietu javax.imageio (423)
  • 12.10. Odtwarzanie pliku dźwiękowego (424)
  • 12.11. Prezentacja ruchomego obrazu (426)
  • 12.12. Drukowanie w Javie (430)
  • 12.13. Program PlotterAWT (434)
  • 12.14. Program Grapher (435)

13. Klienty sieciowe (439)

  • 13.0. Wprowadzenie (439)
  • 13.1. Nawiązywanie połączenia z serwerem (441)
  • 13.2. Odnajdywanie i zwracanie informacji o adresach sieciowych (443)
  • 13.3. Obsługa błędów sieciowych (445)
  • 13.4. Odczyt i zapis danych tekstowych (446)
  • 13.5. Odczyt i zapis danych binarnych (448)
  • 13.6. Odczyt i zapis danych serializowanych (450)
  • 13.7. Datagramy UDP (452)
  • 13.8. Program - klient TFTP wykorzystujący protokół UDP (454)
  • 13.9. URI, URL czy może URN? (458)
  • 13.10. Klient usługi internetowej REST (459)
  • 13.11. Klient usługi internetowej SOAP (461)
  • 13.12. Program - klient usługi Telnet (466)
  • 13.13. Program - klient pogawędek internetowych (468)
  • 13.14. Program - sprawdzanie odnośników HTTP (472)

14. Graficzny interfejs użytkownika (475)

  • 14.0. Wprowadzenie (475)
  • 14.1. Wyświetlanie komponentów graficznego interfejsu użytkownika (477)
  • 14.2. Uruchamianie graficznego interfejsu użytkownika w wątku przekazywania zdarzeń (478)
  • 14.3. Projektowanie układu okna (480)
  • 14.4. Karty - nowe spojrzenie na świat (483)
  • 14.5. Obsługa czynności - tworzenie działających przycisków (484)
  • 14.6. Obsługa czynności z wykorzystaniem anonimowych klas wewnętrznych (486)
  • 14.7. Obsługa czynności z wykorzystaniem wyrażeń lambda (488)
  • 14.8. Kończenie programu przy użyciu przycisku Zamknij (489)
  • 14.9. Okna dialogowe - tego nie można zrobić później (494)
  • 14.10. Przechwytywanie i formatowanie wyjątków graficznego interfejsu użytkownika (496)
  • 14.11. Wyświetlanie wyników wykonania programu w oknie (499)
  • 14.12. Wybieranie wartości przy użyciu komponentu JSpinner (505)
  • 14.13. Wybieranie plików przy użyciu klasy JFileChooser (506)
  • 14.14. Wybieranie koloru (509)
  • 14.15. Formatowanie komponentów przy użyciu kodu HTML (511)
  • 14.16. Wyświetlanie okna głównego pośrodku ekranu (512)
  • 14.17. Zmiana sposobów prezentacji programów pisanych z wykorzystaniem pakietu Swing (515)
  • 14.18. Korzystanie z rozszerzonych możliwości pakietu Swing w systemie Mac OS X (519)
  • 14.19. Tworzenie aplikacji z graficznym interfejsem użytkownika przy użyciu pakietu JavaFX (522)
  • 14.20. Program - własne narzędzie do wybierania czcionek (524)
  • 14.21. Program - własny menedżer układu (528)

15. Tworzenie programów wielojęzycznych oraz lokalizacja (535)

  • 15.0. Wprowadzenie (535)
  • 15.1. Tworzenie przycisku w różnych wersjach językowych (535)
  • 15.2. Tworzenie listy dostępnych ustawień lokalnych (538)
  • 15.3. Tworzenie menu z wykorzystaniem zasobów wielojęzycznych (539)
  • 15.4. Tworzenie metod pomocniczych przydatnych podczas pisania programów wielojęzycznych (539)
  • 15.5. Tworzenie okien dialogowych z wykorzystaniem zasobów wielojęzycznych (541)
  • 15.6. Tworzenie wiązki zasobów (543)
  • 15.7. Usuwanie łańcuchów znaków z kodu (544)
  • 15.8. Wykorzystanie konkretnych ustawień lokalnych (545)
  • 15.9. Określanie domyślnych ustawień lokalnych (546)
  • 15.10. Formatowanie komunikatów przy użyciu klasy MessageFormat (547)
  • 15.11. Program MenuIntl (549)
  • 15.12. Program BusCard (551)

16. Programy Javy działające na serwerze - gniazda (555)

  • 16.0. Wprowadzenie (555)
  • 16.1. Tworzenie serwera (556)
  • 16.2. Zwracanie odpowiedzi (łańcucha znaków bądź danych binarnych) (558)
  • 16.3. Zwracanie informacji o obiektach (562)
  • 16.4. Obsługa wielu klientów (563)
  • 16.5. Serwer obsługujący protokół HTTP (567)
  • 16.6. Zabezpieczanie serwera WWW przy użyciu SSL i JSSE (570)
  • 16.7. Rejestracja operacji sieciowych (572)
  • 16.8. Rejestracja przez sieć przy użyciu SLF4J (574)
  • 16.9. Rejestracja przez sieć przy użyciu log4j (576)
  • 16.10. Rejestracja przez sieć przy użyciu pakietu java.util.logging (579)
  • 16.11. Znajdowanie interfejsów sieciowych (581)
  • 16.12. Program - serwer pogawędek w Javie (582)

17. Java i poczta elektroniczna (587)

  • 17.0. Wprowadzenie (587)
  • 17.1. Wysyłanie poczty elektronicznej - wersja działająca w przeglądarkach (588)
  • 17.2. Wysyłanie poczty elektronicznej - właściwe rozwiązanie (592)
  • 17.3. Dodawanie możliwości wysyłania poczty do programu działającego na serwerze (594)
  • 17.4. Wysyłanie wiadomości MIME (599)
  • 17.5. Tworzenie ustawień poczty elektronicznej (602)
  • 17.6. Odczytywanie poczty elektronicznej (603)
  • 17.7. Program MailReaderBean (608)
  • 17.8. Program MailClient (611)

18. Dostęp do baz danych (621)

  • 18.0. Wprowadzenie (621)
  • 18.1. Łatwy dostęp do bazy danych przy użyciu JPA oraz Hibernate (623)
  • 18.2. Konfiguracja i nawiązywanie połączeń JDBC (628)
  • 18.3. Nawiązywanie połączenia z bazą danych JDBC (631)
  • 18.4. Przesyłanie zapytań JDBC i pobieranie wyników (634)
  • 18.5. Wykorzystanie przygotowanych poleceń JDBC (637)
  • 18.6. Wykorzystanie procedur osadzonych w JDBC (641)
  • 18.7. Modyfikacja danych przy użyciu obiektu ResultSet (641)
  • 18.8. Zapisywanie wyników w obiektach RowSet (642)
  • 18.9. Modyfikacja danych przy użyciu poleceń SQL (644)
  • 18.10. Odnajdywanie metadanych JDBC (646)
  • 18.11. Program SQLRunner (650)

19. Przetwarzanie danych w formacie JSON (661)

  • 19.0. Wprowadzenie (661)
  • 19.1. Bezpośrednie generowanie danych w formacie JSON (663)
  • 19.2. Analiza i zapisywanie danych JSON przy użyciu pakietu Jackson (664)
  • 19.3. Analiza i zapis danych w formacie JSON przy użyciu pakietu org.json (665)

20. XML (669)

  • 20.0. Wprowadzenie (669)
  • 20.1. Konwersja obiektów na dane XML przy użyciu JAXB (672)
  • 20.2. Konwersja obiektów na dane XML przy użyciu serializatorów (675)
  • 20.3. Przekształcanie danych XML przy użyciu XSLT (676)
  • 20.4. Analiza składniowa XML przy użyciu API SAX (679)
  • 20.5. Analiza dokumentów XML przy użyciu modelu obiektów dokumentu (DOM) (681)
  • 20.6. Odnajdywanie elementów XML przy użyciu XPath (684)
  • 20.7. Weryfikacja poprawności struktury z wykorzystaniem DTD (686)
  • 20.8. Generowanie własnego kodu XML z wykorzystaniem DOM i obiektów przekształceń XML (689)
  • 20.9. Program xml2mif (691)

21. Pakiety i ich tworzenie (693)

  • 21.0. Wprowadzenie (693)
  • 21.1. Tworzenie pakietu (694)
  • 21.2. Tworzenie dokumentacji klas przy użyciu programu Javadoc (696)
  • 21.3. Więcej niż Javadoc - adnotacje i metadane (700)
  • 21.4. Stosowanie programu archiwizującego jar (701)
  • 21.5. Uruchamianie programu zapisanego w pliku JAR (703)
  • 21.6. Tworzenie klasy w taki sposób, by była komponentem JavaBeans (704)
  • 21.7. Umieszczanie komponentów w plikach JAR (708)
  • 21.8. Umieszczanie serwletów w plikach JAR (709)
  • 21.9. "Zapisz raz, instaluj wszędzie" (710)
  • 21.10. "Napisz raz, instaluj na Mac OS X" (711)
  • 21.11. Java Web Start (713)
  • 21.12. Podpisywanie plików JAR (719)

22. Stosowanie wątków w Javie (721)

  • 22.0. Wprowadzenie (721)
  • 22.1. Uruchamianie kodu w innym wątku (723)
  • 22.2. Animacja - wyświetlanie poruszających się obrazów (728)
  • 22.3. Zatrzymywanie działania wątku (732)
  • 22.4. Spotkania i ograniczenia czasowe (734)
  • 22.5. Synchronizacja wątków przy użyciu słowa kluczowego synchronized (735)
  • 22.6. Upraszczanie synchronizacji przy użyciu blokad (741)
  • 22.7. Komunikacja między wątkami - metody wait() oraz notifyAll() (745)
  • 22.8. Upraszczanie programu producent-konsument przy użyciu interfejsu Queue (750)
  • 22.9. Optymalizacja działania równoległego przy użyciu Fork/Join (753)
  • 22.10. Zapis danych w tle w programach edycyjnych (756)
  • 22.11. Wielowątkowy serwer sieciowy (758)
  • 22.12. Upraszczanie serwerów z wykorzystaniem klas pakietu java.util.concurrent (765)

23. Introspekcja lub "klasa o nazwie Class" (769)

  • 23.0. Wprowadzenie (769)
  • 23.1. Pobieranie deskryptora klasy (770)
  • 23.2. Określanie oraz stosowanie metod i pól (771)
  • 23.3. Uzyskiwanie dostępu do prywatnych pól i metod za pomocą introspekcji (774)
  • 23.4. Dynamiczne ładowanie i instalowanie klas (775)
  • 23.5. Tworzenie nowej klasy od podstaw przy użyciu obiektu ClassLoader (778)
  • 23.6. Określanie efektywności działania (779)
  • 23.7. Wyświetlanie informacji o klasie (784)
  • 23.8. Wyświetlanie klas należących do pakietu (785)
  • 23.9. Stosowanie i definiowanie adnotacji (787)
  • 23.10. Zastosowanie adnotacji do odnajdywania klas pełniących rolę wtyczek (792)
  • 23.11. Program CrossRef (794)
  • 23.12. Program AppletViewer (796)

24. Wykorzystywanie Javy wraz z innymi językami programowania (803)

  • 24.0. Wprowadzenie (803)
  • 24.1. Uruchamianie zewnętrznego programu (804)
  • 24.2. Wykonywanie programu i przechwytywanie jego wyników (808)
  • 24.3. Wywoływanie kodu napisanego w innych językach przy użyciu javax.script (811)
  • 24.4. Tworzenie własnego mechanizmu skryptowego (813)
  • 24.5. Łączenie języków Java i Perl (817)
  • 24.6. Dołączanie kodu rodzimego (820)
  • 24.7. Wywoływanie kodu Javy z kodu rodzimego (825)

Posłowie (829)

A Java kiedyś i obecnie (831)

Skorowidz (849)

  • Title: Java. Receptury. Wydanie III
  • Author: Ian F. Darwin
  • Original title: Java Cookbook, 3rd Edition
  • Translation: Piotr Rajca
  • ISBN: 978-83-246-9573-7, 9788324695737
  • Date of issue: 2015-03-06
  • Format: Ebook
  • Item ID: jarec3
  • Publisher: Helion