64

Java. Kompendium programisty. Wydanie VIII

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java. Kompendium programisty. Wydanie VIII
Page 2: Java. Kompendium programisty. Wydanie VIII

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ść

Page 3: Java. Kompendium programisty. Wydanie VIII

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

Page 4: Java. Kompendium programisty. Wydanie VIII

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

Page 5: Java. Kompendium programisty. Wydanie VIII

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

Page 6: Java. Kompendium programisty. Wydanie VIII

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

Page 7: Java. Kompendium programisty. Wydanie VIII

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

Page 8: Java. Kompendium programisty. Wydanie VIII

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

Page 9: Java. Kompendium programisty. Wydanie VIII

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

Page 10: Java. Kompendium programisty. Wydanie VIII

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

Page 11: Java. Kompendium programisty. Wydanie VIII

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

Page 12: Java. Kompendium programisty. Wydanie VIII

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

Page 13: Java. Kompendium programisty. Wydanie VIII

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

Page 14: Java. Kompendium programisty. Wydanie VIII

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

Page 15: Java. Kompendium programisty. Wydanie VIII

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

Page 16: Java. Kompendium programisty. Wydanie VIII

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

Page 17: Java. Kompendium programisty. Wydanie VIII

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

Page 18: Java. Kompendium programisty. Wydanie VIII

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

Page 19: Java. Kompendium programisty. Wydanie VIII

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

Page 20: Java. Kompendium programisty. Wydanie VIII

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

Page 21: Java. Kompendium programisty. Wydanie VIII

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

Page 22: Java. Kompendium programisty. Wydanie VIII

22 Java. Kompendium programisty

Page 23: Java. Kompendium programisty. Wydanie VIII

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.

Page 24: Java. Kompendium programisty. Wydanie VIII

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.

Page 25: Java. Kompendium programisty. Wydanie VIII

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[]) {

Page 26: Java. Kompendium programisty. Wydanie VIII

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.

Page 27: Java. Kompendium programisty. Wydanie VIII

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.

Page 28: Java. Kompendium programisty. Wydanie VIII

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-

Page 29: Java. Kompendium programisty. Wydanie VIII

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();

Page 30: Java. Kompendium programisty. Wydanie VIII

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.*;

Page 31: Java. Kompendium programisty. Wydanie VIII

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[]) {

Page 32: Java. Kompendium programisty. Wydanie VIII

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.

Page 33: Java. Kompendium programisty. Wydanie VIII

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.

Page 34: Java. Kompendium programisty. Wydanie VIII

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); }}

Page 35: Java. Kompendium programisty. Wydanie VIII

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.

Page 36: Java. Kompendium programisty. Wydanie VIII

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))

Page 37: Java. Kompendium programisty. Wydanie VIII

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

Page 38: Java. Kompendium programisty. Wydanie VIII

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) {

Page 39: Java. Kompendium programisty. Wydanie VIII

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);

Page 40: Java. Kompendium programisty. Wydanie VIII

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%

Page 41: Java. Kompendium programisty. Wydanie VIII

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

Page 42: Java. Kompendium programisty. Wydanie VIII

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.

Page 43: Java. Kompendium programisty. Wydanie VIII

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

Page 44: Java. Kompendium programisty. Wydanie VIII

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

Page 45: Java. Kompendium programisty. Wydanie VIII

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

Page 46: Java. Kompendium programisty. Wydanie VIII

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

Page 47: Java. Kompendium programisty. Wydanie VIII

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

Page 48: Java. Kompendium programisty. Wydanie VIII

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

Page 49: Java. Kompendium programisty. Wydanie VIII

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

Page 50: Java. Kompendium programisty. Wydanie VIII

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

Page 51: Java. Kompendium programisty. Wydanie VIII

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

Page 52: Java. Kompendium programisty. Wydanie VIII

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

Page 53: Java. Kompendium programisty. Wydanie VIII

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

Page 54: Java. Kompendium programisty. Wydanie VIII

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

Page 55: Java. Kompendium programisty. Wydanie VIII

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

Page 56: Java. Kompendium programisty. Wydanie VIII

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

Page 57: Java. Kompendium programisty. Wydanie VIII

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

Page 58: Java. Kompendium programisty. Wydanie VIII

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

Page 59: Java. Kompendium programisty. Wydanie VIII

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

Page 60: Java. Kompendium programisty. Wydanie VIII

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

Page 61: Java. Kompendium programisty. Wydanie VIII

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

Page 62: Java. Kompendium programisty. Wydanie VIII

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

Page 64: Java. Kompendium programisty. Wydanie VIII