Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

84

Transcript of Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Page 1: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition
Page 2: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Tłumaczenie: Piotr Rajcana podstawie „Java. Kompendium programisty. Wydanie VIII” w tłumaczeniu Mikołaja Szczepaniaka

ISBN: 978-83-283-0812-1

Original edition copyright © 2014 by McGraw-Hill Education (Publisher).All rights reserved.

Polish edition copyright © 2015 by HELION S.A.All rights reserved.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie,ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkodywynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/javkp9Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/javkp9.zip

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci

O autorze ..................................................................................................................... 23

Przedmowa .................................................................................................................. 25

CZ IJ zyk Java

1 Historia i ewolucja j zyka Java .................................................................................... 31Rodowód Javy ...................................................................................................................... 31

Narodziny nowoczesnego j zyka — C .......................................................................... 31J zyk C++ — nast pny krok ....................................................................................... 33Podwaliny j zyka Java .................................................................................................. 33

Powstanie j zyka Java ........................................................................................................... 33Powi zanie z j zykiem C# ........................................................................................... 35

Jak j zyk Java zmieni internet .............................................................................................. 35Aplety Javy ................................................................................................................... 35Bezpiecze stwo ........................................................................................................... 36Przeno no ................................................................................................................. 36

Magia j zyka Java — kod bajtowy ........................................................................................ 36Serwlety — Java po stronie serwera ...................................................................................... 37Has a j zyka Java .................................................................................................................. 38

Prostota ........................................................................................................................ 38Obiektowo ................................................................................................................ 38Niezawodno ............................................................................................................. 38Wielow tkowo .......................................................................................................... 39Neutralno architektury .............................................................................................. 39Interpretowalno i wysoka wydajno ......................................................................... 39Rozproszenie ............................................................................................................... 39Dynamika .................................................................................................................... 40

Ewolucja Javy ....................................................................................................................... 40Java SE 8 ...................................................................................................................... 42

Kultura innowacji ................................................................................................................. 43

Poleć książkęKup książkę

Page 4: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

4 Java. Kompendium programisty

2 Podstawy j zyka Java ................................................................................................... 45Programowanie obiektowe ................................................................................................... 45

Dwa paradygmaty ........................................................................................................ 45Abstrakcja ..................................................................................................................... 46Trzy zasady programowania obiektowego ..................................................................... 46

Pierwszy przyk adowy program ............................................................................................. 50Wpisanie kodu programu ............................................................................................. 50Kompilacja programów ................................................................................................. 51Bli sze spojrzenie na pierwszy przyk adowy program .................................................... 51

Drugi prosty program ............................................................................................................ 53Dwie instrukcje steruj ce ...................................................................................................... 54

Instrukcja if ................................................................................................................... 54P tla for ........................................................................................................................ 55

Bloki kodu ............................................................................................................................ 56Kwestie sk adniowe .............................................................................................................. 58

Znaki bia e ................................................................................................................... 58Identyfikatory ............................................................................................................... 58Sta e ............................................................................................................................. 58Komentarze .................................................................................................................. 58Separatory .................................................................................................................... 59S owa kluczowe j zyka Java .......................................................................................... 59

Biblioteki klas Javy ................................................................................................................ 60

3 Typy danych, zmienne i tablice ................................................................................... 61Java to j zyk ze cis kontrol typów .................................................................................... 61Typy proste .......................................................................................................................... 61Typy ca kowitoliczbowe ....................................................................................................... 62

Typ byte ....................................................................................................................... 62Typ short ...................................................................................................................... 63Typ int .......................................................................................................................... 63Typ long ....................................................................................................................... 63

Typy zmiennoprzecinkowe ................................................................................................... 63Typ float ....................................................................................................................... 64Typ double ................................................................................................................... 64

Typ znakowy ........................................................................................................................ 64Typ logiczny ......................................................................................................................... 66Bli sze spojrzenie na sta e ..................................................................................................... 66

Sta e ca kowitoliczbowe ............................................................................................... 66Sta e zmiennoprzecinkowe ........................................................................................... 67Sta e logiczne ............................................................................................................... 68Sta e znakowe .............................................................................................................. 68Sta e a cuchowe ......................................................................................................... 69

Zmienne .............................................................................................................................. 69Deklaracja zmiennej ..................................................................................................... 69Inicjalizacja dynamiczna ............................................................................................... 70Zasi g i czas ycia zmiennych ....................................................................................... 70

Konwersja typów i rzutowanie .............................................................................................. 72Automatyczna konwersja typów ................................................................................... 72Rzutowanie niezgodnych typów ................................................................................... 73

Automatyczne rozszerzanie typów w wyra eniach ................................................................ 74Zasady rozszerzania typu .............................................................................................. 74

Poleć książkęKup książkę

Page 5: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 5

Tablice ................................................................................................................................. 75Tablice jednowymiarowe ............................................................................................. 75Tablice wielowymiarowe .............................................................................................. 77Alternatywna sk adnia deklaracji tablicy ........................................................................ 80

Kilka s ów o a cuchach ....................................................................................................... 80Uwaga dla programistów j zyka C lub C++ na temat wska ników ...................................... 81

4 Operatory ..................................................................................................................... 83Operatory arytmetyczne ....................................................................................................... 83

Podstawowe operatory arytmetyczne ........................................................................... 84Operator reszty z dzielenia ........................................................................................... 84Operatory arytmetyczne z przypisaniem ....................................................................... 85Inkrementacja i dekrementacja .................................................................................... 86

Operatory bitowe ................................................................................................................. 87Logiczne operatory bitowe ........................................................................................... 88Przesuni cie w lewo ..................................................................................................... 90Przesuni cie w prawo .................................................................................................. 91Przesuni cie w prawo bez znaku .................................................................................. 92Operatory bitowe z przypisaniem ................................................................................. 93

Operatory relacji .................................................................................................................. 94Operatory logiczne ............................................................................................................... 95

Operatory logiczne ze skracaniem ................................................................................ 96Operator przypisania ............................................................................................................ 96Operator ? ........................................................................................................................... 97Kolejno wykonywania operatorów .................................................................................... 97Stosowanie nawiasów okr g ych ........................................................................................... 98

5 Instrukcje steruj ce ...................................................................................................... 99Instrukcje wyboru ................................................................................................................. 99

Instrukcja if .................................................................................................................. 99Instrukcja switch ......................................................................................................... 102

Instrukcje iteracyjne ........................................................................................................... 105P tla while ................................................................................................................. 106P tla do-while ............................................................................................................ 107P tla for ..................................................................................................................... 109Wersja for-each p tli for ............................................................................................. 112P tle zagnie d one .................................................................................................... 116

Instrukcje skoku ................................................................................................................. 116Instrukcja break .......................................................................................................... 117Instrukcja continue ..................................................................................................... 120Instrukcja return ......................................................................................................... 121

6 Wprowadzenie do klas .............................................................................................. 123Klasy .................................................................................................................................. 123

Ogólna posta klasy ................................................................................................... 123Prosta klasa ................................................................................................................ 124

Deklarowanie obiektów ..................................................................................................... 126Bli sze spojrzenie na operator new ............................................................................ 127

Przypisywanie zmiennych referencyjnych do obiektów ...................................................... 127Wprowadzenie do metod .................................................................................................. 128

Dodanie metody do klasy Box .................................................................................... 129Zwracanie warto ci .................................................................................................... 130Dodanie metody przyjmuj cej parametry ................................................................... 131

Poleć książkęKup książkę

Page 6: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

6 Java. Kompendium programisty

Konstruktor ......................................................................................................................... 133Konstruktor sparametryzowany ................................................................................... 134

S owo kluczowe this ........................................................................................................... 135Ukrywanie zmiennych sk adowych ............................................................................. 135

Mechanizm odzyskiwania pami ci ...................................................................................... 136Metoda finalize() ................................................................................................................ 136Klasa stosu .......................................................................................................................... 137

7 Dok adniejsze omówienie metod i klas ..................................................................... 139Przeci anie metod ............................................................................................................ 139

Przeci anie konstruktorów ........................................................................................ 141Obiekty jako parametry ...................................................................................................... 143Dok adniejsze omówienie przekazywania argumentów ...................................................... 145Zwracanie obiektów ........................................................................................................... 146Rekurencja ......................................................................................................................... 147Wprowadzenie do kontroli dost pu .................................................................................... 149Sk adowe statyczne ............................................................................................................ 152S owo kluczowe final .......................................................................................................... 153Powtórka z tablic ................................................................................................................ 154Klasy zagnie d one i klasy wewn trzne .............................................................................. 155Omówienie klasy String ...................................................................................................... 157Wykorzystanie argumentów wiersza polece ...................................................................... 159Zmienna liczba argumentów .............................................................................................. 160

Przeci anie metod o zmiennej liczbie argumentów ................................................... 162Zmienna liczba argumentów i niejednoznaczno ci ..................................................... 163

8 Dziedziczenie ............................................................................................................. 165Podstawy dziedziczenia ...................................................................................................... 165

Dost p do sk adowych a dziedziczenie ....................................................................... 166Bardziej praktyczny przyk ad ...................................................................................... 167Zmienna klasy bazowej mo e zawiera referencj do obiektu podklasy ...................... 169

S owo kluczowe super ........................................................................................................ 170Wykorzystanie s owa kluczowego super do wywo ania konstruktora klasy bazowej ..... 170Drugie zastosowanie s owa kluczowego super ............................................................ 173

Tworzenie hierarchii wielopoziomowej .............................................................................. 173Kiedy s wykonywane konstruktory? ................................................................................... 176Przes anianie metod ........................................................................................................... 177Dynamiczne przydzielanie metod ....................................................................................... 178

Dlaczego warto przes ania metody? .......................................................................... 180Zastosowanie przes aniania metod ............................................................................. 180

Klasy abstrakcyjne ............................................................................................................... 181S owo kluczowe final i dziedziczenie .................................................................................. 184

S owo kluczowe final zapobiega przes anianiu ............................................................ 184S owo kluczowe final zapobiega dziedziczeniu ........................................................... 184

Klasa Object ....................................................................................................................... 185

9 Pakiety i interfejsy ...................................................................................................... 187Pakiety ............................................................................................................................... 187

Definiowanie pakietu ................................................................................................. 187Znajdowanie pakietów i cie ka CLASSPATH ............................................................. 188Prosty przyk ad pakietu .............................................................................................. 189

Ochrona dost pu ............................................................................................................... 189Przyk ad dost pu ........................................................................................................ 190

Poleć książkęKup książkę

Page 7: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 7

Import pakietów ................................................................................................................. 192Interfejsy ............................................................................................................................ 194

Definiowanie interfejsu .............................................................................................. 194Implementacja interfejsu ............................................................................................ 195Interfejsy zagnie d one .............................................................................................. 197Stosowanie interfejsów ............................................................................................... 198Zmienne w interfejsach .............................................................................................. 201Interfejsy mo na rozszerza ........................................................................................ 202

Metody domy lne .............................................................................................................. 203Podstawy metod domy lnych ..................................................................................... 204Bardziej praktyczny przyk ad ...................................................................................... 205Problemy wielokrotnego dziedziczenia ....................................................................... 206

Metody statyczne w interfejsach ......................................................................................... 207Ostatnie uwagi dotycz ce pakietów i interfejsów ................................................................ 207

10 Obs uga wyj tków ..................................................................................................... 209Podstawy obs ugi wyj tków ................................................................................................ 209Typy wyj tków ................................................................................................................... 210Nieprzechwycone wyj tki .................................................................................................. 210Stosowanie instrukcji try i catch .......................................................................................... 211

Wy wietlenie opisu wyj tku ....................................................................................... 212Wiele klauzul catch ............................................................................................................ 213Zagnie d one instrukcje try ................................................................................................ 214Instrukcja throw ................................................................................................................. 216Klauzula throws .................................................................................................................. 217S owo kluczowe finally ....................................................................................................... 217Wyj tki wbudowane w j zyk Java ...................................................................................... 219Tworzenie w asnej podklasy wyj tków ............................................................................... 219a cuch wyj tków ............................................................................................................. 222

Trzy nowe cechy wyj tków ................................................................................................ 223Wykorzystanie wyj tków .................................................................................................... 224

11 Programowanie wielow tkowe .................................................................................. 225Model w tków j zyka Java ................................................................................................. 226

Priorytety w tków ...................................................................................................... 227Synchronizacja ........................................................................................................... 227Przekazywanie komunikatów ..................................................................................... 228Klasa Thread i interfejs Runnable ................................................................................ 228

W tek g ówny .................................................................................................................... 228Tworzenie w tku ................................................................................................................ 230

Implementacja interfejsu Runnable ............................................................................ 230Rozszerzanie klasy Thread .......................................................................................... 232Wybór odpowiedniego podej cia ............................................................................... 232

Tworzenie wielu w tków .................................................................................................... 233Stosowanie metod isAlive() i join() ...................................................................................... 234Priorytety w tków .............................................................................................................. 236Synchronizacja ................................................................................................................... 237

Synchronizacja metod ................................................................................................ 237Instrukcja synchronized .............................................................................................. 239

Komunikacja mi dzyw tkowa ............................................................................................ 240Zakleszczenie ............................................................................................................. 244

Zawieszanie, wznawianie i zatrzymywanie w tków ............................................................ 245Uzyskiwanie stanu w tku ................................................................................................... 247Korzystanie z wielow tkowo ci ........................................................................................... 249

Poleć książkęKup książkę

Page 8: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

8 Java. Kompendium programisty

12 Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje (metadane) ... 251Typy wyliczeniowe ............................................................................................................. 251

Podstawy wylicze ..................................................................................................... 251Metody values() i valueOf() ......................................................................................... 253Wyliczenia Javy jako typy klasowe .............................................................................. 254Wyliczenia dziedzicz po klasie Enum ........................................................................ 256Inny przyk ad wyliczenia ............................................................................................ 257

Opakowania typów ............................................................................................................ 258Klasa Character ........................................................................................................... 259Klasa Boolean ............................................................................................................. 259Opakowania typów numerycznych ............................................................................ 259

Automatyczne opakowywanie typów prostych .................................................................... 260Automatyczne opakowywanie i metody ..................................................................... 261Automatyczne opakowywanie i rozpakowywanie w wyra eniach ............................... 262Automatyczne opakowywanie typów znakowych i logicznych .................................... 263Automatyczne opakowywanie pomaga zapobiega b dom ........................................ 264S owo ostrze enia ....................................................................................................... 264

Adnotacje (metadane) ........................................................................................................ 265Podstawy tworzenia adnotacji .................................................................................... 265Okre lanie strategii zachowywania adnotacji .............................................................. 266Odczytywanie adnotacji w trakcie dzia ania programu za pomoc refleksji ................. 266Interfejs AnnotatedElement ......................................................................................... 270Warto ci domy lne ..................................................................................................... 271Adnotacje znacznikowe .............................................................................................. 272Adnotacje jednoelementowe ...................................................................................... 272Wbudowane adnotacje .............................................................................................. 274

Adnotacje typów ................................................................................................................ 275Adnotacje powtarzalne ....................................................................................................... 279

Ograniczenia .............................................................................................................. 281

13 Wej cie-wyj cie, aplety i inne tematy ........................................................................ 283Podstawowa obs uga wej cia i wyj cia ................................................................................ 283

Strumienie .................................................................................................................. 284Strumienie znakowe i bajtowe .................................................................................... 284Predefiniowane strumienie ......................................................................................... 286

Odczyt danych z konsoli .................................................................................................... 286Odczyt znaków .......................................................................................................... 286Odczyt a cuchów ..................................................................................................... 287

Wy wietlanie informacji na konsoli ..................................................................................... 289Klasa PrintWriter ................................................................................................................. 289Odczyt i zapis plików ......................................................................................................... 290Automatyczne zamykanie pliku .......................................................................................... 295Podstawy apletów .............................................................................................................. 298Modyfikatory transient i volatile .......................................................................................... 301Operator instanceof ............................................................................................................ 301Modyfikator strictfp ............................................................................................................ 303Metody napisane w kodzie rdzennym ................................................................................ 303Problemy z metodami rdzennymi ....................................................................................... 306Stosowanie asercji .............................................................................................................. 306

Opcje w czania i wy czania asercji .......................................................................... 308Import statyczny ................................................................................................................. 309Wywo ywanie przeci onych konstruktorów za pomoc this() ............................................ 311Kompaktowe profile API ..................................................................................................... 313

Poleć książkęKup książkę

Page 9: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 9

14 Typy sparametryzowane ............................................................................................ 315Czym s typy sparametryzowane? ...................................................................................... 315Prosty przyk ad zastosowania typów sparametryzowanych .................................................. 316

Typy sparametryzowane dzia aj tylko dla typów referencyjnych ................................ 319Typy sparametryzowane ró ni si , je li maj inny argument typu .............................. 319W jaki sposób typy sparametryzowane zwi kszaj bezpiecze stwo? ........................... 319

Klasa sparametryzowana z dwoma parametrami typu ......................................................... 321Ogólna posta klasy sparametryzowanej ............................................................................. 322Typy ograniczone ............................................................................................................... 322Zastosowanie argumentów wieloznacznych ....................................................................... 324

Ograniczony argument wieloznaczny ......................................................................... 327Tworzenie metody sparametryzowanej .............................................................................. 331

Konstruktory sparametryzowane ................................................................................. 332Interfejsy sparametryzowane .............................................................................................. 333Typy surowe i starszy kod ................................................................................................... 335Hierarchia klas sparametryzowanych .................................................................................. 337

Zastosowanie sparametryzowanej klasy bazowej ........................................................ 337Podklasa sparametryzowana ....................................................................................... 339Porównywanie typów w hierarchii klas sparametryzowanych

w czasie wykonywania ............................................................................................ 340Rzutowanie ................................................................................................................ 342Przykrywanie metod w klasach sparametryzowanych ................................................. 342

Wnioskowanie typów a typy sparametryzowane ................................................................. 343Znoszenie .......................................................................................................................... 344

Metody mostu ............................................................................................................ 344B dy niejednoznaczno ci .................................................................................................. 346Pewne ograniczenia typów sparametryzowanych ............................................................... 347

Nie mo na tworzy egzemplarza parametru typu ....................................................... 347Ograniczenia dla sk adowych statycznych .................................................................. 347Ograniczenia tablic typów sparametryzowanych ........................................................ 347Ograniczenia wyj tków typów sparametryzowanych .................................................. 348

15 Wyra enia lambda ..................................................................................................... 349Wprowadzenie do wyra e lambda ................................................................................... 349

Podstawowe informacje o wyra eniach lambda ......................................................... 350Interfejsy funkcyjne .................................................................................................... 351Kilka przyk adów wyra e lambda ............................................................................. 352

Blokowe wyra enia lambda ................................................................................................ 354Sparametryzowane interfejsy funkcyjne .............................................................................. 356Przekazywanie wyra e lambda jako argumentów ............................................................. 357Wyra enia lambda i wyj tki ............................................................................................... 360Wyra enia lambda i przechwytywanie zmiennych .............................................................. 361Referencje do metod .......................................................................................................... 362

Referencje do metod statycznych ............................................................................... 362Referencje do metod instancyjnych ............................................................................ 363Referencje do metod a typy sparametryzowane ......................................................... 366

Referencje do konstruktorów .............................................................................................. 368Predefiniowane interfejsy funkcyjne ................................................................................... 372

Poleć książkęKup książkę

Page 10: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

10 Java. Kompendium programisty

CZ IIBiblioteka j zyka Java

16 Obs uga a cuchów ................................................................................................... 377Konstruktory klasy String ..................................................................................................... 377D ugo a cucha ............................................................................................................... 379Specjalne operacje na a cuchach ...................................................................................... 379

Litera y tekstowe ........................................................................................................ 379Konkatenacja a cuchów ............................................................................................ 380Konkatenacja a cuchów z innymi typami danych ...................................................... 380Konwersja a cuchów i metoda toString() ................................................................... 381

Wyodr bnianie znaków ...................................................................................................... 382Metoda charAt() ......................................................................................................... 382Metoda getChars() ...................................................................................................... 382Metoda getBytes() ....................................................................................................... 382Metoda toCharArray() ................................................................................................. 383

Porównywanie a cuchów .................................................................................................. 383Metody equals() i equalsIgnoreCase() .......................................................................... 383Metoda regionMatches() ............................................................................................. 384Metody startsWith() i endsWith() ................................................................................ 384Metoda equals() kontra operator == ......................................................................... 384Metoda compareTo() .................................................................................................. 385

Przeszukiwanie a cuchów ................................................................................................. 386Modyfikowanie a cucha .................................................................................................... 387

Metoda substring() ...................................................................................................... 387Metoda concat() ......................................................................................................... 388Metoda replace() ........................................................................................................ 388Metoda trim() ............................................................................................................. 389

Konwersja danych za pomoc metody valueOf() ................................................................ 389Zmiana wielko ci liter w a cuchu ...................................................................................... 390

czenie a cuchów ........................................................................................................... 390Dodatkowe metody klasy String .......................................................................................... 391Klasa StringBuffer ................................................................................................................ 391

Konstruktory klasy StringBuffer .................................................................................... 391Metody length() i capacity() ........................................................................................ 393Metoda ensureCapacity() ............................................................................................ 393Metoda setLength() ..................................................................................................... 393Metody charAt() i setCharAt() ...................................................................................... 393Metoda getChars() ...................................................................................................... 394Metoda append() ........................................................................................................ 394Metoda insert() ........................................................................................................... 395Metoda reverse() ........................................................................................................ 395Metody delete() i deleteCharAt() ................................................................................. 395Metoda replace() ........................................................................................................ 396Metoda substring() ...................................................................................................... 396Dodatkowe metody klasy StringBuffer ........................................................................ 397

Klasa StringBuilder .............................................................................................................. 398

17 Pakiet java.lang .......................................................................................................... 399Opakowania typów prostych .............................................................................................. 399

Klasa Number ............................................................................................................. 400Klasy Double i Float .................................................................................................... 400Klasy Byte, Short, Integer i Long .................................................................................. 403

Poleć książkęKup książkę

Page 11: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 11

Klasa Character .......................................................................................................... 411Dodatki wprowadzone w celu obs ugi punktów kodowych Unicode .......................... 413Klasa Boolean ............................................................................................................. 414

Klasa Void .......................................................................................................................... 415Klasa Process ...................................................................................................................... 415Klasa Runtime .................................................................................................................... 416

Zarz dzanie pami ci ................................................................................................ 416Wykonywanie innych programów .............................................................................. 418

Klasa ProcessBuilder ........................................................................................................... 419Klasa System ...................................................................................................................... 421

Wykorzystanie metody currentTimeMillis() do obliczania czasu wykonywania programu ... 422U ycie metody arraycopy() ......................................................................................... 423W a ciwo ci rodowiska ............................................................................................. 424

Klasa Object ....................................................................................................................... 424Wykorzystanie metody clone() i interfejsu Cloneable .......................................................... 425Klasa Class .......................................................................................................................... 426Klasa ClassLoader ............................................................................................................... 429Klasa Math ......................................................................................................................... 429

Funkcje trygonometryczne ......................................................................................... 429Funkcje wyk adnicze .................................................................................................. 430Funkcje zaokr gle .................................................................................................... 430Inne metody klasy Math ............................................................................................. 430

Klasa StrictMath ................................................................................................................. 433Klasa Compiler ................................................................................................................... 433Klasy Thread i ThreadGroup oraz interfejs Runnable .......................................................... 433

Interfejs Runnable ...................................................................................................... 433Klasa Thread .............................................................................................................. 433Klasa ThreadGroup .................................................................................................... 435

Klasy ThreadLocal i InheritableThreadLocal ........................................................................ 439Klasa Package ..................................................................................................................... 439Klasa RuntimePermission .................................................................................................... 439Klasa Throwable ................................................................................................................. 439Klasa SecurityManager ........................................................................................................ 439Klasa StackTraceElement .................................................................................................... 439Klasa Enum ........................................................................................................................ 441Klasa ClassValue ................................................................................................................. 442Interfejs CharSequence ...................................................................................................... 442Interfejs Comparable .......................................................................................................... 442Interfejs Appendable .......................................................................................................... 442Interfejs Iterable ................................................................................................................. 443Interfejs Readable ............................................................................................................... 443Interfejs AutoCloseable ....................................................................................................... 443Interfejs Thread.UncaughtExceptionHandler ...................................................................... 444Podpakiety pakietu java.lang .............................................................................................. 444

Podpakiet java.lang.annotation ................................................................................... 444Podpakiet java.lang.instrument ................................................................................... 444Podpakiet java.lang.invoke ......................................................................................... 444Podpakiet java.lang.management ............................................................................... 444Podpakiet java.lang.ref ............................................................................................... 445Podpakiet java.lang.reflect .......................................................................................... 445

Poleć książkęKup książkę

Page 12: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

12 Java. Kompendium programisty

18 Pakiet java.util, cz 1. — kolekcje .......................................................................... 447Wprowadzenie do kolekcji ................................................................................................. 448Zmiany w kolekcjach wprowadzone w JDK 5 ..................................................................... 449

Typy sparametryzowane w znacz cy sposób zmieniaj kolekcje ................................. 449Automatyczne opakowywanie u atwia korzystanie z typów prostych ........................... 450P tla for typu for-each ................................................................................................ 450

Interfejsy kolekcji ................................................................................................................ 450Interfejs Collection ..................................................................................................... 451Interfejs List ................................................................................................................ 453Interfejs Set ................................................................................................................ 454Interfejs SortedSet ...................................................................................................... 454Interfejs NavigableSet ................................................................................................. 455Interfejs Queue .......................................................................................................... 455Interfejs Deque ........................................................................................................... 455

Klasy kolekcji ...................................................................................................................... 458Klasa ArrayList ............................................................................................................ 458Klasa LinkedList .......................................................................................................... 461Klasa HashSet ............................................................................................................. 462Klasa LinkedHashSet ................................................................................................... 463Klasa TreeSet .............................................................................................................. 464Klasa PriorityQueue .................................................................................................... 465Klasa ArrayDeque ....................................................................................................... 465Klasa EnumSet ............................................................................................................ 466

Dost p do kolekcji za pomoc iteratora .............................................................................. 466Korzystanie z iteratora Iterator .................................................................................... 468P tla typu for-each jako alternatywa dla iteratora ........................................................ 469

Spliteratory ......................................................................................................................... 470Przechowywanie w kolekcjach w asnych klas ...................................................................... 473Interfejs RandomAccess ...................................................................................................... 474Korzystanie z map .............................................................................................................. 474

Interfejsy map ............................................................................................................. 474Klasy map ................................................................................................................... 479

Komparatory ...................................................................................................................... 483Wykorzystanie komparatora ....................................................................................... 485

Algorytmy kolekcji .............................................................................................................. 490Klasa Arrays ........................................................................................................................ 495Starsze klasy i interfejsy ....................................................................................................... 499

Interfejs Enumeration ................................................................................................. 499Klasa Vector ............................................................................................................... 500Klasa Stack ................................................................................................................. 503Klasa Dictionary ......................................................................................................... 504Klasa Hashtable .......................................................................................................... 505Klasa Properties .......................................................................................................... 508Wykorzystanie metod store() i load() ........................................................................... 510

Ostatnie uwagi na temat kolekcji ........................................................................................ 512

19 Pakiet java.util, cz 2. — pozosta e klasy u ytkowe .............................................. 513Klasa StringTokenizer .......................................................................................................... 513Klasa BitSet ......................................................................................................................... 514Klasy Optional, OptionalDouble, OptionalInt oraz OptionalLong ....................................... 517Klasa Date .......................................................................................................................... 519Klasa Calendar .................................................................................................................... 521Klasa GregorianCalendar .................................................................................................... 524Klasa TimeZone .................................................................................................................. 525

Poleć książkęKup książkę

Page 13: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 13

Klasa SimpleTimeZone ....................................................................................................... 525Klasa Locale ....................................................................................................................... 527Klasa Random .................................................................................................................... 528Klasa Observable ................................................................................................................ 530

Interfejs Observer ....................................................................................................... 531Przyk ad u ycia interfejsu Observer ............................................................................ 531

Klasy Timer i TimerTask ...................................................................................................... 533Klasa Currency ................................................................................................................... 535Klasa Formatter .................................................................................................................. 536

Konstruktory klasy Formatter ...................................................................................... 536Metody klasy Formatter .............................................................................................. 537Podstawy formatowania ............................................................................................. 537Formatowanie a cuchów i znaków ........................................................................... 539Formatowanie liczb .................................................................................................... 540Formatowanie daty i godziny ..................................................................................... 540Specyfikatory %n i %% ............................................................................................... 542Okre lanie minimalnej szeroko ci pola ....................................................................... 543Okre lanie precyzji .................................................................................................... 544U ywanie znaczników (flag) formatów ....................................................................... 545Wyrównywanie danych wyj ciowych ......................................................................... 545Znaczniki spacji, plusa, zera i nawiasów ..................................................................... 546Znacznik przecinka .................................................................................................... 547Znacznik # ................................................................................................................ 547Opcja wielkich liter .................................................................................................... 547Stosowanie indeksu argumentu .................................................................................. 548Zamykanie obiektu klasy Formatter ............................................................................ 549Metoda printf() w Javie ............................................................................................... 549

Klasa Scanner ..................................................................................................................... 549Konstruktory klasy Scanner ......................................................................................... 549Podstawy skanowania ................................................................................................ 551Kilka przyk adów u ycia klasy Scanner ....................................................................... 554Ustawianie separatorów ............................................................................................. 557Pozosta e elementy klasy Scanner ............................................................................... 558

Klasy ResourceBundle, ListResourceBundle i PropertyResourceBundle ............................... 559Dodatkowe klasy i interfejsy u ytkowe ............................................................................... 563Podpakiety pakietu java.util ................................................................................................ 564

java.util.concurrent, java.util.concurrent.atomic oraz java.util.concurrent.locks .......... 564java.util.function ........................................................................................................ 564java.util.jar ................................................................................................................. 567java.util.logging .......................................................................................................... 567java.util.prefs .............................................................................................................. 567java.util.regex ............................................................................................................. 567java.util.spi ................................................................................................................. 567java.util.stream ........................................................................................................... 567java.util.zip ................................................................................................................ 567

20 Operacje wej cia-wyj cia: analiza pakietu java.io .................................................... 569Klasy i interfejsy obs uguj ce operacje wej cia-wyj cia ........................................................ 570Klasa File ............................................................................................................................ 570

Katalogi ...................................................................................................................... 573Stosowanie interfejsu FilenameFilter ........................................................................... 574Alternatywna metoda listFiles() ................................................................................... 575Tworzenie katalogów ................................................................................................. 575

Interfejsy AutoCloseable, Closeable i Flushable ................................................................... 575Wyj tki operacji wej cia-wyj cia ......................................................................................... 576

Poleć książkęKup książkę

Page 14: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

14 Java. Kompendium programisty

Dwa sposoby zamykania strumieni ..................................................................................... 576Klasy strumieni ................................................................................................................... 577Strumienie bajtów .............................................................................................................. 578

Klasa InputStream ....................................................................................................... 578Klasa OutputStream .................................................................................................... 579Klasa FileInputStream ................................................................................................. 579Klasa FileOutputStream .............................................................................................. 581Klasa ByteArrayInputStream ........................................................................................ 583Klasa ByteArrayOutputStream ..................................................................................... 584Filtrowane strumienie bajtów ...................................................................................... 585Buforowane strumienie bajtów ................................................................................... 586Klasa SequenceInputStream ........................................................................................ 589Klasa PrintStream ........................................................................................................ 590Klasy DataOutputStream i DataInputStream ............................................................... 593Klasa RandomAccessFile ............................................................................................. 594

Strumienie znaków ............................................................................................................. 595Klasa Reader ............................................................................................................... 595Klasa Writer ................................................................................................................ 596Klasa FileReader ......................................................................................................... 596Klasa FileWriter .......................................................................................................... 597Klasa CharArrayReader ............................................................................................... 598Klasa CharArrayWriter ................................................................................................ 599Klasa BufferedReader ................................................................................................. 600Klasa BufferedWriter .................................................................................................. 601Klasa PushbackReader ................................................................................................ 601Klasa PrintWriter ........................................................................................................ 602

Klasa Console ..................................................................................................................... 603Serializacja ......................................................................................................................... 605

Interfejs Serializable .................................................................................................... 606Interfejs Externalizable ................................................................................................ 606Interfejs ObjectOutput ............................................................................................... 606Klasa ObjectOutputStream ......................................................................................... 607Interfejs ObjectInput .................................................................................................. 608Klasa ObjectInputStream ............................................................................................ 608Przyk ad serializacji ..................................................................................................... 608

Korzy ci wynikaj ce ze stosowania strumieni ...................................................................... 610

21 System NIO ................................................................................................................ 611Klasy systemu NIO .............................................................................................................. 611Podstawy systemu NIO ....................................................................................................... 612

Bufory ........................................................................................................................ 612Kana y ........................................................................................................................ 613Zestawy znaków i selektory ........................................................................................ 614

Udoskonalenia dodane do systemu NIO w wydaniu JDK 7 ................................................. 615Interfejs Path .............................................................................................................. 615Klasa Files ................................................................................................................... 615Klasa Paths ................................................................................................................. 618Interfejsy atrybutów plików ......................................................................................... 619Klasy FileSystem, FileSystems i FileStore ...................................................................... 620

Stosowanie systemu NIO .................................................................................................... 621Stosowanie systemu NIO dla operacji wej cia-wyj cia na kana ach ............................. 621Stosowanie systemu NIO dla operacji wej cia-wyj cia na strumieniach ....................... 629Stosowanie systemu NIO dla operacji na cie kach i systemie plików ......................... 631

Przyk ady stosowania kana ów w wersjach sprzed JDK 7 ..................................................... 638Odczytywanie plików (wersje sprzed JDK 7) ............................................................... 638Zapisywanie plików (wersje sprzed JDK 7) .................................................................. 641

Poleć książkęKup książkę

Page 15: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 15

22 Obs uga sieci ............................................................................................................. 645Podstawy dzia ania sieci ..................................................................................................... 645Klasy i interfejsy obs uguj ce komunikacj sieciow ............................................................ 646Klasa InetAddress ............................................................................................................... 647

Metody fabryczne ...................................................................................................... 647Metody klasy .............................................................................................................. 648

Klasy Inet4Address oraz Inet6Address ................................................................................. 649Gniazda klientów TCP/IP .................................................................................................... 649URL ................................................................................................................................... 652Klasa URLConnection ......................................................................................................... 654Klasa HttpURLConnection .................................................................................................. 656Klasa URI ........................................................................................................................... 658Pliki cookie ........................................................................................................................ 658Gniazda serwerów TCP/IP .................................................................................................. 658Datagramy ......................................................................................................................... 659

Klasa DatagramSocket ................................................................................................ 659Klasa DatagramPacket ................................................................................................ 660Przyk ad u ycia datagramów ...................................................................................... 660

23 Klasa Applet ............................................................................................................... 663Dwa rodzaje apletów ......................................................................................................... 663Podstawy apletów .............................................................................................................. 664

Klasa Applet ............................................................................................................... 665Architektura apletu ............................................................................................................. 667Szkielet apletu .................................................................................................................... 667

Inicjalizacja i przerywanie dzia ania apletu ................................................................. 668Przykrycie metody update() ........................................................................................ 669

Proste metody wy wietlania sk adników apletów ................................................................ 670danie ponownego wy wietlenia ...................................................................................... 671

Prosty aplet z paskiem reklamowym ........................................................................... 672Wykorzystywanie paska stanu ............................................................................................ 674Znacznik APPLET j zyka HTML .......................................................................................... 675Przekazywanie parametrów do apletów ............................................................................. 676

Udoskonalenie apletu z paskiem reklamowym ........................................................... 677Metody getDocumentBase() i getCodeBase() ...................................................................... 679Interfejs AppletContext i metoda showDocument() ............................................................. 679Interfejs AudioClip ............................................................................................................. 681Interfejs AppletStub ............................................................................................................ 681Wy wietlanie danych wyj ciowych na konsoli .................................................................... 681

24 Obs uga zdarze ........................................................................................................ 683Dwa mechanizmy obs ugi zdarze ..................................................................................... 683Model obs ugi zdarze oparty na ich delegowaniu ............................................................. 684

Zdarzenia ................................................................................................................... 684ród a zdarze ........................................................................................................... 684

Obiekty nas uchuj ce zdarze .................................................................................... 685Klasy zdarze ..................................................................................................................... 685

Klasa ActionEvent ....................................................................................................... 686Klasa AdjustmentEvent ............................................................................................... 687Klasa ComponentEvent .............................................................................................. 688Klasa ContainerEvent .................................................................................................. 688Klasa FocusEvent ........................................................................................................ 689Klasa InputEvent ......................................................................................................... 689Klasa ItemEvent .......................................................................................................... 690

Poleć książkęKup książkę

Page 16: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

16 Java. Kompendium programisty

Klasa KeyEvent ................................................................................................................... 691Klasa MouseEvent ....................................................................................................... 691Klasa MouseWheelEvent ............................................................................................. 693Klasa TextEvent .......................................................................................................... 694Klasa WindowEvent .................................................................................................... 694

ród a zdarze ................................................................................................................... 695Interfejsy nas uchuj ce zdarze .......................................................................................... 696

Interfejs ActionListener ............................................................................................... 696Interfejs AdjustmentListener ........................................................................................ 696Interfejs ComponentListener ....................................................................................... 697Interfejs ContainerListener .......................................................................................... 697Interfejs FocusListener ................................................................................................ 697Interfejs ItemListener .................................................................................................. 697Interfejs KeyListener ................................................................................................... 697Interfejs MouseListener ............................................................................................... 697Interfejs MouseMotionListener .................................................................................... 698Interfejs MouseWheelListener ..................................................................................... 698Interfejs TextListener .................................................................................................. 698Interfejs WindowFocusListener ................................................................................... 698Interfejs WindowListener ............................................................................................ 698

Stosowanie modelu delegowania zdarze ........................................................................... 699Obs uga zdarze generowanych przez mysz ............................................................... 699Obs uga zdarze generowanych przez klawiatur ....................................................... 701

Klasy adapterów ................................................................................................................. 704Klasy wewn trzne ............................................................................................................... 705

Anonimowa klasa wewn trzna ................................................................................... 707

25 Wprowadzenie do AWT: praca z oknami, grafik i tekstem ..................................... 709Klasy AWT .......................................................................................................................... 710Podstawy okien .................................................................................................................. 712

Klasa Component ....................................................................................................... 712Klasa Container .......................................................................................................... 712Klasa Panel ................................................................................................................. 713Klasa Window ............................................................................................................ 713Klasa Frame ................................................................................................................ 713Klasa Canvas ............................................................................................................... 713

Praca z oknami typu Frame ................................................................................................ 713Ustawianie wymiarów okna ........................................................................................ 714Ukrywanie i wy wietlanie okna ................................................................................... 714Ustawianie tytu u okna ............................................................................................... 714Zamykanie okna typu Frame ...................................................................................... 714

Tworzenie okna typu Frame w aplecie AWT ....................................................................... 714Obs uga zdarze w oknie typu Frame ......................................................................... 716

Tworzenie programu wykorzystuj cego okna ...................................................................... 720Wy wietlanie informacji w oknie ........................................................................................ 721Wprowadzenie do stosowania grafiki .................................................................................. 722

Rysowanie odcinków .................................................................................................. 722Rysowanie prostok tów .............................................................................................. 722Rysowanie elips, kó i okr gów ................................................................................... 723Rysowanie uków ....................................................................................................... 723Rysowanie wielok tów ............................................................................................... 723Prezentacja metod rysuj cych ..................................................................................... 723Dostosowywanie rozmiarów obiektów graficznych ..................................................... 725

Poleć książkęKup książkę

Page 17: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 17

Praca z klas Color ............................................................................................................. 725Metody klasy Color .................................................................................................... 726Ustawianie bie cego koloru kontekstu graficznego ................................................... 727Aplet demonstruj cy zastosowanie klasy Color ........................................................... 727

Ustawianie trybu rysowania ................................................................................................ 728Praca z czcionkami ............................................................................................................. 729

Okre lanie dost pnych czcionek ................................................................................ 730Tworzenie i wybieranie czcionek ............................................................................... 731Uzyskiwanie informacji o czcionkach ......................................................................... 733

Zarz dzanie tekstowymi danymi wyj ciowymi z wykorzystaniem klasy FontMetrics ............ 734Wy wietlanie tekstu w wielu wierszach ...................................................................... 735Wy rodkowanie tekstu ............................................................................................... 737Wyrównywanie wielowierszowych danych tekstowych .............................................. 737

26 Stosowanie kontrolek AWT, mened erów uk adu graficznego oraz menu ............... 741Podstawy kontrolek AWT ................................................................................................... 742

Dodawanie i usuwanie kontrolek ............................................................................... 742Odpowiadanie na zdarzenia kontrolek ....................................................................... 742Wyj tek HeadlessException ....................................................................................... 743

Etykiety .............................................................................................................................. 743Stosowanie przycisków ....................................................................................................... 744

Obs uga zdarze przycisków ...................................................................................... 744Stosowanie pól wyboru ...................................................................................................... 747

Obs uga zdarze pól wyboru ...................................................................................... 748Klasa CheckboxGroup ........................................................................................................ 749Kontrolki list rozwijanych ................................................................................................... 751

Obs uga zdarze list rozwijanych ................................................................................ 751Stosowanie list .................................................................................................................... 753

Obs uga zdarze generowanych przez listy ................................................................. 754Zarz dzanie paskami przewijania ....................................................................................... 755

Obs uga zdarze generowanych przez paski przewijania ............................................ 756Stosowanie kontrolek typu TextField .................................................................................. 758

Obs uga zdarze generowanych przez kontrolk TextField ......................................... 759Stosowanie kontrolek typu TextArea ................................................................................... 760Wprowadzenie do mened erów uk adu graficznego komponentów ................................... 762

FlowLayout ................................................................................................................ 762BorderLayout ............................................................................................................. 764Stosowanie obramowa ............................................................................................. 766GridLayout ................................................................................................................. 767Klasa CardLayout ....................................................................................................... 768Klasa GridBagLayout .................................................................................................. 771

Menu i paski menu ............................................................................................................ 775Okna dialogowe ................................................................................................................. 780FileDialog ........................................................................................................................... 784Przykrywanie metody paint() .............................................................................................. 786

27 Obrazy ....................................................................................................................... 787Formaty plików .................................................................................................................. 787Podstawy przetwarzania obrazów: tworzenie, wczytywanie i wy wietlanie ......................... 788

Tworzenie obiektu obrazu .......................................................................................... 788adowanie obrazu ..................................................................................................... 788

Wy wietlanie obrazu .................................................................................................. 789Interfejs ImageObserver ..................................................................................................... 790Podwójne buforowanie ...................................................................................................... 791Klasa MediaTracker ............................................................................................................ 793

Poleć książkęKup książkę

Page 18: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

18 Java. Kompendium programisty

Interfejs ImageProducer ...................................................................................................... 796Klasa MemoryImageSource ......................................................................................... 796

Interfejs ImageConsumer .................................................................................................... 797Klasa PixelGrabber ..................................................................................................... 797

Klasa ImageFilter ................................................................................................................. 799Klasa CropImageFilter ................................................................................................. 800Klasa RGBImageFilter ................................................................................................. 801

Dodatkowe klasy obs uguj ce obrazy .................................................................................. 810

28 Narz dzia wspó bie no ci ......................................................................................... 811Pakiety interfejsu Concurrent API ....................................................................................... 812

Pakiet java.util.concurrent .......................................................................................... 812Pakiet java.util.concurrent.atomic ............................................................................... 813Pakiet java.util.concurrent.locks .................................................................................. 813

Korzystanie z obiektów s u cych do synchronizacji ........................................................... 813Klasa Semaphore ........................................................................................................ 813Klasa CountDownLatch .............................................................................................. 818CyclicBarrier ............................................................................................................... 819Klasa Exchanger .......................................................................................................... 821

Klasa Phaser ....................................................................................................................... 823Korzystanie z egzekutorów ................................................................................................. 830

Przyk ad prostego egzekutora ..................................................................................... 830Korzystanie z interfejsów Callable i Future .................................................................. 832

Typ wyliczeniowy TimeUnit ............................................................................................... 834Kolekcje wspó bie ne ......................................................................................................... 835Blokady .............................................................................................................................. 835Operacje atomowe ............................................................................................................. 838Programowanie równoleg e przy u yciu frameworku Fork/Join ........................................... 839

Najwa niejsze klasy frameworku Fork/Join .................................................................. 839Strategia dziel i zwyci aj ........................................................................................... 843Prosty przyk ad u ycia frameworku Fork/Join .............................................................. 843Znaczenie poziomu równoleg o ci .............................................................................. 845Przyk ad u ycia klasy RecursiveTask<V> ................................................................... 848Asynchroniczne wykonywanie zada .......................................................................... 850Anulowanie zadania ................................................................................................... 850Okre lanie statusu wykonania zadania ........................................................................ 851Ponowne uruchamianie zadania ................................................................................. 851Pozosta e zagadnienia ................................................................................................ 851Wskazówki dotycz ce stosowania frameworku Fork/Join ............................................ 853

Pakiet Concurrency Utilities a tradycyjne metody j zyka Java ............................................. 853

29 API strumieni ............................................................................................................. 855Podstawowe informacje o strumieniach .............................................................................. 855

Interfejsy strumieni ..................................................................................................... 856Jak mo na uzyska strumie ? ...................................................................................... 858Prosty przyk ad stosowania strumieni .......................................................................... 859

Operacje redukcji ............................................................................................................... 862Stosowanie strumieni równoleg ych .................................................................................... 864Odwzorowywanie .............................................................................................................. 866Tworzenie kolekcji ............................................................................................................. 870Iteratory i strumienie .......................................................................................................... 873

Stosowanie typu Iterator i strumieni ............................................................................ 873Stosowanie spliteratorów ............................................................................................ 874

Inne mo liwo ci API strumieni ............................................................................................ 877

Poleć książkęKup książkę

Page 19: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 19

30 Wyra enia regularne i inne pakiety ........................................................................... 879Pakiety g ównego API j zyka Java ....................................................................................... 879Przetwarzanie wyra e regularnych .................................................................................... 879

Klasa Pattern .............................................................................................................. 881Klasa Matcher ............................................................................................................ 882Sk adnia wyra e regularnych .................................................................................... 882Przyk ad dopasowywania do wzorca .......................................................................... 883Dwie opcje dopasowywania do wzorca ..................................................................... 887Przegl d wyra e regularnych .................................................................................... 888

Refleksje ............................................................................................................................ 888Zdalne wywo ywanie metod (RMI) ..................................................................................... 891

Prosta aplikacja typu klient-serwer wykorzystuj ca RMI .............................................. 891Formatowanie dat i czasu przy u yciu pakietu java.text ...................................................... 894

Klasa DateFormat ....................................................................................................... 894Klasa SimpleDateFormat ............................................................................................ 896

Interfejs API dat i czasu dodany w JDK 8 ............................................................................ 897Podstawowe klasy do obs ugi dat i czasu .................................................................... 898Formatowanie dat i godzin ......................................................................................... 899Analiza a cuchów zawieraj cych daty i godziny ........................................................ 901Inne mo liwo ci pakietu java.time .............................................................................. 902

CZ IIIWprowadzenie do programowania GUI przy u yciu pakietu Swing

31 Wprowadzenie do pakietu Swing .............................................................................. 905Geneza powstania biblioteki Swing .................................................................................... 905Bibliotek Swing zbudowano na bazie zestawu narz dzi AWT ........................................... 906Podstawowe cechy biblioteki Swing ................................................................................... 906

Komponenty biblioteki Swing s lekkie ....................................................................... 906Biblioteka Swing obs uguje do czany wygl d i sposób obs ugi ................................... 907

Podobie stwo do architektury MVC ................................................................................... 907Komponenty i kontenery .................................................................................................... 908

Komponenty .............................................................................................................. 908Kontenery .................................................................................................................. 909Panele kontenerów najwy szego poziomu ................................................................. 909

Pakiety biblioteki Swing ...................................................................................................... 910Prosta aplikacja na bazie biblioteki Swing ........................................................................... 910Obs uga zdarze ................................................................................................................ 914Tworzenie apletu na bazie biblioteki Swing ........................................................................ 917Rysowanie w bibliotece Swing ............................................................................................ 919

Podstawy rysowania ................................................................................................... 919Wyznaczanie obszaru rysowania ................................................................................ 920Przyk ad rysowania ..................................................................................................... 920

32 Przewodnik po pakiecie Swing .................................................................................. 923Klasy JLabel i ImageIcon ..................................................................................................... 923Klasa JTextField .................................................................................................................. 925Przyciski biblioteki Swing .................................................................................................... 926

Klasa JButton .............................................................................................................. 927Klasa JToggleButton .................................................................................................... 929Pola wyboru ............................................................................................................... 931Przyciski opcji ............................................................................................................ 932

Klasa JTabbedPane ............................................................................................................. 934Klasa JScrollPane ................................................................................................................ 936

Poleć książkęKup książkę

Page 20: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

20 Java. Kompendium programisty

Klasa JList ........................................................................................................................... 938Klasa JComboBox ............................................................................................................... 941Drzewa .............................................................................................................................. 943Klasa JTable ........................................................................................................................ 945

33 Wprowadzenie do systemu menu pakietu Swing ...................................................... 949Podstawy systemu menu ..................................................................................................... 949Przegl d klas JMenuBar, JMenu oraz JMenuItem ................................................................. 951

Klasa JMenuBar .......................................................................................................... 951Klasa JMenu ............................................................................................................... 952Klasa JMenuItem ........................................................................................................ 953

Tworzenie menu g ównego ................................................................................................ 953Dodawanie mnemonik i kombinacji klawiszy do opcji menu .............................................. 957Dodawanie obrazów i etykiet ekranowych do menu .......................................................... 959Stosowanie klas JRadioButtonMenuItem oraz JCheckBoxMenuItem .................................... 960Tworzenie menu podr cznych ........................................................................................... 962Tworzenie paska narz dzi .................................................................................................. 964Stosowanie akcji ................................................................................................................. 967Finalna posta programu MenuDemo ................................................................................. 971Dalsze poznawanie pakietu Swing ...................................................................................... 977

CZ IVWprowadzenie do programowania GUI przy u yciu platformy JavaFX

34 Wprowadzenie do tworzenia interfejsów graficznych z u yciem JavaFX .................. 981Podstawowe poj cia z zakresu JavaFX ................................................................................ 982

Pakiety JavaFX ............................................................................................................ 982Klasy Stage oraz Scene ................................................................................................ 982W z y i graf sceny ...................................................................................................... 983Uk ady ....................................................................................................................... 983Klasa Application i metody cyklu ycia ........................................................................ 983Uruchamianie aplikacji JavaFX .................................................................................... 984

Szkielet aplikacji JavaFX ...................................................................................................... 984Kompilacja i uruchamianie programów JavaFX .................................................................... 987W tek aplikacji ................................................................................................................... 988Prosta kontrolka JavaFX: Label ............................................................................................ 988Stosowanie przycisków i zdarze ........................................................................................ 990

Podstawowe informacje o zdarzeniach ....................................................................... 990Prezentacja kontrolki Button ....................................................................................... 991Przedstawienie obs ugi zdarze i kontrolki Button ...................................................... 992

Bezpo rednie rysowanie na p ótnie .................................................................................... 994

35 Prezentacja kontrolek JavaFX ..................................................................................... 999Stosowanie klas Image i ImageView .................................................................................... 999

Dodawanie obrazów do etykiet ................................................................................ 1001Stosowanie obrazów w przyciskach .......................................................................... 1003

Kontrolka ToggleButton .................................................................................................... 1005Kontrolka RadioButton ..................................................................................................... 1008

Obs uga zdarze w grupie ........................................................................................ 1010Alternatywne sposoby obs ugi przycisków opcji ........................................................ 1011

Kontrolka CheckBox ......................................................................................................... 1014Kontrolka ListView ............................................................................................................ 1017

Paski przewijania w kontrolkach ListView ................................................................. 1020W czanie mo liwo ci wielokrotnego wyboru ........................................................... 1021

Poleć książkęKup książkę

Page 21: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Spis tre ci 21

Kontrolka ComboBox ....................................................................................................... 1022Kontrolka TextField .......................................................................................................... 1024Kontrolka ScrollPane ........................................................................................................ 1026Kontrolka TreeView .......................................................................................................... 1029Prezentacja efektów i transformacji .................................................................................. 1033

Efekty ....................................................................................................................... 1034Transformacje .......................................................................................................... 1035Prezentacja zastosowania efektów i transformacji ..................................................... 1036

Dodawanie etykiet ekranowych ....................................................................................... 1038Dezaktywacja kontrolek ........................................................................................... 1039

36 Prezentacja systemu menu platformy JavaFX .......................................................... 1041Podstawowe informacje o menu ...................................................................................... 1041Prezentacja klas MenuBar, Menu oraz MenuItem ............................................................. 1043

Klasa MenuBar ......................................................................................................... 1043Klasa Menu .............................................................................................................. 1043Klasa MenuItem ....................................................................................................... 1044

Tworzenie menu g ównego .............................................................................................. 1045Dodawanie mnemonik i akceleratorów do elementów menu ........................................... 1049Dodawanie obrazów do elementów menu ....................................................................... 1051Stosowanie klas RadioMenuItem i CheckMenuItem ......................................................... 1051Tworzenie menu podr cznego ......................................................................................... 1053Tworzenie paska narz dzi ................................................................................................ 1057Kompletna nowa wersja programu demonstracyjnego ...................................................... 1059Dalsze poznawanie platformy JavaFX ............................................................................... 1064

CZ VStosowanie Javy w praktyce

37 Java Beans ................................................................................................................ 1067Czym jest komponent typu Java Bean? ............................................................................. 1067Zalety komponentów Java Beans ...................................................................................... 1068Introspekcja ..................................................................................................................... 1068

Wzorce w a ciwo ci ................................................................................................. 1068Wzorce projektowe dla zdarze ............................................................................... 1069Metody i wzorce projektowe .................................................................................... 1070Korzystanie z interfejsu BeanInfo .............................................................................. 1070

W a ciwo ci ograniczone .................................................................................................. 1070Trwa o .......................................................................................................................... 1071Interfejs Customizer ......................................................................................................... 1071Interfejs Java Beans API .................................................................................................... 1071

Klasa Introspector ..................................................................................................... 1073Klasa PropertyDescriptor .......................................................................................... 1073Klasa EventSetDescriptor .......................................................................................... 1073Klasa MethodDescriptor ........................................................................................... 1073

Przyk ad komponentu Java Bean ...................................................................................... 1073

38 Serwlety .................................................................................................................... 1077Podstawy ......................................................................................................................... 1077Cykl ycia serwletu ........................................................................................................... 1078Alternatywne sposoby tworzenia serwletów ...................................................................... 1078Korzystanie z serwera Tomcat .......................................................................................... 1079Przyk ad prostego serwletu ............................................................................................... 1080

Tworzenie i kompilacja kodu ród owego serwletu ................................................... 1080

Poleć książkęKup książkę

Page 22: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

22 Java. Kompendium programisty

Uruchamianie serwera Tomcat ................................................................................. 1081Uruchamianie przegl darki i generowanie dania ................................................... 1081

Interfejs Servlet API ........................................................................................................... 1081Pakiet javax.servlet ........................................................................................................... 1081

Interfejs Servlet ......................................................................................................... 1082Interfejs ServletConfig ............................................................................................... 1082Interfejs ServletContext ............................................................................................. 1083Interfejs ServletRequest ............................................................................................ 1083Interfejs ServletResponse .......................................................................................... 1083Klasa GenericServlet ................................................................................................. 1083Klasa ServletInputStream .......................................................................................... 1083Klasa ServletOutputStream ....................................................................................... 1085Klasy wyj tków zwi zanych z serwletami .................................................................. 1085

Odczytywanie parametrów serwletu ................................................................................. 1085Pakiet javax.servlet.http .................................................................................................... 1086

Interfejs HttpServletRequest ...................................................................................... 1087Interfejs HttpServletResponse ................................................................................... 1087Interfejs HttpSession ................................................................................................. 1087Klasa Cookie ............................................................................................................. 1089Klasa HttpServlet ...................................................................................................... 1090

Obs uga da i odpowiedzi HTTP ................................................................................... 1090Obs uga da GET protoko u HTTP ........................................................................ 1090Obs uga da POST protoko u HTTP ...................................................................... 1092

Korzystanie ze znaczników kontekstu u ytkownika ........................................................... 1093ledzenie sesji .................................................................................................................. 1095

DODATKI

A Komentarze dokumentuj ce .................................................................................... 1099Znaczniki narz dzia javadoc ............................................................................................. 1099

Znacznik @author .................................................................................................... 1100Znacznik {@code} .................................................................................................. 1100Znacznik @deprecated ............................................................................................ 1100Znacznik {@docRoot} ............................................................................................. 1101Znacznik @exception .............................................................................................. 1101Znacznik {@inheritDoc} .......................................................................................... 1101Znacznik {@link} .................................................................................................... 1101Znacznik {@linkplain} ............................................................................................. 1101Znacznik {@literal} ................................................................................................. 1101Znacznik @param .................................................................................................... 1101Znacznik @return .................................................................................................... 1101Znacznik @see ......................................................................................................... 1102Znacznik @serial ...................................................................................................... 1102Znacznik @serialData .............................................................................................. 1102Znacznik @serialField .............................................................................................. 1102Znacznik @since ...................................................................................................... 1102Znacznik @throws ................................................................................................... 1102Znacznik {@value} .................................................................................................. 1102Znacznik @version ................................................................................................... 1103

Ogólna posta komentarzy dokumentacyjnych ................................................................. 1103Wynik dzia ania narz dzia javadoc ................................................................................... 1103Przyk ad korzystaj cy z komentarzy dokumentacyjnych .................................................... 1103

Skorowidz ................................................................................................................. 1105

Poleć książkęKup książkę

Page 23: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

ROZDZIA

12Wyliczenia, automatyczne

opakowywanie typówprostych i adnotacje

(metadane)Ten rozdział dotyczy trzech stosunkowo nowych elementów języka programowania Java: typówwyliczeniowych, automatycznego opakowywania typów prostych i adnotacji (nazywanych takżemetadanymi). Każdy z nich rozszerza użyteczność języka, gdyż ułatwia wykonywanie typowych za-dań programistycznych. W tym rozdziale zostaną dodatkowo omówione typy opakowujące (ang.wrapper type) i podstawy refleksji (ang. reflection).

Typy wyliczenioweWersje Javy sprzed wydania JDK 5 nie zawierały pewnego elementu uważanego przez wielu pro-gramistów za bardzo przydatny: typów wyliczeniowych, tzw. wyliczeń (ang. enumeration). Typwyliczeniowy w najprostszej postaci to lista nazwanych stałych. Choć Java oferuje inne elementyzapewniające podobne działanie, na przykład zmienne final, programiści oczekiwali raczej obsługitypów wyliczeniowych w tradycyjnej formie (w postaci, którą doskonale znali z wielu innych języ-ków programowania). Począwszy od wydania JDK 5, typy wyliczeniowe są dostępne również dlaprogramistów języka Java i stały się jego integralnym i często stosowanym elementem.

Wyliczenia w Javie w swojej podstawowej postaci przypominają wyliczenia znane z innych języków.Podobieństwo jest jednak tylko powierzchowne, gdyż w Javie wyliczenie definiuje typ klasy. Przekształ-cenie typów wyliczeniowych w pełnoprawne klasy pozwoliło znacznie wzbogacić ich możliwości.Na przykład wyliczenia w Javie mogą mieć konstruktory, metody i zmienne składowe. Choć trzeba byłodługo czekać na ich wprowadzenie, na pewno nikt nie czuje się zawiedziony ich możliwościami.

Podstawy wyliczeWyliczenia tworzy się za pomocą nowego słowa kluczowego enum. Oto proste wyliczenie zawierająceróżne odmiany jabłek.// Wyliczenie odmian jab ek.enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland}

Poleć książkęKup książkę

Page 24: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

252 Cz I J zyk Java

Identyfikatory Jonathan, GoldenDel itd. nazywamy stałymi wyliczeniowymi. Każda taka stałajest niejawnie zadeklarowana jako publiczna i statyczna składowa wyliczenia Apple. Co więcej, typstałych jest taki sam jak typ wyliczenia, w którym się znajdują (w tym przypadku Apple). Z tego po-wodu w języku Java stałe te nazywamy stałymi własnego typu, ponieważ są tego samego typu cowyliczenie, do którego należą.

Po zdefiniowaniu wyliczenia można utworzyć zmienną typu wyliczeniowego. Choć wyliczeniedefiniuje typ klasy, do utworzenia jego egzemplarza nie stosuje się operatora new. Deklaracja zmiennejtypu wyliczeniowego przypomina więc deklaracje dowolnego typu prostego. Poniższy wiersz doko-nuje deklaracji zmiennej ap typu wyliczeniowego Apple.Apple ap;

Ponieważ zmienna ap jest egzemplarzem typu Apple, jedynymi wartościami, które można jejprzypisać (a tym samym: które może przechowywać), są stałe wyliczeniowe. Oto sposób przypisaniado ap wartości RedDel.ap = Apple.RedDel;

Zauważ, że nazwa stałej została poprzedzona nazwą wyliczenia.Można sprawdzić równość dwóch stałych wyliczeniowych, używając operatora relacji ==. Poniższy

kod porównuje wartość zmiennej ap ze stałą GoldenDel.if(ap == Apple.GoldenDel) // ...

Wartości wyliczenia mogą być używane do sterowania instrukcją switch. Oczywiście wszystkieelementy case muszą używać stałych z tego samego wyliczenia przekazanego w instrukcji switch.Poniższy kod instrukcji switch jest w zupełności poprawny.// Wykorzystanie wyliczenia do sterowania instrukcj switch.switch(ap) { case Jonathan: // ... case Winesap: // ...

Łatwo zauważyć, że stałe w klauzulach case nie są poprzedzane nazwą typu wyliczeniowego —zamiast zapisu Apple.Winesap zastosowano sam identyfikator Winesap. Wynika to z faktu, iż wyboruodpowiedniego typu wyliczeniowego dla klauzul case dokonano już w instrukcji switch. Próba uży-cia pełnej nazwy stałej wyliczeniowej spowoduje zgłoszenie błędu kompilacji.

Gdy wyświetla się stałą wyliczeniową, na przykład za pomocą instrukcji println(), zostanieprzekazana jej nazwa. Wykonanie poniższej instrukcji:System.out.println(Apple.Winesap);

spowoduje wyświetlenie na ekranie identyfikatora Winesap.Następujący program łączy w sobie wszystkie wspomniane cechy wyliczeń i przedstawia zasto-

sowanie wyliczenia Apple.// Wyliczenie odmian jab ek.enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland}

class EnumDemo { public static void main(String args[]) { Apple ap;

ap = Apple.RedDel;

// Wy wietlenie warto ci wyliczenia. System.out.println("Warto ap: " + ap); System.out.println();

ap = Apple.GoldenDel;

Poleć książkęKup książkę

Page 25: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 253

// Porównanie warto ci dwóch wylicze . if(ap == Apple.GoldenDel) System.out.println("ap zawiera GoldenDel.\n");

// Wykorzystanie wyliczenia do sterowania instrukcj switch. switch(ap) { case Jonathan: System.out.println("Jonathan jest czerwone."); break; case GoldenDel: System.out.println("Golden Delicious jest ó te."); break; case RedDel: System.out.println("Red Delicious jest czerwone."); break; case Winesap: System.out.println("Winesap jest czerwone."); break; case Cortland: System.out.println("Cortland jest czerwone."); break; } }}

Wynik działania programu jest następujący.Warto ap: RedDel

ap zawiera GoldenDel

Golden Delicious jest ó te.

Metody values() i valueOf()Wszystkie wyliczenia automatycznie zawierają dwie predefiniowane metody: values() i valueOf().Ich ogólna postać jest następująca.public static typ-wyliczeniowy[] values()public static typ-wyliczeniowy valueOf(String tekst)

Metoda values() zwraca tablicę zawierającą listę stałych wyliczeniowych. Metoda valueOf()zwraca stałą wyliczeniową, której odpowiada tekst (obiekt String) przekazany jako argument tekst.Dla wcześniejszego przykładu z wyliczeniem Apple wykonanie operacji Apple.valueOf("Winesap")spowodowałoby zwrócenie stałej wyliczeniowej Winesap.

Poniższy program demonstruje praktyczne zastosowanie metod values() i valueOf():// Wykorzystanie wbudowanych metod typów wyliczeniowych.

// Wyliczenie odmian jab ek.enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland}

class EnumDemo2 { public static void main(String args[]) { Apple ap;

System.out.println("Oto wszystkie sta e wyliczenia Apple:");

// u ycie values() Apple allapples[] = Apple.values(); for(Apple a : allapples) System.out.println(a);

Poleć książkęKup książkę

Page 26: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

254 Cz I J zyk Java

System.out.println();

// u ycie valueOf() ap = Apple.valueOf("Winesap"); System.out.println("ap zawiera " + ap);

}}

Wynik działania programu jest następujący.Oto wszystkie sta e wyliczenia Apple:JonathanGoldenDelRedDelWinesapCortland

ap zawiera Winesap

Zauważ, że program używa pętli for typu for-each do przejścia przez wszystkie elementy tablicyuzyskanej za pośrednictwem metody values(). W celu lepszej ilustracji działania kodu utworzyłemzmienną allapples i przypisałem jej referencję do tablicy stałych wyliczeniowych. Ten krok nie jestjednak potrzebny, ponieważ pętlę można napisać w sposób przedstawiony poniżej, eliminując po-trzebę stosowania zmiennej allapples.for(Apple a : Apple.values()) System.out.println(a);

Zwróć uwagę na to, iż wartość odpowiadająca nazwie Winesap została pobrana za pomocą metodyvalueOf().ap = Apple.valueOf("Winesap");

Jak już wspomniano, metoda valueOf() zwraca stałą wyliczeniową skojarzoną z przekazaną(w formie łańcucha) nazwą.

Wyliczenia Javy jako typy klasoweJak już wspomniano, typy wyliczeniowe w Javie mają postać typów klasowych. Choć nie tworzy sięegzemplarzy wyliczenia za pomocą operatora new, we wszystkich innych sytuacjach wyliczenieprzypomina tradycyjną klasę. Zaimplementowanie wyliczeń w Javie jako pełnoprawnych klas, dajeim ogromne możliwości. Na przykład można utworzyć konstruktor, dodać zmienne lub metodyskładowe, a nawet zaimplementować interfejs.

Trzeba zrozumieć, iż każda stała wyliczeniowa jest obiektem typu wyliczeniowego. Oznacza to,że konstruktor zdefiniowany w ramach typu wyliczeniowego będzie wywoływany przy okazji kon-struowania każdej ze stałych wyliczeniowych. Co więcej, każda stała wyliczeniowa posiada własnąkopię zmiennych składowych zdefiniowanych w wyliczeniu. Rozważmy następującą wersję wyli-czenia Apple.// U ycie konstruktora, zmiennej sk adowej i metody dla wyliczenia.enum Apple { Jonathan(10), GoldenDel(9), RedDel(12), Winesap(15), Cortland(8);

private int price; // cena ka dego z jab ek

// konstruktor Apple(int p) { price = p; }

int getPrice() { return price; }}

class EnumDemo3 { public static void main(String args[])

Poleć książkęKup książkę

Page 27: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 255

{ Apple ap;

// Wy wietl cen odmiany Winesap. System.out.println("Winesap kosztuje " + Apple.Winesap.getPrice() + " z otych.\n");

// Wy wietl wszystkie jab ka i ich ceny. System.out.println("Ceny wszystkich jab ek:"); for(Apple a : Apple.values()) System.out.println(a + " kosztuje " + a.getPrice() + " z otych."); }}

Wynik działania programu jest następujący.Winesap kosztuje 15 z otych.

Ceny wszystkich jab ek:Jonathan kosztuje 10 z otych.GoldenDel kosztuje 9 z otych.RedDel kosztuje 12 z otych.Winesap kosztuje 15 z otych.Cortland kosztuje 8 z otych.

Przedstawiona wersja programu zawiera trzy nowe elementy. Pierwszym jest zmienna składowaprice przechowująca cenę danej odmiany jabłek. Po drugie, istnieje konstruktor Apple() przyjmu-jący jako parametr cenę jabłka. Trzeci element to metoda getPrice() zwracająca cenę jabłka.

W momencie deklarowania zmiennej ap w metodzie main() Java wywołuje konstruktor Apple()dla każdej stałej. Zauważ, że argumenty dla konstruktora przekazuje się, umieszczając je w nawiasiepo nazwie stałej.Jonathan(10), GoldenDel(9), RedDel(12), Winesap(15), Cortland(8);

Wartości te znajdą się w parametrze p konstruktora, który przypisze je do zmiennej składowejprice. Pamiętaj, iż konstruktor zostanie wykonany dla każdej stałej.

Ponieważ każda stała wyliczeniowa posiada własną kopię zmiennej price, cenę danej odmianyjabłka pobiera się, wywołując metodę getPrice(). Cenę odmiany Winesap w metodzie main() po-bieramy za pomocą poniższego wywołania.Apple.Winesap.getPrice()

Ceny wszystkich odmian uzyskujemy, przetwarzając wyliczenie za pomocą for. Ponieważ każdastała wyliczeniowa dysponuje własną kopią zmiennej price, wartość skojarzona z jedną stałą jestprzypisana tylko do tej stałej. Takie rozwiązanie jest niezwykle użyteczne, ale może być wprowa-dzone tylko wtedy, gdy wyliczenia zaimplementuje się jako klasy (jak w Javie).

Choć poprzedni przykład zawiera tylko jeden konstruktor, podobnie jak w tradycyjnych klasachmożna utworzyć kilka przeciążonych wersji konstruktora. Poniższa wersja wyliczenia Apple zawierakonstruktor domyślny ustawiający cenę na wartość –1, czyli brak ceny.// U ycie domy lnego konstruktora wyliczenia.enum Apple { Jonathan(10), GoldenDel(9), RedDel, Winesap(15), Cortland(8);

private int price; // cena ka dego z jab ek

// konstruktor Apple(int p) { price = p; }

// przeci ony konstruktor Apple() { price = -1; }

int getPrice() { return price; }}

Poleć książkęKup książkę

Page 28: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

256 Cz I J zyk Java

W tej wersji odmiana RedDel nie przekazuje żadnego argumentu. Oznacza to, iż zostanie dla niejwywołany konstruktor domyślny powodujący ustawienie zmiennej price na wartość –1.

Ze stosowaniem typów wyliczeniowych wiążą się dwa ograniczenia. Po pierwsze, typ wylicze-niowy nie może dziedziczyć po innej klasie. Po drugie, wyliczenie nie może być klasą bazową. Innymisłowy, wyliczenia nie uczestniczą w hierarchii klas. Poza tymi ograniczeniami wyliczenia zachowująsię podobnie do klas. Trzeba jednak pamiętać o tym, iż każda stała wyliczeniowa jest obiektem typuwyliczeniowego.

Wyliczenia dziedzicz po klasie EnumChoć nie można korzystać z klasy bazowej przy definiowaniu wyliczenia, wszystkie wyliczenia au-tomatycznie dziedziczą po klasie java.lang.Enum. Klasa ta definiuje kilka metod, z których możnakorzystać we wszystkich wyliczeniach. Klasa szczegółowo zostanie opisana w części II niniejszejksiążki, ale trzy jej metody warto opisać już teraz.

Można pobrać wartość liczbową przypisaną do stałej wyliczenia i wskazującą jej miejsce na liście.Wartość tę nazywa się wartością kolejności i pobiera się za pomocą metody ordinal().final int ordinal()

Metoda zwraca wartość kolejności stałej wyliczeniowej, dla której została wywołana. Wartościkolejności to liczby całkowite zaczynające się od 0. Z tego powodu w wyliczeniu Apple odmianaJonathan posiada wartość kolejności 0, odmiana GoldenDel wartość 1, RedDel wartość 2 itd.

Do porównania wartości kolejności dwóch stałych wyliczeniowych służy metoda compareTo().Jej ogólna postać jest następująca.final int compareTo(typ-wyliczeniowy e)

Element typ-wyliczeniowy to typ wyliczenia; e to stała porównywana ze stałą, dla której zostaławywołana metoda. Pamiętaj, że stała, dla której jest wywoływana metoda, oraz stała przekazywanajako argument muszą być tego samego typu. Jeżeli wywoływana stała ma wartość kolejności mniej-szą od e, wtedy metoda compareTo() zwraca wartość ujemną. Gdy wartości kolejności obu stałych sątakie same, metoda zwraca 0. Jeżeli wywoływana stała ma wartość kolejności większą od e, wtedymetoda compareTo() zwraca wartość dodatnią.

Sprawdzanie równości stałej wyliczeniowej z dowolnym innym obiektem można wykonać zapomocą metody equals(), która przysłania domyślną metodę equals() klasy Object. Mimo że po-równanie może dotyczyć stałej wyliczeniowej i dowolnego innego obiektu, metoda zwróci wartośćtrue tylko wtedy, gdy przekazany obiekt będzie reprezentował tę samą stałą w ramach tego samegotypu wyliczeniowego. Innymi słowy, metoda zwróci wartość false nawet wtedy, gdy przekaże sięstałą innego wyliczenia, ale o takiej samej wartości kolejności.

Warto pamiętać, że dwie referencje do egzemplarzy typów wyliczeniowych zawsze można po-równać za pomocą zwykłego operatora ==.

Poniższy program ilustruje użycie metod ordinal(), compareTo() i equals().// Przyk ad u ycia metod ordinal(), compareTo() i equals().

// Wyliczenie odmian jab ek.enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland}

class EnumDemo4 { public static void main(String args[]) { Apple ap, ap2, ap3;

// Pobranie warto ci przypisanych do sta ych - metoda ordinal(). System.out.println("Oto wszystkie sta e wyliczenia" + " oraz ich warto ci liczbowe: "); for(Apple a : Apple.values()) System.out.println(a + " " + a.ordinal());

Poleć książkęKup książkę

Page 29: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 257

ap = Apple.RedDel; ap2 = Apple.GoldenDel; ap3 = Apple.RedDel;

System.out.println();

// Przyk ad zastosowania metod compareTo() i equals(). if(ap.compareTo(ap2) < 0) System.out.println(ap + " znajduje si przed " + ap2);

if(ap.compareTo(ap2) > 0) System.out.println(ap2 + " znajduje si przed " + ap);

if(ap.compareTo(ap3) == 0) System.out.println(ap + " jest równe " + ap3);

System.out.println();

if(ap.equals(ap2)) System.out.println("B d!");

if(ap.equals(ap3)) System.out.println(ap + " jest równe " + ap3);

if(ap == ap3) System.out.println(ap + " == " + ap3);

}}

Program po uruchomieniu wyświetla następujące wyniki.Oto wszystkie sta e wyliczenia oraz ich warto ci liczbowe:Jonathan 0GoldenDel 1RedDel 2Winesap 3Cortland 4

GoldenDel znajduje si przed RedDelRedDel jest równe RedDel

RedDel jest równe RedDelRedDel == RedDel

Inny przyk ad wyliczeniaZanim przejdziemy do omawiania dalszych zagadnień, warto przyjrzeć się jeszcze jednemu przy-kładowi użycia typu wyliczeniowego. W rozdziale 9. pojawił się program automatycznego po-dejmowania decyzji. W tamtej wersji zmienne reprezentujące możliwe odpowiedzi NO, YES, MAYBE,LATER, SOON i NEVER zostały zadeklarowane w interfejsie. Choć tamto podejście jest całkowicie po-prawne, zastosowanie wyliczenia wydaje się lepszym wyborem. Oto ulepszona wersja tamtego pro-gramu, używająca wyliczenia o nazwie Answers do udzielania odpowiedzi.// Ulepszona wersja programu podejmowania decyzji// z rozdzia u 9. Ta wersja u ywa wyliczenia// zamiast zmiennych interfejsu do reprezentacji// mo liwych odpowiedzi.

import java.util.Random;

// Wyliczenie ze wszystkimi mo liwymi odpowiedziami.enum Answers { NO, YES, MAYBE, LATER, SOON, NEVER

Poleć książkęKup książkę

Page 30: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

258 Cz I J zyk Java

}

class Question { Random rand = new Random(); Answers ask() { int prob = (int) (100 * rand.nextDouble());

if (prob < 15) return Answers.MAYBE; // 15% else if (prob < 30) return Answers.NO; // 15% else if (prob < 60) return Answers.YES; // 30% else if (prob < 75) return Answers.LATER; // 15% else if (prob < 98) return Answers.SOON; // 13% else return Answers.NEVER; // 2% }}

class AskMe { static void answer(Answers result) { switch(result) { case NO: System.out.println("Nie"); break; case YES: System.out.println("Tak"); break; case MAYBE: System.out.println("Mo e"); break; case LATER: System.out.println("Pó niej"); break; case SOON: System.out.println("Wkrótce"); break; case NEVER: System.out.println("Nigdy"); break; } }

public static void main(String args[]) { Question q = new Question(); answer(q.ask()); answer(q.ask()); answer(q.ask()); answer(q.ask()); }}

Opakowania typówJava używa typów prostych (nazywanych również typami podstawowymi), takich jak int lub double,do przechowywania podstawowych typów danych. Takie rozwiązanie podyktowane jest chęciązwiększenia wydajności. Zastosowanie obiektów dla tych typów spowodowałoby ogromny narzutnawet w bardzo prostych obliczeniach. Oznacza to jednak, iż typy proste nie stanowią części hierarchiiklasy i nie dziedziczą po klasie Object.

Poleć książkęKup książkę

Page 31: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 259

Mimo wszystkich zalet typów prostych (w wymiarze wydajności) w pewnych sytuacjach lep-szym rozwiązaniem jest operowanie na obiektowej reprezentacji tych typów. Na przykład nie moż-na przekazać typu prostego jako referencji, której wymaga metoda. Wiele standardowych strukturdanych Javy opiera się na obiektach, co oznacza, iż do tych struktur nie można przekazać typówprostych. W celu zniwelowania tego rodzaju problemów Java zawiera opakowania typów — klasyhermetyzujące pojedynczą wartość typu prostego. Wszystkie te klasy zostaną szczegółowo omówio-ne w części II książki; ponieważ jednak są bezpośrednio powiązane z funkcją automatycznego opa-kowywania i rozpakowywania typów prostych, warto wprowadzić je już teraz.

W Javie istnieją następujące opakowania typów prostych: Double, Float, Long, Integer, Short,Byte, Character i Boolean. Klasy te oferują wiele metod ułatwiających pełną integrację typów pro-stych z hierarchią klas Javy. Oto krótkie omówienie poszczególnych typów.

Klasa CharacterKlasa Character to opakowanie dla typu char. Konstruktor klasy ma następującą postać.Character(char zn)

Element zn to znak, który zostanie opakowany przez obiekt klasy Character.Metoda charValue() służy do pobrania wartości char przechowywanej w obiekcie.Aby uzyskać wartość typu char zawartą w obiekcie klasy Character, należy wywołać metodę

charValue():char charValue()

Metoda zwraca znak reprezentowany przez obiekt opakowania.

Klasa BooleanKlasa Boolean to opakowanie dla typu boolean. Konstruktory klasy mają następującą postać.Boolean(boolean warto Logiczna)Boolean(String warto a cuchowa)

W pierwszej wersji parametr warto Logiczna musi mieć albo wartość true, albo wartość false.W drugiej wersji, jeśli przekazany parametr warto a cuchowa zawiera łańcuch "true" (pisany albomałymi, albo wielkimi literami), nowy obiekt klasy Boolean będzie reprezentował wartość true.W przeciwnym razie będzie reprezentował wartość false.

Metoda booleanValue() służy do pobrania wartości boolean przechowywanej w obiekcie.boolean booleanValue()

Metoda zwraca wartość true lub false reprezentowaną przez obiekt.

Opakowania typów numerycznychTypy opakowujące najczęściej stosuje się dla wartości numerycznych. Oto typy związane z liczbami:Byte, Short, Integer, Long, Float i Double. Wszystkie te typy dziedziczą po klasie abstrakcyjnejNumber. Klasa ta deklaruje metody zwracające wartość obiektu w kilku różnych formatach liczbowych.Metody te zostały wymienione poniżej.byte byteValue()double doubleValue()float floatValue()int intValue()long longValue()short shortValue()

Metoda doubleValue() zwraca wartość obiektu jako typ double, metoda floatValue() jako typfloat itd. Wymienione metody są implementowane przez wszystkie liczbowe typy opakowujące.

Poleć książkęKup książkę

Page 32: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

260 Cz I J zyk Java

Wszystkie opakowania dla liczb definiują dwa konstruktory, które umożliwiają utworzenieobiektu na podstawie podanej wartości lub jej reprezentacji łańcuchowej. Na przykład klasa Integerma następujące konstruktory.Integer(int warto )Integer(String a cuch)

Jeżeli a cuch nie zawiera poprawnej reprezentacji tekstowej liczby, konstruktor zgłasza wyjątekNumberFormatException.

Wszystkie typy opakowujące przykrywają metodę toString(), która zwraca czytelną, tekstową(łańcuchową) reprezentację wartości przechowywanej w danym obiekcie. Umożliwia to między in-nymi bezpośrednie przekazywanie obiektu jako argumentu metody println(). Nie trzeba dokony-wać wcześniejszej konwersji do typu prostego.

Poniższy przykładowy program ilustruje wykorzystanie typu opakowującego liczby całkowitejdo hermetyzacji wartości, a następnie jej wydobycia.// Przyk ad u ycia opakowania.class Wrap { public static void main(String args[]) {

Integer iOb = new Integer(100);

int i = iOb.intValue();

System.out.println(i + " " + iOb); // wy wietla 100 100 }}

Kod opakowuje wartość całkowitą 100 obiektem klasy Integer nazwanym iOb. Następnie pobieratę wartość z obiektu i przypisuje ją do zmiennej i.

Proces umieszczania wartości wewnątrz nazywa się opakowywaniem. Następujący wiersz opa-kowuje więc wartość 100 w obiekcie typu Integer.Integer iOb = new Integer(100);

Proces wydobywania wartości z typu opakowującego nazywa się rozpakowywaniem lub wydo-bywaniem. Następujący wiersz wydobywa wartość z obiektu iOb.int i = iOb.intValue();

Powyższy sposób opakowywania i wydobywania wartości był stosowany od samego początkuw języku Java. Wraz z wydaniem JDK 5 wprowadzono jednak rozwiązanie, które znacznie uprościłostosowanie opakowań — automatyczne opakowywanie i wydobywanie typów prostych.

Automatyczne opakowywanie typów prostychPocząwszy od wydania JDK 5, język Java oferuje dwa ważne mechanizmy: automatyczne opako-wywanie i automatyczne wydobywanie typów prostych. Automatyczne opakowywanie oznacza, iżtyp prosty jest automatycznie umieszczany w odpowiadającym mu typie opakowującym, jeśli sytu-acja wymaga użycia obiektu. Nie trzeba jawnie tworzyć obiektu. Automatyczne wydobywanie oznacza,iż typ opakowujący jest automatycznie rozpakowywany w razie konieczności użycia typu prostego.Nie trzeba jawnie wywoływać metody intValue() lub doubleValue().

Nowa funkcja języka Java ułatwia pisanie niektórych algorytmów, ponieważ eliminuje koniecz-ność żmudnego, ręcznego opakowywania i wydobywania wartości. Co więcej, takie rozwiązanie za-pobiega popełnianiu błędów i stanowi jeden z ważnych elementów typów sparametryzowanych,które działają jedynie dla obiektów. Automatyczne opakowywanie ułatwia też korzystanie z kolekcjiframeworku Collections, które zostaną omówione w części II książki.

Automatyczne opakowywanie eliminuje konieczność ręcznego tworzenia obiektów opakowują-cych wartości typów prostych — wystarczy przypisać typ prosty zmiennej referencyjnej typu opa-kowującego. Java automatycznie utworzy odpowiedni obiekt. Oto nowoczesny sposób tworzeniaobiektu Integer przechowującego wartość 100.

Poleć książkęKup książkę

Page 33: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 261

Integer iOb = 100; // automatyczne opakowanie typu int

Zauważ, że nie pojawia się jawne tworzenie obiektu za pomocą operatora new. Java wykonuje tozadanie za programistę.

W celu rozpakowania obiektu wystarczy przypisać zmiennej odpowiedniego typu prostego refe-rencję do obiektu. Oto przykład rozpakowania obiektu iOb.int i = iOb; // automatyczne rozpakowanie

Java sama zajmuje się wszystkimi szczegółami.Poniżej znajduje się wcześniejszy program napisany z wykorzystaniem automatycznego opako-

wywania i rozpakowywania.// Przyk ad automatycznego opakowywania.class AutoBox { public static void main(String args[]) {

Integer iOb = 100; // automatyczne opakowanie typu int

int i = iOb; // automatyczne rozpakowanie

System.out.println(i + " " + iOb); // wy wietla 100 100 }}

Automatyczne opakowywanie i metodyDziałanie tego mechanizmu nie ogranicza się tylko do operacji przypisania. Automatyczne opako-wywanie występuje zawsze wtedy, gdy typ prosty wymaga konwersji na obiekt. Automatyczne roz-pakowanie występuje zawsze wtedy, gdy obiekt musi zostać zamieniony na typ prosty. Oznacza to,iż automatyczne opakowanie może mieć miejsce na przykład w momencie przekazania argumentudo metody lub zwrócenia wartości przez metodę. Oto przykład wart przeanalizowania.// Automatyczne opakowanie i rozpakowanie dotyczy// tak e argumentów metod i zwracanych warto ci.

class AutoBox2 { // Pobierz parametr Integer // i zwró warto typu int. static int m(Integer v) { return v ; // automatyczne rozpakowanie do int }

public static void main(String args[]) { // Przekazanie warto ci typu int do m() i przypisanie zwróconej warto ci // obiektowi typu Integer. Argument 100 jest automatycznie opakowany typem // Integer. Zwracana warto jest ponownie automatycznie opakowywana // typem Integer. Integer iOb = m(100);

System.out.println(iOb); }}

Program wyświetli na ekranie następującą wartość.100

Zauważ, że metoda m() wymaga argumentu typu Integer i zwraca jako wynik typ int. Wewnątrzmetody main() metodzie m() jest przekazywana wartość 100. Ponieważ metoda m() wymaga typuInteger, przekazana wartość jest automatycznie opakowywana. Następnie metoda zwraca typ intodpowiadający wartości z obiektu Integer. Powoduje to automatyczne rozpakowanie v. Ponieważuzyskana wartość jest przypisywana do zmiennej iOb, następuje ponowne automatyczne opakowaniewartości typu int.

Poleć książkęKup książkę

Page 34: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

262 Cz I J zyk Java

Automatyczne opakowywaniei rozpakowywanie w wyra eniachOgólnie automatyczne opakowywanie lub rozpakowywanie ma miejsce zawsze wtedy, gdy wymaganajest konwersja na obiekt lub z obiektu. Dotyczy to również wyrażeń. W wyrażeniu obiekt numerycz-ny jest automatycznie rozpakowywany. W razie konieczności wynik wyrażenia jest opakowywanyobiektem. Oto przykład takiego zachowania.// Automatyczne opakowywanie w wyra eniach.

class AutoBox3 { public static void main(String args[]) {

Integer iOb, iOb2; int i;

iOb = 100; System.out.println("Oryginalna warto iOb: " + iOb);

// Poni szy kod powoduje automatyczne rozpakowanie iOb, // inkrementowanie warto ci i ponownie opakowanie // wyniku w obiekcie iOb. ++iOb; System.out.println("Po ++iOb: " + iOb);

// Tutaj iOb jest rozpakowywane, obliczana jest warto // wyra enia i wynik jest ponownie pakowany do iOb2. iOb2 = iOb + (iOb / 3); System.out.println("iOb2 po wyra eniu: " + iOb2);

// Obliczenie tego samego wyra enia, // ale bez automatycznego opakowywania. i = iOb + (iOb / 3); System.out.println("i po wyra eniu: " + i);

}}

Program generuje następujące wyniki.Oryginalna warto iOb: 100Po ++iOb: 101iOb2 po wyra eniu: 134i po wyra eniu: 134

Warto zwrócić szczególną uwagę na poniższy wiersz.++iOb;

Wyrażenie w tej formie oznacza inkrementację wartości przechowywanej w obiekcie iOb: naj-pierw dochodzi do rozpakowania wartości, następnie jest ona inkrementowana, a na końcu po-nownie opakowywana obiektem.

Automatyczne rozpakowywanie umożliwia mieszanie w jednym wyrażeniu różnych typówobiektów numerycznych. Po rozpakowaniu zachodzi standardowa promocja i konwersja typów.Poniższy program jest całkowicie poprawny.class AutoBox4 { public static void main(String args[]) {

Integer iOb = 100; Double dOb = 98.6;

dOb = dOb + iOb; System.out.println("dOb po wyra eniu: " + dOb); }}

Poleć książkęKup książkę

Page 35: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 263

Wynik działania programu jest następujący.dOb po wyra eniu: 198.6

Zarówno obiekt dOb typu Double, jak i obiekt iOb typu Integer uczestniczył w dodawaniu. Wynikzostał opakowany i umieszczony w obiekcie dOb.

Dzięki automatycznemu rozpakowywaniu można używać obiektów liczb całkowitych do stero-wania instrukcją switch. Oto przykład.Integer iOb = 2;

switch(iOb) { case 1: System.out.println("jeden"); break; case 2: System.out.println("dwa"); break; default: System.out.println("b d");}

W momencie obliczania wyrażenia z instrukcji switch obiekt iOb jest automatycznie rozpakowywany.Jak łatwo zauważyć, automatyczne opakowywanie i rozpakowywanie ułatwia pisanie wyrażeń

korzystających z obiektów numerycznych. Dawniej, aby osiągnąć ten sam efekt, trzeba było doko-nywać rzutowania i wywoływania metod takich jak intValue().

Automatyczne opakowywanie typów znakowych i logicznychJak już wspomniano, Java udostępnia także klasy opakowań dla typów boolean i char: odpowiednioBoolean i Character. Automatyczne opakowywanie i rozpakowywanie dotyczy również tych typów.Oto przykład.// Automatyczne opakowywanie i rozpakowywanie obiektów klas Boolean i Character.

class AutoBox5 { public static void main(String args[]) {

// automatyczne opakowanie/rozpakowanie warto ci typu boolean Boolean b = true;

// Zastosowanie b w wyra eniu warunkowym powoduje // jego automatyczne rozpakowanie. if(b) System.out.println("b wynosi true");

// automatyczne opakowanie/rozpakowanie warto ci typu char Character ch = 'x'; // opakowanie typu char char ch2 = ch; // rozpakowanie char

System.out.println("ch2 wynosi " + ch2); }}

Program generuje następujące wyniki.b wynosi truech2 wynosi x

W tym programie warto przede wszystkim zauważyć, iż zachodzi automatyczne rozpakowanie b w wy-rażeniu warunkowym instrukcji if. Każde wyrażenie instrukcji if musi dać w wyniku wartość typu boolean.Ponieważ b zawiera wartość logiczną, dochodzi do automatycznego rozpakowania i użycia tej wartościjako wyniku wyrażenia. Z tego względu wspomniana instrukcja jest dla kompilatora w pełni poprawna.

Dzięki automatycznemu rozpakowywaniu można stosować obiekt Boolean w strukturach ste-rujących. Wewnątrz pętli while, for i do-while dochodzi do automatycznego rozpakowania obiektudo typu boolean. Poniższy kod jest w pełni poprawny.Boolean b;// ...while(b) { // ...

Poleć książkęKup książkę

Page 36: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

264 Cz I J zyk Java

Automatyczne opakowywaniepomaga zapobiega b domAutomatyczne opakowywanie, poza samą wygodą, pomaga zapobiegać błędom programistów.Rozważmy następujący program.// B d przy r cznym rozpakowywaniu.class UnboxingError { public static void main(String args[]) {

Integer iOb = 1000; // automatyczne opakowanie warto ci 1000

int i = iOb.byteValue(); // r czne wydobycie warto ci!!!

System.out.println(i); // nie spowoduje wy wietlenia warto ci 1000! }}

Program nie wyświetli oczekiwanej wartości 1000, ale –24! Wynika to z faktu, iż rozpakowaniezostało wykonane metodą byteValue(), która spowodowała obcięcie wartości do zakresu dostępne-go dla typu byte. Automatyczne rozpakowywanie zabezpiecza przed tego rodzaju błędami, ponie-waż Java automatycznie zastosuje metodę zgodną z typem int.

Ponieważ automatyczne opakowywanie zawsze tworzy odpowiedni obiekt, a automatyczne wy-dobywanie zawsze pobiera odpowiednią wartość, nie można doprowadzić do błędnego doboru typui wartości. W tych rzadkich przypadkach, w których programista świadomie chce dokonać zmianytypu, zawsze może zastosować ręczne opakowywanie lub rozpakowywanie. Oczywiście traci sięwtedy zalety automatyzacji. Ogólnie: nowo tworzony kod języka Java powinien stosować automa-tyczne opakowywanie.

S owo ostrze eniaPonieważ język Java dokonuje automatycznego opakowywania i rozpakowywania, niektórzy pro-gramiści mogą ulec pokusie całkowitej rezygnacji z tradycyjnych typów prostych na rzecz obiektówklasy Integer czy Double. Można na przykład napisać następujący kod.// Z e u ycie automatycznego opakowywania!Double a, b, c;

a = 10.0;b = 4.0;

c = Math.sqrt(a*a + b*b);

System.out.println("Przeciwprostok tna ma warto " + c);

Obiekty typu Double przechowują wartości używane do obliczenia przeciwprostokątnej trójkątaprostokątnego. Choć kod jest poprawny od strony technicznej i wykonuje swoje zadanie bez pro-blemów, stanowi bardzo zły przykład użycia automatycznego opakowywania. Dużo wydajniejszeobliczeniowo będzie w tym przypadku zastosowanie typu prostego double. Różnica w wydajnościobu rozwiązań wynika z tego, że automatyczne opakowywanie wiąże się z kosztami, które nie wy-stępują w przypadku typów prostych.

Ogólnie: należy stosować typy opakowujące tylko wtedy, gdy potrzebna jest obiektowa repre-zentacja typów prostych. Automatyczne opakowywanie nie zostało dodane do Javy, by po cichuwyeliminować typy proste.

Poleć książkęKup książkę

Page 37: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 265

Adnotacje (metadane)Począwszy od wydania JDK 5, język Javy obsługuje nowy sposób umieszczania dodatkowych in-formacji w plikach z kodem źródłowym. Nowy mechanizm, który nazwano adnotacjami, w żadensposób nie wpływa na działanie programu. Adnotacje pozostawiają niezmienioną semantykę pro-gramu. Okazuje się jednak, że informacje zawarte w adnotacjach mogą być używane przez rozmaitenarzędzia na etapie wytwarzania i wdrażania oprogramowania. Adnotacja może zostać przetworzo-na na przykład przez generator kodu źródłowego. Opisywany mechanizm bywa też określany mia-nem metadanych, jednak nazwa adnotacje lepiej oddaje istotę tego rozwiązania i cieszy się większąpopularnością.

Podstawy tworzenia adnotacjiAdnotacje można tworzyć przy użyciu mechanizmu na bazie interfejsu. Zacznijmy od przykładu,który deklaruje adnotację MyAnno.// Przyk ad prostego typu adnotacji.@interface MyAnno { String str(); int val();}

Zauważ znak @ poprzedzający słowo kluczowe interface. Za pomocą tego znaku można zasy-gnalizować kompilatorowi, że ma do czynienia z deklaracją typu adnotacji. Wewnątrz adnotacji za-deklarowano dwie metody składowe: str() i val(). Wszystkie adnotacje składają się tylko z dekla-racji metod. Nie podaje się kodu deklarowanych metod, Java sama je implementuje. Co więcej,metody te zachowują się jak zmienne.

Adnotacja nie może zawierać klauzuli extends. Okazuje się jednak, że wszystkie adnotacjeautomatycznie rozszerzają interfejs Annotation. Deklaracja tego głównego interfejsu znajduje sięw pakiecie java.lang.annotation. Przesłania on metody hashCode(), equals() i toString() zdefi-niowane w klasie Object. Dodatkowo zawiera metodę annotationType(), która zwraca obiekt Classreprezentujący wywołaną adnotację.

Po zadeklarowaniu adnotacji można zacząć jej używać do oznaczania innych elementów kodu.Przed wprowadzeniem JDK 8 adnotacje można było dodawać wyłącznie do deklaracji i właśnie tensposób ich stosowania przedstawimy w pierwszej kolejności. (W JDK 8 wprowadzono także możli-wość dodawania adnotacji do typów — przedstawię ją w dalszej części rozdziału. Niemniej jednakpewne podstawowe techniki odnoszą się do obu rodzajów adnotacji). Adnotacje można stosowaćpraktycznie dla dowolnych rodzajów deklaracji, w tym deklaracji klas, metod, zmiennych, parametrówi stałych wyliczeniowych. Istnieje nawet możliwość oznaczenia jedną adnotacją deklaracji innej ad-notacji. We wszystkich przypadkach treść adnotacji musi znaleźć się przed właściwą deklaracją.

Podczas stosowania adnotacji należy przypisać wartości jej składowym. Oto przykład zastoso-wania adnotacji dla metody:// Adnotacja dotycz ca metody.@MyAnno(str = "Przyk ad adnotacji", val = 100)public static void myMeth() { // ...

Adnotacja jest powiązana z metodą myMeth(). Warto dobrze przyjrzeć się stosowanej składni.Nazwa rodzaju adnotacji jest poprzedzona znakiem @, a w nawiasach znajduje się lista inicjalizującaskładowe. Aby nadać składowej wartość, wystarczy podać nazwę składowej, znak równości i wartość.W tym przykładzie łańcuch "Przyk ad adnotacji" zostaje przypisany do składowej str. Łatwo za-uważyć, że w przytoczonym wyrażeniu po identyfikatorze str nie użyto nawiasów. Podczas przypi-sywania wartości składowej adnotacji wystarczy użyć nazwy tej składowej. W tym kontekście metodawygląda, jakby była zmienną składową.

Poleć książkęKup książkę

Page 38: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

266 Cz I J zyk Java

Okre lanie strategii zachowywania adnotacjiZanim przystąpimy do szczegółowego omawiania adnotacji, warto wspomnieć o strategii zacho-wywania adnotacji. Strategia określa, w którym momencie adnotacje są pomijane. Java definiujetrzy takie strategie — znajdują się one w wyliczeniu java.lang.annotation.RetentionPolicy. Nazwytych strategii to SOURCE, CLASS i RUNTIME.

Adnotacja ze strategią SOURCE jest zachowywana tylko w pliku kodu źródłowego. Innymi słowy,jest pomijana w trakcie kompilacji kodu.

Adnotacja ze strategią CLASS jest zachowywana w pliku .class w trakcie kompilacji. Nie jest jed-nak dostępna dla maszyny wirtualnej w trakcie wykonywania programu.

Adnotacja ze strategią RUNTIME jest zachowywana w pliku .class w trakcie kompilacji i jest do-stępna dla maszyny wirtualnej w trakcie wykonywania programu. Oznacza to, że właśnie strategiaRUNTIME zapewnia największą trwałość adnotacji.

Adnotacja zastosowana dla deklaracji zmiennej lokalnej nigdy nie jest zachowywanaw pliku .class.

Strategię zachowywania adnotacji dla notatki można wskazać, stosując jedną z wbudowanychadnotacji @Retention. Oto ogólna postać tej adnotacji.@Retention(strategia-zachowywania)

Element strategia-zachowywania musi być jedną z wcześniej omówionych stałych wyliczenio-wych. Jeżeli nie określi się jawnie żadnej strategii, domyślnie zostanie użyta strategia CLASS.

Poniższa wersja adnotacji MyAnno używa adnotacji @Retention do określenia strategii zachowy-wania RUNTIME. Oznacza to, że adnotacja MyAnno będzie dostępna dla maszyny wirtualnej w trakciewykonywania programu.@Retention(RetentionPolicy.RUNTIME)@interface MyAnno { String str(); int val();}

Odczytywanie adnotacji w trakcie dzia ania programuza pomoc refleksjiMimo że adnotacje zaprojektowano przede wszystkim z myślą o narzędziach programistycznychi wdrożeniowych, adnotacje stosujące strategię RUNTIME można odczytywać w czasie wykonywaniaprogramu, korzystając z tzw. refleksji. Refleksja umożliwia pobranie informacji na temat klasyw trakcie działania programu. Interfejs API refleksji umieszczono w pakiecie java.lang.reflect.Istnieje wiele zastosowań tego mechanizmu, więc nie będę ich tu wszystkich wymieniał. Ograni-czymy się tylko do analizy kilku przykładów związanych z adnotacjami.

Pierwszy krok wykorzystania refleksji polega na pobraniu obiektu klasy Class reprezentującegoklasę, której adnotację chcemy odczytać. Klasa Class to jedna z klas wbudowanych w język Javai znajdujących się w pakiecie java.lang. Jest ona szczegółowo omówiona w części II książki. Istniejewiele sposobów uzyskania obiektu Class. Jednym z nich jest zastosowanie metody getClass() zde-finiowanej w klasie Object. Oto ogólna postać metody.final Class<?> getClass()

Metoda zwraca obiekt klasy Class reprezentujący klasę obiektu wywołującego tę metodę.

Warto zwróci uwag na konstrukcj <?> u yt po s owie Class w powy szej deklaracjimetody getClass(). Wspomniana konstrukcja ma zwi zek z dost pnym w Javiemechanizmem typów sparametryzowanych. Metoda getClass(), jak wiele innychprezentowanych tutaj metod zwi zanych z refleksjami, korzysta z typów sparametryzowanych.Same typy sparametryzowane zostan omówione w rozdziale 14. Dobre rozumienietypów sparametryzowanych nie jest jednak niezb dne do zrozumienia podstawowychzasad funkcjonowania refleksji.

Poleć książkęKup książkę

Page 39: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 267

Po uzyskaniu obiektu klasy Class można użyć jego metod do odczytania informacji na tematrozmaitych elementów zadeklarowanych w tej klasie, w tym adnotacji. Aby uzyskać adnotację związa-ną z konkretnym elementem zadeklarowanym w klasie, należy najpierw pobrać obiekt reprezentującyten element. Klasa Class zawiera między innymi metody getMethod(), getField() i getConstructor(),które pobierają informacje odpowiednio o metodzie, polu i konstruktorze. Metody zwracają obiektytypu Method, Field i Constructor.

Aby lepiej prześledzić cały proces, najlepiej przeanalizować przykład uzyskujący adnotacjezwiązane z metodą. W tym celu trzeba pobrać obiekt Class reprezentujący klasę, a następnie wywo-łać dla niego metodę getMethod(), przekazując nazwę metody jako parametr. Ogólna postać metodygetMethod() jest następująca.Method getMethod(String nazwaMetody, Class<?> ... typyParametrów)

Nazwę metody przekazuje się w elemencie nazwaMetody. Jeśli metoda przyjmuje argumenty,trzeba przekazać obiekty Class reprezentujące typy parametrów (element typyParametrów). Zauważ,że typyParametrów to parametr o zmiennej liczbie argumentów. Oznacza to, iż można przekazaćdowolną liczbę typów parametrów, również zero. Metoda getMethod() zwraca obiekt Method reprezen-tujący metodę. Jeśli nie uda się odnaleźć metody, zostanie zgłoszony wyjątek NoSuchMethodException.

Adnotacje skojarzone z obiektami klas Class, Method, Field i Constructor można uzyskać za po-średnictwem metody getAnnotation(). Ogólna postać tej metody jest następująca.Annotation getAnnotation(Class<A> typAdnotacji)

Element typAdnotacji to obiekt Class reprezentujący interesującą nas adnotację. Metoda zwracareferencję do adnotacji. Za pośrednictwem tej referencji można uzyskać wartości reprezentowaneprzez składowe tej adnotacji. Jeśli nie uda się znaleźć żądanej adnotacji (jeśli na przykład zastoso-wano dla adnotacji inną strategię zachowywania niż RUNTIME), metoda zwróci wartość null.

Poniżej pokazano program łączący w sobie wszystkie opisane powyżej elementy i używający re-fleksji do wyświetlenia adnotacji związanej z metodą.import java.lang.annotation.*;import java.lang.reflect.*;

// Deklaracja typu adnotacji.@Retention(RetentionPolicy.RUNTIME)@interface MyAnno { String str(); int val();}

class Meta {

// Adnotacja metody. @MyAnno(str = "Przyk adowa adnotacja", val = 100) public static void myMeth() { Meta ob = new Meta();

// Pobranie adnotacji dla tej metody i // wy wietlenie warto ci jej sk adowych. try { // Najpierw pobierz obiekt Class reprezentuj cy // aktualn klas . Class c = ob.getClass();

// Pobierz obiekt Method reprezentuj cy // aktualn metod . Method m = c.getMethod("myMeth");

// Nast pnie pobierz adnotacj dla tej metody. MyAnno anno = m.getAnnotation(MyAnno.class);

// Wy wietl warto ci adnotacji. System.out.println(anno.str() + " " + anno.val());

Poleć książkęKup książkę

Page 40: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

268 Cz I J zyk Java

} catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth(); }}

Wynik działania programu jest następujący.Przyk adowa adnotacja 100

Program używa refleksji do pobrania i wyświetlenia wartości elementów str i val adnotacjiMyAnno przypisanej do metody myMeth() klasy Meta. Warto zwrócić szczególną uwagę na dwa wiersze.Oto pierwszy z nich.MyAnno anno = m.getAnnotation(MyAnno.class);

Szczególnie interesujące jest wyrażenie MyAnno.class, które powoduje zwrócenie obiektu klasyClass dla typu MyAnno, czyli adnotacji. Taką konstrukcję nazywamy stałą klasową. Podobne kon-strukcje można stosować wszędzie tam, gdzie jest potrzebny obiekt typu Class dla znanej klasy. Naprzykład poniższego wyrażenia można by użyć do uzyskania obiektu typu Class dla klasy Meta:Class<?> c = Meta.class;

Oczywiście takie rozwiązanie działa tylko wtedy, gdy z wyprzedzeniem zna się nazwę klasy. Niezawsze występuje taka sytuacja. Ogólnie stałe klasowe można uzyskiwać dla klas, interfejsów, typówprostych i tablic. (Warto pamiętać, że zapis <?> ma związek z typami sparametryzowanymi, którezostaną omówione w rozdziale 14.).

Drugi wiersz, którym warto się zainteresować, dotyczy sposobu pobierania wartości elementówstr i val w momencie ich wyświetlania.System.out.println(anno.str() + " " + anno.val());

Zauważ, że jest to zwyczajne wywołanie metody o takiej samej nazwie jak element. Podobnekonstrukcje można stosować wszędzie tam, gdzie jest potrzebna wartość składowej adnotacji.

Drugi przyk ad refleksjiW poprzednim programie metoda myMeth() nie miała żadnych parametrów. W wywołaniu getMethod()wystarczyło więc przekazać jedynie nazwę metody. Aby pobrać metodę z parametrami, trzeba do-datkowo przekazać do metody getMethod() obiekty klas reprezentujące typy parametrów. Otoodrobinę zmieniona wersja wcześniejszego programu.import java.lang.annotation.*;import java.lang.reflect.*;

@Retention(RetentionPolicy.RUNTIME)@interface MyAnno { String str(); int val();}

class Meta {

// Metoda myMeth ma teraz dwa parametry. @MyAnno(str = "Dwa parametry", val = 19) public static void myMeth(String str, int i) { Meta ob = new Meta();

try { Class c = ob.getClass();

Poleć książkęKup książkę

Page 41: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 269

// Tutaj pojawia si okre lenie typów parametrów. Method m = c.getMethod("myMeth", String.class, int.class);

MyAnno anno = m.getAnnotation(MyAnno.class);

System.out.println(anno.str() + " " + anno.val()); } catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth("test", 10); }}

Wynik działania tej wersji programu jest następujący.Dwa parametry 19

Metoda myMeth() przyjmuje dwa parametry — jeden typu String i drugi typu int. W celu po-brania informacji na temat metody konieczne jest wywołanie poniższej wersji metody getMethod().Method m = c.getMethod("myMeth", String.class, int.class);

Jako dodatkowe argumenty trzeba przekazać obiekty Class reprezentujące klasę String i typ int.

Odczytywanie wszystkich adnotacjiAby odczytać wszystkie adnotacje skojarzone z danym elementem i stosujące strategie zachowywaniaRUNTIME, należy użyć metody getAnnotations() dla tego elementu. Oto ogólna postać metody.Annotation[] getAnnotations()

Metoda zwraca tablicę adnotacji. Metodę można wywołać dla obiektów typu Class, Method,Constructor i Field oraz kilku innych.

Poniżej pokazano kolejny przykład ilustrujący sposób wykorzystania refleksji do pobraniawszystkich adnotacji związanych z klasą i metodą. Kod deklaruje dwa typy adnotacji. Są one uży-wane do dołączenia dodatkowych informacji do klasy i metody.// Wy wietlanie wszystkich adnotacji klasy i metody.import java.lang.annotation.*;import java.lang.reflect.*;

@Retention(RetentionPolicy.RUNTIME)@interface MyAnno { String str(); int val();}

@Retention(RetentionPolicy.RUNTIME)@interface What { String description();}

@What(description = "Klasa testowa adnotacji")@MyAnno(str = "Meta2", val = 99)class Meta2 {

@What(description = "Metoda testowa adnotacji") @MyAnno(str = "Testowanie", val = 100) public static void myMeth() { Meta2 ob = new Meta2();

try { Annotation annos[] = ob.getClass().getAnnotations();

Poleć książkęKup książkę

Page 42: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

270 Cz I J zyk Java

// Wy wietlenie wszystkich adnotacji dla klasy Meta2. System.out.println("Wszystkie adnotacje Meta2:"); for(Annotation a : annos) System.out.println(a);

System.out.println();

// Wy wietlenie wszystkich adnotacji dla metody myMeth. Method m = ob.getClass( ).getMethod("myMeth"); annos = m.getAnnotations();

System.out.println("Wszystkie adnotacje myMeth:"); for(Annotation a : annos) System.out.println(a);

} catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth(); }}

Wynik działania programu jest następujący.Wszystkie adnotacje Meta2:@What(description=Klasa testowa adnotacji)@MyAnno(str=Meta2, val=99)

Wszystkie adnotacje myMeth:@What(description=Metoda testowa adnotacji)@MyAnno(str=Testowanie, val=100)

Program używa metody getAnnotations() do pobrania tablicy notatek związanych z klasą Meta2i metodą myMeth(). Metoda ta zwraca tablicę obiektów Annotation. Przypomnę, iż klasa Annotationstanowi interfejs bazowy dla wszystkich notatek i przesłania metodę toString() klasy Object. Z tegopowodu próba wyświetlenia notatki powoduje wywołanie metody toString(), która zwraca pełnyopis notatki.

Interfejs AnnotatedElementMetody getAnnotation() i getAnnotations() użyte we wcześniejszych przykładach są zdefiniowanew interfejsie AnnotatedElement z pakietu java.lang.reflect. Interfejs ten wykorzystuje mechanizmrefleksji do pobierania adnotacji i jest zaimplementowany przez klasy Method, Field, Constructor,Class, Package i kilku innych.

Poza wspomnianymi wcześniej metodami getAnnotation() oraz getAnnotations() interfejs de-finiuje jeszcze kilka innych metod. Dwie z nich były dostępne już w JDK 5. Pierwszą z nich jestgetDeclaredAnnotations() o następującej ogólnej postaci.Annotation[] getDeclaredAnnotations()

Metoda zwraca wszystkie niedziedziczone adnotacje występujące w wywołującym obiekcie.Druga metoda to isAnnotationPresent() o następującej postaci.boolean isAnnotationPresent(Class<? extends Annotation> typAdnotacji)

Metoda zwraca wartość true, jeśli z wywoływanym obiektem jest skojarzona adnotacja typutypAdnotacji. W przeciwnym przypadku zwraca wartość false. W JDK 8 zostały do nich dodane trzykolejne metody: getDeclaredAnnotation(), getAnnotationsByType() oraz getDeclaredAnnotationsByType().Dwie ostatnie metody automatycznie operują na powtarzających się adnotacjach. (Powtarzające sięadnotacje zostały opisane pod koniec tego rozdziału).

Poleć książkęKup książkę

Page 43: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 271

Warto ci domy lneSkładowym adnotacji można nadawać wartości domyślne, które będą stosowane, jeśli odpowiedniewartości nie zostaną określone podczas tworzenia egzemplarzy adnotacji. Wartości domyślne do-daje się poprzez dodanie klauzuli default do deklaracji składowej. Oto ogólna postać deklaracji.typ sk adowa() default warto ;

Wskazywana warto musi być zgodna z typem typ.Oto przykład adnotacji @MyAnno z dodanymi wartościami domyślnymi.

// Deklaracja typu adnotacji zawieraj cego warto ci domy lne.@Retention(RetentionPolicy.RUNTIME)@interface MyAnno { String str() default "Testowanie"; int val() default 9000;}

Składowym str i val będą przypisywane odpowiednio domyślne wartości "Testowanie" i 9000.Oznacza to, że w momencie stosowania tej adnotacji dla klasy lub metody nie jest wymagane okre-ślenie jakichkolwiek parametrów. W razie potrzeby można jednak przypisać poszczególnym skła-dowym wartości inne niż domyślne. Oto cztery możliwe sposoby stosowania adnotacji @MyAnno:@MyAnno() // obie warto ci domy lne@MyAnno(str = "pewien tekst") // domy lne tylko val@MyAnno(val = 100) // domy lne tylko str@MyAnno(str = "Testowanie", val = 100) // brak warto ci domy lnych

Poniższy program ilustruje wykorzystanie wartości domyślnych adnotacji.import java.lang.annotation.*;import java.lang.reflect.*;

// Deklaracja typu adnotacji zawieraj cego warto ci domy lne.@Retention(RetentionPolicy.RUNTIME)@interface MyAnno { String str() default "Testowanie"; int val() default 9000;}

class Meta3 {

// Adnotacja dla metody u ywa warto ci domy lnych. @MyAnno() public static void myMeth() { Meta3 ob = new Meta3();

// Pobranie adnotacji dla metody // i wy wietlenie warto ci jej sk adowych. try { Class c = ob.getClass();

Method m = c.getMethod("myMeth");

MyAnno anno = m.getAnnotation(MyAnno.class);

System.out.println(anno.str() + " " + anno.val()); } catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth(); }}

Poleć książkęKup książkę

Page 44: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

272 Cz I J zyk Java

Program po uruchomieniu wyświetli następujący wynik.Testowanie 9000

Adnotacje znacznikoweAdnotacja znacznikowa to specjalna forma adnotacji, która nie zawiera żadnych składowych. Jejjedynym zadaniem jest znakowanie elementu kodu — wystarczy sama jej obecność przy jakimśelemencie. Najlepszym sposobem sprawdzenia istnienia adnotacji znacznikowej jest użycie metodyisAnnotationPresent() zdefiniowanej w interfejsie AnnotatedElement.

Poniższy przykład ilustruje sposób stosowania adnotacji znacznikowych. Ponieważ interfejs ad-notacji nie zawiera składowych, wystarczy sprawdzenie samego istnienia adnotacji (lub jej braku).import java.lang.annotation.*;import java.lang.reflect.*;

// Adnotacja znacznikowa.@Retention(RetentionPolicy.RUNTIME)@interface MyMarker { }

class Marker {

// U ycie znacznika dla metody. // Zauwa , i nie s wymagane nawiasy. @MyMarker public static void myMeth() { Marker ob = new Marker();

try { Method m = ob.getClass().getMethod("myMeth");

// Sprawdzenie istnienia adnotacji znacznikowej. if(m.isAnnotationPresent(MyMarker.class)) System.out.println("Adnotacja MyMarker istnieje.");

} catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth(); }}

Wynik działania programu potwierdza istnienie adnotacji:Adnotacja MyMarker istnieje.

Warto zwrócić uwagę na brak konieczności stosowania nawiasów okrągłych po nazwie adnota-cji znacznikowej @MyMarker. Ponieważ adnotacja nie zawiera żadnych składowych, wystarczy podaćsamą jej nazwę.@myMarker

Zastosowanie pustych nawiasów nie jest błędem, ale nie są one wymagane.

Adnotacje jednoelementoweAdnotacje jednoelementowe zawierają tylko jedną składową. Działają dokładnie tak samo jak inneadnotacje, ale dodatkowo umożliwiają stosowanie skróconej formy przypisania wartości jedynejskładowej. W momencie stosowania adnotacji jednoelementowej wystarczy użyć samej wartościskładowej — nie trzeba podawać jej nazwy. Aby jednak móc skorzystać z takiego skrótu, składowamusi mieć nazwę value.

Poleć książkęKup książkę

Page 45: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 273

Poniżej znajduje się przykład wykorzystujący adnotację jednoelementową.import java.lang.annotation.*;import java.lang.reflect.*;

// Adnotacja jednoelementowa.@Retention(RetentionPolicy.RUNTIME)@interface MySingle { int value(); // sk adowa musi mie nazw value}

class Single {

// Oznaczenie metody adnotacj jednoelementow . @MySingle(100) public static void myMeth() { Single ob = new Single();

try { Method m = ob.getClass().getMethod("myMeth");

MySingle anno = m.getAnnotation(MySingle.class);

System.out.println(anno.value()); // wy wietla 100

} catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth(); }}

Zgodnie z oczekiwaniami program po uruchomieniu wyświetla wartość 100. Adnotacja użytadla metody myMeth() ma następującą postać.@MySingle(100)

Zauważ brak value =.Skróconą składnię można zastosować również wtedy, gdy adnotacja zawiera inne składowe, pod

warunkiem że zdefiniowano dla tych składowych wartości domyślne. Poniższy kod deklarujeadnotację z dodatkową składową xyz o wartości domyślnej 0.@interface SomeAnno { int value(); int xyz() default 0;}

Wszędzie tam, gdzie ma być stosowana wartość domyślna składowej xyz, można użyć poniższejpostaci adnotacji. Wystarczy podać wartość składowej value zgodnie ze składnią adnotacji jedno-elementowej.@SomeAnno(88)

W takiej sytuacji xyz zostanie ustawione na wartość domyślną 0, natomiast value otrzyma war-tość 88. Gdy chce się ustawić wartości obu składowych, trzeba jawnie podać obie nazwy.@SomeAnno(value = 88, xyz = 99)

Warto pamiętać, że składnia adnotacji jednoelementowej wymaga użycia nazwy value dla jedy-nej składowej.

Poleć książkęKup książkę

Page 46: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

274 Cz I J zyk Java

Wbudowane adnotacjeJava definiuje wiele wbudowanych adnotacji. W większości są to adnotacje wyspecjalizowane, aledziewięć ma uniwersalny charakter. Cztery z nich znajdują się w pakiecie java.lang.annotation:@Retention, @Documented, @Target i @Inherited. Pięć pozostałych należy do pakietu java.lang:@Override, @Deprecated, @FunctionalInterface, @SafeVarargs i @SuppressWarnings.

W wydaniu JDK 8 do interfejsu java.lang.annotation zosta y dodane dwie noweadnotacje: Repeatable oraz Native. Pierwsza z nich obs uguje adnotacje, które mogsi powtarza , opisane pod koniec tego rozdzia u. Z kolei druga adnotacja, Native,s u y do oznaczania pól, do których mo e si odwo ywa kod rdzenny.

Adnotacja @RetentionTę adnotację zaprojektowano z myślą o stosowaniu tylko dla innych adnotacji. Adnotacja @Retentionokreśla strategię zachowywania (opisana wcześniej w tym rozdziale).

Adnotacja @DocumentedTa adnotacja pełni funkcję interfejsu znaczników informującego narzędzia o konieczności udoku-mentowania adnotacji. Powinna być stosowana jedynie przy deklaracji innych adnotacji.

Adnotacja @TargetTa adnotacja służy do określania typów elementów, dla których można stosować właściwą adnota-cję. Powinna być stosowana jedynie przy innych adnotacjach. Adnotacja @Target przyjmuje jedenargument, który musi być tablicą stałych typu wyliczeniowego ElementType. Argument określa, dlajakich typów deklaracji można używać adnotacji. Znaczenie poszczególnych stałych wyliczenio-wych opisano w tabeli 12.1.

Tabela 12.1. Stałe wyliczenia ElementType

Stałe adnotacji @Target Adnotację można stosować dla

ANNOTATION_TYPE Innej adnotacjiCONSTRUCTOR KonstruktoraFIELD PolaLOCAL_VARIABLE Zmiennej lokalnejMETHOD MetodyPACKAGE PakietuPARAMETER ParametruTYPE Klasy, interfejsu lub wyliczeniaTYPE_PARAMETER Parametr typu (dodana w JDK 8)TYPE_USE Zastosowanie typu (dodana w JDK 8)

W adnotacji @Target można wskazać więcej niż jedną ze stałych, ale trzeba je oddzielić przecin-kami i umieścić w nawiasach klamrowych. Aby wskazać, że dana adnotacja ma zastosowanie tylkodla pól i zmiennych lokalnych, należy użyć adnotacji @Target w następującej formie:@Target( { ElementType.FIELD, ElementType.LOCAL_VARIABLE } )

Jeśli nie zostanie użyta adnotacja @Target, to z wyjątkiem parametrów typów adnotacja możebyć używana w dowolnych deklaracjach. Z tego względu często bardzo dobrym rozwiązaniem jestjawne określanie, dla jakich elementów można stosować daną adnotację, co w jasny i precyzyjnysposób określi jej zamierzone zastosowanie.

Poleć książkęKup książkę

Page 47: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 275

Adnotacja @Inherited@Inherited to adnotacja znacznikowa, którą można stosować tylko przed deklaracjami innychadnotacji. Co więcej, ta adnotacja wpływa tylko na adnotacje stosowane przed definicjami klas.Adnotacja powoduje dziedziczenie adnotacji klasy bazowej przez jej podklasę. Oznacza to, że w od-powiedzi na żądanie konkretnej, brakującej adnotacji podklasy Java sprawdza, czy odpowiednia ad-notacja została zdefiniowana dla klasy bazowej. Jeśli klasa bazowa została oznaczona żądaną adno-tacją i jeśli oznaczono tę adnotację adnotacją @Inherited, to właśnie ona zostanie zwrócona.

Adnotacja @OverrideTa adnotacja znacznikowa może być stosowana tylko przed deklaracjami metod. Metoda oznaczonataką adnotacją musi przykrywać odpowiednią metodę klasy bazowej. Jeśli ten warunek nie zostaniespełniony, kompilator zgłosi stosowny błąd. W ten sposób można zagwarantować, że metoda nad-klasy rzeczywiście zostanie przykryta, nie przeciążona.

Adnotacja @Deprecated@Deprecated to adnotacja znacznikowa. Za pomocą tej adnotacji można wskazać przestarzałą dekla-rację i zasugerować istnienie nowszej, zalecanej formy.

Adnotacja @FunctionalInterface@FunctionalInterface jest adnotacją znacznikową dodaną w JDK 8 i przeznaczoną do oznaczaniainterfejsów. Informuje ona, że interfejs, do którego została dodana, jest interfejsem funkcyjnym.Mianem funkcyjnych określane są interfejsy, które deklarują jedną i tylko jedną metodę abstrak-cyjną. Interfejsy funkcyjne są używane przez wyrażenia lambda. (Więcej informacji o interfejsachfunkcyjnych oraz wyrażeniach lambda można znaleźć w rozdziale 15.). Jeśli interfejs, do któregododano tę adnotację, nie jest interfejsem funkcyjnym, to kompilator zgłosi błąd. Koniecznie należyzrozumieć, że adnotacja ta wcale nie jest niezbędna do tworzenia interfejsów funkcyjnych. Każdyinterfejs deklarujący dokładnie jedną metodę abstrakcyjną z definicji jest interfejsem funkcyjnym.Z tego względu adnotacja @FunctionalInterface ma czysto informacyjny charakter.

Adnotacja @SafeVarargs@SafeVarargs to adnotacja znacznikowa, którą można stosować tylko dla metod i konstruktorów.Adnotacja oznacza, że metoda lub konstruktor nie zawiera żadnych niebezpiecznych działań związa-nych z parametrem typu vararg. Adnotacja służy do wstrzymywania generowania ostrzeżeń zwią-zanych z tworzeniem egzemplarzy nieuprzedmiotowionych (ang. non-reifiable) typów vararg i tablicsparametryzowanych. (Typ nieuprzedmiotowiony to w istocie typ sparametryzowany; typy spara-metryzowane zostaną omówione w rozdziale 14.). Adnotację @SafeVarargs można stosować tylkodla statycznych i finalnych metod i konstruktorów otrzymujących parametry typu vararg. Adnotacjęwprowadzono w wydaniu JDK 7.

Adnotacja @SuppressWarningsTa adnotacja wymusza wstrzymanie generowania określonych ostrzeżeń kompilatora. W adnotacjinależy podać nazwę wstrzymywanego ostrzeżenia w formie łańcucha. Adnotacje tego typu możnastosować dla dowolnych deklaracji.

Adnotacje typówZaczynając od wydania JDK 8, zwiększyła się także liczba miejsc w kodzie, w których można umiesz-czać adnotacje. Jak już wcześniej wspominałem, początkowo można je było dodawać wyłącznie dodeklaracji. Jednak w JDK 8 adnotacje można w większości przypadków umieszczać także w miej-scach, gdzie są podawane typy. Ten rozszerzony aspekt adnotacji jest nazywany adnotacjami typów.Na przykład adnotację można dodać do typu wyniku zwracanego przez metodę, do typu referencji this

Poleć książkęKup książkę

Page 48: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

276 Cz I J zyk Java

wewnątrz metody, do rzutowania, do poszczególnych poziomów tablic, do dziedziczonych klas orazdo klauzuli throws. Adnotacje można także dodawać do typów uogólnionych, w tym także do ogra-niczeń parametrów typów oraz argumentów typów ogólnych. (Szczegółowe omówienie zagadnieńtypów uogólnionych można znaleźć w rozdziale 14.).

Adnotacje typów są ważne, gdyż pozwalają wykonywać dodatkowe testy, chroniące przed wy-stępowaniem błędów. Trzeba wiedzieć, że kompilator javac z założenia sam nie przeprowadza tychtestów. Do tego celu służy odrębne narzędzie, choć może ono działać jako wtyczka kompilatora.

Adnotacje typów można dodawać do elementów określanych jako zastosowanie typu (ElementType.TYPE_USE). (Warto sobie przypomnieć, że ważne elementy, dla których można stosować ad-

notacje, są określane przy użyciu opisanej wcześniej adnotacji @Target). Adnotacja typu odnosi siędo typu, przed którym została ona podana. Na przykład przy założeniu, że dostępna jest adnotacjatypu o nazwie @TypeAnno, poniższa definicja będzie prawidłowa:void myMeth() throws @TypeAnno NullPointerException { // ...

W tym przypadku adnotacja @TypeAnno została dodana do typu NullPointerException w klau-zuli throws.

Istnieje także możliwość dodania adnotacji do typu referencji this (nazywanej odbiorcą). Jakwiadomo, this jest niejawnym argumentem wszystkich metod instancyjnych, które odwołują się dowywoływanego obiektu. Aby dodać adnotację do typu this, konieczne jest zastosowanie kolejnejnowej możliwości, dodanej w JDK 8. Otóż zaczynając do JDK 8, istnieje możliwość jawnego dekla-rowania this jako pierwszego parametru metody. W takiej deklaracji typ this musi odpowiadaćklasie, do której należy metoda; oto przykład:class SomeClass { int myMeth(SomeClass this, int i, int j) { // ...

Ponieważ metoda myMeth() jest definiowana w klasie SomeClass, zatem typem this musi byćSomeClass. W przypadku zastosowania takiej deklaracji zyskujemy możliwość dodania adnotacji dotypu this. Jeśli ponownie założymy, że dostępna jest adnotacja typu o nazwie @TypeAnno, to poniższywiersz kodu będzie prawidłowy:int myMeth(@TypeAnno SomeClass this, int i, int j) { // ...

Warto zwrócić uwagę, że nie trzeba jawnie deklarować referencji this, chyba że chcemy dodaćdo niej adnotację. (Nawet jeśli this nie zostanie jawnie zadeklarowana jako parametr, to i tak będzieona przekazywana do metody. Pod tym względem w JDK 8 nic nie uległo zmianie). Poza tym jawnedeklarowanie this w żaden sposób nie zmienia sygnatury metody, gdyż i tak parametr ten jest do-myślnie deklarowany, choć niejawnie. Warto zatem powtórzyć, że parametr this będziemy dekla-rować wyłącznie w sytuacjach, kiedy będziemy chcieli dodać do niego adnotację typu. Jeśli jednakthis zostanie zadeklarowany, to musi on być pierwszym parametrem.

Zamieszczony poniżej program przykładowy przedstawia kilka miejsc, w których można stosowaćadnotacje typów. Definiuje on kilka adnotacji, z których parę jest adnotacjami typów. Nazwy ad-notacji, jak również elementy, dla których można je stosować, zostały przedstawione w tabeli 12.2.

Tabela 12.2. Zastosowane w przykładzie adnotacje oraz elementy, dla których można je stosować

Nazwa adnotacji Określenie elementu, dla którego można ją stosować:

@TypeAnno ElementType.TYPE_USE

@MaxLen ElementType.TYPE_USE

@NotZeroLen ElementType.TYPE_USE

@Unique ElementType.TYPE_USE

@What ElementType.TYPE_PARAMETER

@EmptyOK ElementType.FIELD

@Recommended ElementType.METHOD

Poleć książkęKup książkę

Page 49: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 277

Warto zwrócić uwagę, że @EmptyOK, @Recommended oraz @What nie są adnotacjami typów. Zostałyone dołączone do programu w celach porównawczych. Spośród nich szczególnie interesująca jestadnotacja @What, która jest przeznaczona do dodawania do deklaracji parametru typu. To kolejnanowa możliwość stosowania adnotacji wprowadzona w JDK 8. Komentarze zamieszczone w kodzieprogramu wyjaśniają zastosowanie każdej z adnotacji.// Prezentacja kilku adnotacji typów.import java.lang.annotation.*;import java.lang.reflect.*;

// Adnotacja znacznikowa, któr mo na dodawa do typów.@Target(ElementType.TYPE_USE)@interface TypeAnno { }

// Inna adnotacja znacznikowa, któr mo na dodawa do typów.@Target(ElementType.TYPE_USE)@interface NotZeroLen {}

// Jeszcze inna adnotacja znacznikowa, któr mo na dodawa// do typów.@Target( ElementType.TYPE_USE )@interface Unique { }

// Adnotacja sparametryzowana, któr mo na dodawa do typów.@Target(ElementType.TYPE_USE)@interface MaxLen { int value();}

// Adnotacja, któr mo na dodawa do parametru typu.@Target(ElementType.TYPE_PARAMETER)@interface What { String description();}

// Adnotacja, któr mo na dodawa do deklaracji pola.@Target(ElementType.FIELD)@interface EmptyOK { }

// Adnotacja, któr mo na dodawa do deklaracji metody.@Target(ElementType.METHOD)@interface Recommended { }

// Zastosowanie adnotacji dla parametru typuclass TypeAnnoDemo<@What(description = "Ogólny typ danych") T> {

// Zastosowanie adnotacji typu dla konstruktora. public @Unique TypeAnnoDemo() {}

// Adnotacja typu (w tym przypadku typu String), a nie pola. @TypeAnno String str;

// A to jest adnotacja pola test. @EmptyOK String test;

// Zastosowanie adnotacji typu dla this (odbiorcy). public int f(@TypeAnno TypeAnnoDemo<T> this, int x) { return 10; }

// Adnotacja dodana do typu wyniku zwracanego przez metod . public @TypeAnno Integer f2(int j, int k) {

Poleć książkęKup książkę

Page 50: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

278 Cz I J zyk Java

return j+k; }

// Adnotacja dodana do deklaracji metody. public @Recommended Integer f3(String str) { return str.length() / 2; }

// Zastosowanie adnotacji typu w klauzuli throws. public void f4() throws @TypeAnno NullPointerException { // ... }

// Adnotacje zastosowane do ró nych poziomów tablicy. String @MaxLen(10) [] @NotZeroLen [] w;

// Adnotacja zastosowana dla typu elementów tablicy. @TypeAnno Integer[] vec;

public static void myMeth(int i) {

// Zastosowanie adnotacji typu dla argumentu typu. TypeAnnoDemo<@TypeAnno Integer> ob = new TypeAnnoDemo<@TypeAnno Integer>();

// Zastosowanie adnotacji typu dla new. @Unique TypeAnnoDemo<Integer> ob2 = new @Unique TypeAnnoDemo<Integer>();

Object x = new Integer(10); Integer y;

// Zastosowanie adnotacji typu dla rzutowania. y = (@TypeAnno Integer) x; }

public static void main(String args[]) { myMeth(10); }

// Zastosowanie adnotacji typu w deklaracji klasy. class SomeClass extends @TypeAnno TypeAnnoDemo<Boolean> {}}

Choć w większości przypadków element, do którego odnoszą się adnotacje, w tym przykładziejest oczywisty, to jednak cztery zastosowania wymagają dokładniejszego omówienia. Pierwszymz nich jest adnotacja typu wyniku zwracanego przez metodę oraz adnotacja deklaracji metody.W powyższym programie należy zatem zwrócić szczególną uwagę na dwie przedstawione poniżejdeklaracje metod:// Adnotacja dodana do typu wyniku zwracanego przez metod .public @TypeAnno Integer f2(int j, int k) { return j+k;}

// Adnotacja dodana do deklaracji metody.public @Recommended Integer f3(String str) { return str.length() / 2;}

W tych deklaracjach należy zwrócić uwagę na to, że adnotacja jest umieszczona przed typemzwracanego wyniku (którym w obu metodach jest Integer). Jednak w każdej z tych metod adnota-cja została dodana do innego elementu. W pierwszym przypadku adnotacja @TypeAnno dotyczy typuwyniku zwracanego przez metodę f2(). Wynika to z faktu, że typ elementu, dla którego można sto-sować tę adnotację, został określony jako ElementType.TYPE_USE, co oznacza, że można jej używać

Poleć książkęKup książkę

Page 51: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 279

w miejscach zastosowania typów. W drugim przypadku adnotacja @Recommended dotyczy samej de-klaracji metody. Wynika to z faktu, że typ elementu, dla którego można stosować tę adnotację, zo-stał określony jako ElementType.METHOD. W efekcie adnotacja @Recommended odnosi się do deklaracjimetody, a nie typu jej wyniku. Jak widać, określenie elementu, dla którego można stosować adnota-cję, pozwala wyeliminować pozorną niejednoznaczność pomiędzy adnotacją deklaracji metody orazadnotacją typu wyniku zwracanego przez metodę.

I jeszcze jedna uwaga dotycząca adnotacji typu wyniku zwracanego przez metodę: jeśli tym ty-pem jest void, to nie będzie można dodać do niego adnotacji.

Kolejnym interesującym aspektem przedstawionym w powyższym programie przykładowym sąadnotacje pól. Ich przykłady pokazano ponownie w poniższym fragmencie kodu:// Adnotacja typu (w tym przypadku typu String), a nie pola.@TypeAnno String str;

// A to jest adnotacja pola test.@EmptyOK String test;

W tym przypadku adnotacja @TypeAnno dotyczy typu String, natomiast adnotacja @EmptyOK —pola test. Choć każda z ich jest umieszczona na samym początku deklaracji, to elementy, którychdotyczą te adnotacje, są inne i zależą od typu elementów, dla których dane adnotacje można stosować.Jeśli typ elementów, dla których można stosować adnotację, został określony jako ElementType.TYPE_USE,to adnotacja dotyczy typu. Jeśli natomiast typ elementów, dla których można stosować adnotację,został określony jako ElementType.FIELD, to adnotacja dotyczy pola. A zatem sytuacja jest dosyćpodobna do tej, która występowała wcześniej w przypadku metod, więc nie ma mowy o żadnychniejednoznacznościach. Dokładnie ten sam mechanizm pozwala uniknąć niejednoznaczności w ra-zie dodawania adnotacji do zmiennych lokalnych.

Trzeba także zwrócić uwagę na sposób, w jaki dodano adnotację do referencji this (odbiorcy):public int f(@TypeAnno TypeAnnoDemo<T> this, int x) {

Jak widać, this jest pierwszym parametrem metody f(), a jego typ został określony jakoTypeAnnoDemo (czyli odpowiada klasie, której składową jest metoda f()). Jak już zaznaczyłem, za-czynając od JDK 8, istnieje możliwość jawnego podawania w deklaracjach parametru this, właśniepo to, by można było do niego dodawać adnotacje typu.

I w końcu adnotacje poziomów tablicy zastosowane w poniższej instrukcji:String @MaxLen(10) [] @NotZeroLen [] w;

W tej deklaracji adnotacja @MaxLen dotyczy typu pierwszego poziomu tablicy, a adnotacja@NotZeroLen — typu jej drugiego poziomu. Z kolei w poniższej deklaracji:@TypeAnno Integer[] vec;

adnotacja została dodana do typu elementów tablicy, którym jest Integer.

Adnotacje powtarzalneKolejną nowością związaną z adnotacjami wprowadzoną w JDK 8 jest możliwość powtarzania adnota-cji odnoszących się do tego samego elementu. Są one nazywane adnotacjami powtarzalnymi. Abyzapewnić możliwość powtarzania konkretnej adnotacji, należy do niej dodać adnotację @Repeatable,zdefiniowaną w pakiecie java.lang.annotation. Jej składowa value określa typ kontenera dla ad-notacji powtarzalnej. Kontener jest określany jako adnotacja, której składowa value jest tablicą,przy czym jej typ odpowiada typowi adnotacji powtarzalnej. Innymi słowy, aby utworzyć aplikacjępowtarzalną, należy utworzyć adnotację kontenera, a następnie zastosować typ tej adnotacji jakoargument adnotacji @Repeatable.

Aby uzyskać dostęp do adnotacji powtarzalnych na przykład za pomocą metody getAnnotation(),należy skorzystać z adnotacji kontenera, a nie z samej adnotacji powtarzalnej. Poniższy programprzedstawia takie rozwiązanie — zmienia on przedstawioną wcześniej adnotację MyAnno w adnotacjępowtarzalną i pokazuje, jak można jej używać.

Poleć książkęKup książkę

Page 52: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

280 Cz I J zyk Java

// Prezentacja adnotacji powtarzalnych.

import java.lang.annotation.*;import java.lang.reflect.*;

// Zapewnia mo liwo powtarzania adnotacji MyAnno.@Retention(RetentionPolicy.RUNTIME)@Repeatable(MyRepeatedAnnos.class)@interface MyAnno { String str() default "Testujemy"; int val() default 9000;}

// To jest adnotacja kontenera.@Retention(RetentionPolicy.RUNTIME)@interface MyRepeatedAnnos { MyAnno[] value();}

class RepeatAnno {

// Do myMeth() dodawane s dwie adnotacje MyAnno. @MyAnno(str = "Pierwsza adnotacja", val = -1) @MyAnno(str = "Druga adnotacja", val = 100) public static void myMeth(String str, int i) { RepeatAnno ob = new RepeatAnno();

try { Class<?> c = ob.getClass();

// Pobiera adnotacje dotycz ce metody myMeth(). Method m = c.getMethod("myMeth", String.class, int.class);

// Wy wietla powtórzone adnotacje MyAnno. Annotation anno = m.getAnnotation(MyRepeatedAnnos.class); System.out.println(anno);

} catch (NoSuchMethodException exc) { System.out.println("Nie znaleziono metody."); } }

public static void main(String args[]) { myMeth("test", 10); }}

Ten program generuje następujące wyniki:@MyRepeatedAnnos(value=[@MyAnno(val=-1, str=Pierwsza adnotacja), @MyAnno(val=100, str=Druga adnotacja)])

Zgodnie z wcześniejszymi wyjaśnieniami, aby adnotacja MyAnno mogła być powtarzana, należydo niej dodać adnotację @Repeatable określającą adnotację kontenera. W tym przykładzie adno-tacją kontenera jest MyRepeatedAnnos. Program pobiera adnotacje powtarzalne, wywołując metodęgetAnnotation() i przekazując do niej klasę adnotacji kontenera, a nie klasę adnotacji powtarzalnych.Jak pokazują wyniki działania programu, adnotacje powtarzalne są od siebie oddzielane przecinkami,a nie zwracane pojedynczo.

Innym sposobem pobierania adnotacji powtarzalnych jest korzystanie z jednej z nowych metoddodanych w JDK 8 do interfejsu AnnotatedElement i pozwalających na bezpośrednie operowaniena adnotacjach powtarzalnych. Chodzi konkretnie o dwie metody: getAnnotationsByType() orazgetDeclaredAnnotationsByType(). Przyjrzymy się pierwszej z nich:<T extends Annotation> T[] getAnnotationsByType(Class<T> annoType)

Poleć książkęKup książkę

Page 53: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Rozdzia 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje 281

Metoda ta zwraca tablicę adnotacji typu annoType, dodanych do obiektu, na rzecz którego me-toda została wywołana. Jeśli takich adnotacji nie ma, metoda zwróci pustą tablicę. Poniżej przed-stawiony został krótki przykład użycia metody getAnnotationsByType() w celu pobrania adnotacjitypu MyAnno:Annotation[] annos = m.getAnnotationsByType(MyAnno.class);for(Annotation a : annos) System.out.println(a);

Jak widać, w wywołaniu metody getAnnotationsByType() przekazywany jest typ adnotacji po-wtarzalnej. Tablica zwrócona przez tę metodę zawiera wszystkie egzemplarze adnotacji MyAnno do-dane do metody myMeth(); w tym przykładzie są dwie takie adnotacje. Do każdej ze zwróconych ad-notacji można odwołać się przy użyciu indeksu tablicy. Powyższy przykład wyświetla te adnotacje,korzystając z wersji for-each pętli for.

OgraniczeniaZe stosowaniem deklaracji adnotacji wiąże się kilka ograniczeń. Po pierwsze, żadna adnotacja niemoże dziedziczyć po innej adnotacji. Po drugie, wszystkie metody deklarowane w adnotacji musząbyć bezparametrowe. Co więcej, metody adnotacji mogą zwracać tylko wartości następujących typów:

typ prosty, na przykład int lub double; obiekt typu String lub Class; typ wyliczeniowy; typ innej adnotacji; tablicę jednego z wymienionych wcześniej typów.

Adnotacje nie mogą korzystać z typów sparametryzowanych (ich dokładne omówienie znajdujesię w rozdziale 14.). Nie mogą też zawierać klauzuli throws.

Poleć książkęKup książkę

Page 54: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

282 Cz I J zyk Java

Poleć książkęKup książkę

Page 55: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

SkorowidzA

Abstract Window Toolkit,Patrz: AWT

abstrakcja, 46adnotacja, 265, 444, 631

@Deprecated, 274, 275@Documented, 274@EmptyOK, 276, 277@FunctionalInterface, 274,

275@Inherited, 274, 275@MaxLen, 276@Native, 274@NotZeroLen, 276@Override, 274, 275@Recommended, 276, 277@Repeatable, 274, 279, 280@Retention, 274@SafeVarargs, 274, 275@SuppressWarnings, 274,

275@Target, 274@TypeAnno, 276@Unique, 276@What, 276, 277deklaracji, 265deklaracji metody, 278dziedziczenie, 281jednoelementowa, 272odczytywanie, 266, 269pola, 279pomijanie, 266powtarzalna, 279, 280

strategia zachowywania, 266typu, 265, 275, 276, 278

referencji this, 276tworzenie, 265wartość domyślna, 271wbudowana, 274znacznikowa, 272

adresinternetowy, Patrz: domenaIP, 659, 894URI, 1087URL, 39, 652, 658, 665, 679,

680, 1077, 1078, 1087,1088składniki, 653

akcelerator, 957, 970, 1041, 1049akcja, 967, 968algorytm, 448, 490

round-robin, 227analizator leksykalny, 513API, 313, 349, 567

dat i czasu, 897strumieni, 42, 855, 856, 877

aplet, 35, 36, 37, 52, 124, 290,298, 300, 649, 663, 664, 710,880

architektura, 667budowa, 667, 668, 670dane wejściowe, 679dane wyjściowe, 671, 672,

681, 713definiowane, 298kolor tła, 670kontekst graficzny, 672

lokalny, 665na bazie biblioteki Swing,

917podpis cyfrowy, 299, 665przeglądarka,

Patrz: appletvieweruruchamianie, 299wdrażanie, 664zniszczenie, 665

aplikacjaJavaFX, 984klient-serwer, 891, 893na bazie biblioteki Swing, 910uruchomieniowa, 51

appletviewer, 664, 710architektura

model-delegacja, 908z odrębnym modelem,

Patrz: architekturamodel-delegacja

architektura model-widok--kontroler, Patrz: MVC

argumentwiersza poleceń, 159wyrażenie lambda, 357zmienna liczba,

Patrz: varargsARM, 295, 443asercja, 306, 308automatic resource

management, Patrz: ARMAWT, 298, 663, 683, 685, 709,

712, 741, 905komponent ciężki, 906

Poleć książkęKup książkę

Page 56: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1106 Java. Kompendium programisty

Bbasic multilingual plane,

Patrz: BMPbaza danych, 510, 1077bezpieczeństwo, 36, 37, 46, 439,

449, 880, 1077biblioteka, 42

API, Patrz: APIAWT, Patrz: AWTklas, 60Swing, 663, 685, 709, 741,

905, 906GUI, 908hierarchia zawierania,

Patrz: hierarchiazawierania

menu, Patrz: menuPLAF, Patrz: PLAFrysowanie, 919, 920

tworzenie, 182blok

finally, 209, 218, 576kodu, Patrz: kod bloktry, 209, 211, 216, 218

blokada, 835, 836StampedLock, 837wielobieżna, 836

BMP, 413branch node, Patrz: węzeł gałęzibufor, 612

bajtowy, 640ByteBuffer, 621ograniczenie, 612pojemność, 612pozycja, 612tworzenie, 622

Cciało

blokowe, 354wyrażeniowe, 354

closure, Patrz: domknięciecode point, Patrz: punkt

kodowyCommon Gateway Interface,

Patrz: interfejs CGIcompact profile, Patrz: profil

kompaktowy

concurrency utilities, Patrz:programowanie współbieżnenarzędzia

czas, 447, 519, 521, 524, 654,879, 881, 896, 897, 898

formatowanie, 541, 896,899, 900

Greenwich, 525letni, 525strefa, 525, 897uniwersalny, 525zimowy, 525

czcionka, 711, 729, 734, 995dostępna, 730rodzina, 729tworzenie, 731

Ddane

konwersja formatu, 536, 537sterujące dostępem do

kodu, 45wejściowe, 551, 569

buforowanie, 600odczyt, 549wzorzec, 558

wyjściowe, 569wyrównywanie, 545

data, 447, 519, 521, 524, 654,879, 881, 894, 896, 897, 898

formatowanie, 540, 896,899, 900

kalendarz gregoriański, 524,525

datagram, 646, 659deadlock, Patrz: zakleszczeniedefault method, Patrz: metoda

domyślnadekoder, 614delegacja

interfejsu użytkownika, 908demon, Patrz: wątek demondeserializacja, 605, 606, 608, 893divide-and-conquer, Patrz:

strategia dziel i zwyciężajdokończenie, Patrz: metoda

finalizedomena, 646, 647, 1089domknięcie, 349drukowanie, 880

drzewo, 448, 464, 943, 1029katalogów, 636ścieżka, 1029

dyrektywa #define, 201dziecko, 1029dziedziczenie, 46, 47, 49, 165,

167, 168, 180, 184blokowanie, 184hierarchia, 166, 176, 180

wielopoziomowa, 173po interfejsie, 202wielokrotne, 206

dziennik, 567

Eedytor tekstu, 288egzekutor, 812, 830encapsulation, Patrz:

hermetyzacjaenumeration, Patrz: wyliczenieetykieta, 118, 119, 742, 743, 923,

988ekranowa, 959, 964, 1038ikona, 924obraz, 1001tekst, 924

event filter, Patrz: zdarzenie filtrextension method, Patrz:

metoda rozszerzenia

Ffinalizacja, Patrz: metoda

finalizeflat map, Patrz: mapa płaskaformat

GIF, 787JPEG, 787PNG, 788

frameworkCollections, 112, 116, 260,

315, 367, 447, 448, 449,450, 490, 813

Fork/Join, 42, 226, 811, 812,830, 839, 843, 845, 852

GUI, Patrz: GUINIO, Patrz: NIO

Frank Ed, 33functional interface,

Patrz: interfejs funkcyjny

Poleć książkęKup książkę

Page 57: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1107

funkcja, 47mieszająca, 462trygonometryczna, 64, 429

hiperboliczna, 430odwrotna, 429

wykładnicza, 430zaokrągleń, 430, 431

GGaussa rozkład, 529Glassfish, 1078głodzenie zasobów, 576gniazdo, 645, 658

Berkeley, 645numerowane,

Patrz: port protokołuTCP/IP, 649

Gosling James, 33Graphical User Interface,

Patrz: GUIgrupa dyskusyjna, 646GUI, 298, 663, 683, 741, 880,

905, 1071biblioteki Swing, 908tworzenie, 709

Hhasło, 759hermetyzacja, 46, 47, 49, 123,

137, 149, 170hierarchia zawierania, 908HotSpot, 37HSB, 726

Iidentyfikator, 58

URI, 658import statyczny, 309, 310inheritance,

Patrz: dziedziczenieinstrukcja

break, 102, 103, 113, 114,116, 117, 118z etykietą, 118, 119

catch, 211continue, 116, 120for, Patrz: pętla forgoto, 118

if, 54, 57, 99, 148zagnieżdżona, 100

if-else, 105if-else-if, 101, 102if-then-else, 97import, 192, 193import static, 310iteracyjna, 99, Patrz: pętlapackage, 187, 188pusta, 106return, 116, 121skoku, 99, 116sterująca, 54, 99switch, 99, 102, 103, 118, 252

wyrażenie sterujące, 102,104

zagnieżdżona, 105synchronized, 239throw, 216try, 211, 212

zagnieżdżanie, 212, 214,215

try-with-resources, 210, 296,297, 298, 444, 549, 575,577, 579, 613, 622, 651

wyboru, 99interfejs, 187, 194, 198, 254

Action, 967ActionListener, 696, 754,

915, 932, 956AdjustmentListener, 696,

756AnnotatedElement, 270,

280, 445Annotation, 265, 444Appendable, 399, 442, 590,

602AppletContext, 663, 679, 680AppletInitializer, 1071AppletStub, 663, 681AudioClip, 663, 681AutoCloseable, 291, 399,

443, 549, 555, 575, 578,579, 581, 590, 593, 602,613, 650

autor, 1100BaseStream, 856BasicFileAttributes, 619, 620BeanInfo, 1068, 1070, 1071BiConsumer, 564BiFunction, 564

BinaryOperator, 373, 564BiPredicate, 564BooleanSupplier, 565ButtonModel, 927Callable, 813, 832, 851CGI, 37, 1077ChangeListener, 1011Channel, 613CharSequence, 399, 442ClassDefinition, 444ClassFileTransformer, 444Cloneable, 399, 425, 515Closeable, 570, 576, 578,

579, 581, 590, 593, 602,613

Collection, 448, 450, 451,452, 858

Collector, 870Comparable, 332, 399, 442,

573, 615Comparator, 448, 450, 483,

484, 485ComponentListener, 696,

697Concurrent API, 811, 812,

813, 835Consumer, 373, 471, 565ContainerListener, 696, 697ContentHandlerFactory,

647CookiePolicy, 647CookieStore, 647Customizer, 1071, 1072DatagramSocketImplFactory,

647DataInput, 570, 594DataOutput, 570, 593, 594deklarowanie, 194, 195

zmienna, 195Deque, 448, 450, 455, 457DesignMode, 1071DosFileAttributes, 619DoubleBinaryOperator, 565DoubleConsumer, 565DoubleFunction, 565DoublePredicate, 565DoubleStream, 858DoubleSupplier, 565DoubleToIntFunction, 565DoubleToLongFunction, 565DoubleUnaryOperator, 565

Poleć książkęKup książkę

Page 58: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1108 Java. Kompendium programisty

instrukcjadziedziczenie,

Patrz: dziedziczeniepo interfejsie

Enumeration, 448, 499, 500EventHandler, 990EventListener, 448ExceptionListener, 1071Executor, 812, 830ExecutorService, 830Externalizable, 570, 606FileFilter, 570FilenameFilter, 570, 574,

575FileNameMap, 647FileVisitor, 636Flushable, 570, 576, 579,

581, 590, 593, 602FocusListener, 696, 697Formattable, 448Function, 373, 484funkcyjny, 42, 275, 350,

351, 564, 747, 881predefiniowany, 372referencja typu, 351, 353sparametryzowany, 356

Future, 813, 832HttpServletRequest, 1086HttpServletResponse, 1086,

1087, 1089HttpSession, 1086, 1087,

1088ImageConsumer, 797, 806ImageObserver, 790ImageProducer, 796, 800implementacja, 195, 196

częściowa, 197domyślna, 42, 195, 203

Instrumentation, 444IntBinaryOperator, 565IntConsumer, 565IntFunction, 565IntPredicate, 565IntStream, 858IntSupplier, 565IntToDoubleFunction, 565IntToLongFunction, 565IntUnaryOperator, 565ItemListener, 696, 697, 747,

748, 751, 929ItemSelectable, 690

Iterable, 399, 443, 450, 451,474, 615

Iterator, 448, 450, 466, 467,873

java.io.Externalizable, 1071java.io.Serializable, 1071KeyListener, 696, 697kolekcji, 450LayoutManager, 762List, 448, 450, 453, 458, 461,

500ListIterator, 448, 450, 466ListSelectionListener, 938ListSelectionModel, 946Lock, 813, 836LongBinaryOperator, 566LongConsumer, 566LongFunction, 566LongPredicate, 566LongStream, 858LongSupplier, 566LongToDoubleFunction,

566LongToIntFunction, 566LongUnaryOperator, 566Map, 448, 474, 475, 480, 504Map.Entry, 448, 474, 477,

479Member, 445, 888MenuListener, 951metoda, Patrz: metoda

interfejsuMouseListener, 696, 697,

699, 701, 962MouseMotionListener, 696,

698, 699, 701, 704MouseWheelListener, 696,

698, 699MutableTreeNode, 943nasłuchujący, 696

implementacja metod, 704NavigableMap, 448, 474,

477, 478, 481NavigableSet, 448, 450, 455,

464ObjDoubleConsumer, 566ObjectInput, 570ObjectInputValidation, 570ObjectOutput, 570, 606,

607, 608ObjectStreamConstants, 570

ObjIntConsumer, 566ObjLongConsumer, 566ObservableList, 988, 1017,

1021, 1022, 1043Observer, 448, 530, 531Path, 570, 615, 631PlugInFilter, 804PosixFileAttributes, 619Predicate, 373, 566PrimitiveIterator, 448, 449PrimitiveIterator.OfDouble,

448, 449PrimitiveIterator.OfInt, 448PrimitiveIterator.OfLong,

448PropertyChangeListener,

1070, 1071, 1072PropertyEditor, 1071ProtocolFamily, 647Queue, 448, 450, 455, 461,

465RandomAccess, 448, 450, 474Readable, 399, 443, 549ReadableByteChannel, 549Runnable, 228, 350, 399,

433, 533, 811, 851implementacja, 230

ScheduledExecutorService,830

SeekableByteChannel, 622,626

Serializable, 570, 606, 852Servlet, 1081, 1082ServletConfig, 1081, 1082ServletContext, 1081, 1083ServletRequest, 1081, 1083,

1084, 1085ServletResponse, 1081,

1083, 1084Set, 448, 450, 454, 462, 464,

466składowy, Patrz: interfejs

zagnieżdżonySocketImplFactory, 647SocketOption, 647SocketOptions, 647SortedList, 450SortedMap, 448, 474, 477SortedSet, 448, 454, 455, 464sparametryzowany, 315,

333, 334

Poleć książkęKup książkę

Page 59: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1109

Spliterator, 448, 450, 468,470, 472, 874

Spliterator.OfDouble, 448,,473

Spliterator.OfInt, 448,, 473Spliterator.OfLong, 448, 473Spliterator.OfPrimitive, 448,

473Stream, 856Supplier, 373, 566, 872TableColumnModel, 946TableModel, 946TextListener, 696, 698Thread.UncaughtException

Handler, 399, 444ToDoubleBiFunction, 566ToDoubleFunction, 566,

869Toggle, 1005, 1008ToIntBiFunction, 566ToIntFunction, 566ToLongBiFunction, 566ToLongFunction, 566TreeExpansionListener, 943TreeModelListener, 943TreeNode, 943TreeSelectionEvent, 943TreeSelectionListener, 943Type, 445UnaryOperator, 373, 566URLStreamHandlerFactory,

647użytkownika

delegacja, Patrz: delegacjainterfejsu użytkownika

graficzny, 43, 60, Patrz:GUI

VetoableChangeListener,1070, 1071, 1072

Visibility, 1071Watchable, 615WindowFocusListener, 696,

698WindowListener, 696, 698,

714zagnieżdżony, 197zmienna, Patrz: zmienna

interfejsureferencyjna, Patrz:

zmienna referencyjnainterfejsu

Internet Protocol,Patrz: protokół IP

interpreter kodu bajtowego, 36introspekcja, 1068, Patrz:

refleksjaiterator, 448, 450, 451, 466, 468,

491, 502, 873mapy, 474PrimitiveIterator, 873PrimitiveIterator.OfDouble,

873PrimitiveIterator.OfInt, 873PrimitiveIterator.OfLong,

873tryAdvance, 874

JJava, 33, 38

maszyna wirtualna,Patrz: JVM

numer wydania, 41wersja, 40, 41, 42, 50

Java Bean, 1067Java Beans, 888, 1067, 1071Java Native Interface, Patrz: JNIJava Network Launch Protocol,

Patrz: protokół JNLPjava.rmi.server, 880JavaFX, 709, 741, 905, 981, 1064

efekt, 1033, 1036, 1064Bloom, 1034BoxBlur, 1034DropShadow, 1034Glow, 1034InnerShadow, 1034Lighting, 1034Reflection, 1034

kontrolka, Patrz: kontrolkaJavaFX

menu, 1041, 1042, 1045,1051, 1053

pasek narzędzi, 1057program, 987transformacja, 1033, 1035,

1036, 1064zdarzenie, 990

JavaFX Script, 982jednostka kompilacji, 50język

asemblerowy, 32, 33BASIC, 32

BCPL, 32C, 31, 32

funkcja, Patrz: funkcjaC#, 35C++, 31, 33FORTRAN, 32, 33FXML, 982Java, Patrz: JavaLDML, Patrz: LDMLOak, 33Pascal, 32proceduralny, 45strukturalny, Patrz:

programowaniestrukturalne

JNI, 304Joy Bill, 34JVM, 36, 37, 444

Kkanał, 611, 612, 613, 621, 880

bajtowy, 614FileChannel, 614SeekableByteChannel, 614SocketChannel, 614w wersjach sprzed JDK 7,

638katalog, 571, 573, 617, 633, 637

bazowydokumentu, 679kodu, 679

drzewo, Patrz: drzewokatalogów

tworzenie, 575Kerninghan Brian, 32klasa, 47, 48, 123, 124, 128

AbstractAction, 967AbstractButton, 926, 950AbstractCollection, 447, 458AbstractList, 447, 458, 500AbstractMap, 447, 479, 481AbstractQueue, 447, 458AbstractSequentialList, 447,

458, 461AbstractSet, 447, 458abstrakcyjna, 181, 182, 183,

197AccessibleObject, 888ActionEvent, 686, 695, 754,

777, 915, 927

Poleć książkęKup książkę

Page 60: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1110 Java. Kompendium programisty

klasaadaptera, 704

ComponentAdapter, 704ContainerAdapter, 704FocusAdapter, 704KeyAdapter, 704MouseAdapter, 704MouseMotionAdapter,

704WindowAdapter, 704

addElement, 500AdjustmentEvent, 686, 687,

695, 756Appendable, 539Applet, 663, 664, 665, 666,

701Application, 983, 984AreaAveragingScaleFilter,

800ArithmeticException, 211Array, 888ArrayDeque, 447, 458, 465ArrayList, 447, 458, 459, 474,

500Arrays, 447, 495AtomicInteger, 813, 838AtomicLong, 813, 838AudioClip, 665, 666, 680Authenticator, 647autor, 1100AWTEvent, 686, 710AWTEventMulticaster, 710Base64, 447, 563bazowa, 165, 166

konstruktor, 170sparametryzowana, 337

BeanDescriptor, 1072BeanInfo, 1070, 1073Beans, 1072biblioteka, Patrz: biblioteka

klasBitSet, 447, 514, 516Blur, 808Boolean, 259, 263, 399, 414,

415BorderFactory, 922BorderLayout, 710, 764BorderPane, 1047Buffer, 612BufferedInputStream, 570,

586

BufferedOutputStream, 570,587

BufferedReader, 286, 287,288, 570, 600

BufferedWriter, 570, 601Button, 710, 744, 991, 1003ButtonBase, 1014ButtonGroup, 923Byte, 259, 399, 403, 404ByteArrayInputStream, 570,

583ByteArrayOutputStream,

570, 584ByteBuffer, 613, 622CacheRequest, 647CacheResponse, 647Calendar, 447, 519, 521, 522,

528, 541, 897stałe, 523

CallSite, 444Canvas, 710, 713, 995CardLayout, 710, 768Character, 259, 263, 399,

411, 413Character.Subset, 399Character.UnicodeBlock,

399CharArrayReader, 570, 598CharArrayWriter, 570, 599CharBuffer, 613Checkbox, 710, 747CheckBox, 1014CheckboxGroup, 710, 749CheckboxMenuItem, 710,

775, 776CheckMenuItem, 1042, 1052Choice, 710Class, 399, 426, 428ClassLoader, 399, 429ClassValue, 399, 442Collection, 448Collections, 447, 490, 494Collectors, 870Color, 670, 710, 725, 727ColorsBeanInfo, 1076ComboBox, 1022Compiler, 399, 433Component, 665, 672, 701,

710, 712, 742, 908ComponentEvent, 686, 688,

694

ConcurrentHashMap, 813ConcurrentLinkedQueue,

813Console, 603Constructor, 888Container, 665, 710, 712,

762, 908ContainerEvent, 686, 688ContentHandler, 647ContextMenu, 1042, 1053Contrast, 806Control, 1038Convolver, 806Cookie, 1086, 1089CookieHandler, 647CookieManager, 647CopyOnWriteArraylist, 813CountDownLatch, 812, 813,

818CountedCompleter, 840CropImageFilter, 800Currency, 447, 535Cursor, 710CyclicBarrier, 812, 813, 819,

823DatagramPacket, 647, 659,

660, 661DatagramSocket, 614, 647,

659, 660DatagramSocketImpl, 647DataInputStream, 570, 593DataOutputStream, 570, 593Date, 447, 519, 541DateFormat, 519, 528, 894DateTimeFormatter, 899DefaultPersistenceDelegate,

1072definicja, 52deklaracja, 123destruktor, 136Dialog, 710Dictionary, 447, 448, 499,

504, 505Dimension, 710double, 259Double, 399, 400, 402, 403DoubleAccumulator, 838DoubleAdder, 838DoubleBuffer, 613DoubleSummaryStatistics,

447, 563

Poleć książkęKup książkę

Page 61: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1111

egzemplarz, 47, 133,Patrz też: obiekt

Encoder, 1072Enum, 399EnumMap, 447, 479, 483EnumSet, 447, 458, 466Error, 210, 222Event, 990EventHandler, 1072EventListener, 563EventListenerProxy, 447, 563EventObject, 447, 563, 685,

686EventQueue, 710EventSetDescriptor, 1070,

1072, 1073Exception, 210, 214, 220, 222Exchanger, 812, 813, 821, 822Executable, 888Executors, 812ExecutorService, 812Expression, 1072FeatureDescriptor, 1072Field, 888File, 570FileChannel, 640FileDescriptor, 570FileDialog, 710, 784FileInputStream, 290, 291,

570, 579, 614FileOutputStream, 290, 291,

570, 581, 608, 614FilePermission, 570FileReader, 570, 596Files, 570, 614, 615FileStore, 620FileSystem, 620FileSystems, 620FileWriter, 570, 597FilteredImageSource, 796FilterInputStream, 570, 585FilterOutputStream, 570, 585FilterReader, 570FilterWriter, 570Float, 259, 399, 400, 401, 403FloatBuffer, 613FlowLayout, 710, 762FocusEvent, 686, 689Font, 711, 729FontMetrics, 711, 734, 735

ForkJoinPool, 813, 830, 839,840, 841, 850, 852wykradanie zadań, 842

ForkJoinTask, 813, 839, 840,841, 842, 843, 850, 851, 852

Formattable, 563FormattableFlags, 447, 563Formatter, 447, 513, 536,

537, 538, 539, 540, 542,543, 544, 545, 546, 548,549, 591

Frame, 711, 712, 713, 714GenericServlet, 1080, 1082,

1083GetField, 608GraphicContext, 998Graphics, 711, 722Graphics2D, 722GraphicsContext, 994GraphicsDevice, 711GraphicsEnvironment, 711,

730Grayscale, 804GregorianCalendar, 447,

524, 528, 897GridBagConstraints, 711,

771, 772GridBagLayout, 711, 771,

773GridLayout, 711, 767HashMap, 447, 479, 480,

481, 483HashSet, 447, 458, 462, 463Hashtable, 447, 458, 499,

505, 506hierarchia, 48, 49, 337,

Patrz: dziedziczeniehierarchia

HttpCookie, 647HttpServlet, 1086, 1090HttpSession, 1095HttpURLConnection, 647,

656IdentityHashMap, 447, 479,

483IDN, 647Image, 665, 666, 680, 711,

787, 788, 999ImageFilter, 800ImageIcon, 923, 924ImageView, 999, 1001

IndexedPropertyChangeEvent, 1072

IndexedPropertyDescriptor,1072

Inet4Address, 647Inet6Address, 647InetAddress, 647, 648, 649,

661InetSocketAddress, 647, 659InheritableThreadLocal,

399, 439InputEvent, 686, 689, 691InputStream, 284, 570, 577,

578InputStreamReader, 570Insets, 711, 766IntBuffer, 613Integer, 259, 399, 403, 406,

407InterfaceAddress, 647IntrospectionException,

1072Introspector, 1072, 1073IntSummaryStatistics, 447,

563Invert, 805isTemporary, 689ItemEvent, 686, 690JApplet, 663, 909, 917JarURLConnection, 647java.io.File, 631java.lang.Enum, 256JavaFXSkel, 986JButton, 909, 923, 926, 927,

968JChecBoxMenuItem, 960,

968JCheckBox, 909, 923, 926,

929, 931, 968JCheckBoxMenuItem, 909,

950, 960, 961JColorChooser, 909JComboBox, 909, 923, 941JComponent, 908, 909, 923JDesktopPane, 909JDialog, 909, 977JEditorPane, 909JFileChooser, 909JFormattedTextField, 909,

977JFrame, 909

Poleć książkęKup książkę

Page 62: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1112 Java. Kompendium programisty

klasaJInternalFrame, 909JLabel, 909, 923JLayer, 909JLayeredPane, 909JList, 909, 923, 938JMenu, 909, 950, 951, 952JMenuBar, 909, 950, 951, 953JMenuItem, 909, 950, 951,

953, 968JOptionPane, 909, 977JPanel, 909JPasswordField, 909JPopupMenu, 909, 950, 962,

968JProgressBar, 909JRadioButton, 909, 923, 926,

929, 932, 968JRadioButtonMenuItem,

909, 950, 960, 961, 968JRootPane, 909JScrollBar, 909JScrollPane, 909, 923, 936,

938JSeparator, 909, 950JSlider, 909JSpinner, 909, 977JSplitPane, 909JTabbedPane, 909, 923, 934JTable, 909, 923, 945JTextArea, 909JTextComponent, 925JTextField, 909, 923, 925JTextPane, 909JToggleButton, 909, 923,

926, 929JToolBar, 909, 950, 965, 968JToolTip, 909JTree, 909, 923, 943JViewport, 909JWindow, 909KeyCombination, 1050KeyEvent, 686, 689, 691kolekcji, 458konstruktor, 127, 133, 134,

170domyślny, 134sparametryzowany, 134

Label, 711, 743, 988LineNumberInputStream,

570

LineNumberReader, 570LinkedHashMap, 447, 479,

482LinkedHashSet, 447, 458,

463LinkedList, 447, 458, 461, 473List, 711, 753ListResourceBundle, 447, 561ListView, 1017, 1020LoadedImage, 804LocalDate, 898, 899, 901LocalDateTime, 898, 899, 901Locale, 447, 527, 666

stałe, 527Locale.Builder, 528LocalTime, 898, 899, 901Long, 259, 399, 403, 408LongAccumulator, 838LongAdder, 838LongBuffer, 613LongSummaryStatistics, 447MappedByteBuffer, 613Matcher, 879, 882, 884Math, 309, 399, 429, 430, 432MediaTracker, 711, 793, 794MemoryImageSource, 796Menu, 711, 775, 1042, 1043MenuBar, 711, 775, 1042,

1043MenuComponent, 711MenuItem, 711, 775, 1042,

1044MenuShortcut, 711Method, 888MethodDescriptor, 1070,

1072, 1073MethodHandle, 444MethodType, 444Modifier, 888MouseEvent, 686, 689, 691,

693MouseEvents, 701MouseMotionAdapter, 704MouseWheelEvent, 686, 693MulticastSocket, 647nadrzędna, 170, Patrz: klasa

bazowanazwa, 58NetPermission, 647NetworkInterface, 647Node, 983

Number, 399, 400Object, 185, 216, 240, 350,

399, 424ObjectInputStream, 570,

608ObjectInputStream.GetField,

570ObjectOutputStream, 570,

607, 608ObjectOutputStream.Put

Field, 570Objects, 447, 563ObjectStreamClass, 570ObjectStreamField, 570Observable, 447, 530, 531opakowująca, 400Optional, 447, 517, 518OptionalDouble, 447, 517,

519OptionalInt, 447, 517, 519OptionalLong, 447, 517, 519OutputStream, 284, 289,

570, 577, 578, 579OutputStreamWriter, 570Package, 399, 439, 440Panel, 665, 711, 712, 713Parameter, 888ParameterDescriptor, 1072PasswordAuthentication,

647Paths, 618Pattern, 879, 881, 884PersistenceDelegate, 1072Phaser, 812, 813, 823PipedInputStream, 570PipedOutputStream, 570PipedReader, 570PipedWriter, 570PixelGrabber, 797Platform, 1049pochodna, 173Point, 711Polygon, 711PopupControl, 1053PopupMenu, 711potomna, 165, 168, 177PrintJob, 711PrintStream, 549, 570, 590,

591PrintWriter, 289, 549, 570,

602

Poleć książkęKup książkę

Page 63: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1113

PriorityQueue, 447, 458, 465Process, 399, 415, 416ProcessBuilder, 399, 415,

419, 420ProcessBuilder.Redirect,

399Properties, 447, 448, 499,

508, 509PropertyChangeEvent, 1072PropertyChangeListenerPro

xy, 1072PropertyChangeSupport,

1072PropertyDescriptor, 1070,

1072, 1073PropertyEditorManager,

1072PropertyEditorSupport,

1072PropertyPermission, 447,

563PropertyResourceBundle,

447, 561PropertyVetoException,

1072Proxy, 647, 888ProxySelector, 647przestarzała, 1100pseudolosowa, 528PushbackInputStream, 570,

586, 588, 589PushbackReader, 570, 601RadioButton, 1008RadioMenuItem, 1042, 1052Random, 447, 528RandomAccessFile, 570,

594, 614Reader, 284, 286, 570, 577,

595Rectangle, 711RecursiveAction, 813, 839,

840, 841, 843, 848RecursiveTask, 813, 839,

840, 841, 843, 848ReflectPermission, 888ReplicateScaleFilter, 800ResourceBundle, 447, 559,

561ResourceBundle.Control,

560ResponseCache, 647

RGBImageFilter, 801Robot, 711Runtime, 399, 415, 416, 417RuntimeException, 210,

219, 222RuntimePermission, 399,

439Scanner, 447, 513, 549, 551,

552, 553, 554, 555, 557,558

Scene, 983ScheduledThreadPool

Executor, 830Scrollbar, 711, 755ScrollPane, 711, 1026SecureCacheResponse, 647SecurityManager, 399, 439Semaphore, 812, 813SeparatorMenuItem, 1042,

1044SequenceInputStream, 570,

589SerializablePermission, 570ServerSocket, 614, 647, 649,

658ServiceLoader, 447, 563Servlet API, 1081ServletException, 1082ServletInputStream, 1082,

1083ServletOutputStream, 1082,

1085Short, 259, 399, 403, 405ShortBuffer, 613SimpleBeanInfo, 1070, 1072,

1076SimpleDateFormat, 896SimpleFormat, 528SimpleTimeZone, 447, 525,

526składowa, 47

prywatna, 167, 170Socket, 614, 647, 649, 650,

651SocketAddress, 647SocketImpl, 647SocketPermission, 647sparametryzowana, 315,

316, 317, 321, 337, 340,366, 369bez argumentów typu, 335

rzutowanie, 342składnia, 322

SplitableRandom, 447Spliterators, 447Stack, 137, 150, 198, 447,

448, 458, 499, 503StackTraceElement, 399,

439, 441Stage, 983StandardSocketOption, 647Statement, 1072stosu, Patrz: stosStreamTokenizer, 570StrictMath, 399, 433String, 52, 69, 80, 102, 139,

157, 158, 216, 377, 382,383, 384, 391, 399, 442konstruktor, 377

StringBuffer, 391, 393, 397,399, 442

StringBufferInputStream,570

StringBuilder, 398, 399, 442StringJoiner, 447, 563StringReader, 570StringTokenizer, 447, 513,

514StringWriter, 570System, 53, 60, 399, 421, 422SystemColor, 711TextArea, 711, 760TextComponent, 711TextEvent, 686, 694, 695TextField, 711, 758, 1024Thread, 228, 229, 399, 433,

434, 533, 811rozszerzanie, 232

ThreadGroup, 433, 435, 444ThreadLocal, 399, 439ThreadPoolExecutor, 830Throwable, 210, 212, 216,

220, 348, 399, 439Timer, 447, 533, 534, 535TimerTask, 447, 533, 535TimeZone, 447, 525ToggleButton, 1005, 1006ToolBar, 1057Toolkit, 711Transform, 1035TreeMap, 447, 479, 481, 482,

483

Poleć książkęKup książkę

Page 64: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1114 Java. Kompendium programisty

klasaTreeSet, 458, 464, 483TreeView, 1029UnavailableException, 1082URI, 647, 658URL, 647, 653, 679, 680URLClassLoader, 647URLConnection, 647, 654URLDecoder, 647URLEncoder, 647URLPermission, 647URLStreamHandler, 647UUID, 447, 563Vector, 447, 448, 458, 474,

499, 500VetoableChangeListener

Proxy, 1072VetoableChangeSupport,

1072Void, 399, 415WeakHashMap, 447, 479,

480WebView, 1064wewnętrzna, 155, 157, 705

anonimowa, 157, 707Window, 711, 713WindowEvent, 686, 694,

695Writer, 284, 570, 577wystąpienie,

Patrz: egzemplarzXMLDecoder, 1072XMLEncoder, 1072zagnieżdżona, 155zewnętrzna, 155zmienna, Patrz: zmienna

składowa, Patrz: zmiennaskładowa

znaków, 886klauzula

case, 103, 252catch, 211, 212, 223

wielokrotna, 213default, 102, 103extends, 265finally, 297implements, 195throws, 217, Patrz też: słowo

kluczowe throwsklawiatura, 689, 695, 697, 701

kodbajtowy, 36blok, 56, 99działający na danych, 45rdzenny, 303spaghetti, 32złośliwy, 36

koder, 614kolejka, 455

priorytetowa, 465kolekcja, 112, 116, 315, 367, 449,

473, 495, 858element, 451modyfikowalna, 450niemodyfikowalna, 450tworzenie, 870, 872widok, 449wielowątkowa, 812

kolor, 725bieżący, 727HSB, 726jasność, 726nasycenie, 726RGB, 726, 727zarządzanie, 710

komentarz, 51dokumentacyjny, 52, 58,

1099, 1103jednowierszowy, 52wielowierszowy, 51

komparator, 485, 487, 490kompilator, 34, 48, 50

javac, 51JIT, 37, 39

komponent, 908lekki, 923

komunikacjamiędzyprocesowa, 225, 240międzywątkowa, 225, 240

konsola, 53, 286, 288konstruktor, 888

klasy, 127, Patrz: klasakonstruktor

kolejność, 176przeciążanie, 141, 142, 311referencja, 368, 369, 372sparametryzowany, 332

kontekst graficzny, 722kontener, 908, 909

JApplet, 909JDialog, 909

JFrame, 909JPanel, 909JWindow, 909lekki, 909, 936najwyższego poziomu, 908,

909, 917panel, Patrz: panel

serwletów, Patrz: serwerserwletów

kontrola dostępu, 149, 150, 167,189

kontrolka, 741, 742dezaktywacja, 1039dodawanie, 742edycji, 758etykiety, 988HTMLEditor, 1026JavaFX, 999listy, 1017, 1020

kombinowanej, 1022odpowiednik, 906paska przewijania, 711PasswordField, 1026pola

tekstowego, 711wyboru, 710, 1014

przełącznika, 1005przycisku, 710, 991przycisku opcji, 1008ScrollPane, 1026, 1027tekstowa, 1024TextArea, 1026TreeView, 1029zdarzenie, 742

korzeń, 983, 1029krzywa

Gaussa, 529gładka, 529

kursor w postaci bitmapy, 710kwantyfikator, 884

Llambda wyrażeniowa, 354LDML, 528liczba

całkowita, 66bit, 87kodowanie, 87, 88ze znakiem, 62, 87, 88

dziesiętna, 66

Poleć książkęKup książkę

Page 65: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1115

formatowanie, 540losowa, 529ósemkowa, 66pseudolosowa, 447, 528

ziarno, 528rzeczywista, Patrz: liczba

zmiennoprzecinkowaszesnastkowa, 66, 68zmiennoprzecinkowa, 63,

67, 68notacja, 67, 68pojedynczej precyzji, 64

Lindholm Tim, 34lista, 448, 495, 510, 742, 753,

938, 939, 1017kombinowana, 941, 1022

edycja, 1023obsługa zdarzeń, 754rozwijana, 710, 742, 751

obsługa zdarzeń, 751wielokrotnego wyboru, 1021

liść, 983, 1029literał, 58, 882

tekstowy, 379Locale Data Markup Language,

Patrz: LDML

łańcuchprzydzielania zdarzeń, 991znaków, 69, 80, 102, 104,

157, 377, 379, 382, 387długość, 379formatowanie, 539konkatenacja, 380, 388, 390konkatenacja z innymi

typami danych, 380konwersja, 381wejściowy sformatowany,

513

Mmapa, 449, 476, 477, 478, 482,

483, 492iteracja, 482płaska, 870posortowana, 477usuwanie najstarszych

wpisów, 483

maszyna wirtualna Javy,Patrz: JVM

mechanizmdekodujący, Patrz: dekoderkodujący, Patrz: koderkonwersji formatów, Patrz:

dane konwersja formatuobsługi zdarzeń, Patrz:

zdarzenie obsługamechanizm odzyskiwania

pamięci, 136, 416, 421, 445memory leak, Patrz: wyciek

pamięcimenedżer układu graficznego,

712, 741, 762, 916CardLayout, 768domyślny, Patrz: klasa

FlowLayoutFlowPane, 986GridLayout, 767LayoutManager, 804

menu, 107, 775, 949, 951, 952,1041, 1043, 1051

dodawanie obrazów, 959element, 776główne, 741, 953

tworzenie, 1045kontekstowe, Patrz: menu

podręczneobsługa zdarzeń, 777pasek, Patrz: pasek menupodręczne, 949, 950, 962,

1042, 1053wyświetlanie, 962

rozwijane, 711separator, 1042, 1044standardowe, 949tworzenie, 953

metadane, Patrz: adnotacjemetoda, 47, 124, 128

abs, 431abstrakcyjna, 182, 350accept, 471, 564, 574, 658actionPerformed, 696, 744,

746, 956, 967, 969activeCount, 434add, 451, 452, 453, 454, 462,

468, 521, 872, 951, 952addAll, 451, 452, 453, 454,

490, 872addCookie, 1088

addElement, 501addEventFilter, 991addExact, 432addFirst, 457, 458, 461, 873addLast, 457, 458, 461addListener, 1011, 1030addMatch, 877addObserver, 530addSeparator, 952addShutdownHook, 417addSuppressed, 220addTListener, 1069adjustmentValueChanged,

696after, 520, 521allocate, 622, 623and, 515andNot, 515annotationType, 265anyMatch, 877append, 394, 442, 596apply, 564, 566applyAsDouble, 565, 566,

869applyAsInt, 565, 566applyAsLong, 565, 566argument, 128, 131array, 612arraycopy, 421, 423arrayOffset, 612arrive, 824arriveAndAwaitAdvance,

824, 829arriveAndDeregister, 824asLifoQueue, 490asList, 495available, 578, 608, 609availableProcessors, 848average, 323await, 818, 820, 836before, 520, 521binarySearch, 490, 495bitCount, 406, 408boolean, 503booleanValue, 415bulkRegister, 829ByteBuffer, 613bytesWidth, 735byteValue, 259, 264, 401,

404, 405, 406cancel, 533, 534, 535, 850

Poleć książkęKup książkę

Page 66: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1116 Java. Kompendium programisty

metodacapacity, 393, 501, 612cardinality, 515ceil, 431ceiling, 456ceilingEntry, 478ceilingKey, 478Character.Subset, 413Character.UnicodeBlock,

413characteristics, 471, 472charAt, 158, 382, 393, 442charCount, 414chars, 442charWidth, 735checkAccess, 434checkedCollection, 490checkedList, 490, 494checkedMap, 491, 494checkedQueue, 491checkedSet, 494checkedSortedMap, 491checkedSortedSet, 491checkID, 794ciało, 52Class, 424clear, 451, 452, 475, 506,

515, 521, 612clearCache, 560clearChanged, 530clearProperty, 421clone, 425, 501, 506, 515,

520, 526, 1089Clone, 185close, 291, 443, 549, 575,

576, 578, 579, 582, 584,595, 596, 598, 606, 607,608, 609, 651, 660, 856

codePointAt, 413, 414codePointBefore, 414codePoints, 442collect, 857, 870command, 420commonPool, 842comparator, 454, 465, 477compare, 401, 404, 405, 406,

408, 415, 483, 485compareAndSet, 813, 838compareTo, 256, 385, 401,

402, 404, 405, 406, 408,413, 415, 441, 442, 520, 573

compareUnsigned, 406, 408comparing, 485comparingByKey, 479comparingByValue, 479compile, 881componentAdded, 697componentRemoved, 697compute, 475, 841computeIfAbsent, 475computeIfPresent, 475concat, 388connect, 650console, 421contains, 451, 452, 462, 501,

506containsAll, 451, 452containsHeader, 1088containsKey, 475, 506, 560containsValue, 475, 506convert, 835copyInto, 501copyOf, 466, 495copyOfRange, 496copySign, 432count, 857, 877counter, 531countObservers, 530countTokens, 514createDirectory, 617createFile, 617createImage, 788, 796creationTime, 619currentThread, 434currentTimeMillis, 421, 422decode, 404, 405, 406, 408,

730decrementAndGet, 813, 838decrementExact, 432deepEquals, 496deepHashCode, 498deepToString, 498delete, 395, 572, 617deleteCharAt, 395deleteObserver, 530deleteObservers, 530deleteOnExit, 572descendingIterator, 456,

457, 458descendingKeySet, 478descendingMap, 478

destroy, 416, 419, 665, 667,669, 1078, 1082

destroyForcibly, 416digit, 413directory, 420disjoint, 491distinct, 877divideUnsigned, 406, 408doDelete, 1090doGet, 1090doHead, 1090domyślna, 203, 204, 205,

206, 351doOptions, 1090doPost, 1090doPut, 1090doTrace, 1090doubles, 530doubleToLongBits, 402doubleValue, 259, 260, 323,

400, 401, 402, 404, 406, 408dowiązanie

późne, 184wczesne, 184

drawArc, 723drawImage, 791, 793drawLine, 722, 919drawOval, 723drawPolygon, 723drawRect, 722, 919drawString, 664, 670, 734dumpStack, 434element, 455, 456elementAt, 500, 501elements, 504, 505, 506empty, 503, 518emptyList, 491emptyListIterator, 491emptyNavigableMap, 491emptyNavigableSet, 491emptySortedMap, 492emptySortedSet, 492encodeRedirectURL, 1088encodeURL, 1088end, 882endsWith, 616ensureCapacity, 393, 460,

501entrySet, 475, 481, 507enumerate, 434enumeration, 492

Poleć książkęKup książkę

Page 67: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1117

environment, 420equals, 158, 185, 265, 350,

383, 384, 401, 402, 404,405, 406, 413, 415, 424,441, 451, 452, 475, 484,496, 505, 515, 518, 520,522, 649, 730

equalsIgnoreCase, 383estimateSize, 471exchange, 821exec, 415, 417, 418, 419execute, 842, 850exists, 571, 617, 632exit, 417, 421exitValue, 416, 419extends, 467, 518fabryczna, 647fileKey, 619fill, 496fillArc, 723fillInStackTrace, 220fillOval, 995fillPolygon, 723fillRect, 722, 995fillText, 995filter, 518, 804, 857, 858, 861filterRGB, 804finalize, 136, 185, 422, 424find, 615

dopasowanie oszczędne,885

dopasowanie zachłanne,885

findInLine, 558findWithinHorizon, 559fire, 1008, 1011first, 454firstElement, 501firstEntry, 478firstKey, 477flatMap, 518, 870flatMapToInt, 870flatMapToLong, 870flip, 515, 612, 627floatToIntBits, 401floatToRawIntBits, 401floatValue, 259, 401, 404,

406, 408floor, 431floorDiv, 431floorEntry, 478

floorKey, 478floorMod, 431flush, 538, 579, 587, 596,

604, 606, 607focusGained, 697focusLost, 697forceTermination, 829forDigit, 413forEach, 475, 857, 866forEachOrdered, 866forEachRemaining, 468,

471, 875fork, 840format, 538, 592, 603, 604forName, 427freeMemory, 416, 417from, 520gc, 416get, 453, 505, 515, 518, 522,

613, 618, 621, 838getAccessibleContext, 665getActionCommand, 745,

754, 933, 956getActiveThreadCount, 852getAddListenerMethod,

1073getAddress, 649, 661getAdjustable, 687getAdjustmentType, 756getAllByName, 648getAndSet, 813, 838getAnnotation, 267, 270,

279, 440getAnnotations, 269, 270,

427, 440getAnnotationsByType, 270,

280, 281getApplet, 680getAppletContext, 665, 679getAppletInfo, 665getApplets, 680getArrivedParties, 829getAsBoolean, 565getAscent, 735getAsInt, 565getAttribute, 1083, 1084,

1088, 1095getAttributeNames, 1088,

1095getAudioClip, 665, 680, 681getAuthType, 1087

getAvailableCurrencies, 536getAvailableFontFamilyNa

mes, 730getAvailableIDs, 526getBackground, 670getBaseBundleName, 560getBeanInfo, 1073getBlue, 727getBoolean, 415getBundle, 560getButton, 692getByAddress, 648getByName, 648getBytes, 382, 581getCause, 220, 222getChannel, 614, 638getCharacterEncoding, 1084getChars, 382, 394getChildren, 988, 1030getClass, 185, 266getClasses, 427getClassLoader, 427getClassName, 441getClickCount, 692getCodeBase, 665, 679getComment, 1089getCommonPoolParallelism,

848getComparator, 471getComponent, 688, 964getConstructor, 267getConstructors, 427, 888getContainer, 688getContentLength, 654,

1084getContentLengthLong, 654getContentPane, 913, 916getContents, 561getContentType, 654, 655,

1084getCookies, 1087, 1094getCreationTime, 1088getCurrencyCode, 536getData, 661getDate, 654, 655getDateHeader, 1087getDateInstance, 894getDeclaredAnnotation,

270, 440getDeclaredAnnotations,

270, 427

Poleć książkęKup książkę

Page 68: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1118 Java. Kompendium programisty

metodagetDeclaredAnnotationsBy

Type, 270, 280, 427, 440getDeclaredConstructors,

427getDeclaredFields, 427getDeclaredMethods, 427getDeclaringClass, 441getDefault, 526getDefaultFractionDigits,

536getDescent, 735getDirectionality, 413getDisplayName, 536getDocumentBase, 665, 679getDomain, 1089getDouble, 519getenv, 421getErrorStream, 416getEventSetDescriptors, 1076getExactSizeIfKnown, 471getExpiration, 654getExponent, 432getField, 267getFields, 427, 888getFileAttributeView, 620getFileName, 441, 616getFirst, 457, 461getFollowRedirects, 656getFont, 730, 733, 995getFontName, 730getForeground, 670getForkJoinTaskTag, 852getFreeSpace, 572getGraphics, 672, 722getGraphicsContext2D, 995getGreen, 727getHeader, 1087getHeaderField, 654, 655getHeaderFieldKey, 654getHeaderFields, 654, 655,

658getHeaderNames, 1087getHeight, 735getHostAddress, 649getHostName, 649getHvalue, 1027getId, 1088getID, 434, 686getImage, 665, 666, 680, 788getImplementationTitle, 440

getImplementationVendor,440

getImplementationVersion,440

getInetAddress, 650, 660getInitParameter, 1082getInitParameterNames,

1082getInputStream, 416, 419,

650, 654, 1084getInsets, 766, 920getInstance, 522, 536getInt, 519getInteger, 406getInterfaces, 428getIntHeader, 1087getItem, 690getItemCount, 751getItemSelectable, 690, 754getKey, 479, 481getKeys, 561getLabel, 744getLast, 457getLastAccessedTime, 1088getLastModified, 654, 1090getLeading, 735getLength, 661getLineNumber, 441getListenerType, 1073getLocale, 561, 666getLocalGraphicsEnviron

ment, 731getLocalHost, 648getLocalizedMessage, 220getLocalPort, 650, 660getLocationOnScreen, 693getLong, 408, 519getMaxAdvance, 735getMaxAge, 1089getMaxAscent, 735getMaxDescent, 735getMenuComponentCount,

952getMenuComponents, 952getMenus, 1043getMessage, 220getMethod, 267, 268, 428,

1073, 1087getMethodName, 441getMethods, 428, 888getMimeType, 1083

getModifiersEx, 690getName, 228, 230, 428, 434,

615, 616, 632, 730, 1073,1089

getNameCount, 615, 616getNumericCode, 536getObject, 561getOffset, 661getOppositeComponent, 689getOrDefault, 475getOutputStream, 416, 419,

650, 1084getPackage, 440getPackages, 440getParallelism, 848getParameter, 666, 676, 677,

1084getParameterInfo, 666getParameterNames, 1084getParameterValues, 1084getParent, 571, 616, 632, 829getPath, 1089getPathInfo, 1087getPathTranslated, 1087getPoint, 692getPoolSize, 852getPort, 650, 660, 661getPriority, 228, 434getProperties, 421getProperty, 422, 508, 509getPropertyDescriptors, 1076getProtocol, 1084getQueryString, 1087getQueuedTaskCount, 852getRawOffset, 526getReader, 1084getRealPath, 1083getRed, 727getRemoteAddr, 1084getRemoteHost, 1084getRemoteUser, 1087getRemoveListenerMethod,

1073getRequestedSessionId,

1087getRequestMethod, 656getRequestURI, 1087getRequestURL, 1087getResponseCode, 656getResponseMessage, 656getRGB, 727

Poleć książkęKup książkę

Page 69: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1119

getRoot, 616getRuntime, 417getScheme, 1084getScript, 528getScrollType, 693getSecure, 1089getSecurityManager, 439getSelectedCheckbox, 749getSelectedIndex, 751, 753getSelectedIndexes, 753getSelectedItem, 751, 753,

941getSelectedItems, 753getSelectedText, 758getSelectionModel, 1030getServerInfo, 1083getServerName, 1084getServerPort, 1084getServletConfig, 1082getServletContext, 1082getServletInfo, 1082getServletName, 1082getServletPath, 1087getSession, 1087, 1095getSize, 725, 730getSource, 685, 933, 991getSpecificationTitle, 440getSpecificationVendor, 440getSpecificationVersion, 440getStackTrace, 220, 434, 439getState, 247, 434getStateChange, 691getStream, 680getStreamKeys, 680getString, 561getStringArray, 561getStyle, 730getSuperclass, 428getSuppressed, 220getSurplusQueuedTask

Count, 852getSymbol, 536getText, 743getTime, 520, 522getTimeZone, 522, 526getTotalSpace, 572getTransforms, 1035getUnarrivedParties, 829getUncaughtExceptionHan

dler, 434getUsableSpace, 572

getValue, 479, 481, 967, 1089getVersion, 1089getVvalue, 1027getWheelRotation, 693getWidths, 735getWindow, 695getWriter, 1084getX, 692getY, 692grabPixels, 797group, 620, 882handle, 993handleGetObject, 561hasArray, 612hasChanged, 530hasCharacteristics, 471, 472hashCode, 185, 265, 401,

402, 404, 405, 406, 408,413, 415, 424, 440, 441,452, 479, 505, 515, 518,520, 730

hasMoreElements, 499, 514hasMoreTokens, 514hasNext, 468, 471, 551, 873hasNextBigDecimal, 551hasNextBigInteger, 552hasNextBoolean, 552hasNextByte, 552hasNextInt, 552hasNextLong, 552hasNextShort, 552hasPrevious, 468hasRemaining, 612headMap, 477, 478headSet, 454higher, 456higherEntry, 478higherKey, 478highestOneBit, 406, 408holdsLock, 434HSBtoRGB, 726HTTP, 1087hypot, 432identityHashCode, 422IEEEremainder, 432ifPresent, 518imageUpdate, 790incrementExact, 432indexOf, 386, 453, 454, 500,

501indexOfSubList, 492

InetAddress, 648inheritedChannel, 422init, 666, 667, 668, 669, 670,

983, 986, 1078, 1082initCause, 220, 222insert, 395insertSeparator, 952instancyjna

referencja, 363interfejsu, 196interrupted, 434intersects, 515ints, 530intValue, 259, 260, 401, 405,

406, 408invalidate, 1088invoke, 842, 850invokeAll, 840, 848invokeAndWait, 918invokeLater, 918ioException, 538isAbsolute, 572, 616isActive, 666isAlive, 228, 234, 416, 434isAltDown, 690isAltGraphDown, 690isAnnotationPresent, 270,

272isArchive, 619isBmpCodePoint, 414isBold, 730isBound, 650, 660isCancelled, 851isClosed, 650isCompletedAbnormally,

851isCompletedNormally, 851isConnected, 650, 660isConstrained, 1073isControlDown, 690isDeamon, 434isDefined, 412isDigit, 412, 413isDirect, 612isDirectory, 617, 619isEditable, 758isEmpty, 452, 476, 505, 506,

515isEnabled, 776isExecutable, 617, 632isFile, 572

Poleć książkęKup książkę

Page 70: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1120 Java. Kompendium programisty

metodaisFinite, 401isHidden, 572, 617, 619, 632isHighSurrogate, 414isHttpOnly, 1089isIdentifierIgnorable, 412isIndeterminate, 1016isInfinite, 402, 403isInterface, 428isInterrupted, 434isISOControl, 412isItalic, 730isJavaIdentifierPart, 412isJavaIdentifierStart, 412isLeapYear, 524isLetter, 412, 413isLetterOrDigit, 412isLowerCase, 412isLowSurrogate, 414isMetaDown, 690isMirrored, 412isMulticastAddress, 649isNaN, 401, 402, 403isNativeMethod, 441isOther, 619isParallel, 856isPlain, 730isPopupTrigger, 692, 964isPresent, 518isQuiescent, 852isReadable, 617, 632isReadOnly, 612, 619isRegularFile, 617, 619isRequestedSessionIdFrom

Cookie, 1087isSealed, 440isSelected, 929, 1006, 1007,

1016isSet, 522isShiftDown, 690isSpaceChar, 412isSupplementaryCodePoint,

414isSurrogatePair, 414isSymbolicLink, 619isSystem, 619isTitleCase, 412isUnicodeIdentifierPart, 412isUnicodeIdentifierStart, 412isUpperCase, 412isValidateRoot, 666

isValidCodePoint, 414isWhitespace, 412isWritable, 617, 632itemStateChanged, 697,

748, 751, 929iterator, 443, 451, 452, 468,

856join, 228, 234, 390, 435, 840keyCombination, 1050keyPressed, 697, 701keyReleased, 697, 701keys, 504, 506keySet, 476, 507, 658keyTyped, 697, 701końcowa, 858last, 454, 455lastAccessTime, 619lastElement, 500, 501lastEntry, 478lastIndexOf, 386, 453, 454,

500, 501lastIndexOfSubList, 492lastKey, 477lastModifiedTime, 619launch, 984, 986length, 158, 393limit, 612lines, 615lineSeparator, 422list, 508, 571, 573, 615

filtrowanie, 574listFiles, 575listIterator, 453, 468load, 417, 422, 508, 510loadLibrary, 304, 417, 422locale, 538Locale, 522lock, 836lockInterruptibly, 836log, 1083logicalAnd, 415logicalOr, 415logicalXor, 415longBitsToFloat, 402longs, 530longValue, 259, 404, 405,

406, 408loop, 681lower, 456lowerEntry, 478lowerKey, 478

lowestOneBit, 406, 408main, 52, 124, 986map, 625, 628mapLibraryName, 422mapToDouble, 857mapToInt, 857mapToLong, 857mark, 578, 579, 583, 586,

589, 595, 600, 612markSupported, 578, 586,

595matches, 882, 887Math.pow, 309Math.sqrt, 309max, 367, 401, 406, 408, 431,

492, 857, 862merge, 476min, 401, 406, 408, 431, 492,

857, 862mkdir, 575mkdirs, 575mostu, 344mouseClicked, 697mouseDragged, 698, 704,

793mouseEntered, 697mouseExited, 697mouseMoved, 698, 704, 793mousePressed, 697, 962, 963mouseReleased, 697, 962,

963, 964mouseWheelMoved, 698move, 617multiplyExact, 432myMeth, 265name, 441nanoTime, 422naturalOrder, 484navigableKeySet, 478NavigableMap, 491NavigableSet, 491nazwa, 58negateExact, 432newAudioClip, 666newByteChannel, 614, 617,

622, 623, 626, 628newCachedThreadPool, 830newCondition, 836newDirectoryStream, 617,

633newFileSystem, 620

Poleć książkęKup książkę

Page 71: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1121

newFixedThreadPool, 830newInputStream, 617newOutputStream, 617newScheduledThreadPool,

830newSetFromMap, 492next, 468, 471, 553, 873nextAfter, 431nextBigDecimal, 553nextBigInteger, 553nextBoolean, 528, 553nextByte, 553nextBytes, 528, 529nextClearBit, 515nextDouble, 528, 529, 553nextDown, 431nextElement, 499, 514, 590nextFloat, 528, 529, 553nextGaussian, 528, 529nextIndex, 468nextInt, 528, 529, 551, 553nextLong, 528, 529nextToken, 514nextUp, 431noneMatch, 877norifyObservers, 530notExists, 618notify, 185, 240, 241, 243,

246, 424, 811notifyAll, 185, 240, 424notifyObservers, 530, 531notyfyAll, 185nullsFirst, 484nullsLast, 484NumberFormatException,

407, 409numberOfLeadingZeros,

406, 408numberOfTrailingZeros,

407, 409observableArrayList, 1018,

1022of, 518, 877offer, 455, 465offerFirst, 457, 458, 461offerLast, 457, 458, 461onAdvance, 829onClose, 856openConnection, 654, 655or, 515ordinal, 256, 441

orElseGet, 518out, 538, 539owner, 620paint, 667, 668, 669, 671,

672, 919przykrywanie, 786

paintBorder, 919paintChildren, 919paintComponent, 919, 920parallel, 856, 864parallelPrefix, 498parallelSetAll, 498parallelSort, 497parallelStream, 451, 858, 864parametr, 1100,

Patrz: parametrparse, 901parseBoolean, 415parseByte, 410parseDouble, 402parseFloat, 401parseInt, 410parseLong, 410parseShort, 405, 410parseUnsignedInt, 407parseUnsignedLong, 409peek, 455, 456, 503peekFirst, 457, 461peekLast, 457permissions, 620Platform.exit, 1049play, 666, 681poll, 455, 456, 465pollFirst, 456, 457, 461pollLast, 456, 457pollLastEntry, 478pop, 137, 198, 200, 457, 458,

503position, 612postVisitDirectory, 637pośrednia, 858preferredLayoutSize, 762previous, 468previousClearBit, 515previousIndex, 468previousSetBit, 515preVisitDirectory, 636, 637print, 54, 289, 591printf, 592, 603println, 53, 54, 66, 289, 591,

592, 603

printStackTrace, 220prywatna, 47przeciążanie, 139, 140, 141,

162przesłanianie, 177, 178, 180,

184, 342przydzielanie dynamiczne,

178publiczna, 47push, 137, 198, 200, 457,

458, 503put, 476, 481, 483, 504, 505,

506, 613putAll, 476, 483putIfAbsent, 476putValue, 967, 969quietlyInvoke, 852quietlyJoin, 852range, 466rdzenna, 304, 306read, 284, 286, 291, 443,

578, 595, 608, 609, 614readAttributes, 618, 620readBoolean, 609readByte, 609readChar, 609readDouble, 609reader, 604readExternal, 606readFloat, 609readFully, 609readInt, 609readLine, 287, 604readLong, 609readObject, 608, 609readPassword, 604, 605readUnsignedByte, 609readUnsignedShort, 609ready, 595receive, 660redirectError, 420redirectErrorStream, 420redirectInput, 420redirectOutput, 420reduce, 857, 862, 863referencja, 362, 366, 367regionMatches, 384register, 824rehash, 506reinitialize, 851rekurencyjna,

Patrz: rekurencja

Poleć książkęKup książkę

Page 72: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1122 Java. Kompendium programisty

metodaremainderUnsigned, 407, 409remove, 451, 452, 453, 455,

456, 462, 468, 476, 505,506, 952

removeActionListener, 916removeAll, 451, 452removeAllElements, 501removeAttribute, 1088, 1095removeEldestEntry, 483removeElement, 500removeElementAt, 500removeFirst, 457, 461removeIf, 452removeLast, 457removeShutdownHook, 417removeTListener, 1069renameTo, 572repaint, 672, 920, 994replace, 388, 396, 476replaceAll, 453, 454, 476,

882, 886replaceRange, 761reset, 578, 579, 583, 585,

586, 589, 595, 600, 612resize, 666resolve, 615, 616ResourceBundle, 561resume, 245, 246, 434retainAll, 451, 452reverse, 395, 407, 492reverseBytes, 405, 407, 409reversed, 484, 486reversedOrder, 484reverseOrder, 492, 494rewind, 612, 627RGBtoHSB, 726rint, 431rotate, 492rotateLeft, 407, 409rotateRight, 407, 409round, 431rozszerzenia, 203run, 228, 350, 433, 533runFinalization, 417, 422rysująca, 723save, 508schedule, 534scheduleAtFixedRate, 534scheduledExecutionTime,

533

search, 503SecurityManager, 422seek, 594send, 660sendError, 1088sendRedirect, 1088sequential, 856service, 1078, 1082, 1090set, 453, 454, 468, 516, 838Set, 536setAccelerator, 1049setActionCommand, 747setAddress, 661setAll, 498setAllowIndeterminate, 1016setAttribute, 1083, 1088,

1095setBackground, 670setBounds, 762setChanged, 530setCharAt, 394setColor, 727setComment, 1089setConstraints, 771setContent, 1027setContentDisplay, 1003,

1058setContentLength, 1084setContentType, 1081, 1084setContextClassLoader, 435setDaemon, 435setData, 661setDateHeader, 1088setDefault, 527setDefaultCloseOperation,

912setDefaultUncaught

ExceptionHandler, 435setDisable, 1044setDisabledIcon, 926setDisplayedMnemonic

Index, 957setDomain, 1089setEchoChar, 759setEditable, 758, 1023setEnabled, 776, 953, 967setErr, 422setFollowRedirects, 656setFont, 995setForeground, 670setForkJoinTaskTag, 852

setGraphics, 1003, 1044setHeader, 1088setHorizontalTextPosition,

959setHttpOnly, 1089setIn, 422setIntHeader, 1088setLabel, 744, 776setLastModified, 572setLayout, 762, 913setLength, 393, 594, 595, 661setMaxAge, 1089, 1094setMnemonic, 957setMnemonicParsing, 1050setName, 230, 435setOnAction, 991setOrientation, 1057setOut, 422setPaintMode, 728setPannable, 1027setParent, 561setPath, 1089setPort, 661setPrefColumnCount, 1024setPrefHeight, 1018setPrefSize, 1018setPrefWidth, 1018setPressedIcon, 926setPriority, 236, 435setProperty, 508setRawOffset, 526setReadOnly, 572setRequestMethod, 656setRolloverIcon, 926setRotate, 1035setScaleX, 1035setScaleY, 1035setScene, 987setSecure, 1089setSeed, 528setSelected, 1008, 1011, 1052setSelectedIcon, 926setSelectionMode, 939, 1021setSize, 501, 912setSoTimeout, 660setStackTrace, 220setStatus, 1088setStream, 680setStub, 666setText, 743, 1024, 1044setTime, 520

Poleć książkęKup książkę

Page 73: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1123

setTimeZone, 522setTooltip, 1038setToolTipText, 959setTranslateX, 1035setTranslateY, 1035setUnitIncrement, 756setValue, 479, 1089setValues, 756setVersion, 1089setVisible, 714, 913setXORModel, 728shortValue, 259, 402, 405,

407, 409show, 987showDocument, 679, 680showStatus, 674, 680shuffle, 492shutdown, 842signal, 836signum, 407, 409, 432singleton, 493singletonList, 493singletonMap, 493size, 462, 501, 504, 505, 506skip, 578, 595, 608składowa, Patrz: metodaskładowe, 727sleep, 228, 229, 435, 835sort, 453, 493, 497sorted, 857sparametryzowana, 315, 366

tworzenie, 331split, 887spliterator, 451, 452, 497,

856start, 228, 230, 415, 435,

666, 667, 668, 669, 882,984

startsWith, 384, 616statyczna, 153, 207, 309

referencja, 362stop, 245, 246, 434, 666, 667,

669, 681, 984, 1049store, 508, 510storeToXML, 508stream, 451, 516, 858, 860StringBuffer, 391strokeOval, 995strokeRect, 995strokeText, 995subList, 453, 454

subMap, 477, 479submit, 832subSequence, 442subSet, 454, 455, 456substring, 387, 396subtractExact, 432sum, 401, 402, 407, 409suspend, 245, 246, 434swap, 493synchronizacja, 237, 238,

239synchronized, 813synchronizedList, 494synchronizedNavigableMap,

493synchronizedNavigableSet,

493synchronizedSet, 493, 494synchronizedSortedMap,

493synchronizedSortedSet, 493synchronizowana, 227System.exit, 1049System.getProperty, 424tailMap, 477, 479tailSet, 454, 456test, 564, 566, 862textValueChanged, 698thenComparing, 484, 488throws, 416, 424, 434, 441timedWait, 835toAbsolutePath, 616, 632toArray, 451, 452, 460, 857toBinaryString, 407, 409toByteArray, 516toCharArray, 383toChars, 414toCodePoint, 414toDegrees, 430toHexString, 401, 407, 409toIntExact, 432toLanguageTag, 528toList, 870toLongArray, 516toLowerCase, 390, 412, 413toOctalString, 407, 409toPath, 573, 615, 631toRadians, 430, 432toSet, 870toString, 185, 220, 221, 265,

381, 401, 402, 404, 405,

407, 409, 415, 424, 428, 435,440, 441, 442, 460, 501, 506,516, 517, 520, 538, 615, 649,685, 730, 852

totalMemory, 416toTitleCase, 412toUnsignedInt, 404, 405toUnsignedLong, 404, 405,

407toUnsignedString, 407, 409toUpperCase, 390toUpperChar, 412traceInstructions, 417traceMethodCalls, 417trim, 389trimToSize, 460, 501tryAdvance, 471, 874tryLock, 836trySplit, 875ulp, 431uncaughtException, 444unlock, 836unmodifiableCollection, 493unmodifiableList, 493unmodifiableMap, 493unmodifiableNavigableMap,

493unmodifiableNavigableSet,

493unmodifiableSet, 493unmodifiableSortedMap,

493unmodifiableSortedSet, 493unordered, 856, 866unread, 588, 602update, 530, 531, 669, 672,

740ustawiająca, 1068valueChanged, 938, 943valueOf, 253, 254, 381, 389,

401, 402, 404, 405, 407,409, 415

values, 253, 254, 476varargs, 160

przeciążanie, 162, 163visitFile, 637visitFileFailed, 637wait, 185, 240, 241, 243, 246,

424, 811waitFor, 416, 419walk, 615

Poleć książkęKup książkę

Page 74: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1124 Java. Kompendium programisty

metodawalkFileTree, 636wartość, 1100windowActivated, 698windowClosed, 698windowClosing, 698, 714windowDeactivated, 698windowDeiconified, 698windowGainedFocus, 698windowIconified, 698windowLostFocus, 698write, 284, 289, 579, 596,

606, 607, 614, 626writeBoolean, 607writeByte, 607writeBytes, 607writeChar, 607writeChars, 607writeDouble, 607writeExternal, 606, 1100writeFloat, 607writeInt, 607writeLong, 607writeObject, 606, 607, 608,

1100writer, 604writeShort, 607wywoływanie zdalne, 39,

605, 879, 891, 893, 1077xor, 516yield, 435zabroniona, 399zmiennoargumentowa,

Patrz: metoda varargszwracająca, 1068

MIME, 1077, 1081, 1083mnemonik, 957, 970, 1041,

1049model

delegowania zdarzeń, Patrz:zdarzenie delegowanie

zorientowany na procesy, 45Model-Delegate, Patrz:

architektura model-delegacjaModel-View-Controller, Patrz:

MVCmodyfikator

abstract, 182dostępności, 52dostępu, 149, 150, 190, 195,

197

private, 52, 149, 166, 170,190, 197

protected, 149, 190, 197public, 124, 149, 190, 195, 197static, 124, 155strictfp, 303transient, 301volatile, 301

monitor, 227, 237, 240multipleksing, 645Multipurpose Internet Mail

Extensions, Patrz: MIMEmuteks, 237MVC, 907

kontroler, 907model, 907widok, 907

mysz, 691, 695, 699kółko, 693, 698, 699kursor, 698przycisk, 697

Nnasłuchiwanie, 645native code, Patrz: kod rdzennyNaughton Patrick, 33nazwa

bazowa, 559rodziny, 559

NetBeans, 987NIO, 42, 569, 570, 573, 611, 621,

880na kanałach, 621, 626na na ścieżkach i systemie

plików, 621, 631na strumieniach, 621, 629

NIO.2, 611, 621node, Patrz: węzełnotacja

naukowa, 67, 68, 539, 540standardowa, 67

Oobiekt, 46, 123

aktualny, 135cookies, 1087deklarowanie, 126deserializacja,

Patrz: deserializacja

graficzny, 725jako parametr, 143klonowanie, 425nasłuchujący, 684, 685, 710,

856, 927, 990, 1069, Patrzteż: interfejs nasłuchujący

obserwujący, 530Properties, 508referencja, 126, 127, 128,

145, 169, 196serializacja, 570,

Patrz: obiekt serializacjatworzenie, 126, 133zwracanie, 146

object-oriented programming,Patrz: programowanieobiektowe

obraz, 880, 1001, 1003filtrowanie, 804, 805format, Patrz: formatgraficzny, 787jądro konwolucji, 807kontrast, 806konwertowanie, 801ładowanie, 788, 804obserwator, 790podwójne buforowanie, 791pozaekranowa

powierzchnia rysowania,791

rozmywanie, 808tworzenie, 788, 796, 797wyostrzenie, 809wyświetlanie, 789

obserwator, 530obsługa wyjątków,

Patrz: wyjątek obsługaobszar roboczy, 982, 983, 988odbiorca, 276odpytywanie, 226, 240okno, 710

dialogowe, 710, 780, 977modalne, 780niemodalne, 780wybieranie plików, 784

Frame obsługa zdarzeń, 716najwyższego poziomu, 713potomne, 713przewijane, 937tworzenie, 714, 720tytuł, 714

Poleć książkęKup książkę

Page 75: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1125

wymiary, 714wysokopoziomowe, 764zamykanie, 714

OOP, Patrz: programowanieobiektowe

opakowywanie, 260automatyczne, 260, 261,

263, 264, 450w wyrażeniu, 262

operacjaatomowa, 881redukcji zmienna, 857

operator, 86!, 95!=, 94, 95%, 83, 84%=, 83&&, 95&, 87, 88, 95&=, 87, 95*, 83*=, 83--, 83, 86., 124/, 83/=, 83?, 97?:, 95^, 87, 88, 89, 95^=, 87, 95|, 87, 88, 89, 95||, 95|=, 87, 93, 95~, 87, 88+, 54, 83, 158++, 83, 86+=, 83, 85<, 94<<, 87, 90<<=, 87<=, 94-=, 83=, 96==, 94, 95, 384>, 94->, Patrz: operator lambda>=, 94>>, 87, 91, 92>>=, 87, 93>>>, 87, 92>>>=, 87

arytmetyczny, 83, 84z przypisaniem, 85

bitowy, 87z przypisaniem, 93

dekrementacji,Patrz: operator --

diamentu, 343iloczynu bitowego, 88inkrementacji,

Patrz: operator ++instanceof, 301, 303, 340kolejność, 97, 98kropki, Patrz: operator .lambda, 350logiczny, 95, 96logiki bitowej, 88modulo, Patrz: operator %negacji bitowej, 88new, 75, 126, 127, 252przesunięcia

bez znaku,Patrz: operator >>>

w lewo, Patrz: operator <<w prawo,

Patrz: operator >>przypisania,

Patrz: operator =,operator +=

relacji, 94rombu, 343strzałki, Patrz: operator

lambdasumy bitowej, 89

modulo 2, 89trójargumentowy,

Patrz: operator ?

Ppakiet, 149, 187, 188

Concurrency Utilities, 853hierarchia, 188importowanie, 192java.applet, 298, 663, 880java.awt, 683, 710, 880, 915java.awt.color, 880java.awt.datatransfer, 880java.awt.dnd, 880java.awt.event, 683, 685,

686, 696, 880, 914, 915java.awt.font, 880

java.awt.geom, 880java.awt.im, 880java.awt.im.spi, 880java.awt.image, 787, 796,

810, 880java.awt.image.renderable,

880java.awt.print, 880java.beans, 880, 1070, 1071,

1072java.beans.beancontext, 880java.io, 284, 291, 569, 880Java.io, 570java.lang, 219, 274, 286, 291,

309, 399, 444, 880java.lang.annotation, 265,

274, 444, 880java.lang.instrument, 444,

880java.lang.invoke, 444, 880java.lang.management, 444,

880java.lang.ref, 444, 445, 880java.lang.reflect, 266, 270,

444, 445, 879, 880, 888java.math, 880java.net, 645, 880java.nio, 284, 569, 611, 880java.nio.channels, 611, 613,

615, 880java.nio.channels.spi, 611,

880java.nio.charset, 611, 614,

880java.nio.charset.spi, 611, 880java.nio.file, 573, 611, 615,

620, 880java.nio.file.attribute, 611,

615, 880java.nio.file.spi, 611, 615,

880java.rmi, 879, 880java.rmi.activation, 880java.rmi.dgc, 880java.rmi.registry, 880java.scene.canvas, 994java.security, 880java.security.acl, 881java.security.cert, 881java.security.interfaces, 881java.security.spec, 881

Poleć książkęKup książkę

Page 76: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1126 Java. Kompendium programisty

pakietjava.sql, 881java.text, 879, 881, 894java.text.spi, 881java.time, 521, 879, 881,

897, 898java.time.chrono, 881, 897java.time.format, 881, 897,

899java.time.temporal, 881, 897java.time.zone, 881, 897java.util, 447, 513, 683, 685,

881java.util.concurrent, 564,

812, 834, 839, 881java.util.concurrent.atomic,

564, 812, 813, 838, 881java.util.concurrent.locks,

564, 812, 813, 835, 836, 881java.util.function, 42, 372,

471, 564, 872, 881java.util.jar, 564, 567, 881java.util.logging, 564, 567,

881java.util.prefs, 564, 567, 881java.util.regex, 564, 567,

879, 881java.util.spi, 564, 567, 881java.util.stream, 42, 564,

567, 855, 870, 881java.util.zip, 564, 567, 881javafx.application, 982, 983,

986, 1049javafx.collection, 1017javafx.collections, 988javafx.event, 990, 991javafx.scene, 982, 986javafx.scene.control, 991,

999, 1008, 1041javafx.scene.effect, 1034,

1064javafx.scene.image, 999javafx.scene.input, 1050javafx.scene.layout, 982,

983, 986javafx.scene.paint, 996javafx.scene.paint.Color, 1034javafx.scene.shape, 998javafx.scene.text, 996javafx.scene.transform,

1035, 1064

javafx.stage, 982, 986javax.imageio, 810javax.servlet, 1080, 1081,

1085javax.servlet.http, 1081,

1086javax.swing, 910, 911, 923javax.swing.border, 910javax.swing.colorchooser,

910javax.swing.event, 910, 914,

938, 943javax.swing.filechooser, 910javax.swing.plaf, 910javax.swing.plaf.basic, 910javax.swing.plaf.metal, 910javax.swing.plaf.multi, 910javax.swing.plaf.nimbus,

910javax.swing.plaf.synth, 910javax.swing.table, 910, 946javax.swing.text, 910javax.swing.text.html, 910javax.swing.text.html.parser,

910javax.swing.text.rtf, 910javax.swing.tree, 910javax.swing.undo, 910specyfikacja, 440ścieżka wyszukiwania, 188tytuł, 440wersja, 440zasobów, 560

pamięćodzyskiwanie, Patrz:

mechanizm odzyskiwaniapamięci

zarządzanie, 416panel, 909

BorderPane, 983FlowPane, 983GridPane, 983podzielony na zakładki, 934szklany, 909, 910treści, 909, 910wielowarstwowy, 909, 910

para klucz-wartość, 449, 474,476, 504, 505, 561

parallel programming,Patrz: programowanierównoległe

parametr, 52, 128, 131, 134args, 52obiektowy, 143, 144przekazywanie przez

referencję, 145wartość, 145

pasekmenu, 711, 713, 741, 775,

949tworzenie, 775

narzędzi, 949, 964, 965,1042, 1057, 1058

niezadokowany, 965przewijania, 687, 711, 742,

755, 936, 1020, 1026obsługa zdarzeń, 756tworzenie, 755

stanu, 674tytułu, 713

Payne Jonathan, 34pętla, 114

do-while, 105, 107, 109for, 55, 57, 105, 109, 110

odmiana, 111rozszerzona, 115zagnieżdżona, 116

for-each, 109, 112, 114, 115,116, 254, 443, 450, 469,474

opuszczanie, 117while, 105, 106zagnieżdżanie, 116zdarzeń z odpytywaniem,

226, 240zmienna sterująca, 109

deklaracja, 109PLAF, 907plik, 570

.class, 51

.java, 50archiwalny, 619atrybuty, 619cookie, 658, 1089format, Patrz: formatGZIP, 567HTML, 664, 676JAR, 881Java Archive, 567kopiowanie, 628mapowanie na bufor, 640multimedialny, 679

Poleć książkęKup książkę

Page 77: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1127

plikodczyt, 290, 638

za pośrednictwem kanału,622

odwzorowanie na bufor, 613systemowy, 619ścieżka, 784ukryty, 617, 619uprawnienia dostępu, 620właściciel, 620wskaźnik, 594wykonywalny, 617XML, 1072zamykanie, 291

automatyczne, 295zapis, 290, 626, 641ZIP, 567, 881źródłowy, 50

pluggable look and feel,Patrz: PLAF

płaszczyzna wielojęzycznapodstawowa, Patrz: BMP

poczta elektroniczna, 646podklasa, Patrz: klasa potomna

sparametryzowana, 339podmapa, 477pole

tekstowe, 698, 711, 742, 758obsługa zdarzeń, 759tekst sformatowany, 977tworzenie, 758wielowierszowe, 760ze strzałkami do zmiany

wartości, 977wyboru, 710, 742, 747, 931,

960, 1014, 1042, 1051,1052obsługa zdarzeń, 748trzystanowe, 1014, 1016tworzenie, 748

polimorfizm, 46, 48, 49, 50, 139,141, 179, 180, 196

dynamiczny, 180port, 645, 646, 650, 661procedura pośrednicząca, 893proces, 225

hermetyzacja, 415komunikacja,

Patrz: komunikacjamiędzyprocesorowa

zakleszczenie, Patrz:zakleszczenie

profil kompaktowy, 313program

javadoc, 1099, 1103kompilacja, 50, 51sieciowy, Patrz: apleturuchamianie, 50

programowaniefunkcyjne, 42obiektowe, 33, 45, 46, 165równoległe, 42, 226, 448,

452, 470, 472, 839, 848asynchroniczne

wykonywanie zadania,850

poziom, 846, 848wydajność zadań, 845,

846, 848strukturalne, 32, 33wielowątkowe,

Patrz: wielowątkowośćwspółbieżne, 564, 811

narzędzia, 811projekt Coin, 41, 42protokół, 653, 1084

bezstanowy, 1095FTP, 646HTTP, 646, 1078, 1090,

1092, 1095IP, 645IPv4, 646, 647IPv6, 646, 647JNLP, 664TCP, 645TCP/IP, 39, 646, 659Telnet, 646UDP, 646, 659

przeglądarka, 52, 665, 1077apletów, Patrz: appletviewerpasek stanu, Patrz: pasek

stanuprzełącznik, 1005

stan, 929przenośność, 36, 37przesłanianie, 173, 178przestrzeń nazw, 187

domyślna, 187przycisk, 710, 741, 742, 744,

916, 926, 927, 991obraz, 1003obsługa zdarzeń, 744opcji, 749, 932, 933, 960,

1008, 1011, 1042, 1051

przełącznika, 929,Patrz: przełącznik

tworzenie, 744pula wspólna, 841punkt kodowy, 413pushback, Patrz: zwracania

Rreferencja

do konstruktora, 368, 369,372

do metody, 362, 366, 367do metody instancyjnej, 363do metody statycznej, 362Object, 316

refleksja, 266, 445, 879, 888rekurencja, 147, 148Remote Method Invocation,

Patrz: metoda wywoływaniezdalne

resource starvation,Patrz: głodzenie zasobów

retained mode, Patrz: trybzachowany

RGB, 726, 727Richards Martin, 32Ritchie Dennis, 32RMI, Patrz: metoda

wywoływanie zdalnerodzic, 983rozkład Gaussa, 529rozpakowywanie, 260

automatyczne, 264, 450rzutowanie, 342

SSAM type, Patrz: typ SAMscena, 982, 988scene, Patrz: obszar roboczyselektor, 615semafor, 812, 813, Patrz:

monitorlicznik, 813, 814

Separable Model, Patrz:architektura model-delegacja

separator, 59, 513(), 59,, 59., 59

Poleć książkęKup książkę

Page 78: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1128 Java. Kompendium programisty

separator::, 59;, 59[], 59{}, 59kropki, Patrz: operator .

serializacja, 605, 606, 608, 893,1071

serwer, 646, 648, 893, 1077serwletów, 1078

Glassfish, 1078Tomcat, 1078, 1079, 1081

serwlet, 37, 1077cykl życia, 1078, 1083dane konfiguracyjne, 1082dziennik, 1083kontekst, 1082kontener, Patrz: serwer

serwletównazwa, 1082parametry, 1085serwer, Patrz: serwer

serwletówśrodowisko, 1083tworzenie, 1080, 1081

sesja, 1087, 1088śledzenie, 1095

Sheridan Mike, 33skaner, 513składowa statyczna, 152skrót, 462skrót klawiszowy, 957, 1049słownik, 504słowo kluczowe, 59

abstract, 182, 184assert, 283, 306catch, 209, 211class, 52, 123const, 59enum, 251, 441extends, 165, 202final, 153, 184, 361finally, 209, 217, 297goto, 59import, 309instanceof, 283int, 54interface, 187, 194, 265native, 283, 303public, 52static, 52, 139, 152, 309, 606

strictfp, 283super, 170, 173synchronized, 238, 239, 811this, 135, 136, 276, 311throw, 209, 216throws, 209, Patrz też:

klauzula throwstransient, 283, 606try, 209, 210, 211void, 52, 133volatile, 283

socket, Patrz: gniazdospecyfikator

formatu, 537, 539, 540, 542,547indeks argumentu, 548pisany wielką literą, 547

grupowania, 547konwersji formatu, 537minimalnej szerokości pola,

543precyzji, 544

spliterator, 448, 451, 470, 472,497, 874

cecha, 472stała, 58, 66

całkowitoliczbowa, 66, 67deklarowanie, 153E, 429klasowa, 268logiczna, 68łańcuchowa, Patrz: łańcuch

znakówPI, 429TYPE, 415własnego typu, 252wyliczeniowa, 252, 255

wartość kolejności, 256zmiennoprzecinkowa, 67, 68

stos, 48, 137, 150, 198, 434, 439,503

o dynamiczniezmieniającym sięrozmiarze, 199

strategia dziel i zwyciężaj, 841,843

Stroustrup Bjarne, 33strumień, 284, 422, 508, 510, 569,

621, 855bajtów, 284, 285, 570, 578

buforowanie, 586

filtrowanie, 585, 869iterator, 856, 873liczba elementów, 857nieuporządkowany, 856odwzorowanie elementów,

866operacja

bezstanowa, 858kończąca, 862redukcji, 862uwzględniająca stan, 858

referencja, 856równoległy, 856, 864, 866sekwencyjny, 856, 866System.err, 286System.in, 286System.out, 286, 289tworzenie, 857, 858wejściowy, 579, 598, 650

dane zwracane, 588przeszukiwanie, 601

wyjściowy, 53, 650zamykanie, 576, 856znaków, 284, 285, 570, 578,

595, 596supplemental character, Patrz:

znak uzupełniającysurogat

bardziej znaczący, 413mniej znaczący, 413

suwak, 1064synchronizator, 812system

NIO, Patrz: NIOwielordzeniowy, 226

ścieżka, 615, 616, 617, 618, 621,625, 631, 632, 633

względna, 623środowisko, 424, 444

Ttabela, 945tablica, 52, 75, 112, 114, 495

deklarowanie, 80dynamiczna, 448, 459, 460inicjalizacja, 76jednowymiarowa, 75

Poleć książkęKup książkę

Page 79: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1129

kopiowanie, 423, 495length, Patrz: tablica liczba

elementówliczba elementów, 154mieszająca, 448, 462, 480,

505porównywanie, 496sortowanie, 497tablic, Patrz: tablica

wielowymiarowatworzenie, 75, 76typ sparametryzowany, 347wielowymiarowa, 77, 114

deklarowanie, 77inicjalizacja, 79nieregularna, 79

zagnieżdżona, 498target type, Patrz: typ docelowytekst, 694, 698, 995

czcionka, Patrz: czcionkaformatowanie, 737, 879wyśrodkowanie, 737wyświetlanie, 735

ThreadGroup, 399toggle button, Patrz: przycisk

przełącznikatoken, 513, 514, 551, 887Tomcat, 1078, 1079

uruchamianie, 1081tooltip, Patrz: etykieta ekranowaTransmission Control Protocol,

Patrz: protokół TCPTreeSet, 447trwałość, 1071tryb

rysowania, 728zachowany, 994

typbezpieczeństwo, 449boolean, 61, 66, 73, 94, 259

opakowanie, 263byte, 61, 62, 67, 73, 87, 400Byte, 259całkowitoliczbowy, 54, 61,

62, 64, 65, 73, 87rozmiar, 62

char, 61, 64, 65, 73, 87, 216,259, 378, 413opakowanie, 263

Character, 259docelowy, 350

double, 61, 64, 68, 400Double, 259float, 61, 64, 68, 259, 400int, 61, 62, 63, 65, 87, 216,

259, 400interfejsu, 324Iterator, 873klasowy, 146, 254konwersja, 72, 74

automatyczna, 72rozszerzająca, 72zawężająca, 73

logiczny, 61, 66, 68long, 61, 62, 63, 67, 73, 87,

259numeryczny, 73

opakowanie, 259ograniczony, 322, 323opakowanie, 259, 399parametr, 317, 325podstawowy, Patrz: typ

prostyprosty, 61, 62, 127, 216, 264

opakowanie, 258, 260, 261,262, 399

rozszerzanie, 74rzutowanie, 72, 73, 301

obcięcie, 73SAM, 350short, 61, 62, 63, 67, 73, 87,

259, 400sparametryzowany, 185,

266, 281, 315, 319, 343,366, 449, 504, 505argument typu, 319argument wieloznaczny,

324, 325, 327argument wieloznaczny

ograniczony, 328błąd niejednoznaczności,

346ograniczenia, 347, 348tablica, 347znoszenie, 344, 346

Spliterator, 873, 875String, 80, 377surowy, 335, 336Throwable, 216TimeUnit, 834uogólniony, Patrz: typ

sparametryzowany

void, 415wartość, 442wnioskowanie, 343wyliczeniowy, 251, 254,

Patrz też: wyliczeniezgodność, 72zmiennoprzecinkowy, 61,

63, 73znakowy, 61, 64, 68

UUI delegate, Patrz: delegacja

interfejsu użytkownikaUnicode, 64, 65, 68, 412, 595

32-bitowe, 413, 414titlecase, 412

urządzenie graficzne, 711User Datagram Protocol,

Patrz: protokół UDPusługa

DNS, 646whois, 646, 650, 652

ustawieniaregionalne, 527, 528, 559użytkownika, 567

uwierzytelnianie, 1087

Vvan Hoff Arthur, 34varargs, 160, 161viewport widok, 936vItemEvent, 695

Wwaluta, 535Warth Chris, 33wartość kolejności, 256wątek, 225, 226, 433, 434, 534

activeCount, 436activeGroupCount, 436aktywny, 434aplikacji, 988blokada wzajemna,

Patrz: zakleszczenieblokowanIe, 226checkAccess, 436demon, 435, 842demonem, 434

Poleć książkęKup książkę

Page 80: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1130 Java. Kompendium programisty

wątekdestroy, 436enumerate, 436fałszywe budzenie, 240getMaxPriority, 436getName, 436getParent, 436główny, 228grupa, 229, 435, 436isDestroyed, 436komunikacja, 228,

Patrz: komunikacjamiędzywątkowa

nazwa, 434, 435oczekujący, 227, 247, 248,

424, 533parentOf, 436priorytet, 227, 236, 434, 435przełączenie kontekstu, 227rozdzielający zdarzenia,

913, 917setDaemon, 436setMaxPriority, 436stan, 247, 248synchronizacja, 227, 237,

238, 239szeregowanie, 238tworzenie, 230, 232, 233uncaughtException, 436uruchomieniowy, 988wykonywany, 227, 247, 248wyścig, 238wywłaszczanie, 227wznawianie, 227, 245zablokowany, 227, 247, 248zakleszczenie,

Patrz: zakleszczeniezakończony, 227, 234, 247,

248zawieszony, 227, 245, 247,

248, 819zmienna lokalna, Patrz:

zmienna lokalna wątkuwejście standardowe, 54wejście-wyjście, 283

obsługa błędów, 292wektor, 500, 501węzeł, 983, 1029

gałęzi, 983głównego poziomu, 983końcowy, Patrz: liśćpotomny, 983

widok, 936kolekcji, 449

wielowątkowość, 39, 225, 226,228, 240, 433, 811, 839

synchronizacja, 227, 237,238, 239, 811, 812, 813,821, 823

system wieloprocesorowy,839

zmienne, 813wielozadaniowość, 225

bazująca naprocesach, 225wątkach, 225

z wywłaszczaniem, 227wiersza poleceń argument, 159wirus, 36właściwość, 1068

indeksowana, 1069, 1072ograniczona

bound, 1070, 1071constrained, 1070, 1071,

1072prosta, 1068

work-stealing, Patrz: klasaForkJoinPool wykradaniezadań

wskaźnik, 81, 126współbieżność, 881wyciek pamięci, 291wydobywanie automatyczne, 260wyjątek, 209, 439, 1100

ArithmeticException, 211,214, 219, 222, 223, 430

ArrayIndexOutOfBoundsException, 213, 219,

223, 496ArrayStoreException, 219AssertionError, 306bez opisu, 221ClassCastException, 219,

451, 453, 454, 455, 457,475, 477, 479, 483, 491,494, 495, 497

ClassNotFoundException,220, 608

CloneNotSupportedException, 220, 425, 441

EmptyStackException, 503EnumConstantNotPresentE

xception, 219

FileNotFoundException,290, 576, 579

finalne zgłoszenie dalej, 223HeadlessException, 743IllegalAccessException, 220IllegalArgumentException,

219, 451, 453, 455, 457,466, 475, 477, 496

IllegalFormatException, 538IllegalMonitorStateException,

219IllegalStateException, 219,

451, 455, 457, 458, 882,1084

IllegalThreadStateException,219

IndexOutOfBoundsException, 219, 453

InstantiationException, 220InterruptedException, 220,

229IntrospectionException,

1072InvalidPathException, 619IOError, 604IOException, 286, 291, 538,

576, 578, 579, 595, 596,597, 602, 608, 1087

łańcuch, 222MalformedURLException,

653MissingResourceException,

560NagativeArraySizeException,

219nieprzechwycony, 210, 434,

436nieweryfikowany, 219NoSuchElementException,

454, 455, 456, 457, 467,468, 477, 499, 518

NoSuchFieldException, 220NoSuchMetohodException,

220NotSerializableException, 609NullPointerException, 216,

219, 451, 453, 454, 455,457, 466, 475, 477, 495,496, 517, 560, 590

NumberFormatException,219

Poleć książkęKup książkę

Page 81: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

Skorowidz 1131

obsługa, 116, 209opis, 212PatternSyntaxException,

883PropertyVetoException,

1070przechwytywanie

wielokrotne, 209, 223ReflectiveOperation

Exception, 220RemoteException, 891RuntimeException, 219SecurityException, 219, 290,

421, 576ServletException, 1085SocketException, 659StringIndexOutOfBounds

Exception, 219systemowy, 209TooManyListenersException,

1069TypeNotPresentException,

219UnavailableException, 1082,

1085UnknownHostException, 648UnsupportedOperation

Exception, 219, 450,451, 453, 475, 494, 620

weryfikowany, 219, 220własny, 216, 219wyrażenie lambda, Patrz:

wyrażenie lambda wyjątekwykładnik binarny, 68wyliczenie, 256, 257, 491, 507,

Patrz też: typ wyliczeniowyElementType, 444klucz, 466RetentionPolicy, 444stała, Patrz: stała

wyliczeniowawyrażenie, 74, 262

try-with-resources, 223lambda, 42, 349, 351, 352,

747, 990blokowe, 354, 355ciało, 350ciało blokowe, 354ciało wyrażeniowe, 354jako argument, 357wyjątek, 360

regularne, 551, 567, 879,881, 883, 888tworzenie, 882wzorzec, 879

sterujące, 102, 104try, 210try-with-resources,

Patrz: instrukcjatry-with-resources

warunkowe, 66wzorzec projektowy, 1070

dla zdarzeń, Patrz:zdarzenie wzorzecprojektowy

YYellin Frank, 34

Zzakleszczenie, 244zarządzanie zasobami

automatyczne, Patrz: ARMzasada rozszerzania typów,

Patrz: typ rozszerzaniezatrzask, 818zbiór, 454, 483zdarzenie, 667, 683

ActionEvent, 686, 696, 744,747, 759, 916, 927, 950,991, 1006, 1042

AdjustmentEvent, 687, 696,756

AWT, 710ChangeListener, 1010ComponentEvent, 688ContainerEvent, 688delegowanie, 684, 699, 914,

990, 1069filtr, 991FocusEvent, 689grupowe rozgłaszanie, 684ItemEvent, 690, 748, 751,

929KEY_PRESSED, 701KEY_TYPED, 701KeyEvent, 691kolejkowanie, 710kontrolki, 742ListSelectionEvent, 938

łańcucha przydzielania,Patrz: łańcuchaprzydzielania zdarzeń

MenuDragMouseEvent, 951MenuKeyEvent, 951MouseEvent, 691obsługa, 683

delegowanie, Patrz:zdarzenie delegowanie

w grupie, 1010w oknie typu Frame, 716

PopupMenuEvent, 951propagacja, 991PropertyChangeEvent, 1070rozgłaszanie, 1069TableModelEvent, 946TreeExpansionEvent, 943TreeModelEvent, 943TreeSelectionEvent, 943wysyłanie jednostkowe, 685wzorzec projektowy, 1069związane z klawiaturą, 701źródło, 684, 695, 991

zmienna, 53, 69, 127czas życia, 70, 71członkowska, Patrz:

zmienna składowadeklaracja, 69, 70, 71egzemplarza, Patrz:

zmienna składowafinal, 251inicjalizacja, 70, 71

dynamiczna, 70interfejsu, 201iteracyjna, 112lokalna, 135, 136

sfinalizowana, 361wątku, 439

nazwa, 58przechwytywanie, 361referencyjna, 127, 128, 169,

196interfejsu, 200

składowa, 47, 124ukrywanie, 135, 136

sterująca pętlą, Patrz: pętlazmienna sterująca

środowiskowa, 424CLASSPATH, 188

tablicowa, 75transient, 301

Poleć książkęKup książkę

Page 82: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition

1132 Java. Kompendium programisty

zmiennavolatile, 301zasięg, 70, 71

globalny, 70lokalny, 70zagnieżdżanie, 71

znacznik, 852@author, 1100@code, 1100@deprecated, 1099, 1100@docRoot, 1100, 1101@exception, 1100, 1101@inheritDoc, 1100, 1101@link, 1100, 1101@linkplain, 1100, 1101@literal, 1100, 1101@param, 1100, 1101@return, 1100, 1101@see, 1099, 1100, 1102@serial, 1100@serialData, 1100@serialField, 1100, 1102@since, 1099, 1100, 1102@throws, 1100, 1102@value, 1100, 1102@version, 1100, 1103APPLET, 299, 664, 675, 676formatu, 545img, 787komentarza, 1099kontekstu klienta, 1089kontekstu użytkownika,

1093OBJECT, 299, 664przyłączany, 1099samodzielny, 1099

znak\', 68, 69!, 95!=, 94, 95", 69", 571#, 547$, 58%, 83, 84%–, 545%%, 539, 542%=, 83%a, 539, 540%b, 539%c, 539

%d, 538, 539, 540%e, 539, 540, 544, 547%f, 537, 538, 539, 540, 543,

544, 547%g, 539, 540, 544%h, 539%n, 539, 542%o, 539, 547%s, 538, 539, 544%t, 539, 540%tM, 541%x, 539, 547&, 87, 88, 95&&, 95&=, 87, 95(), 59*, 83, 634, 883*/, 51, 58, 1099*=, 83,, 59., 59, 124, 188, 883..., 161/, 83, 571/*, 51, 1099/**, 58, 1099//, 52, 1099/=, 83::, 59;, 53, 59?, 634, 883@, 265, 1099\\, 69, 571^, 87, 88, 89, 95^=, 87, 95{, 52{}, 59|, 87, 88, 89, 95||, 95|=, 87, 93, 95}, 52~, 87, 88+, 54, 83, 158, 546, 883, 884++, 83+=, 83<, 94<?>, 266, 268<<, 87, 90<<=, 87<=, 94<>, 343=, 96

-=, 83==, 94, 95, 384>, 94->, 350>=, 94>>, 87, 91, 92>>=, 87, 93>>>, 87, 92>>>=, 87apostrof, 68\b, 69biały, 58, 389dwukropek, 118\f, 69klasa, Patrz: klasa znakówkropki, Patrz: znak .lewy ukośnik, 68lustrzany, 412łańcuch, Patrz: łańcuch

znaków\n, 69, 542'\n', 68nawias okrągły, 98podkreślenia, 67przecinek, 110, 111\r, 69symbol wieloznaczny, 634\t, 69titlecase, 412\u, 68uzupełniający, 413zastępczy, 883, 884zestaw, 614

zwracania, 588

żądanie, 1083, 1084DELETE, 1090GET, 1090HEAD, 1090HTTP, 1077, 1078OPTIONS, 1090parametry, 1085POST, 1090, 1092PUT, 1090TRACE, 1090użytkownik, 1087, 1088

Poleć książkęKup książkę

Page 84: Tytuł oryginału: Java™ The Complete Reference, Ninth Edition