Upload
others
View
14
Download
0
Embed Size (px)
Citation preview
Tytuł oryginału: Java The Complete Reference, 8th Edition
Tłumaczenie: Mikołaj Szczepaniak
ISBN: 978-83-246-3767-6
© Helion 2012All rights reserved
Original edition copyright © 2011 by McGraw-Hill Companies, Inc.All rights reserved.
Polish edition copyright © 2012 by HELION SAAll 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 retrievalsystem, 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 szkody wynikłe z wykorzystaniainformacji zawartych w książce.
Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/javkp8.zip
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/javkp8Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
Spis tre�ciO autorze .................................................................................................23O redaktorze merytorycznym ......................................................................................................23
Przedmowa ..............................................................................................25
Cz��� I J�zyk Java ............................................................................ 29
Rozdzia� 1. Historia i ewolucja j�zyka Java .................................................................31Rodowód Javy .............................................................................................................................31
Narodziny nowoczesnego j�zyka — C ..................................................................................32J�zyk C++ — nast�pny krok .................................................................................................33Podwaliny j�zyka Java ..........................................................................................................34
Powstanie j�zyka Java .................................................................................................................34Powi�zanie z j�zykiem C# ....................................................................................................36
Jak j�zyk Java zmieni� internet ....................................................................................................36Aplety Javy ...........................................................................................................................37Bezpiecze�stwo .....................................................................................................................37Przeno�no�� ...........................................................................................................................38
Magia j�zyka Java — kod bajtowy ..............................................................................................38Serwlety — Java po stronie serwera ............................................................................................39Has�a j�zyka Java ........................................................................................................................40
Prostota ..................................................................................................................................40Obiektowo�� ..........................................................................................................................40Niezawodno�� .......................................................................................................................41Wielow�tkowo�� ...................................................................................................................41Neutralno�� architektury .......................................................................................................42Interpretowalno�� i wysoka wydajno�� .................................................................................42Rozproszenie .........................................................................................................................42Dynamika ..............................................................................................................................42
Ewolucja Javy ..............................................................................................................................42Java SE 7 ...............................................................................................................................44
Kultura innowacji ........................................................................................................................46
Rozdzia� 2. Podstawy j�zyka Java ...............................................................................47Programowanie obiektowe ..........................................................................................................47
Dwa paradygmaty .................................................................................................................47Abstrakcja .............................................................................................................................48Trzy zasady programowania obiektowego ............................................................................48
4 Java. Kompendium programisty
Pierwszy przyk�adowy program ..................................................................................................53Wpisanie kodu programu ......................................................................................................54Kompilacja programów .........................................................................................................54Bli�sze spojrzenie na pierwszy przyk�adowy program ..........................................................55
Drugi prosty program ..................................................................................................................57Dwa wyra�enia steruj�ce .............................................................................................................59
Wyra�enie if ..........................................................................................................................59P�tla for .................................................................................................................................60
Bloki kodu ...................................................................................................................................61Kwestie sk�adniowe .....................................................................................................................63
Znaki bia�e .............................................................................................................................63Identyfikatory ........................................................................................................................63Sta�e .......................................................................................................................................63Komentarze ...........................................................................................................................64Separatory .............................................................................................................................64S�owa kluczowe j�zyka Java .................................................................................................64
Biblioteki klas Javy .....................................................................................................................65
Rozdzia� 3. Typy danych, zmienne i tablice .................................................................67Java to j�zyk ze �cis�� kontrol� typów .........................................................................................67Typy proste ..................................................................................................................................67Typy ca�kowitoliczbowe ..............................................................................................................68
Typ byte ................................................................................................................................69Typ short ...............................................................................................................................69Typ int ...................................................................................................................................69Typ long ................................................................................................................................69
Typy zmiennoprzecinkowe ..........................................................................................................70Typ float ................................................................................................................................71Typ double ............................................................................................................................71
Typ znakowy ...............................................................................................................................71Typ logiczny ................................................................................................................................73Bli�sze spojrzenie na sta�e ...........................................................................................................74
Sta�e ca�kowitoliczbowe ........................................................................................................74Sta�e zmiennoprzecinkowe ....................................................................................................75Sta�e logiczne ........................................................................................................................76Sta�e znakowe ........................................................................................................................76Sta�e �a�cuchowe ...................................................................................................................77
Zmienne .......................................................................................................................................77Deklaracja zmiennej ..............................................................................................................78Inicjalizacja dynamiczna .......................................................................................................78Zasi�g i czas �ycia zmiennych ..............................................................................................79
Konwersja typów i rzutowanie ....................................................................................................81Automatyczna konwersja typów ...........................................................................................81Rzutowanie niezgodnych typów ............................................................................................82
Automatyczne rozszerzanie typów w wyra�eniach .....................................................................83Zasady rozszerzania typu ......................................................................................................84
Tablice .........................................................................................................................................85Tablice jednowymiarowe ......................................................................................................85Tablice wielowymiarowe ......................................................................................................87Alternatywna sk�adnia deklaracji tablicy ...............................................................................91
Kilka s�ów o �a�cuchach ..............................................................................................................92Uwaga dla programistów j�zyka C lub C++ na temat wskaników .............................................92
Spis tre�ci 5
Rozdzia� 4. Operatory .................................................................................................93Operatory arytmetyczne ..............................................................................................................93
Podstawowe operatory arytmetyczne ....................................................................................94Operator reszty z dzielenia ....................................................................................................95Operatory arytmetyczne z przypisaniem ...............................................................................95Inkrementacja i dekrementacja ..............................................................................................96
Operatory bitowe .........................................................................................................................98Logiczne operatory bitowe ....................................................................................................99Przesuni�cie w lewo ............................................................................................................101Przesuni�cie w prawo ..........................................................................................................103Przesuni�cie w prawo bez znaku .........................................................................................104Operatory bitowe z przypisaniem ........................................................................................105
Operatory relacji ........................................................................................................................106Operatory logiczne ....................................................................................................................107
Operatory logiczne ze skracaniem .......................................................................................109Operator przypisania ..................................................................................................................109Operator ? ..................................................................................................................................110Kolejno�� wykonywania operatorów .........................................................................................111Stosowanie nawiasów okr�g�ych ...............................................................................................112
Rozdzia� 5. Wyra�enia steruj�ce ...............................................................................113Instrukcje wyboru ......................................................................................................................113
Konstrukcja if ......................................................................................................................113Konstrukcja switch ..............................................................................................................116
Instrukcje iteracyjne ..................................................................................................................121P�tla while ...........................................................................................................................121P�tla do-while ......................................................................................................................122P�tla for ...............................................................................................................................125Wersja for-each p�tli for ......................................................................................................128P�tle zagnie�d�one ..............................................................................................................133
Instrukcje skoku .........................................................................................................................134Instrukcja break ...................................................................................................................134Instrukcja continue ..............................................................................................................138Instrukcja return ..................................................................................................................139
Rozdzia� 6. Wprowadzenie do klas ............................................................................141Klasy ..........................................................................................................................................141
Ogólna posta� klasy ............................................................................................................141Prosta klasa ..........................................................................................................................142
Deklarowanie obiektów .............................................................................................................145Bli�sze spojrzenie na operator new .....................................................................................146
Przypisywanie zmiennych referencyjnych do obiektów ............................................................147Wprowadzenie do metod ...........................................................................................................148
Dodanie metody do klasy Box ............................................................................................148Zwracanie warto�ci .............................................................................................................150Dodanie metody przyjmuj�cej parametry ............................................................................151
Konstruktor ................................................................................................................................153Konstruktor sparametryzowany ...........................................................................................155
S�owo kluczowe this ..................................................................................................................156Ukrywanie zmiennych sk�adowych .....................................................................................157
Mechanizm odzyskiwania pami�ci ............................................................................................157Metoda finalize() .......................................................................................................................158Klasa stosu .................................................................................................................................158
6 Java. Kompendium programisty
Rozdzia� 7. Dok�adniejsze omówienie metod i klas ....................................................161Przeci��anie metod ....................................................................................................................161
Przeci��anie konstruktorów .................................................................................................164Obiekty jako parametry .............................................................................................................166Dok�adniejsze omówienie przekazywania argumentów ............................................................168Zwracanie obiektów ..................................................................................................................170Rekurencja .................................................................................................................................171Wprowadzenie do kontroli dost�pu ...........................................................................................173Sk�adowe statyczne ...................................................................................................................176S�owo kluczowe final ................................................................................................................178Powtórka z tablic .......................................................................................................................179Klasy zagnie�d�one i klasy wewn�trzne ....................................................................................181Omówienie klasy String ............................................................................................................183Wykorzystanie argumentów wiersza polece� ............................................................................186Zmienna liczba argumentów ......................................................................................................187
Przeci��anie metod o zmiennej liczbie argumentów ...........................................................190Zmienna liczba argumentów i niejednoznaczno�ci .............................................................191
Rozdzia� 8. Dziedziczenie .........................................................................................193Podstawy dziedziczenia .............................................................................................................193
Dost�p do sk�adowych a dziedziczenie ...............................................................................195Bardziej praktyczny przyk�ad ..............................................................................................196Zmienna klasy bazowej mo�e zawiera� referencj� do obiektu podklasy .............................198
S�owo kluczowe super ...............................................................................................................199Wykorzystanie s�owa kluczowego super do wywo�ania konstruktora klasy bazowej .........199Drugie zastosowanie s�owa kluczowego super ....................................................................202
Tworzenie hierarchii wielopoziomowej ....................................................................................203Kiedy dochodzi do wywo�ania konstruktorów? .........................................................................206Przes�anianie metod ...................................................................................................................207Dynamiczne przydzielanie metod ..............................................................................................209
Dlaczego warto przes�ania� metody? ..................................................................................211Zastosowanie przes�aniania metod ......................................................................................211
Klasy abstrakcyjne .....................................................................................................................213S�owo kluczowe final i dziedziczenie ........................................................................................216
S�owo kluczowe final zapobiega przes�anianiu ...................................................................216S�owo kluczowe final zapobiega dziedziczeniu ..................................................................216
Klasa Object ..............................................................................................................................217
Rozdzia� 9. Pakiety i interfejsy .................................................................................219Pakiety .......................................................................................................................................219
Definiowanie pakietu ..........................................................................................................220Znajdowanie pakietów i �cie�ka CLASSPATH ..................................................................220Prosty przyk�ad pakietu .......................................................................................................221
Ochrona dost�pu ........................................................................................................................222Przyk�ad dost�pu .................................................................................................................223
Import pakietów .........................................................................................................................226Interfejsy ....................................................................................................................................228
Definiowanie interfejsu .......................................................................................................228Implementacja interfejsu .....................................................................................................229Interfejsy zagnie�d�one .......................................................................................................232Stosowanie interfejsów ........................................................................................................233Zmienne w interfejsach .......................................................................................................236Interfejsy mo�na rozszerza� ................................................................................................238
Spis tre�ci 7
Rozdzia� 10. Obs�uga wyj�tków ..................................................................................239Podstawy obs�ugi wyj�tków ......................................................................................................239Typy wyj�tków ..........................................................................................................................240Nieprzechwycone wyj�tki .........................................................................................................241Stosowanie konstrukcji try i catch .............................................................................................242
Wy�wietlenie opisu wyj�tku ................................................................................................243Wiele klauzul catch ...................................................................................................................244Zagnie�d�one konstrukcje try ....................................................................................................245Instrukcja throw .........................................................................................................................247Klauzula throws .........................................................................................................................249S�owo kluczowe finally .............................................................................................................250Wyj�tki wbudowane w j�zyk Java .............................................................................................251Tworzenie w�asnej podklasy wyj�tków .....................................................................................252a�cuch wyj�tków .....................................................................................................................255Trzy nowe cechy wyj�tków w wersji JDK 7 .............................................................................256Wykorzystanie wyj�tków ..........................................................................................................258
Rozdzia� 11. Programowanie wielow�tkowe ................................................................259Model w�tków j�zyka Java ........................................................................................................260
Priorytety w�tków ...............................................................................................................261Synchronizacja ....................................................................................................................262Przekazywanie komunikatów ..............................................................................................262Klasa Thread i interfejs Runnable .......................................................................................262
W�tek g�ówny ............................................................................................................................263Tworzenie w�tku .......................................................................................................................265
Implementacja interfejsu Runnable .....................................................................................265Rozszerzanie klasy Thread ..................................................................................................267Wybór odpowiedniego podej�cia ........................................................................................268
Tworzenie wielu w�tków ...........................................................................................................269Stosowanie metod isAlive() i join() ...........................................................................................270Priorytety w�tków .....................................................................................................................272Synchronizacja ..........................................................................................................................273
Synchronizacja metod .........................................................................................................274Konstrukcja synchronized ...................................................................................................276
Komunikacja mi�dzyw�tkowa ...................................................................................................277Zakleszczenie ......................................................................................................................282
Zawieszanie, wznawianie i zatrzymywanie w�tków .................................................................284Zawieszanie, wznawianie i zatrzymywanie w�tków do wersji Java 1.1 ..............................284Nowoczesny sposób zawieszania, wznawiania i zatrzymywania w�tków ...........................286
Uzyskiwanie stanu w�tku ..........................................................................................................289Korzystanie z wielow�tkowo�ci ................................................................................................290
Rozdzia� 12. Wyliczenia, automatyczne opakowywanie typów prostych i adnotacje(metadane) ............................................................................................291Typy wyliczeniowe ...................................................................................................................291
Podstawy wylicze� ..............................................................................................................292Metody values() i valueOf() ................................................................................................294Wyliczenia Javy jako typy klasowe .....................................................................................295Wyliczenia dziedzicz� po klasie Enum ...............................................................................297Inny przyk�ad wyliczenia ....................................................................................................299
Opakowania typów ....................................................................................................................300Klasa Character ...................................................................................................................301Klasa Boolean .....................................................................................................................301Opakowania typów numerycznych .....................................................................................301
8 Java. Kompendium programisty
Automatyczne opakowywanie typów prostych .........................................................................303Automatyczne opakowywanie i metody ..............................................................................304Automatyczne opakowywanie i rozpakowywanie w wyra�eniach ......................................304Automatyczne opakowywanie typów znakowych i logicznych ..........................................306Automatyczne opakowywanie pomaga zapobiega� b��dom ................................................307S�owo ostrze�enia ................................................................................................................308
Adnotacje (metadane) ................................................................................................................308Podstawy tworzenia adnotacji .............................................................................................308Okre�lanie strategii zachowywania adnotacji ......................................................................309Odczytywanie adnotacji w trakcie dzia�ania programu za pomoc� refleksji .......................310Interfejs AnnotatedElement .................................................................................................315Warto�ci domy�lne ..............................................................................................................315Adnotacje znacznikowe .......................................................................................................317Adnotacje jednoelementowe ...............................................................................................318Wbudowane adnotacje ........................................................................................................319Ograniczenia .......................................................................................................................321
Rozdzia� 13. Wej�cie-wyj�cie, aplety i inne tematy ......................................................323Podstawowa obs�uga wej�cia i wyj�cia ......................................................................................323
Strumienie ...........................................................................................................................324Strumienie znakowe i bajtowe .............................................................................................324Predefiniowane strumienie ..................................................................................................326
Odczyt danych z konsoli ............................................................................................................327Odczyt znaków ....................................................................................................................327Odczyt �a�cuchów ...............................................................................................................328
Wy�wietlanie informacji na konsoli ..........................................................................................330Klasa PrintWriter .......................................................................................................................331Odczyt i zapis plików ................................................................................................................332Automatyczne zamykanie pliku .................................................................................................338Podstawy apletów ......................................................................................................................341Modyfikatory transient i volatile ...............................................................................................344Operator instanceof ...................................................................................................................345Modyfikator strictfp ...................................................................................................................347Metody napisane w kodzie rdzennym ........................................................................................347Problemy z metodami rdzennymi ..............................................................................................351Stosowanie asercji .....................................................................................................................351
Opcje w��czania i wy��czania asercji ..................................................................................354Import statyczny ........................................................................................................................354Wywo�ywanie przeci��onych konstruktorów za pomoc� this() .................................................357
Rozdzia� 14. Typy sparametryzowane ..........................................................................361Czym s� typy sparametryzowane? .............................................................................................362Prosty przyk�ad zastosowania typów sparametryzowanych ......................................................362
Typy sparametryzowane dzia�aj� tylko dla obiektów ..........................................................366Typy sparametryzowane ró�ni� si�, je�li maj� inny argument typu ....................................366W jaki sposób typy sparametryzowane zwi�kszaj� bezpiecze�stwo? .................................366
Klasa sparametryzowana z dwoma parametrami typu ...............................................................369Ogólna posta� klasy sparametryzowanej ...................................................................................370Typy ograniczone ......................................................................................................................370Zastosowanie argumentów wieloznacznych ..............................................................................373
Ograniczony argument wieloznaczny .................................................................................375Tworzenie metody sparametryzowanej .....................................................................................380
Konstruktory sparametryzowane .........................................................................................382Interfejsy sparametryzowane .....................................................................................................383Typy surowe i starszy kod .........................................................................................................385
Spis tre�ci 9
Hierarchia klas sparametryzowanych ........................................................................................388Zastosowanie sparametryzowanej klasy bazowej ................................................................388Podklasa sparametryzowana ................................................................................................390Porównywanie typów w hierarchii klas sparametryzowanych w czasie wykonywania .......391Rzutowanie ..........................................................................................................................393Przykrywanie metod w klasach sparametryzowanych .........................................................394
Wnioskowanie typów a typy sparametryzowane .......................................................................395Znoszenie ..................................................................................................................................397
Metody mostu ......................................................................................................................398B��dy niejednoznaczno�ci .........................................................................................................400Pewne ograniczenia typów sparametryzowanych ......................................................................401
Nie mo�na tworzy� egzemplarza parametru typu ................................................................401Ograniczenia dla sk�adowych statycznych ..........................................................................402Ograniczenia tablic typów sparametryzowanych ................................................................402Ograniczenia wyj�tków typów sparametryzowanych ..........................................................404
Cz��� II Biblioteka j�zyka Java ........................................................ 405
Rozdzia� 15. Obs�uga �a�cuchów ................................................................................407Konstruktory klasy String ..........................................................................................................408D�ugo�� �a�cucha .......................................................................................................................410Specjalne operacje na �a�cuchach ..............................................................................................410
Litera�y tekstowe .................................................................................................................410Konkatenacja �a�cuchów .....................................................................................................411Konkatenacja �a�cuchów z innymi typami danych .............................................................411Konwersja �a�cuchów i metoda toString() ..........................................................................412
Wyodr�bnianie znaków .............................................................................................................413Metoda charAt() ..................................................................................................................413Metoda getChars() ...............................................................................................................414Metoda getBytes() ...............................................................................................................414Metoda toCharArray() .........................................................................................................415
Porównywanie �a�cuchów .........................................................................................................415Metody equals() i equalsIgnoreCase() .................................................................................415Metoda regionMatches() .....................................................................................................416Metody startsWith() i endsWith() ........................................................................................416Metoda equals() kontra operator == ....................................................................................417Metoda compareTo() ...........................................................................................................417
Przeszukiwanie �a�cuchów ........................................................................................................419Modyfikowanie �a�cucha ..........................................................................................................420
Metoda substring() ..............................................................................................................421Metoda concat() ..................................................................................................................422Metoda replace() .................................................................................................................422Metoda trim() ......................................................................................................................422
Konwersja danych za pomoc� metody valueOf() ......................................................................423Zmiana wielko�ci liter w �a�cuchu ............................................................................................424Dodatkowe metody klasy String ................................................................................................425Klasa StringBuffer .....................................................................................................................425
Konstruktory klasy StringBuffer .........................................................................................425Metody length() i capacity() ................................................................................................427Metoda ensureCapacity() ....................................................................................................427Metoda setLength() .............................................................................................................427Metody charAt() i setCharAt() ............................................................................................428Metoda getChars() ...............................................................................................................428Metoda append() .................................................................................................................429
10 Java. Kompendium programisty
Metoda insert() ....................................................................................................................429Metoda reverse() .................................................................................................................430Metody delete() i deleteCharAt() ........................................................................................430Metoda replace() .................................................................................................................431Metoda substring() ..............................................................................................................431Dodatkowe metody klasy StringBuffer ...............................................................................432
Klasa StringBuilder ...................................................................................................................433
Rozdzia� 16. Pakiet java.lang .....................................................................................435Opakowania typów prostych .....................................................................................................436
Klasa Number ......................................................................................................................436Klasy Double i Float ...........................................................................................................436Klasy Byte, Short, Integer i Long ........................................................................................440Klasa Character ...................................................................................................................448Dodatki wprowadzone w celu obs�ugi punktów kodowych Unicode ..................................450Klasa Boolean .....................................................................................................................451
Klasa Void .................................................................................................................................451Klasa Process .............................................................................................................................452Klasa Runtime ...........................................................................................................................454
Zarz�dzanie pami�ci� ..........................................................................................................454Wykonywanie innych programów .......................................................................................456
Klasa ProcessBuilder .................................................................................................................457Klasa System .............................................................................................................................459
Wykorzystanie metody currentTimeMillis() do obliczania czasu wykonywania programu .......461U�ycie metody arraycopy() .................................................................................................462W�a�ciwo�ci �rodowiska .....................................................................................................462
Klasa Object ..............................................................................................................................463Wykorzystanie metody clone() i interfejsu Cloneable ...............................................................464Klasa Class ................................................................................................................................466Klasa ClassLoader .....................................................................................................................468Klasa Math ................................................................................................................................469
Funkcje trygonometryczne ..................................................................................................469Funkcje wyk�adnicze ...........................................................................................................469Funkcje zaokr�gle� .............................................................................................................470Ró�norodne metody klasy Math ..........................................................................................470
Klasa StrictMath ........................................................................................................................471Klasa Compiler ..........................................................................................................................472Klasy Thread i ThreadGroup oraz interfejs Runnable ...............................................................472
Interfejs Runnable ...............................................................................................................473Klasa Thread .......................................................................................................................473Klasa ThreadGroup .............................................................................................................473
Klasy ThreadLocal i InheritableThreadLocal ............................................................................479Klasa Package ............................................................................................................................479Klasa RuntimePermission ..........................................................................................................480Klasa Throwable ........................................................................................................................480Klasa SecurityManager ..............................................................................................................481Klasa StackTraceElement ..........................................................................................................481Klasa Enum ...............................................................................................................................482Klasa ClassValue .......................................................................................................................482Interfejs CharSequence ..............................................................................................................483Interfejs Comparable .................................................................................................................483Interfejs Appendable ..................................................................................................................483Interfejs Iterable .........................................................................................................................484Interfejs Readable ......................................................................................................................484Interfejs AutoCloseable .............................................................................................................484
Spis tre�ci 11
Interfejs Thread.UncaughtExceptionHandler ............................................................................485Podpakiety pakietu java.lang .....................................................................................................485
Podpakiet java.lang.annotation ............................................................................................486Podpakiet java.lang.instrument ...........................................................................................486Podpakiet java.lang.invoke ..................................................................................................486Podpakiet java.lang.management ........................................................................................486Podpakiet java.lang.ref ........................................................................................................486Podpakiet java.lang.reflect ..................................................................................................486
Rozdzia� 17. Pakiet java.util, cz��� 1. — kolekcje ......................................................487Wprowadzenie do kolekcji ........................................................................................................488Zmiany w kolekcjach wprowadzone w JDK 5 ..........................................................................489
Typy sparametryzowane w znacz�cy sposób zmieniaj� kolekcje ........................................489Automatyczne opakowywanie u�atwia korzystanie z typów prostych .................................490P�tla for typu for-each .........................................................................................................490
Interfejsy kolekcji ......................................................................................................................490Interfejs Collection ..............................................................................................................491Interfejs List ........................................................................................................................493Interfejs Set .........................................................................................................................494Interfejs SortedSet ...............................................................................................................495Interfejs NavigableSet .........................................................................................................495Interfejs Queue ....................................................................................................................496Interfejs Deque ....................................................................................................................496
Klasy kolekcji ............................................................................................................................499Klasa ArrayList ...................................................................................................................500Klasa LinkedList .................................................................................................................504Klasa HashSet .....................................................................................................................505Klasa LinkedHashSet ..........................................................................................................506Klasa TreeSet ......................................................................................................................507Klasa PriorityQueue ............................................................................................................508Klasa ArrayDeque ...............................................................................................................509Klasa EnumSet ....................................................................................................................510
Dost�p do kolekcji za pomoc� iteratora .....................................................................................510Korzystanie z iteratora Iterator ............................................................................................512P�tla typu for-each jako alternatywa dla iteratora ...............................................................514
Przechowywanie w kolekcjach w�asnych klas ...........................................................................515Interfejs RandomAccess ............................................................................................................516Korzystanie z map .....................................................................................................................516
Interfejsy map ......................................................................................................................517Klasy map ...........................................................................................................................519
Komparatory ..............................................................................................................................526Wykorzystanie komparatora ................................................................................................527
Algorytmy kolekcji ....................................................................................................................529Klasa Arrays ..............................................................................................................................534Dlaczego kolekcje s� sparametryzowane? .................................................................................539Starsze klasy i interfejsy ............................................................................................................541
Interfejs Enumeration ..........................................................................................................542Klasa Vector ........................................................................................................................542Klasa Stack ..........................................................................................................................546Klasa Dictionary ..................................................................................................................548Klasa Hashtable ...................................................................................................................549Klasa Properties ..................................................................................................................552Wykorzystanie metod store() i load() ..................................................................................555
Ostatnie uwagi na temat kolekcji ...............................................................................................557
12 Java. Kompendium programisty
Rozdzia� 18. Pakiet java.util, cz��� 2. — pozosta�e klasy u�ytkowe ............................559Klasa StringTokenizer ...............................................................................................................559Klasa BitSet ...............................................................................................................................561Klasa Date .................................................................................................................................564Klasa Calendar ..........................................................................................................................566Klasa GregorianCalendar ..........................................................................................................569Klasa TimeZone ........................................................................................................................570Klasa SimpleTimeZone .............................................................................................................571Klasa Locale ..............................................................................................................................572Klasa Random ...........................................................................................................................574Klasa Observable .......................................................................................................................576
Interfejs Observer ................................................................................................................577Przyk�ad u�ycia interfejsu Observer ....................................................................................577
Klasy Timer i TimerTask ..........................................................................................................580Klasa Currency ..........................................................................................................................582Klasa Formatter .........................................................................................................................583
Konstruktory klasy Formatter ..............................................................................................584Metody klasy Formatter ......................................................................................................585Podstawy formatowania ......................................................................................................585Formatowanie �a�cuchów i znaków ....................................................................................588Formatowanie liczb .............................................................................................................588Formatowanie daty i godziny ..............................................................................................589Specyfikatory %n i %% ......................................................................................................591Okre�lanie minimalnej szeroko�ci pola ...............................................................................591Okre�lanie precyzji ..............................................................................................................593U�ywanie znaczników (flag) formatów ...............................................................................594Wyrównywanie danych wyj�ciowych .................................................................................594Znaczniki spacji, plusa, zera i nawiasów .............................................................................595Znacznik przecinka .............................................................................................................596Znacznik # ...........................................................................................................................596Opcja wielkich liter .............................................................................................................597Stosowanie indeksu argumentu ...........................................................................................597Zamykanie obiektu klasy Formatter ....................................................................................599Metoda printf() w Javie .......................................................................................................599
Klasa Scanner ............................................................................................................................600Konstruktory klasy Scanner ................................................................................................600Podstawy skanowania ..........................................................................................................600Kilka przyk�adów u�ycia klasy Scanner ..............................................................................604Ustawianie separatorów ......................................................................................................609Pozosta�e elementy klasy Scanner .......................................................................................610
Klasy ResourceBundle, ListResourceBundle i PropertyResourceBundle .................................611Dodatkowe klasy i interfejsy u�ytkowe .....................................................................................616Podpakiety pakietu java.util .......................................................................................................616
java.util.concurrent, java.util.concurrent.atomic oraz java.util.concurrent.locks .................617java.util.jar ..........................................................................................................................617java.util.logging ...................................................................................................................617java.util.prefs .......................................................................................................................617java.util.regex ......................................................................................................................617java.util.spi ..........................................................................................................................617java.util.zip ..........................................................................................................................617
Spis tre�ci 13
Rozdzia� 19. Operacje wej�cia-wyj�cia: analiza pakietu java.io ....................................619Klasy i interfejsy obs�uguj�ce operacje wej�cia-wyj�cia ...........................................................620Klasa File ...................................................................................................................................621
Katalogi ...............................................................................................................................624Stosowanie interfejsu FilenameFilter ..................................................................................625Alternatywna metoda listFiles() ..........................................................................................626Tworzenie katalogów ..........................................................................................................626
Interfejsy AutoCloseable, Closeable i Flushable .......................................................................627Wyj�tki operacji wej�cia-wyj�cia ..............................................................................................628Dwa sposoby zamykania strumieni ...........................................................................................628Klasy strumieni ..........................................................................................................................630Strumienie bajtów ......................................................................................................................630
Klasa InputStream ...............................................................................................................630Klasa OutputStream ............................................................................................................631Klasa FileInputStream .........................................................................................................632Klasa FileOutputStream ......................................................................................................634Klasa ByteArrayInputStream ..............................................................................................636Klasa ByteArrayOutputStream ............................................................................................638Filtrowane strumienie bajtów ..............................................................................................639Buforowane strumienie bajtów ............................................................................................639Klasa SequenceInputStream ................................................................................................644Klasa PrintStream ................................................................................................................645Klasy DataOutputStream i DataInputStream .......................................................................648Klasa RandomAccessFile ....................................................................................................650
Strumienie znaków ....................................................................................................................651Klasa Reader .......................................................................................................................651Klasa Writer ........................................................................................................................651Klasa FileReader .................................................................................................................651Klasa FileWriter ..................................................................................................................653Klasa CharArrayReader ......................................................................................................654Klasa CharArrayWriter .......................................................................................................655Klasa BufferedReader .........................................................................................................657Klasa BufferedWriter ..........................................................................................................658Klasa PushbackReader ........................................................................................................659Klasa PrintWriter .................................................................................................................660
Klasa Console ............................................................................................................................661Serializacja ................................................................................................................................663
Interfejs Serializable ............................................................................................................664Interfejs Externalizable ........................................................................................................664Interfejs ObjectOutput .........................................................................................................664Klasa ObjectOutputStream ..................................................................................................664Interfejs ObjectInput ...........................................................................................................665Klasa ObjectInputStream ....................................................................................................665Przyk�ad serializacji ............................................................................................................666
Korzy�ci wynikaj�ce ze stosowania strumieni ...........................................................................669
Rozdzia� 20. System NIO ............................................................................................671Klasy systemu NIO ....................................................................................................................671Podstawy systemu NIO .............................................................................................................672
Bufory .................................................................................................................................672Kana�y .................................................................................................................................673Zestawy znaków i selektory ................................................................................................675
14 Java. Kompendium programisty
Udoskonalenia dodane do systemu NIO w wydaniu JDK 7 ......................................................676Interfejs Path .......................................................................................................................676Klasa Files ...........................................................................................................................678Klasa Paths ..........................................................................................................................679Interfejsy atrybutów plików ................................................................................................680Klasy FileSystem, FileSystems i FileStore ..........................................................................682
Stosowanie systemu NIO ...........................................................................................................683Stosowanie systemu NIO dla operacji wej�cia-wyj�cia na kana�ach ...................................684Stosowanie systemu NIO dla operacji wej�cia-wyj�cia na strumieniach .............................693Stosowanie systemu NIO dla operacji na �cie�kach i systemie plików ...............................695
Przyk�ady stosowania kana�ów w wersjach sprzed JDK 7 ........................................................703Odczytywanie plików (wersje sprzed JDK 7) .....................................................................704Zapisywanie plików (wersje sprzed JDK 7) ........................................................................707
Rozdzia� 21. Obs�uga sieci .........................................................................................711Podstawy dzia�ania sieci ............................................................................................................711Klasy i interfejsy obs�uguj�ce komunikacj� sieciow� ................................................................713Klasa InetAddress ......................................................................................................................714
Metody fabryczne ................................................................................................................714Metody klasy .......................................................................................................................715
Klasy Inet4Address oraz Inet6Address ......................................................................................716Gniazda klientów TCP/IP ..........................................................................................................716URL ...........................................................................................................................................720Klasa URLConnection ...............................................................................................................722Klasa HttpURLConnection ........................................................................................................724Klasa URI ..................................................................................................................................727Pliki cookie ................................................................................................................................727Gniazda serwerów TCP/IP ........................................................................................................727Datagramy .................................................................................................................................728
Klasa DatagramSocket ........................................................................................................728Klasa DatagramPacket ........................................................................................................729Przyk�ad u�ycia datagramów ...............................................................................................730
Rozdzia� 22. Klasa Applet ..........................................................................................733Dwa rodzaje apletów .................................................................................................................733Podstawy apletów ......................................................................................................................734
Klasa Applet ........................................................................................................................735Architektura apletu ....................................................................................................................735Szkielet apletu ...........................................................................................................................738
Inicjalizacja i przerywanie dzia�ania apletu .........................................................................739Przykrycie metody update() ................................................................................................740
Proste metody wy�wietlania sk�adników apletów ......................................................................740��danie ponownego wy�wietlenia .............................................................................................742
Prosty aplet z paskiem reklamowym ...................................................................................744Wykorzystywanie paska stanu ...................................................................................................746Znacznik APPLET j�zyka HTML .............................................................................................747Przekazywanie parametrów do apletów .....................................................................................748
Udoskonalenie apletu z paskiem reklamowym ...................................................................750Metody getDocumentBase() i getCodeBase() ...........................................................................751Interfejs AppletContext i metoda showDocument() ..................................................................752Interfejs AudioClip ....................................................................................................................754Interfejs AppletStub ...................................................................................................................754Wy�wietlanie danych wyj�ciowych na konsoli .........................................................................754
Spis tre�ci 15
Rozdzia� 23. Obs�uga zdarze� .....................................................................................755Dwa mechanizmy obs�ugi zdarze� ............................................................................................756Model obs�ugi zdarze� oparty na ich delegowaniu ....................................................................756
Zdarzenia .............................................................................................................................757�ród�a zdarze� .....................................................................................................................757Obiekty nas�uchuj�ce zdarze� .............................................................................................758
Klasy zdarze� ............................................................................................................................758Klasa ActionEvent ...............................................................................................................759Klasa AdjustmentEvent .......................................................................................................761Klasa ComponentEvent .......................................................................................................762Klasa ContainerEvent ..........................................................................................................762Klasa FocusEvent ................................................................................................................763Klasa InputEvent .................................................................................................................764Klasa ItemEvent ..................................................................................................................765Klasa KeyEvent ...................................................................................................................765Klasa MouseEvent ...............................................................................................................766Klasa MouseWheelEvent ....................................................................................................768Klasa TextEvent ..................................................................................................................769Klasa WindowEvent ............................................................................................................770
�ród�a zdarze� ...........................................................................................................................771Interfejsy nas�uchuj�ce zdarze� .................................................................................................772
Interfejs ActionListener .......................................................................................................772Interfejs AdjustmentListener ...............................................................................................773Interfejs ComponentListener ...............................................................................................773Interfejs ContainerListener ..................................................................................................773Interfejs FocusListener ........................................................................................................773Interfejs ItemListener ..........................................................................................................773Interfejs KeyListener ...........................................................................................................774Interfejs MouseListener .......................................................................................................774Interfejs MouseMotionListener ...........................................................................................774Interfejs MouseWheelListener ............................................................................................774Interfejs TextListener ..........................................................................................................775Interfejs WindowFocusListener ..........................................................................................775Interfejs WindowListener ....................................................................................................775
Stosowanie modelu delegowania zdarze� .................................................................................775Obs�uga zdarze� generowanych przez mysz .......................................................................776Obs�uga zdarze� generowanych przez klawiatur� ...............................................................779
Klasy adapterów ........................................................................................................................782Klasy wewn�trzne .....................................................................................................................784
Anonimowa klasa wewn�trzna ............................................................................................785
Rozdzia� 24. Wprowadzenie do AWT: praca z oknami, grafik� i tekstem ......................787Klasy AWT ................................................................................................................................788Podstawy okien ..........................................................................................................................790
Klasa Component ................................................................................................................790Klasa Container ...................................................................................................................791Klasa Panel ..........................................................................................................................791Klasa Window .....................................................................................................................792Klasa Frame ........................................................................................................................792Klasa Canvas .......................................................................................................................792
Praca z oknami typu Frame .......................................................................................................792Ustawianie wymiarów okna ................................................................................................793Ukrywanie i wy�wietlanie okna ..........................................................................................793Ustawianie tytu�u okna ........................................................................................................793Zamykanie okna typu Frame ...............................................................................................793
16 Java. Kompendium programisty
Tworzenie okna typu Frame z poziomu apletu ..........................................................................794Obs�uga zdarze� w oknie typu Frame .................................................................................796
Tworzenie programu wykorzystuj�cego okna ...........................................................................800Wy�wietlanie informacji w oknie ..............................................................................................801Praca z grafik� ...........................................................................................................................802
Rysowanie odcinków ..........................................................................................................802Rysowanie prostok�tów ......................................................................................................803Rysowanie elips, kó� i okr�gów ...........................................................................................804Rysowanie �uków ................................................................................................................805Rysowanie wielok�tów ........................................................................................................806Dostosowywanie rozmiarów obiektów graficznych ............................................................807
Praca z klas� Color ....................................................................................................................808Metody klasy Color .............................................................................................................809Ustawianie bie��cego koloru kontekstu graficznego ...........................................................810Aplet demonstruj�cy zastosowanie klasy Color ..................................................................810
Ustawianie trybu rysowania ......................................................................................................811Praca z czcionkami ....................................................................................................................812
Okre�lanie dost�pnych czcionek .........................................................................................813Tworzenie i wybieranie czcionek ........................................................................................815Uzyskiwanie informacji o czcionkach .................................................................................817
Zarz�dzanie tekstowymi danymi wyj�ciowymi z wykorzystaniem klasy FontMetrics ..............818Wy�wietlanie tekstu w wielu wierszach ..............................................................................819Wy�rodkowanie tekstu ........................................................................................................821Wyrównywanie wielowierszowych danych tekstowych .....................................................822
Rozdzia� 25. Stosowanie kontrolek AWT, mened�erów uk�adu graficznego oraz menu .....827Podstawy kontrolek ...................................................................................................................828
Dodawanie i usuwanie kontrolek ........................................................................................828Odpowiadanie na zdarzenia kontrolek .................................................................................828Wyj�tek HeadlessException ................................................................................................829
Etykiety .....................................................................................................................................829Stosowanie przycisków .............................................................................................................830
Obs�uga zdarze� przycisków ...............................................................................................831Stosowanie pól wyboru .............................................................................................................834
Obs�uga zdarze� pól wyboru ...............................................................................................834Klasa CheckboxGroup ...............................................................................................................836Kontrolki list rozwijanych .........................................................................................................838
Obs�uga zdarze� list rozwijanych ........................................................................................839Stosowanie list ...........................................................................................................................840
Obs�uga zdarze� generowanych przez listy .........................................................................841Zarz�dzanie paskami przewijania ..............................................................................................843
Obs�uga zdarze� generowanych przez paski przewijania ....................................................844Stosowanie kontrolek typu TextField ........................................................................................846
Obs�uga zdarze� generowanych przez kontrolk� TextField ....................................................848Stosowanie kontrolek typu TextArea .........................................................................................849Wprowadzenie do mened�erów uk�adu graficznego komponentów ..........................................850
FlowLayout .........................................................................................................................852BorderLayout ......................................................................................................................854Stosowanie obramowa� .......................................................................................................855GridLayout ..........................................................................................................................857Klasa CardLayout ................................................................................................................858Klasa GridBagLayout ..........................................................................................................861
Menu i paski menu ....................................................................................................................866Okna dialogowe .........................................................................................................................872FileDialog ..................................................................................................................................877
Spis tre�ci 17
Obs�uga zdarze� przez rozszerzanie dost�pnych komponentów AWT ......................................878Rozszerzanie kontrolki Button ............................................................................................879Rozszerzanie kontrolki Checkbox .......................................................................................880Rozszerzanie komponentu grupy pól wyboru .....................................................................881Rozszerzanie kontrolki Choice ............................................................................................882Rozszerzanie kontrolki List .................................................................................................883Rozszerzanie kontrolki Scrollbar .........................................................................................884
Przykrywanie metody paint() ....................................................................................................885
Rozdzia� 26. Obrazy ...................................................................................................887Formaty plików .........................................................................................................................888Podstawy przetwarzania obrazów: tworzenie, wczytywanie i wy�wietlanie .............................888
Tworzenie obiektu obrazu ...................................................................................................888adowanie obrazu ...............................................................................................................889Wy�wietlanie obrazu ...........................................................................................................889
Interfejs ImageObserver ............................................................................................................891Podwójne buforowanie ..............................................................................................................892Klasa MediaTracker ..................................................................................................................895Interfejs ImageProducer ............................................................................................................898
Klasa MemoryImageSource ................................................................................................898Interfejs ImageConsumer ..........................................................................................................900
Klasa PixelGrabber .............................................................................................................900Klasa ImageFilter ......................................................................................................................902
Klasa CropImageFilter ........................................................................................................903Klasa RGBImageFilter ........................................................................................................905
Animacja poklatkowa ................................................................................................................916Dodatkowe klasy obs�uguj�ce obrazy ........................................................................................919
Rozdzia� 27. Narz�dzia wspó�bie�no�ci ........................................................................921Pakiety interfejsu Concurrent API .............................................................................................922
Pakiet java.util.concurrent ...................................................................................................922Pakiet java.util.concurrent.atomic .......................................................................................923Pakiet java.util.concurrent.locks ..........................................................................................924
Korzystanie z obiektów s�u��cych do synchronizacji ................................................................924Klasa Semaphore .................................................................................................................924Klasa CountDownLatch ......................................................................................................930CyclicBarrier .......................................................................................................................931Klasa Exchanger ..................................................................................................................934
Klasa Phaser ..............................................................................................................................936Korzystanie z egzekutorów ........................................................................................................944
Przyk�ad prostego egzekutora ..............................................................................................945Korzystanie z interfejsów Callable i Future ........................................................................946
Obiekty typu TimeUnit ..............................................................................................................949Kolekcje wspó�bie�ne ................................................................................................................950Blokady .....................................................................................................................................951Operacje atomowe .....................................................................................................................954Programowanie równoleg�e przy u�yciu frameworku Fork/Join ...............................................955
Najwa�niejsze klasy frameworku Fork/Join ........................................................................956Strategia dziel i zwyci��aj ...................................................................................................959Prosty przyk�ad u�ycia frameworku Fork/Join ....................................................................960Znaczenie poziomu równoleg�o�ci ......................................................................................962Przyk�ad u�ycia klasy RecursiveTask<V> ..........................................................................966Asynchroniczne wykonywanie zada� .................................................................................968Anulowanie zadania ............................................................................................................968Okre�lanie statusu wykonania zadania ................................................................................969
18 Java. Kompendium programisty
Ponowne uruchamianie zadania ..........................................................................................969Pozosta�e zagadnienia .........................................................................................................970Wskazówki dotycz�ce stosowania frameworku Fork/Join ..................................................971
Pakiet Concurrency Utilities a tradycyjne metody j�zyka Java .................................................972
Rozdzia� 28. Wyra�enia regularne i inne pakiety ..........................................................973Pakiety g�ównego API j�zyka Java ............................................................................................973Przetwarzanie wyra�e� regularnych ..........................................................................................973
Klasa Pattern .......................................................................................................................975Klasa Matcher .....................................................................................................................976Sk�adnia wyra�e� regularnych ............................................................................................977Przyk�ad dopasowywania do wzorca ...................................................................................977Dwie opcje dopasowywania do wzorca ...............................................................................983Przegl�d wyra�e� regularnych ............................................................................................983
Refleksje ....................................................................................................................................983Zdalne wywo�ywanie metod (RMI) ...........................................................................................987
Prosta aplikacja typu klient-serwer wykorzystuj�ca RMI ...................................................987Formatowanie tekstu .................................................................................................................991
Klasa DateFormat ................................................................................................................991Klasa SimpleDateFormat ....................................................................................................993
Cz��� III Pisanie oprogramowania w j�zyku Java ............................... 997
Rozdzia� 29. Java Beans ............................................................................................999Czym jest komponent typu Java Bean? .....................................................................................999Zalety komponentów Java Beans ............................................................................................1000Introspekcja .............................................................................................................................1000
Wzorce w�a�ciwo�ci ..........................................................................................................1000Wzorce projektowe dla zdarze� ........................................................................................1002Metody i wzorce projektowe .............................................................................................1002Korzystanie z interfejsu BeanInfo .....................................................................................1002
W�a�ciwo�ci ograniczone ........................................................................................................1003Trwa�o�� ..................................................................................................................................1003Interfejs Customizer ................................................................................................................1004Interfejs Java Beans API ..........................................................................................................1004
Klasa Introspector .............................................................................................................1004Klasa PropertyDescriptor ..................................................................................................1006Klasa EventSetDescriptor ..................................................................................................1006Klasa MethodDescriptor ....................................................................................................1007
Przyk�ad komponentu Java Bean .............................................................................................1007
Rozdzia� 30. Wprowadzenie do pakietu Swing ...........................................................1011Geneza powstania biblioteki Swing .........................................................................................1012Bibliotek� Swing zbudowano na bazie zestawu narz�dzi AWT ..............................................1012Podstawowe cechy biblioteki Swing .......................................................................................1013
Komponenty biblioteki Swing s� lekkie ............................................................................1013Biblioteka Swing obs�uguje do��czany wygl�d i sposób obs�ugi ......................................1013
Podobie�stwo do architektury MVC .......................................................................................1014Komponenty i kontenery .........................................................................................................1015
Komponenty ......................................................................................................................1015Kontenery ..........................................................................................................................1016Panele kontenerów najwy�szego poziomu ........................................................................1016
Pakiety biblioteki Swing ..........................................................................................................1017Prosta aplikacja na bazie biblioteki Swing ..............................................................................1018
Spis tre�ci 19
Obs�uga zdarze� ......................................................................................................................1022Tworzenie apletu na bazie biblioteki Swing ............................................................................1026Rysowanie w bibliotece Swing ................................................................................................1028
Podstawy rysowania ..........................................................................................................1028Wyznaczanie obszaru rysowania .......................................................................................1029Przyk�ad rysowania ...........................................................................................................1030
Rozdzia� 31. Przewodnik po pakiecie Swing ..............................................................1035Klasy JLabel i ImageIcon ........................................................................................................1036Klasa JTextField ......................................................................................................................1038Przyciski biblioteki Swing .......................................................................................................1039
Klasa JButton ....................................................................................................................1040Klasa JToggleButton .........................................................................................................1042Pola wyboru ......................................................................................................................1045Przyciski opcji ...................................................................................................................1046
Klasa JTabbedPane ..................................................................................................................1049Klasa JScrollPane ....................................................................................................................1051Klasa JList ...............................................................................................................................1053Klasa JComboBox ...................................................................................................................1056Drzewa ....................................................................................................................................1059Klasa JTable ............................................................................................................................1062Dalsze poznawanie biblioteki Swing .......................................................................................1065
Rozdzia� 32. Serwlety ..............................................................................................1067Podstawy .................................................................................................................................1067Cykl �ycia serwletu .................................................................................................................1068Alternatywne sposoby tworzenia serwletów ............................................................................1069Korzystanie ze �rodowiska Tomcat .........................................................................................1069Przyk�ad prostego serwletu ......................................................................................................1071
Tworzenie i kompilacja kodu ród�owego serwletu ..........................................................1071Uruchamianie serwera Tomcat ..........................................................................................1072Uruchamianie przegl�darki i generowanie ��dania ...........................................................1072
Interfejs Servlet API ................................................................................................................1073Pakiet javax.servlet ..................................................................................................................1073
Interfejs Servlet .................................................................................................................1074Interfejs ServletConfig ......................................................................................................1074Interfejs ServletContext .....................................................................................................1074Interfejs ServletRequest ....................................................................................................1075Interfejs ServletResponse ..................................................................................................1075Klasa GenericServlet .........................................................................................................1075Klasa ServletInputStream ..................................................................................................1075Klasa ServletOutputStream ...............................................................................................1077Klasy wyj�tków zwi�zanych z serwletami ........................................................................1077
Odczytywanie parametrów serwletu ........................................................................................1077Pakiet javax.servlet.http ...........................................................................................................1079
Interfejs HttpServletRequest .............................................................................................1079Interfejs HttpServletResponse ...........................................................................................1079Interfejs HttpSession .........................................................................................................1080Interfejs HttpSessionBindingListener ................................................................................1081Klasa Cookie .....................................................................................................................1081Klasa HttpServlet ..............................................................................................................1083Klasa HttpSessionEvent ....................................................................................................1083Klasa HttpSessionBindingEvent .......................................................................................1084
20 Java. Kompendium programisty
Obs�uga ��da� i odpowiedzi HTTP .........................................................................................1085Obs�uga ��da� GET protoko�u HTTP ...............................................................................1085Obs�uga ��da� POST protoko�u HTTP .............................................................................1086
Korzystanie ze znaczników kontekstu u�ytkownika ................................................................1088 ledzenie sesji .........................................................................................................................1090
Cz��� IV Zastosowanie Javy w praktyce ......................................... 1093
Rozdzia� 33. Aplety i serwlety finansowe ..................................................................1095Obliczanie raty po�yczki .........................................................................................................1096
Pola apletu .........................................................................................................................1099Metoda init() ......................................................................................................................1100Metoda makeGUI() ...........................................................................................................1100Metoda actionPerformed() ................................................................................................1102Metoda compute() .............................................................................................................1103
Obliczanie przysz�ej warto�ci inwestycji ..................................................................................1104Obliczanie wk�adu pocz�tkowego wymaganego do uzyskania przysz�ej warto�ci inwestycji ......1108Obliczanie pocz�tkowej warto�ci inwestycji niezb�dnej do uzyskania odpowiedniej emerytury ...1112Obliczanie maksymalnej emerytury dla danej inwestycji ........................................................1116Obliczenie pozosta�ej kwoty do sp�aty kredytu .......................................................................1120Tworzenie serwletów finansowych .........................................................................................1123
Konwersja apletu RegPay do serwletu ..............................................................................1124Serwlet RegPayS ...............................................................................................................1124
Mo�liwe rozszerzenia ..............................................................................................................1127
Rozdzia� 34. Tworzenie mened�era pobierania plików w Javie ....................................1129Sposoby pobierania plików z internetu ....................................................................................1130Omówienie programu ..............................................................................................................1130Klasa Download ......................................................................................................................1131
Zmienne pobierania ...........................................................................................................1135Konstruktor klasy ..............................................................................................................1135Metoda download() ...........................................................................................................1135Metoda run() ......................................................................................................................1135Metoda stateChanged() ......................................................................................................1138Metody akcesorów i dzia�a� ..............................................................................................1139
Klasa ProgressRenderer ...........................................................................................................1139Klasa DownloadsTableModel .................................................................................................1140
Metoda addDownload() .....................................................................................................1142Metoda clearDownload() ...................................................................................................1142Metoda getColumnClass() .................................................................................................1143Metoda getValueAt() .........................................................................................................1143Metoda update() ................................................................................................................1143
Klasa DownloadManager ........................................................................................................1144Zmienne klasy DownloadManager ....................................................................................1149Konstruktor klasy ..............................................................................................................1149Metoda verifyUrl() ............................................................................................................1150Metoda tableSelectionChanged() ......................................................................................1150Metoda updateButtons() ....................................................................................................1151Obs�uga zdarze� akcji .......................................................................................................1152
Kompilacja i uruchamianie programu .....................................................................................1152Rozszerzanie mo�liwo�ci programu ........................................................................................1152
Spis tre�ci 21
Dodatek A Komentarze dokumentuj�ce ..................................................................1155Znaczniki narz�dzia javadoc ....................................................................................................1155
Znacznik @author .............................................................................................................1156Znacznik {@code} ............................................................................................................1156Znacznik @deprecated ......................................................................................................1157Znacznik {@docRoot} ......................................................................................................1157Znacznik @exception ........................................................................................................1157Znacznik {@inheritDoc} ..................................................................................................1157Znacznik {@link} .............................................................................................................1157Znacznik {@linkplain} .....................................................................................................1157Znacznik {@literal} ..........................................................................................................1158Znacznik @param .............................................................................................................1158Znacznik @return ..............................................................................................................1158Znacznik @see ..................................................................................................................1158Znacznik @serial ...............................................................................................................1159Znacznik @serialData .......................................................................................................1159Znacznik @serialField .......................................................................................................1159Znacznik @since ...............................................................................................................1159Znacznik @throws ............................................................................................................1159Znacznik {@value} ...........................................................................................................1159Znacznik @version ............................................................................................................1160
Ogólna posta� komentarzy dokumentacyjnych .......................................................................1160Wynik dzia�ania narz�dzia javadoc .........................................................................................1160Przyk�ad korzystaj�cy z komentarzy dokumentacyjnych ........................................................1161
Skorowidz .............................................................................................1163
22 Java. Kompendium programisty
Rozdzia� 9.
Pakiety i interfejsy
Niniejszy rozdzia� omawia dwie najbardziej innowacyjne cechy j�zyka Java: pakiety i inter-fejsy. Pakiety to pojemniki na klasy u�ywane do odpowiedniego podzia�u przestrzeni nazwklas. Programista mo�e utworzy� w swoim pakiecie na przyk�ad klas� List bez ryzyka kon-fliktu nazw z klas� List nale��c� do innego pakietu. Pakiety zapewniaj� struktur� podobn�do hierarchicznej i s� jawnie importowane do nowych definicji klas.
W poprzednich rozdzia�ach przedstawi�em, w jaki sposób metody definiuj� interfejs dla danychklasy. S�owo kluczowe interface umo�liwia ca�kowite oddzielenie interfejsu od jego imple-mentacji. Interfejs w Javie okre�la zbiór metod, które b�d� implementowane przez jedn� lubwi�cej klas. Sam interfejs nie definiuje �adnej implementacji. Interfejsy przypominaj� klasyabstrakcyjne, ale maj� jedn� bardzo wa�n� zalet�: klasa mo�e implementowa� dowoln� liczb�interfejsów. Przypomn�, i� klasa mo�e dziedziczy� tylko po jednej klasie (abstrakcyjnej lubtradycyjnej).
PakietyW dotychczasowych przyk�adach nazwa ka�dej z przyk�adowych klas pochodzi�a z jednej,tej samej przestrzeni nazw. Oznacza to, �e ka�da klasa musia�a mie� unikatow� nazw�, abynie dochodzi�o do konfliktów nazw. Gdyby nie przestrzenie nazw, z pewno�ci� w wi�kszychprojektach szybko wyczerpa�aby si� lista opisowych nazw dla klas. Co wi�cej, trzeba zapew-ni�, by ró�ni programi�ci nie tworzyli klas o takich samych nazwach. (Wyobra sobie ma��grup� programistów walcz�cych o to, kto b�dzie móg� nada� swojej klasie nazw� Foobar, lubsytuacj�, gdy na wszystkich grupach dyskusyjnych toczy si� spór o to, kto pierwszy nada�klasie nazw� Espresso). Projektanci Javy wymy�lili bardzo elastyczny mechanizm dzieleniaprzestrzeni nazw na mniejsze kawa�ki. Mechanizm ten nosi nazw� pakietu. Pakiet to nie tylkoprzestrze� nazw, ale te� sposób kontroli widoczno�ci i dost�pu. Mo�na zdefiniowa� klasy dos-t�pne jedynie dla innych klas z tego samego pakietu. Co wi�cej, mo�na zdefiniowa� metodydost�pne dla innych klas tego samego pakietu, ale nieosi�galne dla pozosta�ych klas. W ten spo-sób klasy z pakietu maj� bardzo dobr� wiedz� o sobie, ale nie udost�pniaj� tych informacjica�emu �wiatu.
220 Cz��� I � J�zyk Java
Definiowanie pakietu
Tworzenie pakietu nie jest trudne. Wystarczy zastosowa� polecenie package jako pierwszewyra�enie w pliku ród�owym Javy. Wszystkie klasy zdefiniowane w tak rozpocz�tym plikuzostan� przypisane do wskazanego pakietu. Pakiet okre�la przestrze� nazw dla klas. Pomini�-cie instrukcji package powoduje przypisanie klasy do domy�lnej przestrzeni nazw (przestrzenibez nazwy). (Dzi�ki temu a� do tego rozdzia�u nie musieli�my si� zajmowa� pakietami). Pakietdomy�lny nadaje si� w zasadzie tylko i wy��cznie do pisania krótkich programów, wi�c niejest stosowany w rzeczywistych aplikacjach. Na ogó� stosuje si� w�asne przestrzenie nazw, czylidefiniuje si� w�asne pakiety.
Oto ogólna posta� instrukcji package.package pakiet;
Element pakiet to nazwa pakietu. Poni�sza instrukcja tworzy pakiet o nazwie MyPackage.package MyPackage;
Java u�ywa katalogów systemu plików do przechowywania pakietów. Oznacza to, �e ka�dyplik .class utworzony dla pakietu MyPackage musi zosta� umieszczony w katalogu o nazwieMyPackage. Pami�taj, �e wielko�� liter ma znaczenie i nazwa katalogu musi by� dok�adnie takasama jak nazwa pakietu.
Ta sama instrukcja package mo�e pojawi� si� w wi�cej ni� jednym pliku ród�owym. Po prostuokre�la ona, do jakiego pakietu nale�� klasy zdefiniowane w danym pliku. Inne klasy zdefi-niowane w innym pliku ród�owym równie� mog� nale�e� do tego pakietu. W rzeczywistychaplikacjach pakiet sk�ada si� z wielu plików.
Mo�na tworzy� hierarchi� pakietów. W tym celu nale�y oddzieli� nazwy poszczególnych pakie-tów znakiem kropki (.). Ogólna posta� wielopoziomowego pakietu jest nast�puj�ca.
package pakiet1[.pakiet2[.pakiet3]];
Hierarchia pakietów musi by� odtworzona w systemie plików �rodowiska, w którym dzia�aJava. Na przyk�ad pakiet zadeklarowany za pomoc� wyra�enia:
package java.awt.image;
w systemie Windows musi znale� si� w katalogu java\awt\images. Warto ostro�nie dobiera�nazw� pakietu. Nie mo�na zmieni� nazwy pakietu bez jednoczesnej zmiany nazwy katalogu.
Znajdowanie pakietów i �cie�ka CLASSPATH
Jak ju� wspomniano, pakiety s� reprezentowane w systemie operacyjnym przez katalogi. Pow-staje wi�c pytanie: jak to si� dzieje, �e system wykonawczy Javy „wie”, gdzie ma szuka� utwo-rzonych przez nas pakietów? Odpowied musi uwzgl�dnia� trzy aspekty. Po pierwsze, domy�l-nie system wykonawczy u�ywa aktualnego katalogu jako pocz�tku �cie�ki wyszukiwania.Je�li pakiet znajduje si� w aktualnym katalogu lub jego podkatalogu, zostanie odnaleziony.
Rozdzia� 9. � Pakiety i interfejsy 221
Po drugie, zmienna �rodowiskowa CLASSPATH okre�la inne lokalizacje, w których trzeba szuka�pakietów. Po trzecie, programista mo�e wskaza� �cie�k� do swoich klas za pomoc� opcji-classpath polece� jva i javac.
Rozwa�my nast�puj�c� specyfikacj� pakietu.package MyPack;
Program odnajdzie pakiet MyPack, je�li spe�niony zosta� jeden z trzech warunków. Programzosta� uruchomiony z poziomu katalogu znajduj�cego si� bezpo�rednio nad katalogiem MyPackw hierarchii katalogów, zmienna �rodowiskowa CLASSPATH zawiera �cie�k� do katalogu MyPacklub opcja -classpath polecenia java wskazuje �cie�k� do katalogu MyPack.
W przypadku stosowania drugiego z wymienionych rozwi�za� �cie�ka do klas nie mo�e obej-mowa� samego katalogu MyPack. Powinna raczej wskazywa� �cie�k� do katalogu nadrz�dnegowzgl�dem katalogu MyPack. Je�li na przyk�ad w �rodowisku Windows �cie�ka do kataloguMyPack jest nast�puj�ca:
C:\MyPrograms\Java\MyPack
prawid�owa �cie�ka do klas powinna mie� nast�puj�c� posta�:
C:\MyPrograms\Java
Najprostszym sposobem sprawdzenia przyk�adów znajduj�cych si� w niniejszym rozdzialejest utworzenie nowego katalogu o nazwie zgodnej z nazw� pakietu w aktualnym katalogu tes-towym i umieszczenie w nim wszystkich plików .class. Programy nale�y uruchamia� z kata-logu testowego. W kolejnych przyk�adach zak�adam takie w�a�nie podej�cie.
Prosty przyk�ad pakietu
Pami�taj�c o wcze�niejszej wskazówce, warto skompilowa� i uruchomi� poni�szy przyk�ad.// prosty pakietpackage MyPack;
class Balance { String name; double bal;
Balance(String n, double b) { name = n; bal = b; }
void show() { if(bal<0) System.out.print("-->> "); System.out.println(name + ": " + bal+ " z�"); }}
class AccountBalance { public static void main(String args[]) {
222 Cz��� I � J�zyk Java
Balance current[] = new Balance[3];
current[0] = new Balance("K. J. Fielding", 123.23); current[1] = new Balance("Willhelm Tell", 157.02); current[2] = new Balance("Tom Jackson", -12.33);
for(int i=0; i<3; i++) current[i].show(); }}
Nadaj plikowi ród�owemu nazw� AccountBalance.java i umie�� go w katalogu MyPack.
Nast�pnie skompiluj kod. Umie�� wynikowy plik .class w katalogu MyPack. Uruchom program,u�ywaj�c poni�szego polecenia.
java MyPack.AccountBalance
Nale�y pami�ta�, �e powy�sze polecenie powinno by� wykonane z poziomu katalogu powy�ejkatalogu MyPack. (Alternatywnym rozwi�zaniem jest u�ycie jednej z dwóch pozosta�ychtechnik opisanych w poprzednim punkcie i umo�liwiaj�cych wskazanie �cie�ki do kataloguMyPack).
Klasa AccountBalance stanowi cz��� pakietu MyPack. Oznacza to, i� nie mo�na jej wykona� bez-po�rednio, czyli zastosowa� poni�szego polecenia.
java AccountBalance
Nazw� klasy trzeba poprzedzi� nazw� pakietu.
Ochrona dost�puW poprzednich rozdzia�ach wspomnia�em o wielu aspektach mechanizmu sterowania dost�pemi modyfikatorach dost�pu. Na przyk�ad teraz ka�dy wie, i� sk�adowa prywatna klasy mo�e by�odczytywana tylko i wy��cznie przez inne sk�adowe tej klasy. Pakiety dodaj� nowy wymiar dosterowania dost�pem. Java zapewnia wiele poziomów ochrony, aby programista móg� szcze-gó�owo okre�li� widoczno�� zmiennych i metod w klasach, podklasach i pakietach.
Klasy i pakiety to rozwi�zania pozwalaj�ce hermetyzowa� zmienne oraz metody, a tak�e okre-�la� przestrzenie nazw. Pakiety dzia�aj� jak pojemniki na klasy i inne pakiety. Klasy to pojem-niki przechowuj�ce dane i kod. Klasa stanowi najmniejsz� jednostk� abstrakcji w j�zykuJava. Dzi�ki wzajemnemu wspó�dzia�aniu klas i pakietów mo�liwe s� cztery kategorie widocz-no�ci sk�adowych klas:
� podklasy z tego samego pakietu,
� inne klasy z tego samego pakietu,
� podklasy z innych pakietów,
� inne klasy z innych pakietów.
Rozdzia� 9. � Pakiety i interfejsy 223
Trzy modyfikatory dost�pu (private, public i protected) pozwalaj� tworzy� wiele poziomówdost�pu dla wymienionych kategorii. Tabela 9.1 podsumowuje wszystkie mo�liwe kombinacje.
Tabela 9.1. Dost�p do sk�adowych klasy
private Brak modyfikatora protected public
Ta sama klasa Tak Tak Tak TakTen sam pakiet, podklasa Nie Tak Tak TakTen sam pakiet, inna klasa Nie Tak Tak TakInny pakiet, podklasa Nie Nie Tak TakInny pakiet, inna klasa Nie Nie Nie Tak
Cho� mechanizm sterowania dost�pem w Javie wydaje si� z�o�ony, bardzo �atwo go zrozumie�.Cokolwiek zadeklarowane z modyfikatorem public jest dost�pne z dowolnego miejsca. Cokol-wiek zadeklarowane z modyfikatorem private nie jest dost�pne poza w�asn� klas�. Gdyelement nie ma jawnie okre�lonego modyfikatora, jest widoczny w podklasach oraz w innychklasach tego samego pakietu. Jest to dost�p domy�lny. Je�eli element ma by� widoczny pozapakietem, ale tylko dla klas dziedzicz�cych po danej klasie, nale�y u�y� modyfikatora protected.
Tabela 9.1 dotyczy tylko sk�adowych klasy. Sama klasa mo�e posiada� tylko dwa poziomydost�pu: domy�lny i publiczny. Gdy klasa zostanie zadeklarowana z modyfikatorem public, jestdost�pna dla dowolnego innego kodu. Zastosowanie domy�lnego dost�pu powoduje, i� klasadost�pna jest tylko dla innych klas z tego samego pakietu.
Przyk�ad dost�pu
Kolejny przyk�ad ilustruje wykorzystanie wszystkich kombinacji modyfikatorów dost�pu.Przyk�ad sk�ada si� z pi�ciu klas i dwóch pakietów. Nale�y pami�ta�, �e klasy znajduj�ce si�w pakietach musz� zosta� umieszczone w katalogach nazwanych tak samo jak odpowiedniepakiety — w tym przypadku w katalogach p1 i p2.
Plik ród�owy pierwszego pakietu definiuje trzy klasy: Protection, Derived i SamePackage.Pierwsza klasa definiuje cztery zmienne typu int o ró�nym dost�pie. Zmienna n ma dost�pdomy�lny, n_pri dost�p prywatny, n_pro dost�p chroniony, a n_pub dost�p publiczny.
Pozosta�e klasy z przyk�adu b�d� próbowa�y uzyska� dost�p do zmiennych egzemplarza klasyProtection. Wiersze, które spowodowa�yby b��d kompilacji w zwi�zku z ograniczeniamidost�pu, zosta�y opatrzone komentarzem jednowierszowym (znaki //). Przed ka�dym z tychwierszy dodatkowo umieszczono komentarz informuj�cy o poziomie ochrony i ograniczeniachdost�pu.
Druga klasa, Derived, jest podklas� klasy Protection z tego samego pakietu p1. Powoduje to,i� klasa Derived ma dost�p do wszystkich zmiennych klasy bazowej poza n_pri, zmienn�prywatn�. Trzecia klasa, SamePackage, nie jest podklas� klasy Protection, ale znajduje si� w tymsamym pakiecie, wi�c równie� ma dost�p do wszystkich zmiennych poza n_pri.
224 Cz��� I � J�zyk Java
Kod z pliku Protection.java.package p1;
public class Protection { int n = 1; private int n_pri = 2; protected int n_pro = 3; public int n_pub = 4;
public Protection() { System.out.println("konstruktor klasy bazowej"); System.out.println("n = " + n); System.out.println("n_pri = " + n_pri); System.out.println("n_pro = " + n_pro); System.out.println("n_pub = " + n_pub); }}
Kod z pliku Derived.java.package p1;
class Derived extends Protection { Derived() { System.out.println("konstruktor podklasy"); System.out.println("n = " + n);
// tylko ta sama klasa // System.out.println("n_pri = " + n_pri);
System.out.println("n_pro = " + n_pro); System.out.println("n_pub = " + n_pub); }}
Kod z pliku SamePackage.java.package p1;
class SamePackage { SamePackage() { Protection p = new Protection(); System.out.println("konstruktor z tego samego pakietu"); System.out.println("n = " + p.n);
// tylko ta sama klasa // System.out.println("n_pri = " + p.n_pri);
System.out.println("n_pro = " + p.n_pro); System.out.println("n_pub = " + p.n_pub); }}
Teraz zajmijmy si� kodem ród�owym drugiego pakietu, p2. Dwie zdefiniowane w nim klasypozwalaj� sprawdzi� dwa pozosta�e przypadki zwi�zane ze sterowaniem dost�pem. Pierwszaklasa, Protection2, jest podklas� klasy p1.Protection. Ma ona dost�p do wszystkich zmien-
Rozdzia� 9. � Pakiety i interfejsy 225
nych poza zmiennymi n_pri (poniewa� jest to zmienna prywatna) i n (gdy� stosuje domy�lnypoziom dost�pu). Pami�taj, �e dost�p domy�lny zapewnia jedynie dost�p z poziomu tej samejklasy lub pakietu. Klasy potomne nale��ce do innych pakietów nie maj� dost�pu do takiejzmiennej. Klasa OtherPackage ma dost�p jedynie do jednej zmiennej, n_pub, zadeklarowanejz modyfikatorem public.
Kod z pliku Protection2.java.package p2;
class Protection2 extends p1.Protection { Protection2() { System.out.println("konstruktor podklasy z innego pakietu");
// tylko ta sama klasa lub pakiet // System.out.println("n = " + n);
// tylko ta sama klasa // System.out.println("n_pri = " + n_pri);
System.out.println("n_pro = " + n_pro); System.out.println("n_pub = " + n_pub); }}
Kod z pliku OtherPackage.java.package p2;
class OtherPackage { OtherPackage() { p1.Protection p = new p1.Protection(); System.out.println("konstruktor z innego pakietu");
// tylko ta sama klasa lub pakiet // System.out.println("n = " + p.n);
// tylko ta sama klasa // System.out.println("n_pri = " + p.n_pri);
// tylko ta sama klasa, pakiet lub podklasa // System.out.println("n_pro = " + p.n_pro);
System.out.println("n_pub = " + p.n_pub); }}
Poni�ej znajduj� si� kody ród�owe dwóch testów s�u��cych do sprawdzenia dzia�ania obupakietów. Oto kod testuj�cy pakiet p1.
// Test pakietu p1.package p1;
// Tworzenie egzemplarzy klas z p1.public class Demo { public static void main(String args[]) { Protection ob1 = new Protection();
226 Cz��� I � J�zyk Java
Derived ob2 = new Derived(); SamePackage ob3 = new SamePackage(); }}
Kod testuj�cy pakiet p2 jest nast�puj�cy.// Test pakietu p2.package p2;
// Tworzenie egzemplarzy klas z p2.public class Demo { public static void main(String args[]) { Protection2 ob1 = new Protection2(); OtherPackage ob2 = new OtherPackage(); }}
Import pakietówIstnienie pakietów pozwala �atwo segregowa� klasy i tworzy� ró�ne grupy. W�a�nie z tegopowodu wszystkie wbudowane klasy Javy znajduj� si� w pakietach. �adna z klas dostarcza-nych z Jav� nie znajduje si� w domy�lnym pakiecie. Poniewa� nazwy klas trzeba poprzedza�nazw� pakietu, takie rozwi�zanie staje si� uci��liwe, je�eli z danej klasy korzysta si� bardzocz�sto. Z tego powodu Java wykorzystuje instrukcj� import, która umo�liwia uwidocznieniekonkretnych klas lub ca�ych pakietów. Po dokonaniu importu wystarczy poda� tylko i wy��cznienazw� klasy. Instrukcja import jest tak naprawd� pomoc� programisty. Z punktu widzeniasamego j�zyka nie trzeba jej stosowa� w �adnym z programów. Gdy jednak wielokrotnie w pro-gramie korzysta si� z tych samych klas, importowanie pozwala zaoszcz�dzi� mnóstwa pisania.
W plikach ród�owych Javy instrukcja importu znajduje si� tu� po instrukcji package (o ileistnieje), a przed definicjami klas. Oto ogólna posta� instrukcji import.
import pakiet1[.pakiet2].(nazwaklasy | *);
Element pakiet1 to nazwa pakietu na najwy�szym poziomie, natomiast element pakiet2 tonazwa pakietu znajduj�cego si� w g�ównym pakiecie. W zasadzie nie istnieje ograniczenieco do liczby poziomów pakietów, wszystko zale�y od mo�liwo�ci systemu plików systemuoperacyjnego. Na ko�cu pojawia si� konkretna nazwaklasy lub znak gwiazdki (*), któryoznacza, i� kompilator powinien zaimportowa� ca�y pakiet. Poni�szy fragment kodu przed-stawia oba rozwi�zania.
import java.util.Date;import java.io.*;
Wszystkie standardowe klasy j�zyka Java znajduj� si� w pakiecie java. Podstawowe metodyzwi�zane z obs�ug� j�zyka zosta�y umieszczone w pakiecie java.lang. Cho� wszystkie innepakiety trzeba importowa� w sposób jawny, Java automatycznie w sposób niejawny importujewszystkie klasy tego pakietu. Jest to równoznaczne pisaniu poni�szego wiersza na pocz�tkuka�dego pliku ród�owego.
import java.lang.*;
Rozdzia� 9. � Pakiety i interfejsy 227
Je�li klasa o tej samej nazwie istnieje w dwóch ró�nych pakietach importowanych z wykorzy-staniem gwiazdki, kompilator nie zg�osi b��du. Kompilacja nie powiedzie si� dopiero wtedy,gdy spróbuje si� u�y� jednej z tych klas. Wtedy trzeba poda� pe�n� nazw� klasy, czyli nazw�samej klasy poprzedzon� nazw� pakietu.
Warto podkre�li�, �e wyra�enie import jest opcjonalne. Do ka�dej klasy mo�na odwo�a� si�bez importowania odpowiednich pakietów — stosuj�c pe�ne nazwy (obejmuj�ce wszystkiepakiety i podpakiety hierarchii). Nast�puj�cy fragment kodu u�ywa instrukcji importu.
import java.util.*;class MyDate extends Date {}
Poni�ej znajduje si� ten sam przyk�ad bez instrukcji import.class MyDate extends java.util.Date {}
W tej wersji zastosowano pe�n� nazw� klasy Date.
Zgodnie z tabel� 9.1, je�li nie tworzy si� podklasy, w momencie importu pakietu dost�pne b�d�tylko te sk�adowe, które zosta�y zadeklarowane jako public. Je�eli wi�c klasa Balance pakietuMyPack ma by� dost�pna poza swoim pakietem, trzeba j� zadeklarowa� jako klas� publiczn�i umie�ci� w osobnym pliku ród�owym.
package MyPack;
/* Teraz klasa Balance, jej konstruktor oraz metoda show() s� publiczne. Oznacza to, �e mog� by� u�ywane przez klasy z innych pakietów.*/public class Balance { String name; double bal;
public Balance(String n, double b) { name = n; bal = b; }
public void show() { if(bal<0) System.out.print("-->> "); System.out.println(name + ": " + bal+ " z�"); }}
Klasa Balance zosta�a teraz zadeklarowana z modyfikatorem public. Poza tym metoda show()i konstruktor tak�e zosta�y upublicznione. Oznacza to, i� klasy z innych pakietów maj� pe�nydost�p do tych elementów. Klasa TestBalance importuje pakiet MyPack i mo�e skorzysta�z klasy Balance.
import MyPack.*;
class TestBalance { public static void main(String args[]) {
228 Cz��� I � J�zyk Java
/* Poniewa� klasa Balance jest klas� publiczn�, mo�na jej u�y� oraz wywo�a� jej konstruktor. */ Balance test = new Balance("J. J. Jaspers", 99.88);
test.show(); // wywo�anie metody show() tak�e nie sprawi problemów }}
Jako eksperyment warto usun�� modyfikator public sprzed klasy Balance i spróbowa� ponow-nie skompilowa� kod. Kompilator zg�osi b��d.
InterfejsyZa pomoc� s�owa kluczowego interface mo�na w pe�ni oddzieli� interfejs klasy od jej imple-mentacji. Interfejs okre�la, co klasa musi robi�, ale nie wskazuje, w jaki sposób ma te zadaniawykona�. Interfejsy s� sk�adniowo podobne do klas, ale nie mog� si� w nich pojawi� zmiennesk�adowe, a metody deklaruje si� bez podawania jakiegokolwiek kodu. W ten sposób okre�lasi� metody, które klasa musi zaimplementowa�, ale nie wskazuje si� w �aden sposób, jak tegodokona�. Dowolna liczba klas mo�e implementowa� dany interfejs. Co wi�cej, jedna klasa mo�eimplementowa� wiele ró�nych interfejsów.
Aby zaimplementowa� interfejs, klasa musi zawiera� wszystkie metody wskazane w interfej-sie. Klasa mo�e je implementowa� w dowolny sposób. W�a�nie dzi�ki s�owu kluczowemuinterface j�zyk Java mo�e w pe�ni realizowa� za�o�enie „jeden interfejs, wiele metod”, czylijeden z aspektów polimorfizmu.
Interfejsy zosta�y tak zaprojektowane, by zapewnia� dynamiczne dostosowywanie si� do warun-ków w trakcie dzia�ania programów. W tradycyjnym rozwi�zaniu wywo�anie metody jednejklasy przez inn� klas� wymaga sprawdzenia przez kompilator, czy sygnatura wywo�ywanejmetody jest poprawna. Gdyby nie istnia�o nic innego poza tym wymogiem, Java zawiera�abystatyczne i nierozszerzalne �rodowisko klas. W takim systemie programi�ci d��yliby do umiesz-czania w�a�ciwych implementacji coraz wy�ej w hierarchii klas, tak aby odpowiednie rozwi�-zania by�y dost�pne dla coraz wi�kszej liczby podklas. Interfejs pozwala rozwi�za� ten pro-blem, gdy� oddziela definicj� metod od hierarchii dziedziczenia. Poniewa� interfejsy tworz�inn� hierarchi� ni� klasy, klasy niepowi�zane ze sob� w hierarchii dziedziczenia mog� imple-mentowa� te same interfejsy. W�a�nie w tym tkwi ogromny potencja� interfejsów Javy.
Interfejsy Javy oferuj� wi�kszo�� rozwi�za�, które w innych j�zykach programowania (na przy-k�ad C++) mo�na osi�gn�� wy��cznie przy u�yciu mechanizmu dziedziczenia wielobazowego(wielodziedziczenia).
Definiowanie interfejsu
Interfejs definiuje si� podobnie jak klas�. Oto ogólna posta� takiej definicji.
Rozdzia� 9. � Pakiety i interfejsy 229
dost�p interface nazwa { zwracany-typ nazwa-metody1(lista-parametrów); zwracany-typ nazwa-metody2(lista-parametrów); typ zmienna-finalna1 = warto��; typ zmienna-finalna2 = warto��; // ... zwracany-typ nazwa-metodyN(lista-parametrów); typ zmienna-finalnaN = warto��;}
W przypadku braku modyfikatora dost�pu (elementu dost�p) stosuje si� domy�lny poziomdost�pu, zatem interfejs jest dost�pny tylko dla klas nale��cych do tego samego pakietu. Zasto-sowanie modyfikatora public umo�liwia stosowanie tego interfejsu w dowolnym kodzie.W takim przypadku jeden plik mo�e zawiera� tylko jeden interfejs publiczny, a nazwa tego plikumusi odpowiada� nazwie interfejsu. Element nazwa to nazwa interfejsu b�d�ca dowolnym,poprawnym identyfikatorem. Zauwa�, �e definiowane metody nie zawieraj� �adnego kodu. Poli�cie parametrów pojawia si� znak �rednika. W zasadzie mo�na powiedzie�, �e s� to metodyabstrakcyjne, poniewa� w interfejsie nie mo�e pojawi� si� implementacja �adnej z metod.Ka�da klasa zwi�zana z danym interfejsem musi implementowa� wszystkie jego metody.
Wewn�trz deklaracji interfejsu mog� pojawi� si� zmienne. S� one jednak niejawnie ustawianena zmienne typu final i static, co oznacza, �e nie mog� zosta� zmienione przez implementu-j�c� je klas�. Co wi�cej, w trakcie ich deklarowania trzeba je zainicjalizowa� sta��. Dla wszyst-kich metod i zmiennych niejawnie jest stosowany modyfikator dost�pu public.
Poni�ej znajduje si� przyk�ad definicji interfejsu. Deklaruje on prosty interfejs, który zawierajedn� metod� o nazwie callback() przyjmuj�c� jeden parametr typu int.
interface Callback { void callback(int param);}
Implementacja interfejsu
Raz zdefiniowany interfejs mo�e by� implementowany przez wiele klas. Aby zaimplemento-wa� interfejs, trzeba doda� do klasy klauzul� implements oraz doda� wszystkie metody zdefi-niowane w interfejsie. Ogólna posta� klasy wykorzystuj�cej interfejsy jest nast�puj�ca.
dost�p class nazwaklasy [extends klasa-bazowa] [implements interfejs[, interfejs...]] { // cia�o klasy}
Je�li klasa implementuje wiele interfejsów, ich nazwy oddziela si� przecinkami. Je�eli dwaimplementowane interfejsy deklaruj� t� sam� metod�, metoda ta b�dzie stosowana przez klientówobu tych interfejsów. Metody implementuj�ce interfejs musz� by� metodami publicznymi.Co wi�cej, sygnatura typów implementowanej metody i jej deklaracji z interfejsu musi by�taka sama.
Oto krótki przyk�ad klasy implementuj�cej zdefiniowany wcze�niej interfejs Callback.
230 Cz��� I � J�zyk Java
class Client implements Callback { // implementuje interfejs Callback public void callback(int p) { System.out.println("wywo�anie callback() z warto�ci� " + p); }}
Zauwa�, �e metoda callback() zosta�a zadeklarowana z modyfikatorem public.
Implementowane metody publiczne musz� by� deklarowane jako publiczne (z modyfikatorempublic).
W pe�ni poprawne jest umieszczanie w klasie implementuj�cej interfejs dodatkowych sk�a-dowych, na przyk�ad metod. Poni�sza wersja klasy Client nie tylko implementuje metod�callback(), ale te� dodaje w�asn� metod� nonIfaceMeth().
class Client implements Callback { // implementuje interfejs Callback public void callback(int p) { System.out.println("wywo�anie callback() z warto�ci� " + p); }
void nonIfaceMeth() { System.out.println("Klasa implementuj�ca interfejs " + "moe zawiera� take w�asne metody."); }}
Dost�p do implementacji za po�rednictwem referencji do interfejsu
Zmienne reprezentuj�ce referencje do obiektów mo�na deklarowa� przy u�yciu interfejsów(zamiast odpowiednich typów klasowych). Takiej zmiennej mo�na przypisa� egzemplarzdowolnej klasy implementuj�cej zadeklarowany interfejs. Wywo�anie metody dla takiej referencjispowoduje wywo�anie odpowiedniej wersji metody nale��cej do w�a�ciwego egzemplarza klasy.Jest to bardzo wa�ny aspekt interfejsów. Metoda do wykonania jest wyszukiwana dynamiczniew trakcie dzia�ania programu, co oznacza, i� klasy mo�na tworzy� póniej ni� wywo�uj�cy jekod. Kod korzystaj�cy z metod interfejsu nie musi dysponowa� �adn� wiedz� o obiekcie, któregob�dzie dotyczy�o to wywo�anie. Ca�a idea wywo�a� metod interfejsu jest bardzo podobna dowywo�a� metod przes�oni�tych w podklasach klasy bazowej (patrz poprzedni rozdzia�).
Poniewa� dynamiczne wyszukiwanie metody do wykonania wi��e si� ze znacznymi kosztamiw porównaniu z tradycyjnymi wywo�aniami metody w Javie, nale�y unika� stosowania inter-fejsów w kodzie, który ma zapewnia� przede wszystkim wysok� wydajno��.
Nast�puj�cy kod wywo�uje metod� callback() przy u�yciu zmiennej referencyjnej interfejsu.class TestIface { public static void main(String args[]) { Callback c = new Client(); c.callback(42); }}
Rozdzia� 9. � Pakiety i interfejsy 231
Wynik dzia�ania programu jest nast�puj�cy.wywo�anie callback() z warto�ci� 42
Zauwa�, �e zmienna c jest typu Callback, a mimo to zosta� jej przypisany obiekt typu Client.Za po�rednictwem zmiennej c mo�na wywo�a� tylko metod� callback() — nie mo�na jeju�y� do uzyskania dost�pu do pozosta�ych sk�adowych klasy Client. Innymi s�owy, zmiennareferencyjna interfejsu „wie” tylko o metodach, które pojawi�y si� w deklaracji interfejsu. Z tegowzgl�du zmiennej c nie uda si� wywo�a� metody nonIfaceMeth(), gdy� zosta�a ona zdefinio-wana w klasie Client, ale nie w interfejsie Callback.
Powy�szy przyk�ad ilustruje co prawda sk�adni� korzystania ze zmiennej referencyjnej, którejtyp wskazuje interfejs (nie klas�), ale nie demonstruje pe�nego potencja�u tego rodzaju referencjiw obszarze polimorfizmu. Aby lepiej zobrazowa� mo�liwo�ci tego mechanizmu, warto opra-cowa� drug� implementacj� interfejsu Callback.
// Inna implementacja interfejsu Callback.class AnotherClient implements Callback { // implementuje interfejs Callback public void callback(int p) { System.out.println("Inna wersja metody callback()"); System.out.println("p podniesione do kwadratu to " + (p*p)); }}
Wykonaj kod poni�szej klasy.class TestIface2 { public static void main(String args[]) { Callback c = new Client(); AnotherClient ob = new AnotherClient();
c.callback(42);
c = ob; // teraz c odnosi si� do obiektu AnotherClient c.callback(42); }}
Program wykonuj�cy powy�szy kod wygeneruje nast�puj�ce wyniki.wywo�anie callback() z warto�ci� 42Inna wersja metody callback()p podniesione do kwadratu to 1764
atwo zauwa�y�, �e wywo�ywana wersja metody callback() jest identyfikowana dynamiczniew zale�no�ci od typu obiektu wskazywanego przez zmienn� c w czasie wykonywania. Cho�jest to bardzo prosty przyk�ad, wkrótce przedstawi� bardziej praktyczne zastosowanie.
Implementacja cz��ciowa
Klasa, która do��cza pewien interfejs, ale nie implementuje wszystkich zdefiniowanych w nimmetod, musi zosta� zadeklarowana jako klasa abstrakcyjna. Oto przyk�ad.
232 Cz��� I � J�zyk Java
abstract class Incomplete implements Callback { int a, b; void show() { System.out.println(a + " " + b); } // ...}
Poniewa� klasa Incomplete nie implementuje metody callback(), musi zosta� zadeklarowanajako klasa abstrakcyjna (modyfikator abstract). Klasy dziedzicz�ce po Incomplete musz� albozaimplementowa� metod� callback(), albo same zosta� zadeklarowane jako abstrakcyjne.
Interfejsy zagnie�d�one
Interfejs mo�na zadeklarowa� w formie sk�adowej klasy lub innego interfejsu. Taki interfejsokre�la si� mianem interfejsu sk�adowego lub interfejsu zagnie�d�onego. Interfejs zagnie�-d�ony mo�na zadeklarowa� z modyfikatorem dost�pu public, private lub protected. W tymaspekcie interfejsy zagnie�d�one ró�ni� si� od interfejsów najwy�szego poziomu, które — jakju� wspomniano — nale�y deklarowa� albo z modyfikatorem public, albo bez modyfikatoradost�pu (wówczas jest stosowany domy�lny poziom dost�pu). Interfejs zagnie�d�ony stoso-wany poza zasi�giem, w którym zosta� zadeklarowany, musi by� identyfikowany przez pe�n�nazw�, tj. poprzedzony nazw� klasy (lub interfejsu), której jest cz�onkiem. Oznacza to, �e pozaklas� lub interfejsem, w którym zadeklarowano interfejs zagnie�d�ony, nale�y stosowa� pe�n�nazw� tego interfejsu.
Oto prosty przyk�ad ilustruj�cy interfejs zagnie�d�ony:// Przyk�ad interfejsu zagnie�d�onego.
// Klasa A zawiera interfejs sk�adowy.class A { // to jest interfejs zagnie�d�ony public interface NestedIF { boolean isNotNegative(int x); }}
// Klasa B implementuje interfejs zagnie�d�ony.class B implements A.NestedIF { public boolean isNotNegative(int x) { return x < 0 ? false: true; }}
class NestedIFDemo { public static void main(String args[]) {
// u�ycie referencji typu interfejsu zagnie�d�onego A.NestedIF nif = new B();
if(nif.isNotNegative(10)) System.out.println("liczba 10 nie jest ujemna "); if(nif.isNotNegative(-12))
Rozdzia� 9. � Pakiety i interfejsy 233
System.out.println("to nie zostanie wy�wietlone "); }}
Jak wida�, klasa A definiuje interfejs sk�adowy nazwany NestedIF i zadeklarowany jako inter-fejs publiczny. Poni�szy zapis oznacza, �e klasa B implementuje ten interfejs zagnie�d�ony:
implements A.NestedIF
Warto zwróci� uwag� na pe�n� nazw� tego interfejsu (obejmuj�c� nazw� klasy, do którejnale�y). W ciele metody main() utworzono zmienn� referencyjn� typu A.NestedIF nazwan�nif, po czym przypisano tej zmiennej referencj� obiektu klasy B. Takie rozwi�zanie jest dopusz-czalne, poniewa� klasa B implementuje interfejs A.NestedIF.
Stosowanie interfejsów
Aby lepiej zrozumie� si�� drzemi�c� w interfejsach, warto przyjrze� si� bardziej praktycz-nemu przyk�adowi. We wcze�niejszych rozdzia�ach pojawi�a si� klasa o nazwie Stack, któraimplementowa�a stos o okre�lonym rozmiarze. Istnieje wiele ró�nych sposobów implemen-tacji stosu. Na przyk�ad stos mo�e mie� sta�y rozmiar lub rozszerza� si�. Co wi�cej, warto�cize stosu mo�na przechowywa� w tablicy, li�cie, drzewie binarnym itp. Niezale�nie od imple-mentacji interfejs stosu zawsze pozostaje taki sam. Innymi s�owy, metody pop() i push() dzia-�aj� tak samo niezale�nie od sposobu przechowywania danych na stosie. Z tego wzgl�du wartowydzieli� interfejs stosu, a implementacj� pozostawi� wyspecjalizowanym klasom. Przyjrzyjmysi� dwóm przyk�adom.
Pierwszy kod to interfejs definiuj�cy stos liczb ca�kowitych. Kod nale�y umie�ci� w pliku ró-d�owym IntStack.java. Interfejs zostanie wykorzystany przez dwie ró�ne implementacje stosu.
// Definicja interfejsu dla stosu liczb ca�kowitych.interface IntStack { void push(int item); // zapami�tanie elementu int pop(); // pobranie elementu}
Nast�puj�cy program tworzy klas� o nazwie FixedStack, która implementuje stos o sta�ymrozmiarze.
// Implementacja IntStack u�ywaj�ca tablicy o sta�ym rozmiarze.class FixedStack implements IntStack { private int stck[]; private int tos;
// alokacja i inicjalizacja stosu FixedStack(int size) { stck = new int[size]; tos = -1; }
// umieszczenie elementu na szczycie stosu public void push(int item) { if(tos==stck.length-1) // u�ycie zmiennej sk�adowej length
234 Cz��� I � J�zyk Java
System.out.println("Stos jest pe�ny."); else stck[++tos] = item; }
// zdj�cie elementu ze szczytu stosu public int pop() { if(tos < 0) { System.out.println("Stos nie zawiera adnych elementów."); return 0; } else return stck[tos--]; }}
class IFTest { public static void main(String args[]) { FixedStack mystack1 = new FixedStack(5); FixedStack mystack2 = new FixedStack(8);
// umieszczenie pewnych liczb na stosach for(int i=0; i<5; i++) mystack1.push(i); for(int i=0; i<8; i++) mystack2.push(i);
// zdj�cie liczb ze stosów System.out.println("Stos w mystack1:"); for(int i=0; i<5; i++) System.out.println(mystack1.pop());
System.out.println("Stos w mystack2:"); for(int i=0; i<8; i++) System.out.println(mystack2.pop()); }}
Poni�ej znajduje si� druga implementacja interfejsu IntStack, która tworzy stos o dynamiczniezmieniaj�cym si� rozmiarze. W tej implementacji tworzony jest stos z pewnym rozmiarempocz�tkowym. Je�li zostanie on przekroczony, stos jest rozszerzany — jego rozmiar wzrastadwukrotnie.
// Implementacja rozszerzaj�cego si� stosu.class DynStack implements IntStack { private int stck[]; private int tos;
// alokacja i inicjalizacja stosu DynStack(int size) { stck = new int[size]; tos = -1; }
// umieszczenie elementu na szczycie stosu public void push(int item) { // je�li stos jest pe�ny, alokacja nowej tablicy o wi�kszym rozmiarze if(tos==stck.length-1) {
Rozdzia� 9. � Pakiety i interfejsy 235
int temp[] = new int[stck.length * 2]; // podwojenie rozmiaru for(int i=0; i<stck.length; i++) temp[i] = stck[i]; stck = temp; stck[++tos] = item; } else stck[++tos] = item; }
// zdj�cie elementu ze szczytu stosu public int pop() { if(tos < 0) { System.out.println("Stos nie zawiera adnych elementów."); return 0; } else return stck[tos--]; }}
class IFTest2 { public static void main(String args[]) { DynStack mystack1 = new DynStack(5); DynStack mystack2 = new DynStack(8);
// p�tle powoduj� zwi�kszenie rozmiaru stosu for(int i=0; i<12; i++) mystack1.push(i); for(int i=0; i<20; i++) mystack2.push(i);
System.out.println("Stos w mystack1:"); for(int i=0; i<12; i++) System.out.println(mystack1.pop());
System.out.println("Stos w mystack2:"); for(int i=0; i<20; i++) System.out.println(mystack2.pop()); }}
Poni�szy kod programu korzysta z obu implementacji: FixedStack i DynStack. Korzysta przytym ze zmiennej referencyjnej interfejsu. Oznacza to, �e wywo�ywane metody pop() i push()s� identyfikowane dynamicznie (w czasie wykonywania programu) zamiast w trakcie kom-pilacji.
/* Utworzenie zmiennej referencyjnej interfejsu i u�ycie jej do dost�pu do stosu.*/class IFTest3 { public static void main(String args[]) { IntStack mystack; // utworzenie zmiennej referencyjnej interfejsu DynStack ds = new DynStack(5); FixedStack fs = new FixedStack(8);
mystack = ds; // za�adowanie stosu dynamicznego // umieszczenie warto�ci na stosie for(int i=0; i<12; i++) mystack.push(i);
236 Cz��� I � J�zyk Java
mystack = fs; // za�adowanie stosu o sta�ym rozmiarze for(int i=0; i<8; i++) mystack.push(i);
mystack = ds; System.out.println("Warto�ci na stosie dynamicznym:"); for(int i=0; i<12; i++) System.out.println(mystack.pop());
mystack = fs; System.out.println("Warto�ci na stosie o sta�ym rozmiarze:"); for(int i=0; i<8; i++) System.out.println(mystack.pop()); }}
W tym programie zmienna mystack jest typu IntStack. Je�li wi�c zawiera tak� sam� warto��jak ds, korzysta z metod push() i pop() zdefiniowanych dla klasy DynStack. Je�li zawiera tak�sam� warto�� jak fs, korzysta z metod push() i pop() zdefiniowanych dla klasy FixedStack.Jak ju� wspomnia�em, wybór wersji metody dokonywany jest w sposób dynamiczny w trakciewykonywania programu. Dost�p do wielu implementacji interfejsu przez zmienne referencyjneto najbardziej u�yteczny sposób wykorzystania polimorfizmu w j�zyku Java.
Zmienne w interfejsach
Mo�na u�y� interfejsów do wprowadzenia w wielu klasach tych samych sta�ych. Wystarczyw interfejsie zadeklarowa� i zainicjalizowa� zmienne. Klasa implementuj�ca taki interfejsb�dzie w swoim zasi�gu „widzia�a” wszystkie te zmienne jako sta�e. (Przypomina to tworzeniesta�ych dyrektyw� #define lub deklaracj� const w j�zykach C lub C++). Je�li interfejs niezawiera �adnych metod, wtedy implementuj�ca go klasa nie musi deklarowa� �adnych dodat-kowych metod. Zmienne wyst�puj�ce w interfejsie s� widziane przez klas� korzystaj�c� z inter-fejsu jako zmienne typu final. Kolejny przyk�ad u�ywa interfejsu do zaimplementowaniaautomatu podejmuj�cego decyzje.
import java.util.Random;
interface SharedConstants { int NO = 0; int YES = 1; int MAYBE = 2; int LATER = 3; int SOON = 4; int NEVER = 5;}
class Question implements SharedConstants { Random rand = new Random(); int ask() { int prob = (int) (100 * rand.nextDouble()); if (prob < 30) return NO; // 30% else if (prob < 60) return YES; // 30% else if (prob < 70) return MAYBE; // 10%
Rozdzia� 9. � Pakiety i interfejsy 237
else if (prob < 85) return LATER; // 15% else if (prob < 98) return SOON; // 13% else return NEVER; // 2% }}
class AskMe implements SharedConstants { static void answer(int result) { switch(result) { case NO: System.out.println("Nie"); break; case YES: System.out.println("Tak"); break; case MAYBE: System.out.println("Moe"); 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()); }}
Zauwa�, �e program korzysta z jednej ze standardowych klas Javy — klasy Random. Klasageneruje liczby pseudolosowe. Zawiera kilka metod zwracaj�cych wylosowane liczby w for-macie najbardziej odpowiednim dla danego programu. W tym przyk�adzie stosujemy metod�nextDouble(), która zwraca losow� warto�� zmiennoprzecinkow� w przedziale od 0.0 do 1.0.
W przyk�adowym programie dwie klasy, Question i AskMe, implementuj� interfejs Shared�Constants definiuj�cy sta�e YES, NO, MAYBE, SOON, LATER i NEVER. Kod wewn�trz klas korzystaz tych zmiennych w taki sposób, jakby by�y one zadeklarowane w tej klasie lub odziedziczonepo innej klasie. Zauwa�, �e wyniki dzia�ania programu s� ró�ne po ka�dym jego uruchomieniu.
WkrótcePóniejTakNie
238 Cz��� I � J�zyk Java
Interfejsy mo�na rozszerza�
Jeden interfejs mo�e dziedziczy� po innym interfejsie. Wystarczy w tym celu u�y� s�owa klu-czowego extends. Sk�adnia jest dok�adnie taka sama jak w przypadku dziedziczenia po klasie.Gdy klasa implementuje interfejs dziedzicz�cy po innym interfejsie, musi zapewni� wszystkiemetody zdefiniowane w ca�ym �a�cuchu dziedziczenia. Oto przyk�ad.
// Jeden interfejs rozszerza inny.interface A { void meth1(); void meth2();}
// teraz B zawiera meth1() i meth2() oraz dodaje w�asne meth3()interface B extends A { void meth3();}
// klasa musi zaimplementowa� wszystkie metody zdefiniowane w interfejsach A i Bclass MyClass implements B { public void meth1() { System.out.println("Implementacja meth1()."); }
public void meth2() { System.out.println("Implementacja meth2()."); }
public void meth3() { System.out.println("Implementacja meth3()."); }}
class IFExtend { public static void main(String arg[]) { MyClass ob = new MyClass();
ob.meth1(); ob.meth2(); ob.meth3(); }}
Jako eksperyment mo�na spróbowa� usun�� implementacj� metody meth1() z klasy MyClass.Spowoduje to zg�oszenie b��du kompilacji. Dowolna klasa implementuj�ca dany interfejs musizdefiniowa� kod wszystkich metod interfejsu, tak�e tych, które interfejs odziedziczy� po innyminterfejsie.
Cho� przyk�ady przedstawione w ksi��ce niezbyt cz�sto korzystaj� z pakietów i interfejsów,w rzeczywistych programach Javy oba elementy s� niezwykle wa�ne. W zasadzie wszystkiepowa�ne programy Javy umieszcza si� w pakietach. Wi�kszo�� z tych programów definiujew�asne interfejsy. Warto wi�c dobrze zapozna� si� z tymi kwestiami.
SkorowidzA
abstrakcja, 48adnotacja, 308, 321
@Deprecated, 320@Documented, 319@Inherited, 320@Override, 320@Retention, 319@SafeVarargs, 320@SuppressWarnings, 321@Target, 319jednoelementowa, 318wbudowana, 319znacznikowa, 317
adnotacje ze strategi�CLASS, 309RUNTIME, 309SOURCE, 309
adres, 712adres 127.0.0.1, 991adres IP, 712adres URL, 1067akcja, 51algorytm harmonogramowania w�tków, 272algorytmy, 488algorytmy w klasie Collections, 530analizator leksykalny, 559Android, 46animacja poklatkowa, 916anonimowa klasa wewn�trzna, 785ANSI, 33aplet
RegPay, 1124RemBal, 1120SimpleApplet, 343z paskiem reklamowym, 744, 750
aplety, 37, 341, 716, 733, 794, 1026, 1095architektura, 735
sk�adniki, 740szkielet, 738
aplikacja typu klient-serwer, 987instalacja plików, 990kod ród�owy, 988rejestr RMI, 990uruchomienie klienta, 991uruchomienie serwera, 990
appletviewer, 734architektura
apletu, 735model-delegacja, 1014model-widok-kontroler, 1014MVC, 1014z odr�bnym modelem, 1014
argument, 152append, 653array, 654fileObj, 653filePath, 653formatString, 993locale, 992outputStream, 660style, 992wieloznaczny, 374wieloznaczny ograniczony, 375, 377
argumenty wiersza polece�, 186ARM, automatic resource management, 338, 484ASCII, 409asercja, 351
w��czanie, 354wy��czanie, 354
asynchroniczne wykonywanie zada�, 968autoanaliza programu, 983automatyczna konwersja typu, 81
1164 Java. Kompendium programisty
automatyczne opakowywanie, 490typów logicznych, 306typów prostych, 303typów znakowych, 306w wyra�eniach, 304
automatyczne rozpakowywanie, 304, 305automatyczne rozszerzanie typów, 83automatyczne wydobywanie typów prostych, 303automatyczne zarz�dzanie zasobami, 338, 484AWT, Abstract Window Toolkit, 342, 787, 1012
Bbardziej znacz�cy surogat, 451barwa, 809barwa-nasycenie-jasno��, 809bezpiecze�stwo, 37, 351, 387, 464, 696bezpiecze�stwo kolekcji, 540biblioteka API Javy, 45biblioteka AWT, 342, 733biblioteka Swing, 342, 733, 1012, 1015, 1065biblioteki klas Javy, 65blok kodu, 61blok synchronizuj�cy, 276blokada, 951blokada wielobie�na, 952blokada wzajemna, deadlock, 282b��d niejednoznaczno�ci, 400b��dy systemowe, 286BMP, basic multilingual plane, 451buforowanie operacji wej�cia-wyj�cia, 640bufory, 672
CCGI, Common Gateway Interface, 39, 1067cia�o metody, 57cykl �ycia serwletu, 1068czcionki, 812, 817
nazwa, 815rozmiar, 815styl, 815terminy, 818
czcionki dost�pne, 813
Ddane, 142dane steruj�ce dost�pem do kodu, 48dane wej�ciowe, 619dane wyj�ciowe, 594, 619, 754datagramy, 728, 730definicja klasy, 141definiowanie interfejsu, 228definiowanie ograniczenia, 373definiowanie pakietu, 220
deklaracja metody kodu rdzennego, 348deklaracja tablicy, 91deklaracja zmiennej steruj�cej, 126deklarowanie obiektów, 145dekoder, 675dekrementacja, 96delegacja interfejsu u�ytkownika, 1014delegowanie zdarze�, 756, 775deserializacja, 664d�ugo�� �a�cucha, 410dodanie metody, 148, 151domena, 714domy�lny poziom równoleg�o�ci, 972dopasowywanie do wzorca, 977, 983doprecyzowane zg�aszanie dalej, 257dost�p
asynchroniczny, 277do kolekcji, 510do sk�adowych, 195do sk�adowych klasy, 223domy�lny, 175prywatny, 175publiczny, 175wielow�tkowy, 276
dowi�zanie póne, 216dowi�zanie wczesne, 216drzewo, 1059drzewo katalogów, 701dwa parametry typu, 370dynamiczne przydzielanie metod, 209dynamiczny polimorfizm, 211dziedziczenie, inheritance, 50, 193, 206dziel i zwyci��aj, 959
Eegzekutor, 923, 944egzemplarz klasy, 49, 141elipsa, 804emerytura, 1116etykieta, 136, 829
Ffa�szywe budzenie, 278FIFO, 496filtr, 625
Blur, 913Contrast, 910Grayscale, 909Invert, 909konwolucyjny, 911Sharpen, 916
filtrowanie obrazu, 906finalizacja, 158
Skorowidz 1165
formatGIF, 888JPEG, 888PNG, 888
formatowaniedaty i czasu, 994daty i godziny, 589liczb, 588�a�cuchów i znaków, 588tekstu, 973, 991
framework Collections, 361, 488, 516, 923framework Fork/Join, 45, 921, 955framework NIO, 45FTP, File Transfer Protocol, 1130funkcja matches(), 976funkcja mieszaj�ca, 505funkcja randomColor(), 1008funkcje trygonometryczne, 469funkcje wirtualne, 211funkcje wyk�adnicze, 470funkcje zaokr�gle�, 471
Ggniazda klientów TCP/IP, 716gniazda serwerów TCP/IP, 727gniazdo, socket, 711, 716gniazdo Berkeley, 711graficzny interfejs u�ytkownika, 733, 755grupa w�tków, 264grupowe rozg�aszanie, 757GUI, 733, 755
Hhas�a j�zyka Java, 40hermetyzacja, encapsulation, 49hierarchia dziedziczenia, 203hierarchia klas, 51hierarchia klas sparametryzowanych, 388hierarchia klas wyj�tków, 241histogram, 901HSB, Hue-Saturation-Brightness, 809HTTP, HyperText Transfer Protocol, 1130
Iidentyfikator klasy, 55identyfikatory, 63implementacja interfejsu, 229import pakietów, 226import statyczny, 354, 356indeks argumentu, 597indeks wzgl�dny, 598informacje o �cie�ce, 696
inkrementacja, 96instrukcja
break, 136continue, 138do-while, 122for, 125for-each, 128goto, 136if, 113if-else-if, 115package, 220pusta, 122return, 139switch, 116throw, 247while, 121
instrukcje iteracyjnedo-while, 122for, 125for-each, 128p�tle zagnie�d�one, 133while, 121zmienna steruj�ca p�tl�, 125
instrukcje skokubreak, 134continue, 138return, 139
instrukcje wyboruif, 113if-else-if, 115switch, 116zagnie�d�one if, 115zagnie�d�one switch, 120
interfejsActionListener, 772, 1024AdjustmentListener, 773, 844AnnotatedElement, 315API, 922Appendable, 483AppletContext, 752AppletStub, 754AudioClip, 754AutoCloseable, 333, 484, 599, 607, 627, 634BeanInfo, 1002Callable, 947CGI, 1067CharSequence, 483Cloneable, 464Closeable, 627, 634Collection, 491Comparable, 483Comparator, 526ComponentListener, 773Concurrent API, 921
1166 Java. Kompendium programisty
interfejsContainerListener, 773Customizer, 1004Deque, 496Enumeration, 542Executor, 923Externalizable, 664FilenameFilter, 625Flushable, 627, 634FocusListener, 773Future, 947HttpServletRequest, 1079, 1090HttpServletResponse, 1079HttpSession, 1080HttpSessionBindingListener, 1081ImageConsumer, 900, 902ImageObserver, 891ImageProducer, 898, 902ItemListener, 773, 839Iterable, 484Iterator, 510Java Beans API, 1004java.io.Serializable, 1004KeyListener, 774, 779LayoutManager, 851List, 493ListSelectionModel, 1054Map, 517Map.Entry, 519MinMax, 383MouseListener, 774MouseMotionListener, 774MouseWheelListener, 774, 776NavigableMap, 519NavigableSet, 495ObjectInput, 665ObjectOutput, 664Observer, 577Path, 621, 676PlugInFilter.java, 907Queue, 496RandomAccess, 516Readable, 484, 600ReadableByteChannel, 600ReadWriteLock, 954Runnable, 265, 473Serializable, 664Servlet, 1074Servlet API, 1073ServletConfig, 1074ServletContext, 1074ServletRequest, 1075, 1077ServletResponse, 1075Set, 494
SortedMap, 518SortedSet, 495TextListener, 775Thread.UncaughtExceptionHandler, 485TreeNode, 1059TreeSelectionListener, 1059WindowFocusListener, 775WindowListener, 775
interfejs, 228dziedziczenie, 238implementacja, 229implementacja cz��ciowa, 231zmienne, 236
interfejsyatrybutów plików, 680mened�era pobierania, 1131kolekcji, 490map, 517nas�uchuj�ce, 782nas�uchuj�ce zdarze�, 772pakietu java.beans, 1005pakietu java.lang, 435pakietu java.util, 616pakietu javax.servlet, 1073pakietu javax.servlet.http, 1079publiczne klasy, 49sparametryzowane, 383sk�adowe, 232sparametryzowane, 362stosu, 233strumieni Javy, 669zagnie�d�one, 232
interpreter kodu bajtowego, 38introspekcja, 486, 1000IP, Internet Protocol, 712iterator, 484, 489, 510, 551iterator Iterator, 512
JJ2SE 5, 43jasno��, 809java Beans, 999Java SE, 44Java SE 7, 44javac, 54j�dro konwolucji, 912JCP, Java Community Process, 46JDK 6, 44jednostka kompilacji, 54j�zyk
BASIC, 32BCPL, 32C, 32
Skorowidz 1167
C#, 36C++, 33, 1129COBOL, 32FORTRAN, 32Java, 34
JFC, Java Foundation Classes, 1012JNI, Java Native Interface, 348JNLP, Java Network Launch Protocol, 734JVM, Java Virtual Machine, 38
Kkana�, 673, 684, 688kana� w trybie odczytu i zapisu, 691katalog, 624katalog bin, 1070katalog MyPackage, 220klasa, 49
AbstractButton, 1039AbstractList, 542ActionEvent, 759, 1024AdjustmentEvent, 761Applet, 733, 735ArrayDeque, 509ArrayList, 500Arrays, 534AtomicInteger, 954AtomicLong, 954AWTEvent, 879bazowa, 193BeingWatched, 579BitSet, 561Blur.java, 913Boolean, 301, 451BorderLayout, 854BufferedInputStream, 640BufferedOutputStream, 642BufferedReader, 657BufferedWriter, 658Byte, 440ByteArrayInputStream, 636ByteArrayOutputStream, 638ByteBuffer, 674, 684Calendar, 566Canvas, 792CardLayout, 858Character, 301, 448, 450CharArrayReader, 654CharArrayWriter, 655Checkbox, 834CheckboxGroup, 836CheckboxMenuItem, 866Choice, 838Class, 466ClassLoader, 468
ClassValue, 482Color, 741, 808, 810Compiler, 472Component, 790, 888, 1028ComponentEvent, 762Console, 661Container, 791ContainerEvent, 762Contrast.java, 910Convolver, 912Convolver.java, 911Cookie, 1081, 1082CookieHandler, 727CookieManager, 727Coords, 376CountDownLatch, 930CropImageFilter, 903Currency, 582CyclicBarrier, 931DatagramPacket, 729DatagramSocket, 728DataInputStream, 649DataOutputStream, 648Date, 564DateFormat, 991Dictionary, 548Double, 436Download, 1131
konstruktor, 1135metoda download(), 1135metoda run(), 1135metoda stateChanged(), 1138metody akcesorów i dzia�a�, 1139zmienne, 1135
DownloadManager, 1130, 1144konstruktor, 1149metoda tableSelectionChanged(), 1150metoda updateButtons(), 1151metoda verifyUrl(), 1150obs�uga zdarze� akcji, 1152zmienne, 1149
DownloadsTableModel, 1140metoda addDownload(), 1142metoda clearDownload(), 1142metoda getColumnClass(), 1143metoda getValueAt(), 1143metoda update(), 1143
Enum, 482EnumMap, 526EnumSet, 510Error, 240EventSetDescriptor, 1006Exchanger, 934File, 621
1168 Java. Kompendium programisty
klasaFileChannel, 675, 684FileDialog, 877FileInputStream, 332, 333, 632, 705FileNotFoundException, 628FileOutputStream, 332, 336, 634FileReader, 600, 651Files, 678FileStore, 682FileSystem, 682FileSystems, 682FileWriter, 653Float, 437FlowLayout, 852FocusEvent, 763FontMetrics, 818ForkJoinPool, 958, 968, 971ForkJoinTask, 956, 970, 972Formatter, 583, 599
formatowanie, 585konstruktory klasy, 584zamykanie obiektu, 599znaczniki formatów, 594
Frame, 790, 792Gen, 362, 366GenDemo, 362GenericServlet, 1072, 1075Graphics, 802, 892Grayscale.java, 909GregorianCalendar, 569GridBagConstraints, 862GridBagLayout, 861GridLayout, 857HashMap, 522HashSet, 505Hashtable, 549HttpCookie, 727HttpServlet, 1083, 1085HttpSession, 1090HttpSessionBindingEvent, 1084HttpSessionEvent, 1083HttpURLConnection, 724IdentityHashMap, 526Image, 887ImageFilter, 902ImageFilterDemo.java, 906ImageIcon, 1036Inet4Address, 716Inet6Address, 716InetAddress, 714
metody fabryczne, 714InheritableThreadLocal, 479Inner, 182InputEvent, 764
InputStream, 630Integer, 440Introspector, 1004Invert.java, 909ItemEvent, 765java.lang.Enum., 297JButton, 1040JCheckBox, 1045JComboBox, 1056JComponent, 1015JFrame, 1020JLabel, 1036JList, 1053JRadioButton, 1047JScrollPane, 1051JTabbedPane, 1049JTable, 1062JTextField, 1038JToggleButton, 1042KeyEvent, 765Label, 829LinkedHashMap, 525LinkedHashSet, 506LinkedList, 504, 515List, 840ListResourceBundle, 614ListSelectionEvent, 1054LoadedImage.java, 907Locale, 572Long, 440Matcher, 976Math, 354, 469
funkcje trygonometryczne, 469funkcje wyk�adnicze, 469funkcje zaokr�gle�, 470
MediaTracker, 895, 896MemoryImageSource, 898, 899Menu, 872MenuItem, 866MethodDescriptor, 1007MouseEvent, 766MouseEvents, 778MouseMotionAdapter, 782MouseWheelEvent, 768MyFileVisitor, 703MyGenClass, 400NewThread, 287Number, 301, 436Object, 217, 463ObjectInputStream, 665ObjectOutputStream, 664Observable, 576OutputStream, 330, 630, 631Package, 479
Skorowidz 1169
Panel, 791Paths, 679Pattern, 975Phaser, 936PixelGrabber, 900PopupMenu, 872PrintStream, 645PrintWriter, 331, 599, 660PriorityQueue, 508Process, 452ProcessBuilder, 457ProgressRenderer, 1139Properties, 552PropertyDescriptor, 1006PropertyResourceBundle, 614PushbackInputStream, 642PushbackReader, 659Random, 574RandomAccessFile, 650, 708Reader, 327, 651RecursiveAction, 957, 962RecursiveTask, 958, 966RegPayS, 1124ResourceBundle, 611RGBImageFilter, 905Runtime, 454
zarz�dzanie pami�ci�, 454Scanner, 600, 604, 607, 610
konstruktory klasy, 600skanowanie, 600ustawianie separatorów, 609
Scrollbar, 843SecurityManager, 481Semaphore, 924SequenceInputStream, 644ServerSocket, 727ServletInputStream, 1075ServletOutputStream, 1077Sharpen.java, 915Short, 440SimpleDateFormat, 993SimpleTimeZone, 571Socket, 716Stack, 176, 546StackTraceElement, 481Stats, 371StrictMath, 471String, 183, 425
d�ugo�� �a�cucha, 185klasa pomocnicza StringBuffer, 184konkatenacja �a�cuchów, 184niezmienno�� obiektów, 184porównywanie �a�cuchów, 185sta�a tekstowa, 184
tworzenie obiektów, 184znak �a�cucha, 185
StringBuffer, 184, 407, 425StringBuilder, 407, 433StringTokenizer, 559SwingUtilities, 1022System, 326, 459TComp, 529TextArea, 849TextComponent, 849TextEvent, 769TextField, 847Thread, 262, 267, 286, 473ThreadGroup, 473ThreadLocal, 479Throwable, 240, 243, 480Timer, 580TimerTask, 580TimeZone, 570TreeMap, 523TreePath, 1059TreeSet, 507TwoGen, 369URI, 727URLConnection, 722Vector, 542Void, 451Window, 792WindowEvent, 770Writer, 651
klasy, 141, 222abstrakcyjne, 213adapterów, 782AWT, 788dodatkowe pakietu java.util, 616frameworku Fork/Join, 956implementuj�ce interfejsy map, 522kolekcji, 500map, 519nadrz�dne, 51, 193pakietu java.awt.event, 760pakietu java.awt.image, 887pakietu java.beans, 1005pakietu java.io, 620pakietu java.lang, 435pakietu java.lang.reflect, 984pakietu java.net, 713pakietu java.util, 487, 542pakietu java.util.concurrent, 923pakietu javax.servlet, 1073pakietu javax.servlet.http, 1079pakietu javax.swing, 1015, 1035potomne, 193sparametryzowane, 362, 369, 377, 394
1170 Java. Kompendium programisty
klasystrumieni, 630strumieni bajtów, 324strumieni znaków, 325systemu NIO, 671wej�cia-wyj�cia, 620wewn�trzne, 181, 784wewn�trzne anonimowe, 183zagnie�d�one, 181
niestatyczne, 181statyczne, 181
zdarze�, 758zewn�trzne, 181
klauzula catch, 244klauzula extends, 377, 388klauzula throws, 249klonowanie, 464kod asemblerowy, 32kod bajtowy, 38kod dzia�aj�cy na danych, 47kod klasy, 141kod kraju, 612kod ród�owy serwletu, 1071, 1088koder, 675kody j�zyków, 612kolejka FIFO, 496kolejka LIFO, 159kolejkowanie, 277kolejno�� wykonywania operatorów, 111kolekcje, 361, 488kolekcje modyfikowalne, 491kolekcje niemodyfikowalne, 491kolekcje wspó�bie�ne, 950kolory, 741ko�o, 804komentarz, 55, 64
dokumentuj�cy, 55, 1155, 1160jednowierszowy, 55wielowierszowy, 55
komparator, 526kompilator, 51, 54kompilator javac, 54komponent, 1015komponent Java Bean, 1000, 1007komponent wizualny, 1014komponenty biblioteki Swing, 1015, 1035komunikacja mi�dzyprocesowa, 278komunikacja mi�dzyw�tkowa, 262, 277konkatenacja �a�cuchów, 411konstrukcja <?>, 310konstrukcja Stats<?>, 374konstrukcja try, 245konstruktor, 154konstruktor BoxWeight(), 199
konstruktor klasy, 146konstruktor klasy bazowej, 199konstruktor klasy String, 408, 410konstruktor sparametryzowany, 155, 382konstruktory klasy ServerSocket, 728konstruktory klasy Socket, 717konstruktory klasy StringBuffer, 425kontekst graficzny, 802kontener, 1016kontener (serwer) serwletów, 1069kontener Glassfish, 1069kontener najwy�szego poziomu, 1015kontener Tomcat, 1069kontrola dost�pu, 173kontroler, 1014kontrolka
Button, 879Checkbox, 880Choice, 882edycji, 846JTextField, 1038List, 883Scrollbar, 884TextArea, 849TextField, 848
kontrolki, 827etykiety, 828listy, 828listy rozwijane, 828menu, 868paski przewijania, 828pola tekstowe, 828pola wyboru, 828przyciski, 828typy, 828
konwersjadanych, 423formatów, 583liczb, 446�a�cuchów, 412rozszerzaj�ca, 81typów, 81zaw��aj�ca, 82
kopiowanie pliku, 692kredyt, 1120krzywa Gaussa., 575kwantyfikator, 979
LLayoutManager, 908lewy uko�nik (\), 621liczby pseudolosowe, 574LIFO, 496lista, 840, 1053
Skorowidz 1171
lista kombinowana, 1056lista rozwijana, 838litera�, 977litera� tekstowy, 410
�a�cuch, 92�a�cuch polecenia akcji, 1040�a�cuch wyj�tków, 255�a�cuch zapytania, query string, 1086��czenie �a�cuchów, 184, 411��czenie �a�cuchów z innymi typami danych, 411�uk, 805
Mmapa, 489, 516maszyna wirtualna Javy, 38mechanizm odzyskiwania pami�ci, 157mened�er pobierania plików, 1129, 1153mened�er uk�adu graficznego, 827, 852
BorderLayout, 854, 1032CardLayout, 858FlowLayout, 852GridBagLayout, 861, 866GridLayout, 857
menu, 866metadane, 308metoda
accept(), 727actionPerformed(), 906, 1047addDownload(), 1142addFirst(), 504addImage(), 895addLast(), 504addMouseListener(), 778addMouseMotionListener(), 778allocate(), 684append(), 429arraycopy(), 462arriveAndAwaitAdvance(), 937asList(), 534average(), 371bar(), 282binarySearch(), 534call(), 274, 947callme(), 178cancel(), 968capacity(), 427charAt(), 185, 413, 428checkID(), 895clearDownload(), 1142clone()., 464close(), 332, 336, 599, 611, 628
compare(), 527compareTo(), 297, 418compareToIgnoreCase(), 419compile(), 975compute(), 957concat(), 422convolve(), 912copyOf(), 535copyOfRange(), 535counter(), 578createImage(), 889currentThread(), 263currentTimeMillis(), 461delete(), 430deleteCharAt(), 431destroy(), 740, 1068dispose(), 873download(), 1135drawArc(), 805drawImage(), 889drawLine(), 802drawPolygon(), 806drawRect(), 803drawString(), 826empty(), 547enableEvents(), 879endsWith(), 416ensureCapacity(), 427equals(), 185, 297, 415, 417, 536equalsIgnoreCase()., 415exec(), 456execute(), 968exists(), 622exitValue(), 456Files.newByteChannel(), 684Files.newInputStream(), 693fill(), 536fillArc(), 805fillOval(), 804fillPolygon(), 806fillRect(), 803filterRGB(), 909finalize(), 158find(), 976findInLine(), 610findWithinHorizon(), 611foo(), 282forDigit(), 450format(), 585freeMemory(), 454get(), 281getActionCommand(), 1040getAdjustable(), 761getAdjustmentType(), 845
1172 Java. Kompendium programisty
metodagetAnnotation(), 311, 315getAnnotations(), 314, 315getAscent(), 820getBytes(), 414getCause(), 255getChannel(), 705getChars(), 414, 428getCodeBase(), 751getColumnClass(), 1143getContentPane(), 1021getDateInstance(), 991getDirectionality(), 450getDocumentBase(), 751getEchoChar(), 847GetFieldID(), 350getFirst(), 504getFont(), 817getHeaderFields(), 722getImage(), 889getInputStream(), 457, 717getInsets(), 856getItem(), 868getItemCount(), 838, 841getItemSelectable(), 842getLabel(), 867getLast(), 504getLocalHost(), 714getName(), 622getob(), 364GetObjectClass(), 350getOuptutStream(), 717getOutputStream(), 457getParameter(), 748getParent(), 622getPriority(), 273getProperty(), 553getPropertyDescriptors(), 1010getRectangular(), 1008getRGB(), 810getSelectedItem(), 838, 841getSelectedText(), 847getSession(), 1090getState(), 289, 834getTimeInstance(), 992getValueAt(), 1143getWriter(), 1072grabPixel(), 901hashCode(), 450, 549imageUpdate(), 891indexOf(), 419init(), 739initCause(), 255insert(), 429
invoke(), 959invokeAll(), 957isAbsolute(), 623isAlive(), 270isAnnotationPresent(), 317isCancelled(), 969isCompletedAbnormally(), 969isDirectory(), 624isEditable(), 847isEnabled(), 867isFile(), 622isInfinite(), 440isNaN(), 440isSelected(), 1043itemStateChanged(), 835join(), 270, 957keyPressed(), 779keyTyped(), 780lastIndexOf(), 419length(), 185, 427listFiles(), 626load(), 555main(), 56, 174, 939makeGUI(), 1028map(), 675mark(), 637mkdir(), 626mkdirs(), 627mouseClicked(), 782myMeth(), 313MyMouseAdapter(), 785myresume(), 287newByteChannel(), 684, 686newDirectoryStream(), 698newFileSystem(), 682newOutputStream(), 695nextDouble(), 237, 605nextGaussian(), 575notify(), 278notifyAll(), 278notifyObservers(), 576offerFirst(), 504offerLast(), 504onAdvance(), 940, 943openConnection(), 724ordinal(), 297, 298paint(), 342, 739, 885, 1028parseInt(), 446Paths.get(), 683peekFirst(), 504peekLast(), 504pollFirst(), 504pollLast(), 504pop(), 159, 235
Skorowidz 1173
print(), 59printf(), 187, 599, 647println(), 59, 264processItemEvent(), 882push(), 159, 235put(), 281radix(), 611read(), 327readLine(), 328readObject(), 665readPassword(), 662regionMatches(), 416register(), 937reinitialize(), 969removeFirst(), 504removeLast(), 504repaint(), 743replace(), 422, 431replaceAll(), 981reset(), 637resume(), 284, 286reverse(), 430reverseOrder(), 533run(), 287, 1135Runtime.exec(), 457search(), 547send(), 729server(), 1072service(), 1068setBounds(), 851setChanged(), 576setCharAt(), 428setColor(), 810setContentType(), 1072setDefault(), 573setDefaultCloseOperation(), 1020setEchoChar(), 847setEditable(), 847setEnabled(), 867SetIntField(), 350setLayout(), 851setLength(), 427setRectangular(), 1008setState(), 834setVisible(), 1021showDocument(), 751showStatus(), 784showType(), 364skip(), 611sleep(), 264, 577, 950sort(), 537split(), 982start(), 266, 739startsWith(), 416
stateChanged(), 1138stop(), 286, 740store(), 555substring(), 421, 431suspend(), 284, 286System.out.println(), 734tableSelectionChanged(), 1150toArray(), 502toBinaryString(), 447toCharArray(), 415toHexString(), 447toLowerCase(), 424toOctalString(), 447toPath(), 696toString(), 243, 412totalMemory(), 454trim(), 422type(), 459update(), 740, 1143updateButtons(), 1151useDelimiter(), 609useRadix(), 611valueOf(), 294, 423values(), 294varargs, 187, 191vaTest(), 188verifyUrl(), 1150visitFile(), 703wait(), 278waitFor(), 456walkFileTree(), 701write(), 325, 330, 336
metody, 142, 148, 150abstrakcyjne, 213abstrakcyjne klasy Dictionary, 548checked, 533dodatkowe klasy String, 426dodatkowe klasy StringBuffer, 432fabryczne klasy InetAddress, 714finalne, 216get() i put(), 674getRed(), getGreen() i getBlue(), 809graficzne, 802hasNext, 602interfejsu AppletContext, 753interfejsu BasicFileAttributes, 681interfejsu CharSequence, 483interfejsu Collection, 492interfejsu Deque, 498interfejsu DosFileAttributes, 681interfejsu FileVisitor, 702interfejsu HttpServletRequest, 1080interfejsu HttpServletResponse, 1081interfejsu HttpSession, 1082
1174 Java. Kompendium programisty
metodainterfejsu Iterator, 511interfejsu List, 494interfejsu ListIterator, 512interfejsu Map, 518interfejsu Map.Entry, 521interfejsu NavigableMap, 520interfejsu NavigableSet, 497interfejsu ObjectInput, 667interfejsu ObjectOutput, 665interfejsu Path, 677interfejsu PosixFileAttributes, 682interfejsu Servlet, 1074interfejsu ServletConfig, 1074interfejsu ServletContext, 1075interfejsu ServletRequest, 1076interfejsu SortedMap, 519interfejsu SortedSet, 495klasy Applet, 736klasy BitSet, 561klasy Boolean, 453klasy Buffer, 673klasy Calendar, 566klasy Character, 449klasy Class, 466klasy Color, 809klasy Cookie, 1083klasy Console, 662klasy Currency, 583klasy DatagramPacket, 730klasy DatagramSocket, 729klasy Date, 565klasy Enum, 482klasy EnumSet, 511klasy File, 623klasy Files, 678klasy Font, 814klasy FontMetrics, 819klasy ForkJoinTask, 970klasy Formatter, 585klasy Hashtable, 550klasy HttpServlet, 1084klasy HttpURLConnection, 725klasy InetAddress, 715klasy InputStream, 631klasy Math, 470klasy Object, 217, 463klasy ObjectInputStream, 668klasy ObjectOutputStream, 666klasy Observable, 577klasy OutputStream, 631klasy Package, 480klasy Process, 453klasy ProcessBuilder, 458
klasy Properties, 553klasy Random, 575klasy Reader, 652klasy ResourceBundle, 612klasy Runtime, 455klasy Scanner, 603klasy Socket, 717klasy StackTraceElement, 481klasy StringTokenizer, 560klasy System, 460klasy Thread, 263, 474klasy ThreadGroup, 476klasy Timer, 581klasy TimerTask, 580klasy TimeZone, 571klasy URLConnection, 723klasy Vector, 544klasy Writer, 653mostu, 398obiektu Modifier, 986prywatne, 49przetwarzaj�ce zdarzenia, 879publiczne, 49rdzenne, 351read() i write(), 675rekurencyjne, 171sk�adowe, 49sparametryzowane, 362statyczne, 177unmodifiable, 533w Javie, 49w klasie
Byte, 441Double, 438Float, 437Integer, 442Long, 444Short, 442Stack, 547Throwable, 253
zmiennoargumentowe, 187zwi�zane z blokadami, 952zwracaj�ce strumienie, 717
MIME, Multipurpose Internet Mail Extensions, 1067mniej znacz�cy surogat, 451model, 1014model delegowania zdarze�, 1023model zorientowany na procesy, 47modyfikator
dost�pu, 56, 173private, 174protected, 174public, 174
native, 348
Skorowidz 1175
strictfp, 347transient, 344volatile, 344
modyfikowanie �a�cucha, 420monitor, 262, 273muteks, 273MVC, Model-View-Controller, 1014mysz, 776
Nnarz�dzia AWT, 740, 758, 787, 836, 1012narz�dzia Java EE SDK, 1069narz�dzie javadoc, 1155nasycenie, 809native, 348nawiasy okr�g�e, 112nazwa logiczna, 813nazwa pliku, 54nazwa rodzaju, 813nazwa rodziny, 611, 813nazwa w�tku, 264nazwa zmiennej, 58niejednoznaczno�ci, 191niezaufany kod, 454NIO, New I/O, 45, 671NIO.2, 45, 683notacja naukowa, 75notacja standardowa, 75NTSC, National Television Standards Committee, 909
Oobiekt, 141
ArrayList, 502, 540Comparator, 526Iterator, 512jako parametr, 166klasy String, 184nas�uchuj�cy, 756, 758Properties, 554String, 407TimeUnit, 949typu Process, 456typu String, 184typu wyliczeniowego, 295
obiektowa reprezentacja typów prostych, 308obliczanie
czasu wykonywania programu, 461maksymalnej emerytury, 1116pocz�tkowej warto�ci inwestycji, 1112przysz�ej warto�ci inwestycji, 1104raty po�yczki, 1096
metoda actionPerformed(), 1102metoda compute(), 1103metoda init(), 1100
metoda makeGUI(), 1100pola apletu, 1099
wk�adu pocz�tkowego, 1108pozosta�ej kwoty do sp�aty kredytu, 1120
obramowanie, 855obraz, 887
�adowanie, 889tworzenie, 888wy�wietlanie, 889
obserwator obrazu, 889obs�uga
metadanych, 695obrazów graficznych, 887rysowania, 1032wielu w�tków, 921wyj�tków, 258
catch, 243, 244finally, 250throw, 247throws, 249try, 242wy�wietlenie opisu, 243
zdarze�, 756, 796zdarze� list, 841zdarze� list rozwijanych, 839zdarze� menu, 868zdarze� pasków przewijania, 844zdarze� pól tekstowych, 848zdarze� pól wyboru, 834zdarze� przycisków, 831znaków Unicode, 452��da� GET, 1085��da� POST, 1086
ochrona dost�pu, 222odcinek, 802odczytywanie
adnotacji, 314danych z konsoli, 327�a�cuchów, 328pliku, 333, 684, 704znaków, 327
odpowied HTTP, 1072, 1085ograniczenia typów sparametryzowanych, 401ograniczenie parametru typu V przez T, 382okna, 790, 792
obs�uga zdarze�, 796tytu�, 793ukrywanie, 793wymiary, 793wy�wietlanie, 793zamykanie, 793
okno dialogowe, 872modalne, 872niemodalne, 872otwierania pliku, 878
1176 Java. Kompendium programisty
okno najwy�szego poziomu, 792okr�g, 804OOP, object-oriented programming, 34opakowania typów, 300opakowania typów numerycznych, 301opakowania typów prostych, 436opakowywanie, 302operacje atomowe, 954operacje wej�cia-wyj�cia, 619operator
diamentu <>, 395instanceof, 345, 391kropki, 143new, 146, 395trójargumentowy, 110
operatoryarytmetyczne, 94arytmetyczne z przypisaniem, 95bitowe, 98
&, 98&=, 98^, 98^=, 98|, 98|=, 98~, 98<<, 98<<=, 98>>, 98>>=, 98>>>, 98>>>=, 98
bitowe logiczne, 99bitowe z przypisaniem, 105logiczne, 107
!, 108!=, 108&, 108&&, 108&=, 108?:, 108^, 108^=, 108|, 108||, 108|=, 108==, 108
logiczne ze skracaniem, 109relacji, 106
!=, 106<, 59, 106<=, 106==, 59, 106, 417>, 59, 106>=, 106
otwieranie plików, 680APPEND, 680CREATE, 680CREATE_NEW, 680DELETE_ON_CLOSE, 680DSYNC, 680READ, 680SPARSE, 680SYNC, 680TRUNCATE_EXISTING, 680WRITE, 680
Ppakiet, 173, 219
Concurrency Utilities, 972Java EE, 1073Java SE, 1073java.awt, 1024java.awt.event, 759, 1024java.awt.image, 887, 903, 919java.io, 324, 619java.lang, 252, 407, 435java.text, 973java.util, 487, 541, 580, 611java.util.concurrent, 922, 949java.util.concurrent.atomic, 923, 954java.util.concurrent.locks, 924java.util.regex, 973javax.imageio, 919javax.servlet, 1073javax.servlet.http, 1073, 1079javax.swing, 1015, 1035javax.swing.event, 1023javax.swing.tree, 1059RMI, 990wyra�e� regularnych, 973zasobów, 611
pakietybiblioteki Swing, 1017g�ównego interfejsu API, 974systemu NIO, 671
pami��, 454panel podzielony na zak�adki, 1049panel szklany, 1017panel tre�ci, 1017panel wielowarstwowy, 1017para klucz-warto��, 549parametr, 56, 148, 152parametr typu, 364parametr wieloargumentowy, 192pasek menu, 827, 866pasek przewijania, 843pasek stanu, 746
Skorowidz 1177
p�tlado-while, 122for, 60, 125for-each, 490, 514rozszerzona for, 131usprawniona for, 129while, 121zagnie�d�ona, 133zdarze� z odpytywaniem, 260
PLAF, pluggable look and feel, 1013plik
AddClient.java, 989AddCookie.html, 1088AddCookieServlet.java, 1088AddServer.java, 988AddServerImpl.java, 988AddServerIntf.java, 988ColorGet.html, 1085ColorGetServlet.java, 1085ColorPost.html, 1086ColorPostServlet.java, 1086GetCookiesServlet.java, 1088jni.h, 350NativeDemo.c, 350NativeDemo.h, 350PostParameters.html, 1077PostParametersServlet.java, 1077RunApp.html, 343servlet-api.jar, 1070shutdown.bat, 1070startup.bat, 1070web.xml, 1070, 1086
pliki.class, 144cookie, 727, 1082dll, 350kopiowanie, 692odczytywanie, 684, 704opcje otwierania, 680otwieranie, 693zapisywanie, 688
pobieranie plików z internetu, 1130pobieranie priorytetu w�tku, 273pocz�tkowa warto�� inwestycji, 1112podklasa, 51, 193podklasa sparametryzowana, 390podpakiet
java.lang.annotation, 486java.lang.instrument, 486java.lang.invoke, 486java.lang.management, 486java.lang.ref, 486java.lang.reflect, 486java.util.jar, 617java.util.logging, 617
java.util.prefs, 617java.util.regex, 617java.util.spi, 617java.util.zip, 617
podpakiety pakietu java.util, 616podstawowa p�aszczyzna wieloj�zyczna, 451podwójne buforowanie, 892pole tekstowe, 846pole wyboru, 834, 1045polecenie package, 220polimorfizm, 51, 164, 211pop, 159porównywanie �a�cuchów, 415port, 711poziom równoleg�o�ci, 962prawy uko�nik (/), 621priorytet operatorów, 111priorytet w�tku, 261, 272private, 174problem producenta i konsumenta, 278procedura po�rednicz�ca, 989proces, 259progi przetwarzania sekwencyjnego, 971program AddClient, 991program CopyFile, 340program obs�uguj�cy interfejs CGI, 1068program pobierania plików, 1130
klasa Download, 1130klasa DownloadManager, 1130klasa DownloadsTableModel, 1130klasa ProgressRenderer, 1130kompilacja, 1152uruchamianie, 1152
program rmiregistry, 990program ShowFile, 335program SwingDemo, 1019program TreeMap, 528program wspó�bie�ny, 921program wykorzystuj�cy okna, 800programowanie
obiektowe, 34, 47równoleg�e, parallel programming, 45, 261, 955strukturalne, 33wielow�tkowe, 259wspó�bie�ne, 921z p�tl� zdarze�, 277
projekt Coin., 44prostok�t, 803protected, 174protokó�
FTP, 712, 1130HTTP, 712, 1090, 1130
wersja niewznawialna (HTTP 1.0), 1130wersja wznawialna (HTTP 1.1), 1130
1178 Java. Kompendium programisty
protokó�IPv4, 712JNLP, 747TCP/IP, 712, 728Telnet, 712
przechowywanie obiektów, 515przeci��anie konstruktorów, 164, 357przeci��anie metod, 161, 163, 190przecinek, 126przegl�darka apletów, 734przekazywanie parametrów, 748przekazywanie przez referencj�, 168przekazywanie przez warto��, 168przekazywanie sterowania do w�tku, 275przekszta�canie apletu do serwletu, 1124prze��czenie kontekstu, 261prze��cznik, 1042przeno�no��, 38, 351przes�anianie, 211przes�anianie metod, 207, 211przes�anianie nazw, 202przesuni�cie w lewo, 101przesuni�cie w prawo, 103przesuni�cie w prawo bez znaku, 104przetwarzanie, 559przetwarzanie sekwencyjne, 962przewijanie komponentu, 1051przycisk, 830, 1040
JButton, 1039JCheckBox, 1039JRadioButton, 1039JToggleButton, 1039
przycisk prze��cznika, toggle button, 1042przyciski biblioteki Swing, 1039przyciski opcji, 1046przyciski z ikonami, 1042przykrywanie metod, 394przykrywanie metody paint(), 885public, 142, 174punkt kodowy, 451push, 159pusta instrukcja, 122
Rrata po�yczki, 1096referencja do obiektu, 145referencja do typu sparametryzowanego, 387refleksja, reflection, 310, 313, 486, 983rekurencja, 171, 959RGB, Red-Green-Blue, 809RMI, Remote Method Invocation, 42, 663, 987rozdzielczo�� czasu, 949rozg�aszanie zdarzenia, 1002rozmiary obiektów graficznych, 807
rozpakowywanie, 302rozszerzanie
komponentów AWT, 878komponentu grupy pól wyboru, 881kontrolki Button, 879kontrolki Checkbox, 880kontrolki Choice, 882kontrolki List, 883kontrolki Scrollbar, 884typu, 84
rozwijanie w miejscu wywo�ania, 216rysowanie, 1028
biblioteka Swing, 1029obszar rysowania, 1029
rysowanie wykresu, 1127rzutowanie, 393rzutowanie na b��dny typ, 540rzutowanie niezgodnych typów, 82rzutowanie typów, 81
Sselektor, 676semafor, 273, 972separator, 64, 559, 609serializacja, 663, 666, 1004serwer InterNIC, 718serwlet, 39, 1067, 1095
kod ród�owy, 1088serwlet RegPayS, 1124sesja, 1090sie�, 711skaner, 559, 611sk�adowa
System.err, 326System.in, 326System.out, 326
sk�adowe klasy, 49, 142, 196sk�adowe statyczne, 177skrót, 505s�owo kluczowe, 64
abstract, 213assert, 351catch, 242enum, 292final, 178, 216, 257finally, 250interface, 228static, 176, 354super, 177, 199synchronized, 274, 276this, 156, 177throw, 239, 247throws, 249try, 239, 242
Skorowidz 1179
sparametryzowana klasa bazowa, 388sparametryzowane kolekcje, 539specyfikator
%%, 591%d, 588%e, 588%f, 588%g, 588%n, 591%s, 593%tM, 589konwersji formatu, 586minimalnej szeroko�ci pola, 591precyzji, 593
specyfikatory formatów, 586, 587specyfikatory formatów pisane wielk� liter�, 597sprawdzanie zgodno�ci typów, 391sta�a
klasowa, 312tekstowa, 184w�asnego typu, 292wyliczeniowa, 292
sta�e, 63ca�kowitoliczbowe, 74klas Byte, Short, Integer i Double, 441klas Float i Double, 437klasy AdjustmentEvent, 761klasy Calendar, 567klasy Character, 448klasy ComponentEvent, 762klasy ItemEvent, 765klasy Locale, 573klasy MouseEvent, 767klasy MouseWheelEvent, 768klasy WindowEvent, 770logiczne, 76�a�cuchowe, 77pola klasy GridBagConstraints, 863znakowe, 76
stan w�tku, 287, 289static, 142stos, 159, 481stos rozszerzaj�cy, 234stos wywo�a�, 241strategia zachowywania adnotacji, 309strona, party, 936strumienie buforowane, 639strumienie filtrowane, 639strumienie znaków, 651strumie�, 324, 619
bajtów, 324b��dów, 326fin, 340fout, 340
katalogu, 698wej�ciowy, 326wyj�ciowy, 326znaków, 324
sufiksy formatów daty i czasu, 590suwak, 843synchronizacja, 273, 924synchronizacja metod, 274synchronizacja mi�dzyprocesowa, 262synchronizator, 922system NIO, 619, 672
bufory, 672kana�y, 673, 684selektor, 676strumienie, 693system plików, 695�cie�ki, 695zestaw znaków, 675
System.in, 327System.out, 330szablon obiektu, 141szeregowanie dost�pu do metody, 275szkielet apletu, 738
�cie�ka CLASSPATH, 220�ledzenie sesji, 1090�rodowisko
Eclipse, 1069Java, 462NetBeans, 1069Tomcat, 1069
Ttablica, 56, 85, 179
dynamiczna, 501, 542jednowymiarowa, 85mieszaj�ca, 522, 549newimgpixels, 915tablic, 131wielowymiarowa, 87, 131
TCP, Transmission Control Protocol, 712technologia CGI, 1068technologia Java Beans, 973tekst
wyrównywanie, 822wy�rodkowanie, 821wy�wietlanie, 819
tekst ASCII, 333termin wa�no�ci cookie, 1090testowanie apletów, 343token, 559, 600transient, 344
1180 Java. Kompendium programisty
trwa�o��, 1003tryb rysowania, 811try-with-resources, 256, 338, 599, 607, 629, 686, 707trzy kropki (...), 188tworzenie
apletu, 1026czcionek, 815drzewa, 1060katalogów, 626klasy sparametryzowanej, 370komponentu JTable, 1063metody sparametryzowanej, 380obiektu obrazu, 888okna typu Frame, 794panelu z zak�adkami, 1049podklasy wyj�tków, 252serwletów, 1069serwletów finansowych, 1123w�tku, 265, 267wielu w�tków, 269
typautomatyczna konwersja, 81automatyczne rozszerzanie, 83konwersja rozszerzaj�ca, 81konwersja zaw��aj�ca, 82rzutowanie, 82zasady rozszerzania, 84
typboolean, 68byte, 67, 69Canvas, 792char, 67double, 68, 71float, 68, 71int, 67, 69long, 67, 69typ okre�lony w metodzie, 151short, 69text/html, 1067text/plain, 1067Type, 459
typyca�kowitoliczbowe, 68logiczne, 73numeryczne, 371ograniczone, 370opakowuj�ce, wrapper type, 291proste, 68sparametryzowane, 218, 361, 366, 489, 541
bezpiecze�stwo, 366zalety, 367
surowe, 385wyliczeniowe, 291, 299zmiennoprzecinkowe, 70znakowe, 71zwracanych danych, 151
UUDP, User Datagram Protocol, 712UI delegate, 1014uk�ad graficzny komponentów, 850Unicode, 71, 409, 450URI, Uniform Resource Identifier, 727URL, Uniform Resource Locator, 720, 1067uzupe�nianie do 2, 98uzyskiwanie stanu w�tku, 289
Vvarargs, 187volatile, 344
Wwarto�ci domy�lne, 315warto�� inwestycji, 1104warto�� kolejno�ci, 297warto�� przekazana jako argument, 148w�tek, 259, 479
g�ówny, 263posiadaj�cy monitor, 273potomny, 268przerwany, 261rozdzielaj�cy zdarzenia, 1021w stanie
dzia�ania, 261oczekiwania, 261zablokowania, 261zawieszenia, 261
wznowiony, 261wdra�anie serwletu, 1070widok, viewport, 1014, 1051widok kolekcji, 489wielkie litery, 424, 597wielok�t, 806wielokrotne �apanie, 257wielow�tkowo��, 260, 277, 290, 922wielozadaniowo��, 259wielozadaniowo�� z wyw�aszczaniem, 261wirtualne kody klawiszy, 766wk�ad pocz�tkowy, 1108w�a�ciwo��, 1000w�a�ciwo�� indeksowana, 1001w�a�ciwo�� ograniczona, 1003
bound, 1003constrained, 1003
w�a�ciwo�� prosta, 1001wnioskowanie typów, 396wskanik, 92wskanik pliku, 650wspó�bie�no��, 950
Skorowidz 1181
wyciek pami�ci, memory leaks, 332wydajno��, 962wydobywanie, 302wyj�tek
ArithmeticException, 242ArrayIndexOutOfBoundsException, 536, 537ArrayStoreException, 535, 536AssertionError, 351ClassCastException, 533, 535, 537FileNotFoundException, 332, 628HeadlessException, 829IllegalArgumentException, 536, 537IOException, 336, 628, 635NegativeArraySizeException, 535NoSuchMethodException, 311NullPointerException, 535, 536, 550NumberFormatException, 302SecurityException, 332, 628ServletExceptioon, 1077UnavailableException, 1077UnsupportedOperationException, 533
wyj�tki, 239final rethrow, 256finalne zg�oszenie dalej, 256multi-catch, 256nieprzechwycone, 241nieweryfikowane, 252try-with-resources, 256, 338, 599, 629, 686typy, 240wbudowane, 251wielokrotne �apanie, 256
wyk�adnik binarny, 76wykradanie zada�, work-stealing, 959wyliczenia, 292wymuszanie zgodno�ci typów, 382wyodr�bnianie znaków, 413wyra�enia regularne, 973, 977, 983wyra�enie catch, 628wyra�enie try, 338wyrównywanie tekstu, 822wysy�anie jednostkowe, 757wyszukiwanie znaku, 419wy�cig, 275wy�rodkowanie tekstu, 821wy�wietlanie, 742, 754wy�wietlanie tekstu, 819wywo�anie super(), 202, 268, 359wywo�anie this(), 357, 359wywo�ywanie konstruktorów, 206wznawianie pobierania, 1129, 1153wznawianie w�tku, 284wzorce projektowe, 1002wzorce projektowe dla zdarze�, 1002wzorzec, 699, 973, 976, 981
Zzachowanie oszcz�dne (leniwe), 980zachowanie zach�anne, 980zadania
anulowanie, 968asynchroniczno��, 968okre�lanie statusu, 969ponowne uruchamianie, 969wydajno��, 962
zakleszczenie, 282, 1022zamykanie strumieni, 628zapis do pliku, 336zapisywanie pliku, 688zarz�dzanie pami�ci�, 454zatrzymanie w�tku, 286zawarto�� katalogu, 698zawieszanie w�tku, 284zbiór siatek, 861zdalne wywo�ywanie metod, 663, 987zdarzenie, 757
AdjustmentEvent, 845generowane przez klawiatur�, 779generowane przez mysz, 776PropertyChangeEvent, 1003
zmienna, 57, 77czas �ycia, 79deklaracja, 78inicjalizacja dynamiczna, 78zasi�g, 79
zmiennaFILE_NEW, 179FILE_OPEN, 179flicker, 894globalna, 177lokalna, 157raw, 387referencyjna, 147, 198referencyjna interfejsu, 230referencyjna obRef, 464sk�adowa, 49, 142, 157sk�adowa length, 179steruj�ca p�tl�, 125suspendFlag, 287�rodowiskowa CLASSPATH, 990, 1070�rodowiskowa JAVA_HOME, 1070
zmienna liczba argumentów, 187zmienne cz�onkowskie, 49zmienne w interfejsach, 236znacznik
#, 596@author, 1156@deprecated, 1157@exception, 1157
1182 Java. Kompendium programisty
znacznik@param, 1158@return, 1158@see, 1158@serial, 1159@serialData, 1159@serialField, 1159@since, 1159@throws, 1159@version, 1160{@code}, 1156{@docRoot}, 1157{@inheritDoc}, 1157{@link}, 1157{@linkplain}, 1157{@literal}, 1158{@value}, 1159<img>, 887APPLET, 735, 747CODE, 747IMG, 748nawiasów, 595plusa, 595przecinka, 596spacji, 595zera, 595
znacznikiformatów, 594komentarzy, 1155komentarzy dokumentacyjnych, 1156przy��czane, 1155samodzielne, 1155
znak}, 57znak bia�y, 63�rednika (;), 57zapytania (?), 374zast�pczy, 979
znaki uzupe�niaj�ce, supplemental characters, 451znoszenie, 365, 397zwracanie, pushback, 642zwracanie obiektów, 170
�ród�a zdarze�, 757, 771
���danie HTTP
GET, 1068POST, 1077, 1086