ava
Podstawy
WYDANIE VIIIJava
Podstawy
| WYDANIE VIII
SO ame
Java™ = (
Cay S. Horstmann ¢ Gary Cornell‘Tytul oryginalu: Core Java, Volume I Fundamentals
‘Thumaczenie: Lukasz Piwko
ISBN: 978-83-246-1478-3
‘Authorized translation from the English language edition, entitled: CORE JAVA, VOLUME I
FUNDAMENTALS, Eighth Edition, ISBN 0132354764, by Cay S. Horstmann and Gary Comell,
published by Pearson Education Inc., publishing as Prentice Hall, Copyright © 2008 by Sun
Microsystems, Ine.
Polish language edition published by Helion S.A.
Copyright © 2008
[All rights reserved. No part ofthis book may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording or by any information storage
retrieval system, without permission from Pearson Education Inc.
Wezelkie prawa zastrzetone. Nieautoryzowane rozpowszechnianie caloéci lub fragmentu niniejsze}
publikacji w jakiejkolwiek postaci jest zabronione, Wykonywanie kopii metoda kserograficzna,
Fotograficma, atakze kopiowanic ksig2ki na nosniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie maki wystepujace w tekécie sq zastrzezonymi zakami firmowymi badé towarowymi
ich wlascicieli.
‘Autor oraz Wydawnictwo HELION dolozyli wszelkich staraf, by zawarte w tej ksigzce informacje
byly kompletne i rzetelne. Nie bora jednak tadne} odpowiedzialnosci ani za ich wykorzystanie,
ani za zwigzane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz
‘Wydawnictwo HELION nie ponosza réwnie? 2adne} odpowiedzialnoéci za ewentualne
s2kody wynikle 2 wykorzystania informacji zawartych w ksigtce.
Pliki z prykladami omawianymi w ksigzee mozna znaledé pod adresem:
Sip:[Link] pliprayklady/[Link]
Materialy graficane na okladce zostaly wykorzystane za zgoda iStockPhoto Inc.
Wydawnictwo HELION
ul Koéciuszki Ic, 44-100 GLIWICE.
tel. 032 231 22 19, 032 230 98 63
e-mail: helion@helion pl
WWW: hup://helion pl (ksi¢garia interetowa, Katalog ksigtek)
Drogi Czytelniku!
Jeteli cheesz ocenié tg ksiatke, zajrzyj pod adres
‘up:/[Link]/user/opinie?javpd3
Motesz. tam wpisaé swoje uwagi, spostrzezenia, recenzje.
Printed in Poland.Spis tresci
Podziekowania 3
Wstep 5
Rozdziat L Wstep do Javy
Java jako platforma programistyczna
Stowa klucze biate} ksiegi Javy
Prosty .
Bezpieczny ..
Niezalezny od arc!
Praenoény ..
Interpretowany
Wysokowydajny
Wielowatkowy
Dynamiczny
Aplety Javy i intemet
Krétka histona Javy .
Gtowne nieporozumienia dotyczace Jayy ..
Rozdziat 2. Srodewisko programistyczne Javy
Instalacja oprogramowania Java Development Kit
Pobieranie pakietu JDK
Ustawianie Sciezki dostepu ..
Instalacja bibliotek i dokumentacji
Instalacja przyktadowych programéw
Drzewo katalogéw Javy
Wybér Srodowiska programistycznego
Uzywanie narzedzi wiersza poleceft
Rozwiazywanie probleméwJava Podstawy
Praca w zintegrowanym Srodowisku programistycznym
Znajdowanie biedéw kompilac)
Uruchamianie aplikacji graficzne}
‘Tworzenie i uruchamianie apletow .
Roztzial S. Podstawowe elementy jezyka Jay:
Prosty program w Javie
Komentarze
Typy danych
‘Typy catkowite ..
Typy zmiennoprzecin!
Typ char
Typ boolean’
Zmienne
Inicjacja zmiennych
State
Operatory
Operatory inkrementacji i dekrementacji
Operatory relacyjne i logiczne
Operatory bitowe ..
Funkcje i state matematyezne 75
Konwersja typéw numerycznych 76
Rzutowanie 7
Nawiasy i priorytety operatoréw 78
Typ wyliczeniowy . 79
taticuchy . 79
Podtanicuchy
Konkatenacja 80
Laficuchéw nie mozna modyfikowaé 80
Porownywanie taficuchow 82
Wspétrzedne kodowe znakéw i jednostki kodowe ..
API String ..
Dokumentacja API w intemecie
Sktadanie taricuchow
Wejécie i wyiScie
‘Odbieranie danych wejsciowych
Formatowanie danych wyjSciowych .
Zapis do pliku i odezyt
Preeplyw sterowania .
Zasieg blokowy
Instrukeje warunkowe .
Petle
Petie 0 okrestone| liczbie powtorzer
Wyb6r wielokierunkowy — instrukcja switch
Instrukcje preerywajace preeplyw sterowania
Wielkie liczby ..
Tablice
Petia typu for each .
Inicjowanie tablic i tworzenie tablic anonimowych
Kopiowanie tablicy ..
Parametry wiersza polecenRozdzial 4. Obiekty iklasy
Sortowanie tablicy
Tablice wielowymiarowe .
Tablice postrzepione ...
Wstep do programowania zorientowanego obiektowo
Kiasy .
Obiekty
Identyfikacja klas ..
Relacje miedzy klasami ..
Uaywanie kias predefiniowanych
Obiekty i zmienne obiektéw
Klasa GregorianCalendar
Metody udostepniajace i zmieniajace wartosé elementu ..
Definiowanie wlasnych Klas .
Klasa Employee
‘Stosowanie kilku plik6w Zrédtowych .
Analiza klasy Employee
Pierwsze kroki w tworzeniu konstruktoréw
Parametry jawne i niejawne
Korzy$ci 2 hermetyzacii
Praywileje klasowe
Metody prywatne
Stale jako pola klasy
Pola | metody statyczne
Pola statyczne
Stale statyczne .
Metody statyczne ..
Metody fabrykujace 164
Metoda main 165
Parametry metod ..
Konstruowanie obiektow
Praeciazanie ..
Inicjacja p6l wartoSciami domysinymi 174
Konstruktor domysiny 175
Jawna inicjacja p61
Nazywanie parametrow
Wywolywanie innego konstruktora
Bioki inicjujace
Niszezenie obiekt6w i metoda final 182
Pakiety .. 182
Importowanie Klas 183
Importy statyczne . 185
Dodawanie klasy do pakietu .. 185
Zasieg pakietow 188
Sciezka kias 190
Ustawianie Sciezki klas 192
Komentarze dokumentacyjne
Wstawianie komentarzy
Komentarze do kias.
Komentarze do metod ..G Java. Pedsiawy
Komentarze do pél .. 195
Komentarze ogéine 195
Komentarze do pakietow i og6ine 197
Generowanie dokumentagji 97
Porady dotyezace projektowania klas 98
Razdzial 5. Dziedziczenie
Rezdziat 6. intoriejsy i Kiasy wewneirzne
Klasy, nadklasy 1 podklasy
Hierarchia dziedziczenia
Polimorfizm ..
Wiazanie dynamiczne
Wytaczanie dziedziczenia — klasy i metody finalne .. 13
Rautowanie 214
Klasy abstrakcyjne .. 16
Dostep chroniony
Klasa bazowa Object
Metoda equals
Poréwnywanie a dziedziczenie ..
Metoda hashCode
Metoda toString
Generyczne listy tablicow
Dostep do elementéw listy tablicowej
Zgodnosé pomiedzy typowanymi a surowymi listami tablicowymi
Ostony obiektéw i autoboxing ..
Metody ze zmienna liczba parametr
Klasy wyliczeniowe
Refieksja
Klasa Class .
Podstawy przechwytywania wyjath6w
Zastosowanie refleksii w analizie funkcjonalnosci kiasy ..
Refleksja w analizie obiekt6w w czasie dzialania programu
Zastosowanie refleksyi w generycznym kodzie tablicowym
Wskagniki do metod ...
Porady projektowe dotyczace driedziczenia
Interfejsy
WtasnoSci interfejs6w
Interfejsy a klasy abstrakcyine
Klonowanie obiektéw
Interfejsy a sprzezenie zwrotne
Klasy wewnetrzne ..
Dostep do stanu obiektu w Klasie wewnetrzne}
‘Specjaine reguly sktadniowe dotyczqce klas wewnetrznych
Czy klasy wewnetrane sa potrzebne | bezpleczne?
Lokaine klasy wewngtrzne
Dostep do zmiennych finalnych z metod zewnetrznych
Anonimowe klasy wewnetrzne ..
Statycane klasy wewnetrane ..
Klasy proxy
WrasnoSei klas proxy. BitRozdziat7. Grafika 38
Wprowadzenie do pakietu Swing 314
Tworzenie ramki .. .317
Pozyclonowanie ramki 320
Wlasno$ci ramek 1.322
323
OkreStanie rozmiaru ramki
WySwietlanie informacji w kamponencie
Figury 2W
Kolory
Czcionki
WySwietlanie obrazow
Rozdziat 8. Obstuga zdarzeni
Podstawy obstugi zdarzeri
Prayklad — obstuga kliknigcia przycisku ..
Nabywanie biegloSci w postugiwaniu sig klasami wewnetrenymi
Tworzenie stuchaczy zawierajqcych jedno wywotanie metody
Prayktad — zmiana stylu
Klasy adaptacyjne
Akcje
Zdarzenia generowane przez mysz .
Hierarchia zdarzen\ w bibliotece AWT
Zdarzenia semantyczne | niskiego poziomu
Rozdziat 9. Komponenty Swing interfejsu uzyikownika
Swing a wzorzec projektowy Model-View-Controller ..
Wzorce projektowe ..
Wzorzec Model-View-Controller
Analiza MVC przycisk6w Swing
Wprowadzente do zarzadzania rozkiadem .
Rozktad brzegowy ..
Rozklad siatkowy .
Wprowadzanie tekstu
Pola tekstowe ....
Etykiety komponentow ..
Pola haset ..
Obszary tekstowe ..
Panele przewijane
Komponenty umodliwiajace wyb6r opeji ..
Pola wyboru
Praetacaniki
Obramowanie
Listy rozwijaine .
Suwaki
Menu ..
Tworzenie menu
Ikony w elementach menu
Pola wyboru i preetaczniki jako elementy menu
Menu podreczne
Mnemoniki | akceleratory8 —_ Java Podstawy
Aktywowanie i dezaktywowanie elementéw menu
Paski narzedzi
Dymki
Zaawansowane techniki zarzadzania rozktadem
Rozktad GridBagLayout ..
Rozklad grupowy
Nieuzywanie Zadnego zarzadcy rozktadu
Niestandardowi zarzadcy rozktadu ..
Kolejka dostepu .
‘Okna dialogowe
Okna dialogowe opcji
‘Tworzenie okien dialogowych
Wymiana danych
Okna dialogowe wyboru plik6w
Okna dialogowe wyboru kolor6w ..
Razizial 10. Przyootowywanie aplet6w i aplikacii do u2ytku
Phiki JAR ..
Manifest .. 526
Wykonywaine pliki JAR 528
Zasoby .. 529
Pieczetowanie pakietw
Java Web Start
Sandbox
Podpisywanie kodu
APLINLP
Aplety ...
Prosty aplet
Znacznik applet i jego atrybuty 53
Znacznik object 57
Parametry przekazujace informacje do apletw
Dostep do obrazéw i plikéw audio ..
Srodowisko dziatania apletu
Zapisywanie preferencji uzytkownika
Mapy wtasnosci ..
API Preferences ..
Rezizial 11. Wyjatii, dzienniki, asercje i debugowanie
Obstuga biedow
Klasyfikacja wyjatkow 587
Deklarowanie wyjatk6w kontrolowanych 589
Zgtaszanie wyjatkow .. 91
Tworzenie kias wyjatkow 593
Praechwytywanie wyjathow: 594
Przechwytywanie wielu typow wyjatkow
Powtome generowanie wyjatkow i budowani
Wlauzula finally
Analiza danych ze Sledzenia stosu ..
Wskaz6wki dotyczace stosowania wyjatk6w
taricuch6w wyjatkow ..Asercje
Wiaczanie I wytaczanie asercji .
Zastosowanie asercji w sprawdzaniu parametrow
Zastosowanie asercji w dokumentacji zatozeri .. 10
Dzienniki ..
Podstawy zapisu do dziennika ..
Zaawansowane techniki zapisu do dziennika
Zmiana konfiguracji menediera dziennikow
Lokalizacja
Obiekty typu Handler
Filtry
Formatery ..
Preepis na dziennik
Wskaz6wki dotyczace debugowania ...
Uzywanie okna konsoll
Siedzenie zdarzen AWT
Zapreeganie robota AWT do pracy
Praca z debugerem
Rozdzial 12. Programowanie uogdinione
Diaczego programowanie uogéinione
Dia kogo programowanie uogdlnione
Definicja prostej klasy uogéinione|
Metody uogéinione
Ograniczenia zmiennych typowych
Kod uogéIniony a maszyna wirtuaina
Translacja wyraten generycznych
Translagja metod uogéinionych
Uzywanie starego kodu
Ograniczenia i braki
Nie moina podawaé typéw prostych jako parametréw typowych
‘Sprawdzanie typw w czasie dziatania programu jest moiliwe tylko
dia typ6w surowych
Obiektéw klasy uoginionej nie mozna generowaé ani przechwytywat
Nie mona tworzyé tablic typ6w uogéinionych ...
Nie woino tworzyé egzemplarzy zmiennych typowych .
Zmiennych typowych nie moina uzywac w statycznych kontekstach klas uogéinionyct
Uwazaj na konflikty, kt6re moga powstaé po wymazaniu typow
Zasady driedziczenia dia typ6w uogélnionych ....
‘Typy wieloznaczne
Ograniczenia nadtyp6w typéw wieloznacznych
Typy wieloznaczne bez ograniczen
Chwytanie typu wieloznacznego ..
Refleksja a typy uogéinione ...
Zastosowanie parametréw Class
do dopasowywania typow
Informacje o typach generyoznych w maszynie wirtualne]W Java Podstawy
Rozizial 13. Kolekcie
Interfejsy kolekeyine
Oddzielenie warstwy interfejséw od warstwy klas konkretnych ..
Interfejsy Collection i iterator ..
Konkretne klasy kolekeyjne
Listy powigzane
Listy tablicowe
‘Zbi6r HashSet 706
Zbidr TreeSet .. 710
Porownywanie obiektow 711
717
Kolejki Queue i Deque .
Kolejki priorytetowe
Mapy
Specjaine klasy Set i Map
Architektura kolekcji
Widoki i obiekty opakowujace ..
Operacie zbiorcze ..
Konwersja pomiedzy kolekcjami a tablicami
Algorytmy
Sortowanie i tasowanie
Wyszukiwanie biname
Proste algorytmy ..
Pisanie wlasnych algorytméw .
Stare kolekcje
Reziziat . Wielowatkowosé
Czym sq wath ...
‘Wykonywanie zadafi w osobnych watkach
Praerywanie watkow
Stany watkow
Watki NEW
Watki RUNNABLE ..
Watki BLOCKED i WAITING ..
Zamykanie wathow
Wiasnosci watkéw
Priorytety watk6w .
Watki demony
Procedury obstugi nieprzechwyconych wyjatk6w
‘Synchronizacja
Prayktad sytuacii powodujace) wyScig
Wyscigi
Obiekty Klasy Lock
Warunki
Stowo kluczowe synchronized
Bioki synchronizowane
Monitor ..Pola ulotne
Zakleszczenia ..
Testowanie blokad i odmierzanie czasu
Blokady odczytu-zapisu ..
Diaczego metody stop i suspend sa od:
Kolejki blokujace
Kolekcje bezpieczne watkowo .
Szybkie mapy, zbiory i kolejki
Tablice kopiowane przy zapisie
Starsze kolekcje bezpieczne watkowo
Interfejsy Callable i Future
Klasa Executors
Pule watkow
Planowanie wykonywania
Kontrolowanie grup zadat\ .
Synchronizatory
Semafory ..
Klasa CountDownLatch
Bariery ..
Kiasa Exchanger ..
Kolejki synchroniczne ..
Przyktad — wstrzymywanie i ponowne uruchamianie animacji
Watki a biblioteka Swing
Uruchamianie czasochtonnych zadari 840
Kiasa SwingWorker .
Zasada jednego watku
Dodatek A Slowa kluczowe Javy 853
‘Skorowidz 8552 Java PodsiawyPodziekowania
Pisanie ksiq2ki to zawsze ogromny wysitek, a pisanie kolejnego wydania nie wydaje sig du-
20 tatwiejsze, zwlaszcza kiedy weémie sig pod uwage ciagle zmiany zachodzace w technologii
Java. Aby ksiazka mogla powstaé, potrzeba zaangazowania wielu os6b. Dlatego tez z wielka
przyjemnosciq chcialbym podzigkowaé za wspélprace calemu zespotowi Core Java.
Wiele cennych uwag pochodzi od os6b 2 wydawnictw Prentice Hall i Sun Microsystems
Press, ktérym udato sie pozostaé w cieniu. Cheialbym, aby wszystkie te osoby wiedzialy, 2e
bardzo doceniam ich prace. Jak zawsze gorace podzi¢kowania kieruje do mojego redaktora
z wydawnictwa Prentice Hall — Grega Doencha — za przeprowadzenie te} ksiazki przez
proces pisania i produkeji oraz za to, 2e pozwolit mi pozostat w blogie| nieswiadomaéei ist-
nienia wszystkich osdb pracujacych w zapleczu. Jestem wdzigczny Vanessie Moore za dosko-
nale wsparcie w dziedzinie produkeji, Dziekuje réwnict mojemu wspétautorowi poprzednich
wydan tej ksiqzki — Gary’emu Comellowi, ktéry podjat inne wyzwania,
Dzigkuje wszystkim czytelnikom poprzednich wydai tej ksiqdki za informacje 0 Zenujacych
biedach, ktére popetnitem, i komentarze dotyczace ulepszenia mojej ksiatki. Jestem szczegél-
nie wdzigczny zakomitemu zespolowi korektoréw, ktérzy czytajac wstepna wersje tej ksig¢ki
i wykazujgc niebywata czulosé na szczegély, uratowali mnie przed popetnieniem jeszcze
wigkszej liczby biedow.
Do recenzentéw tego i poprzednich wydai niniejszej ksiqtki naletq: Chuck Allison (Contri-
buting Editor, C/C++ Users journal), Alec Beaton (PointBase, Inc.) Cliff Berg (iSavvix Corpo-
ration), Joshua Bloch (Sun Microsystems), David Brown, Corky Cartwright, Frank Cohen
(PushToTest), Chris Crane (devXsolution), dr Nicholas J. De Lillo (Manhattan College),
Rakesh Dhoopar (Oracle), David Geary (Sabreware), Brian Goetz (Principal Consultant,
Quiotix Corp.), Angela Gordon (Sun Microsystems), Dan Gordon (Sun Microsystems), Rob
Gordon, John Gray (University of Hartford), Cameron Gregory ([Link]), Marty Hall (The
Johns Hopkins University Applied Physics Lab), Vincent Hardy (Sun Microsystems), Dan
Harkey (San Jose State University), William Higgins (IBM), Vladimir Ivanovic (PointBase),
Jerry Jackson (ChannelPoint Software), Tim Kimmet (Preview Systems), Chris Laffra, Charlie
Lai (Sun Microsystems), Angelika Langer, Doug Langston, Hang Lau (McGill University),
Mark Lawrence, Doug Lea (SUNY Oswego), Gregory Longshore, Bob Lynch (Lynch Asso-
ciates), Philip Milne (konsultant), Mark Morrissey (The Oregon Graduate Institute), MaheshJava Podstawy
Neelakanta (Florida Atlantic University), Hao Pham, Paul Philion, Blake Ragsdell, Stuart
Reges (University of Arizona), Rich Rosen (Interactive Data Corporation), Peter Sanders
(ESSI University, Nicea, France), dr Paul Sanghera (San Jose State University and Brooks
College), Paul Sevine (Teamup AG), Devang Shah (Sun Microsystems), Bradley A. Smith,
Steven Stelting (Sun Microsystems), Christopher Taylor, Luke Taylor (Valtech), George
Thiruvathukal, Kim Topley (autor Core JFC), Janet Traub, Paul Tyma (konsultant), Peter van
der Linden (Sun Microsystems) i Burt Walsh.
Cay Horstmann
San Francisco 2007Wstep
Do czytelnika
Jezyk programowania Java pojawit sig na scenie pod koniec 1995 roku i od razu zyskat sobie
reputacje gwiazdy. Ta nowa technologia miata staé si¢ uniwersalnym lacznikiem pomigdzy
uzytkownikami a informacja, bez wzgledu na to, czy informacje te pochodzily z serwera
sieciowego, bazy danych, serwisu informacyjnego, czy jakiegokolwiek innego arédla. I rze-
czywigcie Java ma niepowtarzalng okazje spetnienia tych wymagai, Ten zaprojektowany
Z niezwykla starannoscia jezyk zyskal akceptacje wszystkich najwiekszych firm z wyjatkiem
Microsoftu. Wbudowane w jezyk zabezpieczenia dziataja uspokajajaco zaréwno na programi-
stOw, jak i utytkownikéw programéw napisanych w Javie. Dzi¢ki woudowanym funkejom
zaawansowane zadania programistyczne, takie jak programowanie sieciowe, lacznosé po-
migdzy bazami danych i wielowalkowose, sa znacznie prostsze.
Do tej pory firma Sun Microsystems wydata juz siedem wersji pakietu Java Development
Kit. Przez ostatnich jedenascie lat interfejs programowania aplikacji (ang. Application Pro-
gramming Interface — API) rozr6sl sig z okoto 200 do ponad 3000 klas. API to obejmuje
obeenie tak rézne aspekty tworzenia aplikacji, jak konstruowanic interfejsu uzytkownika,
zarzadzanie bazami danych, internacjonalizacja, bezpieczetistwo i przetwarzanie XML.
Ksigzka, ktora trzymasz w rece, jest pierwszym tomem ésmego wydania ksigtki Core Java.
Kazda edyeja tej ksiaeki nastepuje najszybcie}, jak to tylko mozliwe, po wydaniu kolejne}
wersji pakietu Java Development Kit. Za kazdym razem uaktualnialigmy tekst ksiqzki
zuwzglednieniem najnowszych narzedzi dostepnych w Javie. To wydanie opisuje Java Stan-
dard Edition (SE) 6.
Tak jak w przypadku poprzednich wydai niniejszej ksiq2ki, to rowniez praeznaczone jest
dla powaznych programistow, ktérzy chca wykorzysta¢ technologig Java w rzeczywistych
projektach. Zaktadamy, 2c odbiorca naszego tekstu jest programista posiadajacym duze do-
Swiadczenie w programowaniu w innym jezyku nit Java. Ponadto prézno tu szukaé dzie-
cinnych praykladow (jak tostery, zwierzeta z ZOO czy ,rozbiegany tekst”). Nic z tych rzeczyJava. Podsiawy
tutaj nie znajdziesz. Naszym celem byto przedstawienie wiedzy w taki sposdb, aby czytel-
nik mégt bez problemu w pelni zrozumieé zasady ragdzqce jezykiem Java i jego biblioteka,
anie tylko myslat, 2e wszystko rozumie.
Ksiqdka ta zawiera mnéstwo praykladéw kodu, obrazujgcych zasady dziatania niemal kazdej
opisywanej przez nas funkeji i biblioteki. Przedstawiane przez nas przykladowe programy
59 proste, poniewaz chcieligmy skoncentrowaé sig w nich na najwazniejszych zagadnieniach,
Niemniej jednak znakomita wigkszosé z nich zawiera prawdziwy nieskrcony kod. Powinny
dobrze shizyé jako punkt wyjécia do pisania wlasnych programéw.
Wychodzimy z zatozenia, 2e osoby czytajace te ksigeke chea (albo wrecz pragna) nauczyé
sie wszystkich zaawansowanych cech Javy. Oto kilka przyktadowych zagadnien, ktore opi-
sujemy szczegétowo:
1 programowanie zorientowane obiektowo;
mechanizm refleksji (ang. reflections) i obiekty proxy;
interfejsy i klasy wewnetrzne;
delegacyjny model obstugi 2darzefi;
projektowanie graficznego interfejsu uzytkownika za pomoca pakietu
narzedzi Swing Ul;
obstuga wyjatkow;
=
™ programowanie generyczne;
wm kolekcje;
.
wspétbieznosé.
Ze wzgledu na niebywaly wrecz rozw6j bibliotcki klas Javy opisanie w jednym tomie wszyst-
kich wlasnosci tego jezyka, ktérych potrzebuje powazny programista, graniczytoby z cudem.
Z tego powodu postanowiligmy podzielié nasza ksigzke na dwa tomy. Pierwszy, kt6ry traymasz
w reku, opisuje podstawy jezyka Java oraz podstawowe zagadnienia zwigzane z programo-
waniem interfejsu uzytkownika. Tom drugi (majacy dopiero sig ukazaé) zawiera informacje
na bardzie} zaawansowane tematy oraz opisuje zlozone zagadnienia zwigzane z programowa-
mem interfejsu u2ytkownika. Poruszane w nim tematy to:
m plikiii strumienie;
obiekty rozproszone;
bazy danych;
zaawansowane komponenty GUI;
metody rodzime;
przetwarzanie dokument6w XML;
programowanie sieciowe;
zaawansowana obrdbka grafikisWsiep = 17
wm obstuga wielu jezyk6w;
JavaBeans;
® adnotacje.
Zawartosé obu toméw zostala w niniejszym wydaniu pomieszana. Nalezy zwlaszcza zwrdcié
wage na przeniesienie do tomu pierwszego wielowatkowosci, ktéra w zwigzku z wyczerpy-
waniem sig mozliwosei preewidywanych przez prawo Moore’a stala sig niezwykle wazna.
Podczas pisania ksigzki nie da sig uniknaé drobnych bledéw i wpadek. Bardzo cheieliby-
Smy byé informowani o ich istnieniu, Jednak kazda taka informacje wolelibysmy otrzymaé
tylko jeden raz. W zwiazku z tym na stronie htip://[Link]/corejava zamiescilismy
liste najezesciej zadawanych pytaf, obe)é¢ i poprawek do bledéw. Formularz shizacy do wy-
sylania informacji o bledach i propozycji poprawek zostat celowo umieszczony na koficu
strony z errata, aby zachecié potencjalnego nadawee do wezesniejszego zapoznania sig z ist-
niejacymi juz informacjami. Nie nalezy zrazaé sig, jesli nie odpowiemy na kaéde pytanie
lub nie zrobimy tego natychmiast. Naprawde czytamy wszystkie przychodzace do nas listy
i doceniamy wysitki wszystkich naszych czytelnikw wkladane w to, aby prayszle wyda-
nia naszej ksiazki byly jeszcze lepiej zrozumiale i zawieraly jeszcze wigce} po2ytecznych
informacji
Oksiazce
Rozdzial 1. stanowi przeglad wlaéciwosci jezyka Java, ktére wyrézniaja go na tle innych
jezykéw programowania, Wyjasniamy, co projektanci chcieli zrobié, a co sig im udalo. Na-
stepnic krétko opisujemy historig powstania Javy oraz sposdb, w jaki ewoluowala,
W rozdziale 2, opisujemy proces pobierania i instalacji pakietu JDK (ang. Java Development
Kit) oraz dolaczonych do tej ksia2ki przykladéw kodu, Nastepnie opisujemy krok po kroku
kompilacje i uruchamianie trzech typowych programéw w Javie: aplikacji konsolowej, apli-
kacji graficznej i apletu. Naszymi narzedziami sq czyste Srodowisko JDK, edytor tekstowy
obstugujacy Jave i zintegrowane srodowisko programowania (ang. Integrated Development
Environment — IDE) dla Javy.
Od rozdzialu 3. zaczynamy opis jezyka programowania Java, Na poczatku opisujemy pod-
stawy: zmienne, petle i proste funkcje. Dla programistow jezykOw Ci C+ bedzie to butka
z maslem, poniewat Java i C w tych sprawach w zasadzie niczym sig nie rééniq, Programi-
Sci innych jezykéw, takich jak Visual Basic, powinni bardzo starannie zapoznaé sig z tresciq
tego rozdziatu.
Obecnie najpopulamiejsza metodologia stosowana przez programist6w jest programowanie
Zorientowane obicktowo, a Java to jezyk w petni obiektowy. W rozdziale 4. wprowadzamy
pojecie hermetyzacji (ang. encapsulation), kira stanowi jeden z dwéch filaréw programo-
wania obiektowego, oraz piszemy o mechanizmach Javy stuzacych do jej implementacji, czyli
© Klasach i metodach. Poza opisem zasad rzadzacych jezykiem Java dostarczamy take in-
formacji na temat solidnego projektowania programéw zorjentowanych obiektowo. Na koiicuJava Podstawy
poswigcamy nieco micjsca doskonalemu narzedziu o nazwie javadoc shu2gcemu do konwersji
komentarzy zawartych w kodzie na wzajemnie potyczone hiperlaczami strony intemetowe.
Osoby znajace jezyk C++ moga preejrzeé ten rozdzial pobieznie, Programisci niemajacy
dogwiadezenia w programowaniu obiektowym musza liczyé sig z tym, Ze opanowanie wie-
dzy przedstawionej w tym rozdziale zajmie im troche czasu.
Klasy i hermetyzacja to dopiero polowa koncepeji programowania zorientowanego obiektowo.
Rozdziat 5. wprowadza druga, czyli dziedziczenie. Mechanizm ten umozliwia modyfikacje
istniejacych juz Klas do wlasnych specyficznych potrzeb. Jest to podstawowa technika pro-
‘gramowania zaréwno w Javie, jak i C++, a oba te jezyki maja pod tym wzgledem wiele ze
sobq wspélnego. Diatego tez programisci C+ moga réwnie2 w tym rozdziale sku
na réznicach pomigdzy tymi dwoma jezykami.
W rozdziale 6. nauczymy sig postugiwa¢ interfejsami w Javie, ktére wykraczaja poza pro-
sty model dziedziczenia opisywany w poprzednim rozdziale. Opanowanie technik zwiqza-
nych z interfejsami da nam pelny dostep do mo2liwoéci, jakie stwarza w petni obicktowe pro-
gramowanie w Javie. Ponadto opisujemy bardzo przydatne w Javie klasy wewngtrzne (ang.
inner classes). Pomagaja one w pisaniu bardziej zwigzlego i przejrzystego kodu.
Od rozdziatu 7. zaczynamy powazne programowanie. Jako ze kazdy programista Javy powi-
nien znaé sig na programowaniu GUI, w tym rozdziale opisujemy podstawy tego zagadnie-
nia, Nauczysz sig tworzyé okna, rysowaé w nich, rysowaé figury geometryczne, formatowaé
tekst przy zastosowaniu ré¢mych krojéw pisma oraz wySwietlaé obrazy.
W rozdziale 8. szczegélowo opisujemy model zdarzefi AWT (ang. Abstract Window Toolkit).
Nauczymy sie pisaé programy reagujace na zdarzenia, takie jak kliknigcie przyciskiem myszy
albo nacignigcie klawisza na klawiaturze. Dodatkowo opanujesz techniki pracy nad takimi
elementami GUI jak przyciski i panele.
Rozdzial 9. zawiera bardzo szczegétowy opis pakietu Swing. Pakiet ten umo?liwia tworze-
nie niezaleenych od platformy graficnych interfejséw uzytkownika. Nauczysz sig postugiwaé
rémego rodzaju przyciskami, komponentami tekstowymi, obramowaniami, suwakami, polami
list, menu i oknami dialogowymi. Niektore zaawansowane komponenty zostaly opisane do-
piero w drugim tomie.
Rozdzial 10. zawiera informacje na temat wdratania programéw jako aplikacji lub apletow.
Nauczysz sig pakowaé programy do plikéw JAR oraz udostepniaé aplikacje poprzez intemet
za pomoca mechanizméw Java Web Start i apletéw. Na zakoficzenie opisujemy, w jaki spo-
s6b Java preechowuje i wyszukuje informacje na temat konfiguracji juz po ich wdrozeniu.
Rozdzial 11. poswigciligmy obstudze wyjatkéw — doskonalemu mechanizmowi pozwala-
jacemu radzié sobie z tym, 2e 2 dobrymi programami moga dziaé sig 2le rzeczy. Wyjatki sq
skutecznym sposobem na oddzielenie kodu normalnego przetwarzania od kodu obstuguja-
cego bledy. Oczywiscie nawet zabezpieczenie w postaci obshugi wszystkich sytuacji wyjat-
kowych nie zawsze uchroni nas przed niespodziewanym zachowaniem programu. W drugiej
cagéci tego rozdzialu zawarlismy mnéstwo wskazdwek dotyczacych usuwania bledéw [Link]-
gramu. Na kovicu opisujemy krok po kroku cata sesj¢ debugowania.Wsiep 8
W rozdziale 12. preedstawiamy zarys programowania generycznego — najwainiejszej
nowosci w Java SE 5.0. Dzigki tej technice mozna tworzyé latwiejsze do odezytu i bezpiecz-
niejsze programy. Przedstawiamy sposoby stosowania écistej kontroli typow oraz pozbywania
sig sepetnych i niebezpiecenych konwersji. Ponadto nauczysz sig radzié sobie w sytuacjach,
kiedy trzeba zachowaé zgodnosé ze starszymi wersjami Javy.
Tematem rozdziatu 13. sa kolekeje. Cheac zebraé wiele obiektéw, aby méc ich pééniej
uzyé, najlepiej postuzyé sig kolekcjq, zamiast po prostu wrzucaé wszystkie obiekty do tablicy.
W rozdziale tym nauczysz sig korzystaé ze standardowych kolekeji, ktore sq wbudowane
w jezyk i gotowe do uzytku.
Koriczacy ksiazke rozdzial 14. zawiera opis wielowatkowosci, ktora umozliwia programo-
wanie w taki spos6b, aby rézne zadania byly wykonywane jednoczeénie (watek to preeptyw
sterowania w programie), Nauczysz sig ustawiaé watki i panowaé nad ich synchronizacja.
Jako ze wielowatkowosé w Java 5.0 ulegla powainym zmianom, opisujemy wszystkie nowe
mechanizmy z nig zwiazane.
Dodatek zawiera liste stow zarezerwowanych w jezyku Java.
Konwencje typograficzne
Podobmie jak w wielu ksiqzkach komputerowych przyklady kodu programéw pisane sq
cacionka 0 stalej szerokosci znakéw.
Buoy 2 ron onatrzone 6a wag
E
Ta ikong opatrzone sq wskaz6wki..
W ksiaice tej pojawia sie wiele uwag wyjasnialgcych réinice pomigdzy Java a
Kiem C++. Jeéti nie znasz sig na programowaniu w C++ lub na my&l 0
‘wspomnieniach z nim zwiazanych dostajesz gesie] skérki, mozesz je pominaé.20 Java. Pedstawy
Th BRRfe)s prograronania aptitacss
Java posiada bardzo duza biblioteke programistyczna, czyli API (ang. Application Program.
ming Interface). Kiedy po raz pierwszy wywamy jakiegos wywolania API, na koficu sckeji
uumieszczamy krétk jego opis, ktéry wyrééniamy ikona z napisem API". Opisy te sa nieco
nieformalne, ale staralismy sie, aby zawieraty wigcej potrzebnych informacji niz te, ktére moz-
na zaledé w oficjalne| dokumentacji API w intemecie. Majge na uwadze dobro czytelnik6w,
Ktérzy nie wywaja najnowsze} wersji Javy, kazda uwage na temat API opatrzylismy nume-
rem wersji, w ktorej opisywana wlasnoéé zostala wprowadzona.
Programy, ktérych kod Zrédiowy moima znaleéé w internecie, sq oznaczane jako listingi, np.:
Usting LL. WeicomeAppletjavaWstep do Javy
W tym rozdziale:
Java jako platforma programistyczna
1m Slowa klucze bialej ksiggi Javy
wm Aplety Javy i intemet
mm Krétka historia Javy
wm _Najczestsze nieporozumienia dotyczace Javy
Pierwsze wydanie Javy w 1996 roku wywolato ogromne emocje nie tylko w prasie kom-
puterowej, ale takze w takich mediach nalezacych do glownego nurtu, jak ,,The New York
Times”, ,, The Washington Post” czy ,,Business Week”. Jezyk Java zostat jako pierwszy i do
tej pory jedyny jezyk programowania wyrdtniony krétka, bo trwajaca 10 minut, wzmiankg,
w National Pubiic Radio. Kapitat wysokiego ryzyka w wysokosci 100 000 000 dolaréw zo-
stat zebrany wylacznie dla produktéw powstalych przy zastosowaniu okreslonego jezyka
komputerowego. Wracanie dzisiaj do tych Swietnych czas6w jest bardzo zabawne, a wige
ww tym rozdziale krétko opisujemy histori¢ jezyka Java.
Java jako platforma programistyczna
W prerwszym wydantu tey kstqzki napisalismy o Javie takie oto stowa:
«Ten caly szum wok6! Javy jako jezyka programowania jest przesadzony. Java to z pewno-
Sciq dobry jezyk programowania. Nie ma watpliwosci, 2 jest to jedno z najlepszych narze-
dzi dostepnych dla powaznych programistow. Naszym zdaniem mogtaby byé wspaniatym jezy-
kiem programowania, ale na to jest juz chyba zbyt poéno. Kiedy przychodzi do rzeczywistych
zastosowari, swoja glowe podnosi ohydna zmora zgodnosci istniejacym ju2 kodem”.
Za ten akapit na naszego redaktora posypaty sig gromy ze strony kogo$ bardzo wysoko po-
stawionego w firmie Sun Microsystems, kogo nazwiska wolimy nie ujawniaé. Jednak z per-
spektywy czasu wydaje sig, 2e nasze prewidywania byly shuszne. Java ma mnéstwo bardzo2 sava Pedstawy
pozytecany ch cech, ktére opisujemy w dalszej czeéci tego rozdzintu. Ma te2 jednak pewne
wady, a najnowsze dodatki do jezyka ze wzgledu na zgodnosé nie sq juz tak eleganckie
jak kiedys,
Jak jednak napisalimy w pierwszym wydaniu niniejszej ksigzki, Java nigdy nie byla tylko
jezykiem. Istnieje bardzo duzo jezyk6w programowania, a tylko kilka z nich zrobilo furore.
Java to cala platforma z du2a biblioteka zawierajaca ogromne ilosci gotowego do wykorzy-
stania kodu oraz Srodowisko wykonaweze, ktére zapewnia bezpieczefstwo, przenosnosé
miedzy réznymi systemami operacyjnymi oraz automatyczne usuwanie nieuzytkow (ang.
garbage collecting).
Jako programisci 2gdamy jezyka o przyjaznej skladni i zrozumiatej semantyce (a wige nie
C+4). Do tego opisu pasuje Java, jak réwniez wiele innych dobrych jezykow programowa-
nia. Niektore z nich oferuja pr2enosnosé, 2bieranie nieuzytkéw itd., ale nie maja bogatych
bibliotek, przez co zmuszeni jestesmy pisaé wlasne, kiedy chcemy wykonaé obrébk¢ grafi-
ki, stworzyé aplikacje sieciowa badé taczaca sig z baza danych. Céz, Java ma to wszystko
— jest to dobry jezyk, kt6ry oddaje do dyspozycji programisty wysokiej jakosci srodowisko
wykonawcze wraz z ogromna biblioteka, To wlasnie to potaczenie sprawia, 2e tak wielu pro-
gramist6w nie potrafi oprzeé sig urokowi Javy.
Stowa klucze biatej ksiegi Javy
Tworcy jezyka Java napisali bardzo wplywowa biala ksigge, w ktOrej opisali swoje cele
i osiagnigcia. Dodatkowo opublikowali krétkie streszezenie zorganizowane wedlug naste-
pujacych 11 stow kluczawych:
Prosty przenogny
zorientowany obiektowo interpretowany
sieciowy wysokowydajny
niezawodny wielowatkowy
bezpieczny dynamiczny
niezalezy od architektury
W tej czesci rozdzialu:
= Krdtko podsumujemy, positkujae sie fragmentami z bialej ksiegi, co projektanci
Javy maja do powiedzenia na temat kazdego ze slow kluczowych.
= Wyrazimy wiasne zdanie na temat kazdego z tych st6w kluczowych, opierajac sig
na naszych doSwiadczeniach zwiqzanych z aktualng wersja Javy.
W trakcie pisania tej ksigtki biaia ksigga Javy byta dostgpna pod adresem
[Link] fangeny, a streszczenie z jedenastoma siowami
Kiuczowymi znajduje sig pod adresem [Link] /overviews/java/
‘[Link].RozdziakL = Wstepdovavy = 23
Prosty
Naszym celem bylo zbudowanie takiego systemu, ktéry motna zaprogramowaé bez
ukoriczenia tajemnych szkolen, a ktéry podtrzymywalby obecne standardowe praktyki.
W zwigzku z tym — mimo ie w naszym przekonaniu jezyk C++ nie nadawal sie do tego
celu — Java pod wzgledem projektowym jest do niego podobna, jak to tylko moiliwe.
Daigki temu nasz system jest bardziej zrozumialy. Java jest pozbawiona wielu rzadko
uéywanych, slabo poznanych i wywolujqcych zamieszanie funkeyi, ktére 2godnie
z naszymi doswiadczeniami przynoszq wiecej zlego niz dobrego.
Skladnia Javy rzeczywiscie jest oczyszczona wersja sktadni jezyka C++. Nie ma potrzeby
dolqczania plikow nagiéwkowych, poslugiwania sig arytmetyka wskadnikowg (a nawet skiad-
nia wskaénikowa), strukturami, uniami, przeciazaniem operatoréw, wirtualnymi klasami
bazowymi itd. (wigce} réznic pomigdzy Java a C++ modna znalezé w uwagach rozmieszczo-
nych na kartach tej ksig2ki). Nie jest jednak tak, 2e projektanci pozbyli sie wszystkich wlasci
wosci jezyka C+, ktore nie byly eleganckie, Na przyklad nie zrobiono nic ze skladnia instruk-
ji switch. Kaady, kto zna jezyk C++, z latwoscia przelaczy sig na skladnie jezyka Java.
Osoby prayzwyczajone do srodowisk wizualnych (jak Visual Basic) prey nauce Javy beda
napotykaé trudnosci. Trzeba pojaé mnéstwo dziwnych elementéw sktadni (choé nie zabiera
to zbyt duzo czasu). Wigksze znaczenie ma to, 2e w Javie trzeba znacznie wigcej pisaé.
Pigkno jezyka Visual Basic polega na tym, ze duéa czgéé infrastruktury aplikacji jest auto-
matycznie dostarczana przez srodowisko programistyczne. Wszystko to w Javie treba na-
pisaé wlasnorecznie, a to 2 reguly wymaga dosé dué¢j ilosci kodu. Istniejq jednak Srodowi-
ska udostepniane przez niezaleimych producentéw, ktére umo2liwiaja programowanie w stylu
~przeciagnij i upusé”.
Wyznacznikiem prostoty sq takte niewielkie rozmiary. Jednym z celéw Javy jest
umozliwienie tworzenia oprogramowania dziatajqcego niezaleznie na matych
urzqdzeniach. Rozmiar podstawowego interpretera i obstugi klas wynosi okolo
40 kilobajiéw. Podstawowe standardowe biblioteki i obstuga watkow
(w zasadzie jest to samodzielne mikrojqdro) to dodatkowe 175 K.
W tamtych czasach bylo to niebywale wrecz osiagnigcie. Oczywiscie od tamtej pory bibliote-
ka Javy rozrosta si¢ do nieprawdopodobnych rozmiaréw. W zwiazku z tym powstaia oddziel-
na wersja Javy 0 nazwie Java Micro Edition z mniejsza biblioteka, kt6ra nadaje sig do stoso-
wania na malych urzadzeniach.
Zorientowany obiektowo
Méwigc krétko, projektowanie zorientowane obiektowo to technika programowania,
ktérey punktem centralnym sq dane (czyli obiekty) oraz interfejsy dajace dostep
do tych obiektéw. Przez analogie — zorientowany obiektowo stolarz bylby praede
wszystkim zainteresowany krzeslem, kiére ma zrabié, a potreehne do tego narzedzia
stawialby na drugim miejscu. Niezorientowany obiektowo stolarz z kolei na pierwszym
iejscu stawialby swoje narzedzia. Narzedzia zwiqzane z programowaniem obiektowym
w Javie sq w zasadzie takie jak w C++.24
Java Podstawy
Zorientowana obiektowo metoda programowania udowodnita swoja wartosé W ciagu osta,
nich 30 lat. Jest nie do pomyslenia, aby jakikolwiek nowoczesny jezyk 2 niej nie korzystay
Raeezywiscie wtasciwosei Javy, dzigki ktorym mozna nazywaé ja jezykiem zorientowany,
obiektowo, sq podabne do jezyka C+. Gldwna réznica pomigdzy tymi dwoma jezykamy
objawia sig w wielodziedziczeniu, ktore w Javie zostato zastapione prostszymi interfejsam
oraz W modelu metaklas Javy (kt6ry jest opisany w rozdziale $.). .
Osoby, ktére nie mialy stycznosei z programowaniem zorientowanym obiektowo,
Bead powinny bardzo uwainie preczytaé rozdzialy 4. - 6. Zawieraja one opis technix
ja. zorientowanego, abit oraz. wyjasnienie, czemu ta technika lepie;
‘ Jezyk proceduralne, takle jak ¢
ie 3
Java posiada bogata biblioteke procedur wspomagajacych prace = takir
i protokolami
TCP/P jak HTTP i FTP. Aplikacje w tym jezyku moga otwieraé i uzyskiwaé dostep
poprzez sieé do obiektéw z takq sama latwoscia, jakby znajdowaly sie one w lokalnym
“systemie plikéw.
W naszej ocenie funkeje sicciowe Javy sq zaréwno solidne, jak i latwe w utyciu. Kazdy
kto kiedykolwiek sprébowal programowania sieciowego w innym jezyku programowaniy”
bedzie zachwycony tym, jak proste sq tak niegdy$ uciadliwe zadania, jak polaczenia na po”
Ziomie gniazd (ang. socket connection); programowanie sieciowe opisalismy w drugim tomig
Mechanizm zdalnych wywolah metod umo?liwia komunikacje pomigdzy obiektami rozpro,
szonymi (takée opisany w drugim tomic).
Mezawodny
Java zostala stworzona do pisania programéw, kiére muszq byé niezawodne
» rozmaitych sytuacjach. Dudo uwagi poswiecono wezesnemu sprawdzanit
‘motliwoici wystapienia ewentualnych probleméw, péiniejszemu sprawdzaniu
dynamicznemu (w trakcie dzialania programu) oraz wyeliminowaniu sytuacji,
w kidrych latwo popelnié blad. Najwieksza réznica pomiedzy Java a C/C++ polega
nna tym, ze model wskainikowy tego pierwszego jezyka jest tak zaprojektowany,
aby nie bylo motliwosei nadpisania pamigct i zniszczenia w ten sposob danych,
Jest to takte bardzo przydatna funkeja. Kompilator Javy wykrywa wiele bledéw, ktdre w in.
rych jezykach ujawnilyby sie dopiero po uruchomieniu programu. Wracajac do wskaznikéy,
kaady, Kto spedzil wiele godzin na poszukiwaniu uszkodzenia w pamieci spowodowanegs
biednym wskadnikiem, bedzie bardzo zadowolony z Javy.
‘Osoby programujace do tej pory w jezyku takim jak Visual Basic, w ktérym nie stosuje sig
Jawnie wskadnikéw, pewnie zastanawiajq sig, czemu sq one takie watne. Programisci jezy.
ka C nie maja juz tyle szczeScia. Im wskainiki potrzebne sq do uzyskiwania dostepu do lai.
cuchéw, tablic, obiektéw, a nawet plikéw. W jezyku Visual Basic w Zadnej z wymienionych
|Rozdziat 1.
Istep do Javy
sytuacji nie stosuje sig wskaénikéw ani nie trzeba zajmowaé sig przydzielaniem dl;
pamigci. Z drugiej jednak strony w jezykach pozbawionych wskaznikéw trudniej jest
plementowaé wiele réanych struktur danych. Java taczy w sobie to, co najlepsze w obi
podejéciach. Wskaéniki nie sq potrzebne do najezesciej uzywanych struktur, jak faficuct
tablice. Mozliwosci stwarzane przez wskaéniki sq jednak caly czas w zasiegu reki — pra
sig na prayklad w przypadku list dwukierunkowych (ang. linked lists). Ponadto caty cz
steémy w pelni bezpieczni, poniewaz nie ma mozliwosci uzyskania dostepu do niew
wego wskaénika, popelnienia bledu przydziclania pamigci ani koniecznosei wystrzegar
przed wyciekami pamigci.
Bezpieczny
Java jest praystosowana do zastosowati w srodowiskach sieciowych i rozproszonyc.
W tej dziedzinie polotono duay nacisk na bespieczeristwo. Java umoiliwia tworzeni:
systeméw odpornych na wirusy | ingerencje.
W pierwszym wydaniu naszej ksiazki napisalimy: ,Nigdy nie méw nigdy” i okazak
2e mieliémy racje. Niedhugo po wydaniu pakietu JDK zespét ekspertow z Princeton Un
sity znalazt ukryte bledy w zabezpieczeniach Java 1.0. Firma Sun Microsystems zapt
programistéw do zbadania zabezpieczeft Javy, udostepniajac publicznie specyfikacje
plementacje wirtualnej maszyny Javy oraz biblioteki zabezpieczen. Wszystkie znane t
zabezpieczei zostaly szybko naprawione. Dzieki temu przechytrzenie zabezpieczes
jest nie lada sztuka. Znalezione do tej pory bledy byly écigle zwigzane z techniczna s!
|jezyka i byto ich niewiele.
Od samego poczatku przy projektowaniu Javy starano sig uniemozliwié przeprowad:
niektérych rodzajéw atakéw, takich jak:
1m przepelnienie stosu wykonania — ezesto stosowany atak przez robaki i wirusy;
1 niszezenie pamigci poza swoja wiasna przestrzeniq procesowa;
m odezyt lub zapis plik6w bez zezwolenia.
Pewna liczba zabezpieczeni zostata dodana do Javy z biegiem czasu. Od wersji 1.1 ist
pojecie klasy podpisanej cyfrowo (ang. digitally signed class), ktére opisane jest w 47
tomie. Dzigki temu zawsze wiadomo, kto napisat dana klase. Jesli ufamy klasie napis
przez kogos innego, mozna da¢ jej wi¢ksze przywileje.
ezenie stosuje sie tylko podpisy cyfrowe. To oczywiscle za mato — katdy uzy!
kownik produkt6w firmy Microsoft moze potwierdzi¢, te programy od znanych dostawoo"
psula sig i moga powodowaé szkody. Model zabezpieczeni Javy jest o niebo lepszy nl
fen oparty na ActiveX, poniewat kontroluje dziatajgcq aplikacie i zapobiega spustoszé
or
r rea a
| o W konkurencyjnej technologii fimy Microsoft, parte] na Activex, jako zabezpt28 Java Podstawy
Wiezalezny od architektury
Aompiiator generuye mezalezny od konkretej architektury plik w formacie obiektowym.
Tak skomptlowamy kod mozna uruchamiaé na wielu procesorach, pod warunkiem
ze zainstalowano Java Runtime System. Kompilator dokonuje tego, generujqc kod
bajtowy niemajacy nic wspélnego z zadnym konkremym procesorem, W zamian kod
ten jest tak konstruowany, aby by! latwy do interpretacji na kazdym urzqdzeniu
i aby mozna go bylo z latwosciq przetlumaczyé na kod maszynowy w locie.
Nie jest to 2adna nowosé. Juz ponad 30 lat temu Niklaus Wirth zastosowal t¢ technike
w swoich oryginalnych implementacjach systeméw Pascal i UCSD.
Oczywiscie interpretowanie kodu bajtowego musi byé wolniejsze niz dziatanie instrukeji
maszynowych z pena predkoscia i nie wiadomo, czy jest to tak naprawde dobry pomysl.
Jednak maszyny wirtualne moga thumaczyé czesto wykonywany kod bajtowy na kod maszyno-
wy w procesie nazywanym kompilacja w ezasie rzeczywistym (ang. just-in-time compilation).
Metoda ta okazata sig tak efektywna, Ze nawet firma Microsoft zastosowala maszyne wirtualng
na swojej platformie NET.
Maszyna wirtualna ma takée inne zalety. Zwigksza bezpieczefistwo, poniewaz moze kon-
trolowaé dziatanie sekwencji instrukeji. Niektore programy tworza nawet kod bajtowy w locie,
tym samym dynamicznie zwigkszajac mozliwosci dziatajacego programu.
Przenosny
W przeciwienstwie do jezykéw Ci C++ Java nie jest w Zaden sposéb wzaleiniona
ad implementacji. Rozmiary padstawowych typéw danych sq okreslone, podobnie jak
wykonywane na nich dzialania arytmetyczne.
Na przyklad typ int w Javie zawsze oznacza 32-bitowa liczbe calkowita, W C i C+ typ
int moze preechowywaé liczbe calkowita 16-, 32-bitowa lub o dowolnym innym rozmiarze,
jaki wymysli sobie tworca kompilatora. Jedyne ograniczenie polega na tym, Ze typ int nie
moze byé mniejszy niz typ short int i wigkszy nit long int. Ustalenie rozmiaréw typéw
licebowych spowodowalo zniknigcie glownego problemu z przenoszeniem programow. Dane
inane sq przechowywane i przesytane w ustalonym formacie, dzieki czemu unika sig nie-
porozumiei zwigzanych z kolejnoscia bajtéw. Laficuchy sq praechowywane w standardowym
formacie Unicode.
Biblioteki wchodzqce w shlad systemu definiujq preenosne interfejsy. Dostepna jest
na prayklad abstrakcyjna klasa Window i ej implementacje dla systeméw UNIX,
Windows i Macintosh.
Kaddy, kto kiedykolwiek probowal napisaé program, ktéry miat wygladaé dobrze w syste-
mie Windows, na komputerach Macintosh i w dziesiecin réénych odmianach Uniksa, wie,
jak ogromny jest to wysitek. Java 1.0 wykonala to heroiczne zadanie i udostepnila prosty
zestaw narzedzi, kt6re odwzorowywaly elementy interfejsu u2ytkownika na kilku réimych
platformach. Niestety, w wyniku tego powstala biblioteka, ktéra przy duzym nakladzie pracyRozdziatL = Wstepdodavy 27
dawala ledwie akceptowalne w réznych systemach rezultaty (dodatkowo na réznych plat-
formach wystepowaly rééne bledy). Ale to byly dopiero poczatki. W wielu aplikacjach od
pigknego interfejsu uzytkownika wazniejsze sq inne rzeczy — wlaénie takie aplikacje ko-
rzystaty na pierwszych wersjach Javy. Obecny zestaw narzedzi do tworzenia interfejsu
uzytkownika jest napisany od nowa i nie jest uzalezniony od interfejsu uzytkownika hosta.
Wynikiem jest znacznie spdjniejszy i w naszym odczuciu atrakcyjniejszy interfejs niz ten,
Mory by! dostepny we wezesnych wersjach Javy.
Interpretowany
Interpreter Javy moze wykonaé katdy kod bajtowy Javy bespoirednio na ursadzeniu,
na ktérym interpreter ten zainstalowano. Jako ze laczenie jest bardziej inkrementalnym
i lekkim procesem, proces rozwoju moze byé znacznie szybszy i bardziej odkrywezy.
Laczenie narastajgce ma swoje zalety, ale opowiesci 0 korzysciach plynacych z jego stoso-
wania w procesie rozwoju aplikacji sa przesadzone. Pierwsze narzedzia Javy reeczywiscie
byly powolne. Obecnie kod bajtowy jest ttumaczony przez kompilator JIT (ang. just-in-time
compiler) na kod maszynowy.
Wysokowydajny
Mimo ze wydajnos¢ interpretowanego kodu bajtowego jest zazwyczaj wigcej nit
wystarczajqca, zdarzajq sie sytuacje, w kiérych potrzebna jest wigksza wydajnosé.
Kod bajtowy moze byé tumaczony w locie (w trakcie dzialania programu) na kod
maszynowy przeznaczony dla okreslonego procesora, na ktérym dziata aplikacja.
Na poczatku istnienia Javy wielu uzytkownikow nie zgadzalo sig ze stwierdzeniem, 2e je}
wydajnosé jest wigce) niz wystarczajqca. Jednak najnowsze kompilatory JIT sq tak dobre,
ze moga konkurowaé z tradycyjnymi kompilatorami, a czasami nawet je przescigaé, ponie-
waz maja dostep do wieksze] ilosci informacji, Na przyklad kompilator JIT moze sprawdzaé,
ktéra czesé kodu jest najczesciej wykonywana, i zoptymalizowaé ja pod katem szybkosci.
Bardziej zaawansowana technika optymalizacji polega na eliminacji wywotati funkcji (ang.
inlining). Kompilator JIT wie, ktére klasy zostaly zaladowane. Mote zastosowaé wstawia-
nie kodu funkcji w miejsce ich wywolaf, kiedy — biorac pod uwage aktualnie zaladowane
kolekcje klas — okresiona funkcja nie jest przestonigta i mozliwe jest cofnigcie tej opty-
malizacji w razie potrzeby.
Wielowatkowy
Kors sci plynace z wielowatkowosci to lepsza interaktywnosé i dzialanie w czasie
rzeczywistym.
Katdy, kto probowal programowania wielowatkowego w innym jezyku niz Java, bedzie mile
zaskoczony tym, jak latwe jest to w Javie. Watki w Javie moga korzystat z systeméw wie-
loprocesorowych, jesli podstawowy system operacyjny to umozliwia. Problem w tym, 2¢28 Java Podsiawy
implementacje watk6w na réénych platformach znacznie sig réznia, a Java nic nie robi pod
tym wzgledem, aby zapewnié niezaleznosé od platformy. Taki sam w réznych urzadzeniach
pozostaje tylko kod shuzgcy do wywolywania wielowatkowosci, Implementacja wielowat-
kowosci jest w Javie zraucana na system operacyjny lub biblioteke watk6w. Niemnicj jed-
nak tatwos6, z jaka przychodzi korzystanie z niej w Javie, sprawia, 2e jest ona bardzo kuszacq
propozycja, jesli chodzi o programowanie po stronie serwera.
Java jest bardziej dynamicznym jezykiem nit C i C++ pod wieloma wegledami.
Zostala zaprojektowana tak, aby dostosowywaé sig do ewoluujacego érodowiska.
Do bibliotek moina bez przeszkéd dodawaé nowe metody i zmienne egzemplarzy,
nie wywierajac zadnego wplywu na klienty. Sprawdzanie informacji o typach w Javie
nie sprawia trudnosci.
Cecha ta jest wazna w sytuacjach, kiedy treba dodaé kod do dziatajacego programu. Naj-
watniejszy przyklad takiej symuacji to pobieranie kodu z intemetu w celu uruchomienia w prze-
gladarce. W Javie 1.0 sprawdzenie typu w czasie dziatania programu bylo proste, ale w aktual-
ej wersji Javy programista ma modliwosé peinego weladu zarowno w strukture, jak i dziatanie
obiektow. Jest to niezwykle wane, zwlaszeza dla systeméw, w ktérych Konieczne jest anali-
zowanie obiektw w czasie pracy, takich jak kreatory GUI Javy, inteligentne debugery,
komponenty zdolne do podlaczania sig w czasie rzeczywistym oraz obiektowe bazy danych.
Ty cg vocation scene ny ta caso wa pot 9 nawe
if J++. Byt to jezyk programowania i maszyna wirtualna fudzaco podobne do Javy.
Obecnie Microsoft nie zaimuje sig juz tym projektem i zwrécit sig w strong innego je-
zyka — Ch, ktry réwniez preypomina Jave. Istnieje nawet jezyk J# stuzacy do migragit
aplikagji napisanych w J++ na maszyne wirtuaing uzywang przez C#. W ksiazce tej nie
[oPisviery leaykow J++, C#1J8. guaememmapenuitens
Aplety Javy i internet
Zalotenic jest proste: uzytkownik pobiera kod bajtowy z internetu i uruchamia go na wia-
snym urzadzeniu. Programy napisane w Javie, ktdre dziatajq na stronach internetowych,
noszq nazw¢ apletéw Javy. Aby uzywaé apletéw, wystarczy mieé przegladarke obstuguja-
ca Jave, w ktérej mozna unichomié kod bajtowy tego jezyka. Nie trzeba nic instalowaé,
Dzigki temu, 2e firma Sun udziela licencji na kod érédlowy Javy i nie zezwala na wprowa.
dzanie Zadnych zmian w jezyku i bibliotece standardowej, ka2dy aplet powinien dziatag
w katdej przegladarce reklamowanej jako obshuguiaca Jave. Najnowsza wersje oprogramo.
wania pobiera si¢ w trakcie odwiedzin strony intemetowej zawierajacej aplet.
Najwadniejsze jest jednak to, 2e dzieki zabezpieczeniom maszyny wirtualnej nie tzeba oba.
wiaé sig atakéw ze strony zlosliwego kodu.Rozdzial 1. m Wsiepdodavy — 29
Pobieranie apletu odbywa sig w podobny spos6b jak wstawianie obrazu na strong interne—
towa, Aplet integruje sig ze strona, a tekst otacza go ze wszystkich stron jak obraz, R6znic®
polega na tym, Ze ten obraz jest 2ywy. Reaguje na polecenia uzytkownika, zmienia wyglad
oraz przesyta dane pomigdzy komputerem, na ktorym zostat uruchomiony, a komputere™™
z ktérego pochodzi.
Rysunek 1.1 przedstawia dobry przyktad dynamicznej strony intemetowej, na ktérej wyko-
nywane sq skomplikowane obliczenia. Aplet Jmol wyswietla budow¢ czasteczek. Wyswie-
tlong czasteczke mozna za pomoca myszy obracaé w r6zne strony, co pozwala lepie} ZrO
zumieé jej budowe. Tego typu bezposrednia manipulacja obicktami nie jest mozliwa n&
statycznych stronach WWW, ale w apletach tak (aplet ten mozna znalegé na stroni€
hip:[Link]).
PT ee aad
ke Cor Wah btn Taleb! Maen Ponce
ie ¢
amino acids au
x opvepmme Ce)en-sttamne Gx) gh -gheamate Ox) gy - dene
+ teteedee Gz]ue-welecoe — Ce)ieu-teene GX) ys - tyme
met -metivonine (Du) phe - pheayialane (%) pro -proine [] ser - terme
te tercane CE} ep -ptotin : Gn nine