Sunday 2nd October 2022

Opis

Java. Kompendium programisty

Mimo upływu lat Java wciąż pozostaje jednym z najważniejszych języków programowania, konsekwentnie wybieranym przez profesjonalnych deweloperów. Jest równocześnie nowoczesna i dojrzała. Twórcy Javy od początku jej istnienia stawiali na elastyczność i stale dostosowywali ten język do zmieniających się warunków pracy programistów. Od pierwszego wydania Java zapewnia narzędzia do programowania rozwiązań internetowych, jest więc naturalnym wyborem programistów tworzących aplikacje internetowe. Jej możliwości jednak są o wiele większe – i rosną z każdą kolejną wersją. Konieczne jest więc sukcesywne zapoznawanie się z nowościami i ze zmianami wprowadzanymi w poszczególnych wydaniach Java SE.Ta książka jest jedenastym wydaniem wyczerpującego kompendium programisty Javy, w pełni zaktualizowanym, uzupełnionym o nowości wprowadzone w Java SE 11. Opisuje język kompleksowo: jego składnię, słowa kluczowe oraz najistotniejsze zasady programowania. Zawiera także informacje o najważniejszych składnikach biblioteki Javy, takich jak klasy wejścia-wyjścia, framework Collections, biblioteka strumieni oraz narzędzia programowania współbieżnego. Oczywiście szczegółowo został tu opisany inny niezwykle ważny element – system modułów Javy. Przedstawiono też interaktywne narzędzie programistyczne JShell. Podręcznik jest przejrzysty, napisany jasnym i zrozumiałym językiem, co zdecydowanie ułatwia naukę. Co ważne, poszczególne zagadnienia zilustrowano licznymi przykładowymi fragmentami kodu źródłowego. Z tak przygotowanego materiału skorzystają wszyscy programiści Javy, zarówno początkujący, jak i profesjonalni deweloperzy.W tej książce między innymi:zasady programowania obiektowegoklasy wejścia-wyjścia oraz obsługa wyjątkówinterfejsy i pakietywnioskowanie typów zmiennych lokalnychobsługa zdarzeń, moduły i wyrażenia lambdaAWT, Swing, JavaBean i serwletyNie znajdziesz bardziej wyczerpującego omówienia Javy!Spis treści:O autorze 23O redaktorze merytorycznym 24Przedmowa 25CZĘŚĆ I. JĘZYK JAVA1. Historia i ewolucja języka Java 31Rodowód Javy 31Narodziny nowoczesnego języka – C 31Język C++ – następny krok 33Podwaliny języka Java 33Powstanie języka Java 33Powiązanie z językiem C# 35Jak Java wywarła wpływ na internet 35Aplety Javy 35Bezpieczeństwo 36Przenośność 36Magia języka Java – kod bajtowy 37Wychodząc poza aplety 38Szybszy harmonogram udostępniania 38Serwlety – Java po stronie serwera 39Hasła języka Java 39Prostota 40Obiektowość 40Niezawodność 40Wielowątkowość 40Neutralność architektury 41Interpretowalność i wysoka wydajność 41Rozproszenie 41Dynamika 41Ewolucja Javy 41Kultura innowacji 462. Podstawy języka Java 47Programowanie obiektowe 47Dwa paradygmaty 47Abstrakcja 48Trzy zasady programowania obiektowego 48Pierwszy przykładowy program 52Wpisanie kodu programu 52Kompilacja programów 53Bliższe spojrzenie na pierwszy przykładowy program 53Drugi prosty program 55Dwie instrukcje sterujące 56Instrukcja if 57Pętla for 58Bloki kodu 59Kwestie składniowe 60Znaki białe 60Identyfikatory 60Stałe 60Komentarze 61Separatory 61Słowa kluczowe języka Java 61Biblioteki klas Javy 623. Typy danych, zmienne i tablice 63Java to język ze ścisłą kontrolą typów 63Typy proste 63Typy całkowitoliczbowe 64Typ byte 64Typ short 65Typ int 65Typ long 65Typy zmiennoprzecinkowe 65Typ float 66Typ double 66Typ znakowy 66Typ logiczny 68Bliższe spojrzenie na stałe 68Stałe całkowitoliczbowe 68Stałe zmiennoprzecinkowe 69Stałe logiczne 70Stałe znakowe 70Stałe łańcuchowe 71Zmienne 71Deklaracja zmiennej 71Inicjalizacja dynamiczna 72Zasięg i czas życia zmiennych 72Konwersja typów i rzutowanie 74Automatyczna konwersja typów 74Rzutowanie niezgodnych typów 75Automatyczne rozszerzanie typów w wyrażeniach 76Zasady rozszerzania typu 76Tablice 77Tablice jednowymiarowe 77Tablice wielowymiarowe 79Alternatywna składnia deklaracji tablicy 82Wnioskowanie typów zmiennych lokalnych 83Ograniczenia var 85Kilka słów o łańcuchach 854. Operatory 87Operatory arytmetyczne 87Podstawowe operatory arytmetyczne 88Operator reszty z dzielenia 88Operatory arytmetyczne z przypisaniem 89Inkrementacja i dekrementacja 90Operatory bitowe 91Logiczne operatory bitowe 92Przesunięcie w lewo 94Przesunięcie w prawo 95Przesunięcie w prawo bez znaku 96Operatory bitowe z przypisaniem 97Operatory relacji 98Operatory logiczne 99Operatory logiczne ze skracaniem 100Operator przypisania 101Operator ? 101Kolejność wykonywania operatorów 102Stosowanie nawiasów okrągłych 1025. Instrukcje sterujące 105Instrukcje wyboru 105Instrukcja if 105Instrukcja switch 108Instrukcje iteracyjne 111Pętla while 112Pętla do-while 113Pętla for 115Wersja for-each pętli for 118Wnioskowanie typów zmiennych lokalnych w pętlach 122Pętle zagnieżdżone 123Instrukcje skoku 123Instrukcja break 124Instrukcja continue 127Instrukcja return 1286. Wprowadzenie do klas 129Klasy 129Ogólna postać klasy 129Prosta klasa 130Deklarowanie obiektów 132Bliższe spojrzenie na operator new 133Przypisywanie zmiennych referencyjnych do obiektów 133Wprowadzenie do metod 134Dodanie metody do klasy Box 134Zwracanie wartości 136Dodanie metody przyjmującej parametry 137Konstruktor 139Konstruktor sparametryzowany 140Słowo kluczowe this 141Ukrywanie zmiennych składowych 141Mechanizm odzyskiwania pamięci 142Klasa stosu 1427. Dokładniejsze omówienie metod i klas 145Przeciążanie metod 145Przeciążanie konstruktorów 147Obiekty jako parametry 149Dokładniejsze omówienie przekazywania argumentów 151Zwracanie obiektów 152Rekurencja 153Wprowadzenie do kontroli dostępu 155Składowe statyczne 158Słowo kluczowe final 159Powtórka z tablic 160Klasy zagnieżdżone i klasy wewnętrzne 161Omówienie klasy String 164Wykorzystanie argumentów wiersza poleceń 165Zmienna liczba argumentów 166Przeciążanie metod o zmiennej liczbie argumentów 169Zmienna liczba argumentów i niejednoznaczności 170Stosowanie wnioskowania typów zmiennych lokalnych z typami referencyjnymi 1718. Dziedziczenie 173Podstawy dziedziczenia 173Dostęp do składowych a dziedziczenie 174Bardziej praktyczny przykład 175Zmienna klasy bazowej może zawierać referencję do obiektu klasy pochodnej 177Słowo kluczowe super 178Wykorzystanie słowa kluczowego super do wywołania konstruktora klasy bazowej 178Drugie zastosowanie słowa kluczowego super 181Tworzenie hierarchii wielopoziomowej 182Kiedy są wykonywane konstruktory? 184Przesłanianie metod 185Dynamiczne przydzielanie metod 187Dlaczego warto przesłaniać metody? 188Zastosowanie przesłaniania metod 188Klasy abstrakcyjne 190Słowo kluczowe final i dziedziczenie 192Słowo kluczowe final zapobiega przesłanianiu 192Słowo kluczowe final zapobiega dziedziczeniu 193Wnioskowanie typów zmiennych lokalnych a dziedziczenie 193Klasa Object 1959. Pakiety i interfejsy 197Pakiety 197Definiowanie pakietu 197Znajdowanie pakietów i ścieżka CLASSPATH 198Prosty przykład pakietu 199Dostęp do pakietów i składowych 199Przykład dostępu 200Import pakietów 203Interfejsy 204Definiowanie interfejsu 205Implementacja interfejsu 206Interfejsy zagnieżdżone 208Stosowanie interfejsów 209Zmienne w interfejsach 211Interfejsy można rozszerzać 213Metody domyślne 214Podstawy metod domyślnych 215Bardziej praktyczny przykład 216Problemy wielokrotnego dziedziczenia 217Metody statyczne w interfejsach 217Stosowanie metod prywatnych w interfejsach 218Ostatnie uwagi dotyczące pakietów i interfejsów 21910. Obsługa wyjątków 221Podstawy obsługi wyjątków 221Typy wyjątków 222Nieprzechwycone wyjątki 222Stosowanie instrukcji try i catch 223Wyświetlenie opisu wyjątku 224Wiele klauzul catch 225Zagnieżdżone instrukcje try 226Instrukcja throw 228Klauzula throws 229Słowo kluczowe finally 229Wyjątki wbudowane w język Java 231Tworzenie własnej klasy pochodnej wyjątków 231Łańcuch wyjątków 234Trzy dodatkowe cechy wyjątków 235Wykorzystanie wyjątków 23611. Programowanie wielowątkowe 237Model wątków języka Java 238Priorytety wątków 239Synchronizacja 239Przekazywanie komunikatów 240Klasa Thread i interfejs Runnable 240Wątek główny 240Tworzenie wątku 242Implementacja interfejsu Runnable 242Rozszerzanie klasy Thread 244Wybór odpowiedniego podejścia 244Tworzenie wielu wątków 245Stosowanie metod isAlive() i join() 246Priorytety wątków 248Synchronizacja 249Synchronizacja metod 249Instrukcja synchronized 251Komunikacja międzywątkowa 252Zakleszczenie 256Zawieszanie, wznawianie i zatrzymywanie wątków 258Uzyskiwanie stanu wątku 260Stosowanie metody wytwórczej do tworzenia i uruchamiania wątku 261Korzystanie z wielowątkowości 26212. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 263Typy wyliczeniowe 263Podstawy wyliczeń 263Metody values() i valueOf() 265Wyliczenia Javy jako typy klasowe 266Wyliczenia dziedziczą po klasie Enum 268Inny przykład wyliczenia 269Opakowania typów 271Klasa Character 271Klasa Boolean 271Opakowania typów numerycznych 272Automatyczne opakowywanie typów prostych 273Automatyczne opakowywanie i metody 274Automatyczne opakowywanie i rozpakowywanie w wyrażeniach 274Automatyczne opakowywanie typów znakowych i logicznych 276Automatyczne opakowywanie pomaga zapobiegać błędom 276Słowo ostrzeżenia 277Adnotacje 277Podstawy tworzenia adnotacji 278Określanie strategii zachowywania adnotacji 278Odczytywanie adnotacji w trakcie działania programu za pomocą refleksji 279Interfejs AnnotatedElement 283Wartości domyślne 283Adnotacje znacznikowe 285Adnotacje jednoelementowe 285Wbudowane adnotacje 287Adnotacje typów 288Adnotacje powtarzalne 292Ograniczenia 29413. Wejście-wyjście, instrukcja try z zasobami i inne tematy 295Podstawowa obsługa wejścia i wyjścia 295Strumienie 296Strumienie znakowe i bajtowe 296Predefiniowane strumienie 298Odczyt danych z konsoli 298Odczyt znaków 298Odczyt łańcuchów 299Wyświetlanie informacji na konsoli 301Klasa PrintWriter 301Odczyt i zapis plików 302Automatyczne zamykanie pliku 307Modyfikatory transient i volatile 310Operator instanceof 311Modyfikator strictfp 313Metody napisane w kodzie rdzennym 313Stosowanie asercji 313Opcje włączania i wyłączania asercji 315Import statyczny 316Wywoływanie przeciążonych konstruktorów za pomocą this() 318Kilka słów o kompaktowych profilach API 32014. Typy sparametryzowane 321Czym są typy sparametryzowane? 321Prosty przykład zastosowania typów sparametryzowanych 322Typy sparametryzowane działają tylko dla typów referencyjnych 325Typy sparametryzowane różnią się, jeśli mają inny argument typu 325W jaki sposób typy sparametryzowane zwiększają bezpieczeństwo? 325Klasa sparametryzowana z dwoma parametrami typu 327Ogólna postać klasy sparametryzowanej 328Typy ograniczone 328Zastosowanie argumentów wieloznacznych 330Ograniczony argument wieloznaczny 333Tworzenie metody sparametryzowanej 337Konstruktory sparametryzowane 338Interfejsy sparametryzowane 339Typy surowe i starszy kod 341Hierarchia klas sparametryzowanych 343Zastosowanie sparametryzowanej klasy bazowej 343Podklasa sparametryzowana 345Porównywanie typów w hierarchii klas sparametryzowanych w czasie wykonywania 346Rzutowanie 348Przesłanianie metod w klasach sparametryzowanych 348Wnioskowanie typów a typy sparametryzowane 349Wnioskowanie typów zmiennych lokalnych a typy sparametryzowane 350Znoszenie 350Metody mostu 351Błędy niejednoznaczności 352Pewne ograniczenia typów sparametryzowanych 353Nie można tworzyć egzemplarza parametru typu 353Ograniczenia dla składowych statycznych 354Ograniczenia tablic typów sparametryzowanych 354Ograniczenia wyjątków typów sparametryzowanych 35515. Wyrażenia lambda 357Wprowadzenie do wyrażeń lambda 357Podstawowe informacje o wyrażeniach lambda 358Interfejsy funkcyjne 358Kilka przykładów wyrażeń lambda 359Blokowe wyrażenia lambda 362Sparametryzowane interfejsy funkcyjne 364Przekazywanie wyrażeń lambda jako argumentów 365Wyrażenia lambda i wyjątki 368Wyrażenia lambda i przechwytywanie zmiennych 369Referencje do metod 370Referencje do metod statycznych 370Referencje do metod instancyjnych 371Referencje do metod a typy sparametryzowane 374Referencje do konstruktorów 376Predefiniowane interfejsy funkcyjne 38016. Moduły 383Podstawowe informacje o modułach 383Przykład prostego modułu 384Kompilowanie i uruchamianie przykładowej aplikacji 388Dokładniejsze informacje o instrukcjach requires i exports 389java.base i moduły platformy 390Stary kod i moduł nienazwany 390Eksportowanie do konkretnego modułu 391Wymagania przechodnie 392Stosowanie usług 396Podstawowe informacje o usługach i dostawcach usług 396Słowa kluczowe związane z usługami 397Przykład stosowania usług i modułów 397Grafy modułów 403Trzy wyspecjalizowane cechy modułów 404Moduły otwarte 404Instrukcja opens 404Instrukcja requires static 404Wprowadzenie do jlink i plików JAR modułów 405Dołączanie plików dostarczonych jako struktura katalogów 405Konsolidacja modularnych plików JAR 405Pliki JMOD 406Kilka słów o warstwach i modułach automatycznych 406Końcowe uwagi dotyczące modułów 407CZĘŚĆ II. BIBLIOTEKA JĘZYKA JAVA17. Obsługa łańcuchów 411Konstruktory klasy String 411Długość łańcucha 413Specjalne operacje na łańcuchach 413Literały tekstowe 413Konkatenacja łańcuchów 414Konkatenacja łańcuchów z innymi typami danych 414Konwersja łańcuchów i metoda toString() 415Wyodrębnianie znaków 416Metoda charAt() 416Metoda getChars() 416Metoda getBytes() 416Metoda toCharArray() 417Porównywanie łańcuchów 417Metody equals() i equalsIgnoreCase() 417Metoda regionMatches() 418Metody startsWith() i endsWith() 418Metoda equals() kontra operator == 418Metoda compareTo() 419Przeszukiwanie łańcuchów 420Modyfikowanie łańcucha 421Metoda substring() 421Metoda concat() 422Metoda replace() 422Metody trim() i strip() 423Konwersja danych za pomocą metody valueOf() 424Zmiana wielkości liter w łańcuchu 424Łączenie łańcuchów 425Dodatkowe metody klasy String 425Klasa StringBuffer 426Konstruktory klasy StringBuffer 427Metody length() i capacity() 427Metoda ensureCapacity() 427Metoda setLength() 428Metody charAt() i setCharAt() 428Metoda getChars() 428Metoda append() 429Metoda insert() 429Metoda reverse() 430Metody delete() i deleteCharAt() 430Metoda replace() 431Metoda substring() 431Dodatkowe metody klasy StringBuffer 431Klasa StringBuilder 43218. Pakiet java.lang 433Opakowania typów prostych 433Klasa Number 434Klasy Double i Float 434Metody isInfinite() i isNan() 437Klasy Byte, Short, Integer i Long 437Klasa Character 445Dodatki wprowadzone w celu obsługi punktów kodowych Unicode 446Klasa Boolean 449Klasa Void 449Klasa Process 450Klasa Runtime 451Zarządzanie pamięcią 452Wykonywanie innych programów 453Runtime.Version 453Klasa ProcessBuilder 455Klasa System 457Wykorzystanie metody currentTimeMillis() do obliczania czasu wykonywania programu 458Użycie metody arraycopy() 459Właściwości środowiska 459Interfejs System.Logger i klasa System.LoggerFinder 460Klasa Object 460Wykorzystanie metody clone() i interfejsu Cloneable 460Klasa Class 462Klasa ClassLoader 465Klasa Math 465Funkcje trygonometryczne 465Funkcje wykładnicze 466Funkcje zaokrągleń 466Inne metody klasy Math 467Klasa StrictMath 469Klasa Compiler 469Klasy Thread i ThreadGroup oraz interfejs Runnable 469Interfejs Runnable 469Klasa Thread 470Klasa ThreadGroup 472Klasy ThreadLocal i InheritableThreadLocal 475Klasa Package 475Klasa Module 476Klasa ModuleLayer 477Klasa RuntimePermission 477Klasa Throwable 477Klasa SecurityManager 477Klasa StackTraceElement 477Klasa StackWalker i interfejs StackWalker.StackFrame 478Klasa Enum 478Klasa ClassValue 479Interfejs CharSequence 479Interfejs Comparable 480Interfejs Appendable 480Interfejs Iterable 480Interfejs Readable 481Interfejs AutoCloseable 481Interfejs Thread.UncaughtExceptionHandler 481Podpakiety pakietu java.lang 481Podpakiet java.lang.annotation 482Podpakiet java.lang.instrument 482Podpakiet java.lang.invoke 482Podpakiet java.lang.management 482Podpakiet java.lang.module 482Podpakiet java.lang.ref 482Podpakiet java.lang.reflect 48219. Pakiet java.util, część 1. – kolekcje 483Wprowadzenie do kolekcji 484Interfejsy kolekcji 485Interfejs Collection 486Interfejs List 488Interfejs Set 489Interfejs SortedSet 490Interfejs NavigableSet 490Interfejs Queue 491Interfejs Deque 492Klasy kolekcji 493Klasa ArrayList 494Klasa LinkedList 497Klasa HashSet 498Klasa LinkedHashSet 499Klasa TreeSet 499Klasa PriorityQueue 501Klasa ArrayDeque 501Klasa EnumSet 502Dostęp do kolekcji za pomocą iteratora 502Korzystanie z iteratora Iterator 504Pętla typu for-each jako alternatywa dla iteratora 505Spliteratory 506Przechowywanie w kolekcjach własnych klas 509Interfejs RandomAcc
ss 510Korzystanie z map 510Interfejsy map 510Klasy map 516Komparatory 520Wykorzystanie komparatora 522Algorytmy kolekcji 526Klasa Arrays 531Starsze klasy i interfejsy 535Interfejs Enumeration 535Klasa Vector 536Klasa Stack 539Klasa Dictionary 540Klasa Hashtable 541Klasa Properties 544Wykorzystanie metod store() i load() 547Ostatnie uwagi na temat kolekcji 54820. Pakiet java.util, część 2. – pozostałe klasy użytkowe 549Klasa StringTokenizer 549Klasa BitSet 551Klasy Optional, OptionalDouble, OptionalInt oraz OptionalLong 553Klasa Date 556Klasa Calendar 557Klasa GregorianCalendar 560Klasa TimeZone 561Klasa SimpleTimeZone 562Klasa Locale 563Klasa Random 564Klasy Timer i TimerTask 566Klasa Currency 568Klasa Formatter 569Konstruktory klasy Formatter 570Metody klasy Formatter 570Podstawy formatowania 570Formatowanie łańcuchów i znaków 573Formatowanie liczb 573Formatowanie daty i godziny 574Specyfikatory %n i %% 575Określanie minimalnej szerokości pola 576Określanie precyzji 577Używanie znaczników (flag) formatów 578Wyrównywanie danych wyjściowych 578Znaczniki spacji, plusa, zera i nawiasów 579Znacznik przecinka 580Znacznik # 580Opcja wielkich liter 580Stosowanie indeksu argumentu 581Zamykanie obiektu klasy Formatter 582Metoda printf() w Javie 582Klasa Scanner 582Konstruktory klasy Scanner 583Podstawy skanowania 584Kilka przykładów użycia klasy Scanner 587Ustawianie separatorów 590Pozostałe elementy klasy Scanner 591Klasy ResourceBundle, ListResourceBundle i PropertyResourceBundle 592Dodatkowe klasy i interfejsy użytkowe 596Podpakiety pakietu java.util 597java.util.concurrent, java.util.concurrent.atomic oraz java.util.concurrent.locks 598java.util.function 598java.util.jar 600java.util.logging 600java.util.prefs 600java.util.regex 600java.util.spi 601java.util.stream 601java.util.zip 60121. Operacje wejścia-wyjścia: analiza pakietu java.io 603Klasy i interfejsy obsługujące operacje wejścia-wyjścia 604Klasa File 604Katalogi 607Stosowanie interfejsu FilenameFilter 608Alternatywna metoda listFiles() 609Tworzenie katalogów 609Interfejsy AutoCloseable, Closeable i Flushable 609Wyjątki operacji wejścia-wyjścia 610Dwa sposoby zamykania strumieni 610Klasy strumieni 611Strumienie bajtów 612Klasa InputStream 612Klasa OutputStream 613Klasa FileInputStream 613Klasa FileOutputStream 615Klasa ByteArrayInputStream 617Klasa ByteArrayOutputStream 618Filtrowane strumienie bajtów 620Buforowane strumienie bajtów 620Klasa SequenceInputStream 623Klasa PrintStream 625Klasy DataOutputStream i DataInputStream 627Klasa RandomAccessFile 628Strumienie znaków 629Klasa Reader 629Klasa Writer 629Klasa FileReader 629Klasa FileWriter 631Klasa CharArrayReader 632Klasa CharArrayWriter 633Klasa BufferedReader 634Klasa BufferedWriter 636Klasa PushbackReader 636Klasa PrintWriter 637Klasa Console 638Serializacja 639Interfejs Serializable 640Interfejs Externalizable 640Interfejs ObjectOutput 640Klasa ObjectOutputStream 641Interfejs ObjectInput 642Klasa ObjectInputStream 642Przykład serializacji 643Korzyści wynikające ze stosowania strumieni 64522. System NIO 647Klasy systemu NIO 647Podstawy systemu NIO 648Bufory 648Kanały 648Zestawy znaków i selektory 651Udoskonalenia dodane w systemie NIO.2 651Interfejs Path 651Klasa Files 651Klasa Paths 654Interfejsy atrybutów plików 655Klasy FileSystem, FileSystems i FileStore 657Stosowanie systemu NIO 657Stosowanie systemu NIO dla operacji wejścia-wyjścia na kanałach 658Stosowanie systemu NIO dla operacji wejścia-wyjścia na strumieniach 666Stosowanie systemu NIO dla operacji na ścieżkach i systemie plików 66823. Obsługa sieci 675Podstawy działania sieci 675Klasy i interfejsy pakietu java.net obsługujące komunikację sieciową 676Klasa InetAddress 677Metody wytwórcze 677Metody klasy 678Klasy Inet4Address oraz Inet6Address 679Gniazda klientów TCP/IP 679URL 682Klasa URLConnection 683Klasa HttpURLConnection 685Klasa URI 687Pliki cookie 687Gniazda serwerów TCP/IP 688Datagramy 688Klasa DatagramSocket 689Klasa DatagramPacket 689Przykład użycia datagramów 690Prezentacja pakietu java.net.http 692Trzy kluczowe elementy 692Prosty przykład użycia API klienta HTTP 695Czego jeszcze warto dowiedzieć się o pakiecie java.net.http? 69624. Obsługa zdarzeń 697Dwa mechanizmy obsługi zdarzeń 697Model obsługi zdarzeń oparty na ich delegowaniu 698Zdarzenia 698Źródła zdarzeń 698Obiekty nasłuchujące zdarzeń 699Klasy zdarzeń 699Klasa ActionEvent 701Klasa AdjustmentEvent 701Klasa ComponentEvent 702Klasa ContainerEvent 702Klasa FocusEvent 703Klasa InputEvent 704Klasa ItemEvent 704Klasa KeyEvent 705Klasa MouseEvent 706Klasa MouseWheelEvent 707Klasa TextEvent 708Klasa WindowEvent 708Źródła zdarzeń 709Interfejsy nasłuchujące zdarzeń 710Interfejs ActionListener 711Interfejs AdjustmentListener 711Interfejs ComponentListener 711Interfejs ContainerListener 711Interfejs FocusListener 711Interfejs ItemListener 711Interfejs KeyListener 711Interfejs MouseListener 712Interfejs MouseMotionListener 712Interfejs MouseWheelListener 712Interfejs TextListener 712Interfejs WindowFocusListener 712Interfejs WindowListener 712Stosowanie modelu delegowania zdarzeń 713Kluczowe zagadnienia tworzenia aplikacji graficznych z użyciem AWT 713Obsługa zdarzeń generowanych przez mysz 714Obsługa zdarzeń generowanych przez klawiaturę 717Klasy adapterów 720Klasy wewnętrzne 722Anonimowa klasa wewnętrzna 72425. Wprowadzenie do AWT: praca z oknami, grafiką i tekstem 727Klasy AWT 728Podstawy okien 730Klasa Component 730Klasa Container 730Klasa Panel 730Klasa Window 731Klasa Frame 731Klasa Canvas 731Praca z oknami typu Frame 731Ustawianie wymiarów okna 731Ukrywanie i wyświetlanie okna 732Ustawianie tytułu okna 732Zamykanie okna typu Frame 732Metoda paint() 732Wyświetlanie łańcuchów znaków 732Określanie koloru tekstu i tła 733Żądanie ponownego wyświetlenia zawartości okna 733Tworzenie aplikacji korzystających z klasy Frame 734Wprowadzenie do stosowania grafiki 735Rysowanie odcinków 735Rysowanie prostokątów 735Rysowanie elips, kół i okręgów 736Rysowanie łuków 736Rysowanie wielokątów 736Prezentacja metod rysujących 737Dostosowywanie rozmiarów obiektów graficznych 738Praca z klasą Color 739Metody klasy Color 740Ustawianie bieżącego koloru kontekstu graficznego 741Program demonstrujący zastosowanie klasy Color 741Ustawianie trybu rysowania 742Praca z czcionkami 743Określanie dostępnych czcionek 745Tworzenie i wybieranie czcionek 746Uzyskiwanie informacji o czcionkach 748Zarządzanie tekstowymi danymi wyjściowymi z wykorzystaniem klasy FontMetrics 74926. Stosowanie kontrolek AWT, menedżerów układu graficznego oraz menu 753Podstawy kontrolek AWT 754Dodawanie i usuwanie kontrolek 754Odpowiadanie na zdarzenia kontrolek 754Wyjątek HeadlessException 755Etykiety 755Stosowanie przycisków 756Obsługa zdarzeń przycisków 757Stosowanie pól wyboru 760Obsługa zdarzeń pól wyboru 761Klasa CheckboxGroup 762Kontrolki list rozwijanych 764Obsługa zdarzeń list rozwijanych 765Stosowanie list 766Obsługa zdarzeń generowanych przez listy 767Zarządzanie paskami przewijania 769Obsługa zdarzeń generowanych przez paski przewijania 770Stosowanie kontrolek typu TextField 772Obsługa zdarzeń generowanych przez kontrolkę TextField 773Stosowanie kontrolek typu TextArea 774Wprowadzenie do menedżerów układu graficznego komponentów 776FlowLayout 777BorderLayout 778Stosowanie obramowań 779GridLayout 781Klasa CardLayout 782Klasa GridBagLayout 785Menu i paski menu 789Okna dialogowe 794Przesłanianie metody paint() 79727. Obrazy 799Formaty plików 799Podstawy przetwarzania obrazów: tworzenie, wczytywanie i wyświetlanie 800Tworzenie obiektu obrazu 800Ładowanie obrazu 800Wyświetlanie obrazu 801Podwójne buforowanie 802Interfejs ImageProducer 804Klasa MemoryImageSource 805Interfejs ImageConsumer 806Klasa PixelGrabber 806Klasa ImageFilter 809Klasa CropImageFilter 809Klasa RGBImageFilter 810Dodatkowe klasy obsługujące obrazy 82128. Narzędzia współbieżności 823Pakiety interfejsu Concurrent API 824Pakiet java.util.concurrent 824Pakiet java.util.concurrent.atomic 825Pakiet java.util.concurrent.locks 825Korzystanie z obiektów służących do synchronizacji 825Klasa Semaphore 825Klasa CountDownLatch 830CyclicBarrier 832Klasa Exchanger 834Klasa Phaser 835Korzystanie z egzekutorów 842Przykład prostego egzekutora 842Korzystanie z interfejsów Callable i Future 844Typ wyliczeniowy TimeUnit 846Kolekcje współbieżne 847Blokady 847Operacje atomowe 850Programowanie równoległe przy użyciu frameworku Fork/Join 851Najważniejsze klasy frameworku Fork/Join 852Strategia dziel i zwyciężaj 855Prosty przykład użycia frameworku Fork/Join 855Znaczenie poziomu równoległości 858Przykład użycia klasy RecursiveTask860Asynchroniczne wykonywanie zadań 862Anulowanie zadania 863Określanie statusu wykonania zadania 863Ponowne uruchamianie zadania 863Pozostałe zagadnienia 863Wskazówki dotyczące stosowania frameworku Fork/Join 865Pakiet Concurrency Utilities a tradycyjne metody języka Java 86629. API strumieni 867Podstawowe informacje o strumieniach 867Interfejsy strumieni 868Jak można uzyskać strumień? 870Prosty przykład stosowania strumieni 871Operacje redukcji 874Stosowanie strumieni równoległych 876Odwzorowywanie 878Tworzenie kolekcji 882Iteratory i strumienie 885Stosowanie typu Iterator i strumieni 885Stosowanie spliteratorów 886Inne możliwości API strumieni 88930. Wyrażenia regularne i inne pakiety 891Przetwarzanie wyrażeń regularnych 891Klasa Pattern 892Klasa Matcher 892Składnia wyrażeń regularnych 893Przykład dopasowywania do wzorca 893Dwie opcje dopasowywania do wzorca 898Przegląd wyrażeń regularnych 898Refleksje 898Zdalne wywoływanie metod (RMI) 901Prosta aplikacja typu klient-serwer wykorzystująca RMI 902Formatowanie dat i czasu przy użyciu pakietu java.text 905Klasa DateFormat 905Klasa SimpleDateFormat 906Interfejs API dat i czasu – java.time 908Podstawowe klasy do obsługi dat i czasu 908Formatowanie dat i godzin 910Analiza łańcuchów zawierających daty i godziny 912Inne możliwości pakietu java.time 913CZĘŚĆ III. WPROWADZENIE DO PROGRAMOWANIA GUI PRZY UŻYCIU PAKIETU SWING31. Wprowadzenie do pakietu Swing 917Geneza powstania biblioteki Swing 917Bibliotekę Swing zbudowano na bazie zestawu narzędzi AWT 918Podstawowe cechy biblioteki Swing 918Komponenty biblioteki Swing są lekkie 918Biblioteka Swing obsługuje dołączany wygląd i sposób obsługi 919Podobieństwo do architektury MVC 919Komponenty i kontenery 920Komponenty 920Kontenery 921Panele kontenerów najwyższego poziomu 921Pakiety biblioteki Swing 922Prosta aplikacja na bazie biblioteki Swing 922Obsługa zdarzeń 926Rysowanie w bibliotece Swing 929Podstawy rysowania 929Wyznaczanie obszaru rysowania 930Przykład rysowania 93032. Przewodnik po pakiecie Swing 933Klasy JLabel i ImageIcon 933Klasa JTextField 935Przyciski biblioteki Swing 936Klasa JButton 937Klasa JToggleButton 939Pola wyboru 940Przyciski opcji 942Klasa JTabbedPane 944Klasa JScrollPane 946Klasa JList 948Klasa JComboBox 951Drzewa 953Klasa JTable 95533. Wprowadzenie do systemu menu pakietu Swing 959Podstawy systemu menu 959Przegląd klas JMenuBar, JMenu oraz JMenuItem 961Klasa JMenuBar 961Klasa JMenu 962Klasa JMenuItem 963Tworzenie menu głównego 963Dodawanie mnemonik i kombinacji klawiszy do opcji menu 967Dodawanie obrazów i etykiet ekranowych do menu 969Stosowanie klas JRadioButtonMenuItem i JCheckBoxMenuItem 970Tworzenie menu podręcznych 972Tworzenie paska narzędzi 974Stosowanie akcji 977Finalna postać programu MenuDemo 981Dalsze poznawanie pakietu Swing 987CZĘŚĆ IV. STOSOWANIE JAVY W PRAKTYCE34. Java Beans 991Czym jest komponent typu Java Bean? 991Zalety komponentów Java Beans 992Introspekcja 992Wzorce właściwości 992Wzorce projektowe dla zdarzeń 993Metody i wzorce projektowe 994Korzystanie z interfejsu BeanInfo 994Właściwości ograniczone 994Trwałość 995Interfejs Customizer 995Interfejs Java Beans API 995Klasa Introspector 997Klasa PropertyDescriptor 997Klasa EventSetDescriptor 997Klasa MethodDescriptor 997Przykład komponentu Java Bean 99735. Serwlety 1001Podstawy 1001Cykl życia serwletu 1002Sposoby tworzenia serwletów 1002Korzystanie z serwera Tomcat 1003Przykład prostego serwletu 1004Tworzenie i kompilacja kodu źródłowego serwletu 1004Uruchamianie serwera Tomcat 1005Uruchamianie przeglądarki i generowanie żądania 1005Interfejs Servlet API 1005Pakiet javax.servlet 1005Interfejs Servlet 1006Interfejs ServletConfig 1006Interfejs ServletContext 1007Interfejs ServletRequest 1007Interfejs ServletResponse 1007Klasa GenericServlet 1007Klasa ServletInputStream 1007Klasa ServletOutputStream 1009Klasy wyjątków związanych z serwletami 1009Odczytywanie parametrów serwletu 1009Pakiet javax.servlet.http 1010Interfejs HttpServletRequest 1011Interfejs HttpServletResponse 1011Interfejs HttpSession 1011Klasa Cookie 1013Klasa HttpServlet 1014Obsługa żądań i odpowiedzi HTTP 1014Obsługa żądań GET protokołu HTTP 1014Obsługa żądań POST protokołu HTTP 1016Korzystanie ze znaczników kontekstu użytkownika 1017Śledzenie sesji 1019DODATKIA. Komentarze dokumentujące 1023Znaczniki narzędzia javadoc 1023Znacznik @author 1024Znacznik {@code} 1024Znacznik @deprecated 1025Znacznik {@docRoot} 1025Znacznik @exception 1025Znacznik @hidden 1025Znacznik {@index} 1025Znacznik {@inheritDoc} 1025Znacznik {@link} 1025Znacznik {@linkplain} 1026Znacznik {@literal} 1026Znacznik @param 1026Znacznik @provides 1026Znacznik @return 1026Znacznik @see 1026Znacznik @serial 1026Znacznik @serialData 1027Znacznik @serialField 1027Znacznik @since 1027Znacznik {@summary} 1027Znacznik @throws 1027Znacznik @uses 1027Znacznik {@value} 1027Znacznik @version 1028Ogólna postać komentarzy dokumentacyjnych 1028Wynik działania narzędzia javadoc 1028Przykład korzystający z komentarzy dokumentacyjnych 1028B. Wprowadzenie do JShell 1031Podstawy JShell 1031Wyświetlanie, edytowanie i ponowne wykonywanie kodu 1033Dodanie metody 1034Utworzenie klasy 1035Stosowanie interfejsu 1036Przetwarzanie wyrażeń i wbudowane zmienne 1037Importowanie pakietów 1037Wyjątki 1038Inne polecenia JShell 1038Dalsze poznawanie możliwości JShell 1039C. Kompilowanie i uruchamianie prostych programów w jednym kroku 1041O autorze: Herb Schildt – jest jednym z najpopularniejszych autorów książek o programowaniu. Jest autorytetem w sprawach języków C, C++, Java i C#, a także doskonałym programistą systemu Windows. Był członkiem komitetu ANSI/ISO, który dokonał standaryzacji języka C++. Jego książki sprzedały się na całym świecie w ponad 3 milionach egzemplarzy i zostały przetłumaczone na większość języków.

florek ariel, barbie na koniu, rozkoszne, mroczny zew

yyyyy

Podręczniki szkolne