0% found this document useful (0 votes)
385 views888 pages

Helion Java Podstawy Wyd8

java

Uploaded by

Oskar Kozlowski
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
0% found this document useful (0 votes)
385 views888 pages

Helion Java Podstawy Wyd8

java

Uploaded by

Oskar Kozlowski
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
ava Podstawy WYDANIE VIII Java 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éw Java 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 polecen Rozdzial 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. Bit Rozdziat7. 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 | akceleratory 8 —_ 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 855 2 Java Podsiawy Podziekowania 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), Mahesh Java 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 2007 Wstep 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 rzeczy Java. 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 grafikis Wsiep = 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 koiicu Java 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. WeicomeAppletjava Wstep 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 bardzo 2 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 zabezpt 28 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 pracy RozdziatL = 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

You might also like