Cay S. Horstmann & Gary Cornell - Java. Podstawy (Wydanie IX)

862

Transcript of Cay S. Horstmann & Gary Cornell - Java. Podstawy (Wydanie IX)

  • Tytu oryginau: Core Java Volume I--Fundamentals (9th Edition)Tumaczenie: ukasz PiwkoISBN: 978-83-246-7761-0

    Authorized translation from the English language edition, entitled CORE JAVAVOLUME I FUNDAMENTALS, 9TH EDITION; ISBN 0137081898; by Cay S. Horstmann;and Gary Cornell; published by Pearson Education, Inc, publishing as Prentice Hall.Copyright 2013 by Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065.

    All rights reserved. No part of this book may be reproduced or transmitted in any formor by any means, electronic or mechanical, including photocopying, recording or by anyinformation storage retrieval system, without permission from Pearson Education Inc.

    Polish language edition published by HELION S.A. Copyright 2013.

    Wszelkie prawa zastrzeone. Nieautoryzowane rozpowszechnianie caocilub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.Wykonywanie kopii metod kserograficzn, fotograficzn, a take kopiowanieksiki na noniku filmowym, magnetycznym lub innym powoduje naruszeniepraw autorskich niniejszej publikacji.

    Wszystkie znaki wystpujce w tekcie s zastrzeonymi znakami firmowymibd towarowymi ich wacicieli.Wydawnictwo HELION dooyo wszelkich stara, by zawarte w tej ksiceinformacje byy kompletne i rzetelne. Nie bierze jednak adnej odpowiedzialnociani za ich wykorzystanie, ani za zwizane z tym ewentualne naruszenie praw patentowychlub autorskich. Wydawnictwo HELION nie ponosi rwnie adnej odpowiedzialnociza ewentualne szkody wynike z wykorzystania informacji zawartych w ksice.Wydawnictwo HELIONul. Kociuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (ksigarnia internetowa, katalog ksiek)Pliki z przykadami omawianymi w ksice mona znale pod adresem:ftp://ftp.helion.pl/przyklady/javpd9.zip

    Drogi Czytelniku!Jeeli chcesz oceni t ksik, zajrzyj pod adreshttp://helion.pl/user/opinie/javpd9_ebookMoesz tam wpisa swoje uwagi, spostrzeenia, recenzj.

    Pole ksik na Facebook.com Kup w wersji papierowej Oce ksik

    Ksigarnia internetowa Lubi to! Nasza spoeczno

  • Spis treciWstp ........................................................................................................................................................ 13Podzikowania ......................................................................................................................................... 19Rozdzia 1. Wstp do Javy ........................................................................................................................21

    1.1. Java jako platforma programistyczna ................................................................... 211.2. Sowa klucze biaej ksigi Javy ............................................................................ 22

    1.2.1. Prosty .................................................................................................. 231.2.2. Obiektowy ............................................................................................ 241.2.3. Sieciowy .............................................................................................. 241.2.4. Niezawodny .......................................................................................... 241.2.5. Bezpieczny ........................................................................................... 251.2.6. Niezaleny od architektury ..................................................................... 261.2.7. Przenony ............................................................................................ 261.2.8. Interpretowany ..................................................................................... 271.2.9. Wysokowydajny ..................................................................................... 271.2.10. Wielowtkowy ....................................................................................... 281.2.11. Dynamiczny .......................................................................................... 28

    1.3. Aplety Javy i internet .......................................................................................... 281.4. Krtka historia Javy ............................................................................................ 301.5. Gwne nieporozumienia dotyczce Javy .............................................................. 32

    Rozdzia 2. rodowisko programistyczne Javy ................................................................................... 372.1. Instalacja oprogramowania Java Development Kit ................................................. 38

    2.1.1. Pobieranie pakietu JDK ......................................................................... 382.1.2. Ustawianie cieki dostpu ................................................................... 392.1.3. Instalacja bibliotek i dokumentacji ......................................................... 412.1.4. Instalacja przykadowych programw ...................................................... 422.1.5. Drzewo katalogw Javy .......................................................................... 42

    2.2. Wybr rodowiska programistycznego .................................................................. 432.3. Uywanie narzdzi wiersza polece ...................................................................... 44

    2.3.1. Rozwizywanie problemw ..................................................................... 452.4. Praca w zintegrowanym rodowisku programistycznym .......................................... 47

    2.4.1. Znajdowanie bdw kompilacji .............................................................. 49

  • 4 Java. Podstawy

    2.5. Uruchamianie aplikacji graficznej ......................................................................... 502.6. Tworzenie i uruchamianie apletw ....................................................................... 53

    Rozdzia 3. Podstawowe elementy jzyka Java .................................................................................... 573.1. Prosty program w Javie ....................................................................................... 583.2. Komentarze ....................................................................................................... 613.3. Typy danych ...................................................................................................... 62

    3.3.1. Typy cakowite ...................................................................................... 623.3.2. Typy zmiennoprzecinkowe ...................................................................... 633.3.3. Typ char ............................................................................................... 653.3.4. Typ boolean ......................................................................................... 66

    3.4. Zmienne ........................................................................................................... 663.4.1. Inicjacja zmiennych ............................................................................... 683.4.2. Stae ................................................................................................... 68

    3.5. Operatory .......................................................................................................... 693.5.1. Operatory inkrementacji i dekrementacji ................................................. 713.5.2. Operatory relacyjne i logiczne ................................................................. 713.5.3. Operatory bitowe .................................................................................. 723.5.4. Funkcje i stae matematyczne ................................................................ 733.5.5. Konwersja typw numerycznych ............................................................. 743.5.6. Rzutowanie .......................................................................................... 753.5.7. Nawiasy i priorytety operatorw .............................................................. 763.5.8. Typ wyliczeniowy ................................................................................... 77

    3.6. acuchy .......................................................................................................... 773.6.1. Podacuchy ......................................................................................... 783.6.2. Konkatenacja ....................................................................................... 783.6.3. acuchw nie mona modyfikowa ....................................................... 793.6.4. Porwnywanie acuchw ...................................................................... 793.6.5. acuchy puste i acuchy null .............................................................. 813.6.6. Wsprzdne kodowe znakw i jednostki kodowe .................................... 813.6.7. API String ............................................................................................. 833.6.8. Dokumentacja API w internecie .............................................................. 853.6.9. Skadanie acuchw ............................................................................ 86

    3.7. Wejcie i wyjcie ................................................................................................ 893.7.1. Odbieranie danych wejciowych ............................................................. 893.7.2. Formatowanie danych wyjciowych ......................................................... 913.7.3. Zapis i odczyt plikw ............................................................................. 96

    3.8. Przepyw sterowania ........................................................................................... 983.8.1. Zasig blokowy ..................................................................................... 983.8.2. Instrukcje warunkowe ............................................................................ 993.8.3. Ptle ................................................................................................. 1013.8.4. Ptle o okrelonej liczbie powtrze ..................................................... 1063.8.5. Wybr wielokierunkowy instrukcja switch .......................................... 1093.8.6. Instrukcje przerywajce przepyw sterowania ......................................... 111

    3.9. Wielkie liczby ................................................................................................... 1143.10. Tablice ............................................................................................................ 116

    3.10.1. Ptla typu for each .............................................................................. 1173.10.2. Inicjowanie tablic i tworzenie tablic anonimowych .................................. 1183.10.3. Kopiowanie tablicy .............................................................................. 1193.10.4. Parametry wiersza polece .................................................................. 1203.10.5. Sortowanie tablicy .............................................................................. 121

  • Spis treci 5

    3.10.6. Tablice wielowymiarowe ...................................................................... 1243.10.7. Tablice postrzpione ........................................................................... 127

    Rozdzia 4. Obiekty i klasy ......................................................................................................................1314.1. Wstp do programowania obiektowego .............................................................. 132

    4.1.1. Klasy ................................................................................................. 1324.1.2. Obiekty .............................................................................................. 1334.1.3. Identyfikacja klas ................................................................................ 1344.1.4. Relacje midzy klasami ....................................................................... 135

    4.2. Uywanie klas predefiniowanych ........................................................................ 1374.2.1. Obiekty i zmienne obiektw ................................................................. 1374.2.2. Klasa GregorianCalendar ..................................................................... 1394.2.3. Metody udostpniajce i zmieniajce warto elementu ........................ 141

    4.3. Definiowanie wasnych klas .............................................................................. 1484.3.1. Klasa Employee .................................................................................. 1484.3.2. Uywanie wielu plikw rdowych ........................................................ 1514.3.3. Analiza klasy Employee ....................................................................... 1514.3.4. Pierwsze kroki w tworzeniu konstruktorw ............................................. 1524.3.5. Parametry jawne i niejawne ................................................................. 1534.3.6. Korzyci z hermetyzacji ........................................................................ 1554.3.7. Przywileje klasowe .............................................................................. 1574.3.8. Metody prywatne ................................................................................ 1574.3.9. Stae jako pola klasy ........................................................................... 158

    4.4. Pola i metody statyczne .................................................................................... 1584.4.1. Pola statyczne .................................................................................... 1594.4.2. Stae statyczne ................................................................................... 1594.4.3. Metody statyczne ................................................................................ 1604.4.4. Metody fabryczne ................................................................................ 1614.4.5. Metoda main ...................................................................................... 162

    4.5. Parametry metod ............................................................................................. 1644.6. Konstruowanie obiektw .................................................................................. 171

    4.6.1. Przecianie ....................................................................................... 1714.6.2. Inicjacja pl wartociami domylnymi ................................................... 1714.6.3. Konstruktor bezargumentowy ............................................................... 1724.6.4. Jawna inicjacja pl .............................................................................. 1724.6.5. Nazywanie parametrw ....................................................................... 1744.6.6. Wywoywanie innego konstruktora ........................................................ 1744.6.7. Bloki inicjujce ................................................................................... 1754.6.8. Niszczenie obiektw i metoda finalize ................................................... 179

    4.7. Pakiety ............................................................................................................ 1804.7.1. Importowanie klas .............................................................................. 1804.7.2. Importy statyczne ............................................................................... 1824.7.3. Dodawanie klasy do pakietu ................................................................ 1824.7.4. Zasig pakietw ................................................................................. 185

    4.8. cieka klas .................................................................................................... 1874.8.1. Ustawianie cieki klas ....................................................................... 189

    4.9. Komentarze dokumentacyjne ............................................................................ 1904.9.1. Wstawianie komentarzy ....................................................................... 1904.9.2. Komentarze do klas ............................................................................ 1914.9.3. Komentarze do metod ......................................................................... 1914.9.4. Komentarze do pl ............................................................................. 192

  • 6 Java. Podstawy

    4.9.5. Komentarze oglne ............................................................................. 1924.9.6. Komentarze do pakietw i oglne ........................................................ 1944.9.7. Generowanie dokumentacji .................................................................. 194

    4.10. Porady dotyczce projektowania klas ................................................................. 195Rozdzia 5. Dziedziczenie .......................................................................................................................199

    5.1. Klasy, nadklasy i podklasy ................................................................................ 2005.1.1. Hierarchia dziedziczenia ...................................................................... 2065.1.2. Polimorfizm ........................................................................................ 2075.1.3. Wizanie dynamiczne .......................................................................... 2095.1.4. Wyczanie dziedziczenia klasy i metody finalne ................................ 2115.1.5. Rzutowanie ........................................................................................ 2125.1.6. Klasy abstrakcyjne .............................................................................. 2145.1.7. Ochrona dostpu ................................................................................ 219

    5.2. Klasa bazowa Object ........................................................................................ 2205.2.1. Metoda equals ................................................................................... 2215.2.2. Porwnywanie a dziedziczenie .............................................................. 2225.2.3. Metoda hashCode .............................................................................. 2255.2.4. Metoda toString ................................................................................. 228

    5.3. Generyczne listy tablicowe ................................................................................ 2335.3.1. Dostp do elementw listy tablicowej ................................................... 2365.3.2. Zgodno pomidzy typowanymi a surowymi listami tablicowymi ............. 239

    5.4. Osony obiektw i autoboxing ............................................................................ 2415.5. Metody ze zmienn liczb parametrw ............................................................... 2445.6. Klasy wyliczeniowe ........................................................................................... 2455.7. Refleksja ......................................................................................................... 247

    5.7.1. Klasa Class ....................................................................................... 2485.7.2. Podstawy przechwytywania wyjtkw .................................................... 2505.7.3. Zastosowanie refleksji w analizie funkcjonalnoci klasy ......................... 2525.7.4. Refleksja w analizie obiektw w czasie dziaania programu .................... 2575.7.5. Zastosowanie refleksji w generycznym kodzie tablicowym ...................... 2615.7.6. Wywoywanie dowolnych metod ............................................................ 264

    5.8. Porady projektowe dotyczce dziedziczenia ........................................................ 268Rozdzia 6. Interfejsy i klasy wewntrzne ...........................................................................................271

    6.1. Interfejsy ......................................................................................................... 2726.1.1. Wasnoci interfejsw ......................................................................... 2766.1.2. Interfejsy a klasy abstrakcyjne ............................................................. 279

    6.2. Klonowanie obiektw ....................................................................................... 2806.3. Interfejsy a sprzenie zwrotne ......................................................................... 2866.4. Klasy wewntrzne ............................................................................................ 289

    6.4.1. Dostp do stanu obiektu w klasie wewntrznej ..................................... 2896.4.2. Specjalne reguy skadniowe dotyczce klas wewntrznych ..................... 2936.4.3. Czy klasy wewntrzne s potrzebne i bezpieczne? ................................. 2946.4.4. Lokalne klasy wewntrzne ................................................................... 2966.4.5. Dostp do zmiennych finalnych z metod zewntrznych ........................... 2976.4.6. Anonimowe klasy wewntrzne .............................................................. 3006.4.7. Statyczne klasy wewntrzne ................................................................ 303

    6.5. Klasy proxy ...................................................................................................... 3066.5.1. Wasnoci klas proxy .......................................................................... 311

  • Spis treci 7

    Rozdzia 7. Grafika .................................................................................................................................3137.1. Wprowadzenie do pakietu Swing ....................................................................... 3147.2. Tworzenie ramki ............................................................................................... 3187.3. Pozycjonowanie ramki ...................................................................................... 321

    7.3.1. Wasnoci ramek ................................................................................ 3227.3.2. Okrelanie rozmiaru ramki ................................................................... 323

    7.4. Wywietlanie informacji w komponencie ............................................................ 3277.5. Figury 2D ........................................................................................................ 3327.6. Kolory ............................................................................................................. 3407.7. Czcionki .......................................................................................................... 3437.8. Wywietlanie obrazw ...................................................................................... 351

    Rozdzia 8. Obsuga zdarze .................................................................................................................3558.1. Podstawy obsugi zdarze ................................................................................. 355

    8.1.1. Przykad obsuga kliknicia przycisku ............................................... 3578.1.2. Nabywanie biegoci w posugiwaniu si klasami wewntrznymi .............. 3628.1.3. Tworzenie suchaczy zawierajcych jedno wywoanie metody ................... 3648.1.4. Przykad zmiana stylu ..................................................................... 3668.1.5. Klasy adaptacyjne ............................................................................... 369

    8.2. Akcje .............................................................................................................. 3738.3. Zdarzenia generowane przez mysz ..................................................................... 3808.4. Hierarchia zdarze w bibliotece AWT .................................................................. 387

    8.4.1. Zdarzenia semantyczne i niskiego poziomu ........................................... 388

    Rozdzia 9. Komponenty Swing interfejsu uytkownika ......................................................................3919.1. Swing a wzorzec projektowy Model-View-Controller .............................................. 392

    9.1.1. Wzorce projektowe .............................................................................. 3929.1.2. Wzorzec Model-View-Controller ............................................................. 3939.1.3. Analiza MVC przyciskw Swing ............................................................. 397

    9.2. Wprowadzenie do zarzdzania rozkadem ........................................................... 3989.2.1. Rozkad brzegowy ............................................................................... 4009.2.2. Rozkad siatkowy ................................................................................ 402

    9.3. Wprowadzanie tekstu ....................................................................................... 4069.3.1. Pola tekstowe .................................................................................... 4069.3.2. Etykiety komponentw ........................................................................ 4089.3.3. Pola hase .......................................................................................... 4109.3.4. Obszary tekstowe ............................................................................... 4109.3.5. Panele przewijane ............................................................................... 411

    9.4. Komponenty umoliwiajce wybr opcji .............................................................. 4139.4.1. Pola wyboru ....................................................................................... 4139.4.2. Przeczniki ........................................................................................ 4159.4.3. Obramowanie ..................................................................................... 4199.4.4. Listy rozwijalne ................................................................................... 4239.4.5. Suwaki .............................................................................................. 426

    9.5. Menu .............................................................................................................. 4329.5.1. Tworzenie menu ................................................................................. 4329.5.2. Ikony w elementach menu ................................................................... 4359.5.3. Pola wyboru i przeczniki jako elementy menu ...................................... 4369.5.4. Menu podrczne ................................................................................. 4379.5.5. Mnemoniki i akceleratory .................................................................... 438

  • 8 Java. Podstawy

    9.5.6. Aktywowanie i dezaktywowanie elementw menu .................................. 4409.5.7. Paski narzdzi .................................................................................... 4449.5.8. Dymki ................................................................................................ 446

    9.6. Zaawansowane techniki zarzdzania rozkadem .................................................. 4489.6.1. Rozkad GridBagLayout ....................................................................... 4499.6.2. Rozkad grupowy ................................................................................. 4599.6.3. Nieuywanie adnego zarzdcy rozkadu ................................................ 4689.6.4. Niestandardowi zarzdcy rozkadu ........................................................ 4699.6.5. Kolejka dostpu ................................................................................. 472

    9.7. Okna dialogowe ............................................................................................... 4749.7.1. Okna dialogowe opcji .......................................................................... 4749.7.2. Tworzenie okien dialogowych ............................................................... 4849.7.3. Wymiana danych ................................................................................. 4899.7.4. Okna dialogowe wyboru plikw ............................................................. 4959.7.5. Okna dialogowe wyboru kolorw ........................................................... 505

    Rozdzia 10. Przygotowywanie apletw i aplikacji do uytku ..............................................................51110.1. Pliki JAR .......................................................................................................... 512

    10.1.1. Manifest ............................................................................................ 51210.1.2. Wykonywalne pliki JAR ........................................................................ 51410.1.3. Zasoby .............................................................................................. 51510.1.4. Piecztowanie pakietw ...................................................................... 518

    10.2. Java Web Start ................................................................................................ 51910.2.1. Piaskownica ....................................................................................... 52210.2.2. Podpisywanie kodu ............................................................................. 52310.2.3. API JNLP ............................................................................................ 525

    10.3. Aplety ............................................................................................................. 53310.3.1. Prosty aplet ........................................................................................ 53310.3.2. Znacznik applet i jego atrybuty ............................................................. 53710.3.3. Znacznik object .................................................................................. 54010.3.4. Parametry przekazujce informacje do apletw ...................................... 54110.3.5. Dostp do obrazw i plikw audio ........................................................ 54610.3.6. rodowisko dziaania apletu ................................................................ 547

    10.4. Zapisywanie preferencji uytkownika .................................................................. 54910.4.1. Mapy wasnoci .................................................................................. 55010.4.2. API Preferences .................................................................................. 555

    Rozdzia 11. Wyjtki, dzienniki, asercje i debugowanie .......................................................................56311.1. Obsuga bdw ............................................................................................... 564

    11.1.1. Klasyfikacja wyjtkw .......................................................................... 56511.1.2. Deklarowanie wyjtkw kontrolowanych ................................................ 56711.1.3. Zgaszanie wyjtkw ........................................................................... 56911.1.4. Tworzenie klas wyjtkw ...................................................................... 570

    11.2. Przechwytywanie wyjtkw ................................................................................ 57111.2.1. Przechwytywanie wielu typw wyjtkw ................................................. 57411.2.2. Powtrne generowanie wyjtkw i budowanie acuchw wyjtkw .......... 57511.2.3. Klauzula finally ................................................................................... 57611.2.4. Instrukcja try z zasobami ..................................................................... 58011.2.5. Analiza danych ze ledzenia stosu ....................................................... 581

    11.3. Wskazwki dotyczce stosowania wyjtkw ....................................................... 584

  • Spis treci 9

    11.4. Asercje ........................................................................................................... 58711.4.1. Wczanie i wyczanie asercji ............................................................. 58811.4.2. Zastosowanie asercji do sprawdzania parametrw ................................ 58911.4.3. Zastosowanie asercji do dokumentowania zaoe ................................ 590

    11.5. Dzienniki ......................................................................................................... 59111.5.1. Podstawy zapisu do dziennika .............................................................. 59211.5.2. Zaawansowane techniki zapisu do dziennika ......................................... 59211.5.3. Zmiana konfiguracji menedera dziennikw ........................................... 59411.5.4. Lokalizacja ......................................................................................... 59611.5.5. Obiekty typu Handler ........................................................................... 59611.5.6. Filtry .................................................................................................. 60011.5.7. Formatery .......................................................................................... 60011.5.8. Przepis na dziennik ............................................................................. 601

    11.6. Wskazwki dotyczce debugowania ................................................................... 60911.7. Wskazwki dotyczce debugowania aplikacji z GUI ............................................. 614

    11.7.1. Zaprzganie robota AWT do pracy ........................................................ 61711.8. Praca z debugerem .......................................................................................... 621

    Rozdzia 12. Programowanie oglne ....................................................................................................62712.1. Dlaczego programowanie oglne ....................................................................... 628

    12.1.1. Dla kogo programowanie oglne .......................................................... 62912.2. Definicja prostej klasy oglnej ........................................................................... 63012.3. Metody oglne ................................................................................................. 63212.4. Ograniczenia zmiennych typowych ..................................................................... 63312.5. Kod oglny a maszyna wirtualna ....................................................................... 635

    12.5.1. Translacja wyrae generycznych ......................................................... 63712.5.2. Translacja metod oglnych .................................................................. 63712.5.3. Uywanie starego kodu ....................................................................... 639

    12.6. Ograniczenia i braki ......................................................................................... 64112.6.1. Nie mona podawa typw prostych jako parametrw typowych .............. 64112.6.2. Sprawdzanie typw w czasie dziaania programu

    jest moliwe tylko dla typw surowych .................................................. 64112.6.3. Nie mona tworzy tablic typw oglnych .............................................. 64212.6.4. Ostrzeenia dotyczce zmiennej liczby argumentw ............................... 64212.6.5. Nie wolno tworzy egzemplarzy zmiennych typowych .............................. 64312.6.6. Zmiennych typowych nie mona uywa w statycznych kontekstach

    klas oglnych ..................................................................................... 64512.6.7. Obiektw klasy oglnej nie mona generowa ani przechwytywa ............ 64612.6.8. Uwaaj na konflikty, ktre mog powsta po wymazaniu typw ............... 648

    12.7. Zasady dziedziczenia dla typw oglnych ........................................................... 64912.8. Typy wieloznaczne ............................................................................................ 650

    12.8.1. Ograniczenia nadtypw typw wieloznacznych ....................................... 65212.8.2. Typy wieloznaczne bez ogranicze ........................................................ 65512.8.3. Chwytanie typu wieloznacznego ............................................................ 655

    12.9. Refleksja a typy oglne .................................................................................... 65812.9.1. Zastosowanie parametrw Class do dopasowywania typw .............. 65912.9.2. Informacje o typach generycznych w maszynie wirtualnej ........................ 659

    Rozdzia 13. Kolekcje .............................................................................................................................66513.1. Interfejsy kolekcyjne ......................................................................................... 665

    13.1.1. Oddzielenie warstwy interfejsw od warstwy klas konkretnych ................ 66613.1.2. Interfejsy Collection i Iterator ............................................................... 668

  • 10 Java. Podstawy

    13.2. Konkretne klasy kolekcyjne ............................................................................... 67413.2.1. Listy powizane ................................................................................. 67413.2.2. Listy tablicowe .................................................................................. 68413.2.3. Zbir HashSet ................................................................................... 68413.2.4. Zbir TreeSet .................................................................................... 68813.2.5. Porwnywanie obiektw ..................................................................... 68913.2.6. Kolejki Queue i Deque ....................................................................... 69413.2.7. Kolejki priorytetowe ........................................................................... 69613.2.8. Mapy ................................................................................................ 69713.2.9. Specjalne klasy Set i Map .................................................................. 702

    13.3. Architektura kolekcji ......................................................................................... 70613.3.1. Widoki i obiekty opakowujce ............................................................. 70913.3.2. Operacje zbiorcze .............................................................................. 71713.3.3. Konwersja pomidzy kolekcjami a tablicami ......................................... 718

    13.4. Algorytmy ........................................................................................................ 71813.4.1. Sortowanie i tasowanie ...................................................................... 72013.4.2. Wyszukiwanie binarne ........................................................................ 72213.4.3. Proste algorytmy ................................................................................ 72313.4.4. Pisanie wasnych algorytmw .............................................................. 725

    13.5. Stare kolekcje ................................................................................................. 72613.5.1. Klasa Hashtable ................................................................................ 72613.5.2. Wyliczenia ......................................................................................... 72713.5.3. Mapy wasnoci ................................................................................. 72813.5.4. Stosy ................................................................................................ 72913.5.5. Zbiory bitw ...................................................................................... 729

    Rozdzia 14. Wielowtkowo ...............................................................................................................73514.1. Czym s wtki ................................................................................................. 736

    14.1.1. Wykonywanie zada w osobnych wtkach ............................................ 74114.2. Przerywanie wtkw ......................................................................................... 74614.3. Stany wtkw .................................................................................................. 749

    14.3.1. Wtki NEW ........................................................................................ 74914.3.2. Wtki RUNNABLE ............................................................................... 75014.3.3. Wtki BLOCKED i WAITING ................................................................. 75014.3.4. Zamykanie wtkw ............................................................................ 752

    14.4. Wasnoci wtkw ........................................................................................... 75214.4.1. Priorytety wtkw ............................................................................... 75214.4.2. Wtki demony ................................................................................... 75314.4.3. Procedury obsugi nieprzechwyconych wyjtkw .................................... 754

    14.5. Synchronizacja ................................................................................................ 75614.5.1. Przykad sytuacji powodujcej wycig ................................................... 75614.5.2. Wycigi ............................................................................................. 76014.5.3. Obiekty klasy Lock ............................................................................. 76214.5.4. Warunki ............................................................................................ 76514.5.5. Sowo kluczowe synchronized ............................................................. 76914.5.6. Bloki synchronizowane ....................................................................... 77414.5.7. Monitor ............................................................................................. 77514.5.8. Pola ulotne ....................................................................................... 77614.5.9. Zmienne finalne ................................................................................ 77714.5.10. Zmienne atomowe ............................................................................. 77714.5.11. Zakleszczenia .................................................................................... 778

  • Spis treci 11

    14.5.12. Zmienne lokalne wtkw .................................................................... 78114.5.13. Testowanie blokad i odmierzanie czasu ............................................... 78214.5.14. Blokady odczytu-zapisu ...................................................................... 78314.5.15. Dlaczego metody stop i suspend s wycofywane .................................. 784

    14.6. Kolejki blokujce ............................................................................................. 78614.7. Kolekcje bezpieczne wtkowo ........................................................................... 794

    14.7.1. Szybkie mapy, zbiory i kolejki ............................................................. 79414.7.2. Tablice kopiowane przy zapisie ........................................................... 79614.7.3. Starsze kolekcje bezpieczne wtkowo ................................................. 796

    14.8. Interfejsy Callable i Future ................................................................................ 79714.9. Klasa Executors ............................................................................................... 802

    14.9.1. Pule wtkw ..................................................................................... 80314.9.2. Planowanie wykonywania ................................................................... 80714.9.3. Kontrolowanie grup zada .................................................................. 80814.9.4. Szkielet rozgazienie-zczenie .......................................................... 809

    14.10.Synchronizatory ............................................................................................... 81214.10.1. Semafory ......................................................................................... 81214.10.2. Klasa CountDownLatch ..................................................................... 81314.10.3. Bariery ............................................................................................. 81414.10.4. Klasa Exchanger ............................................................................... 81414.10.5. Kolejki synchroniczne ........................................................................ 815

    14.11. Wtki a biblioteka Swing .................................................................................. 81514.11.1. Uruchamianie czasochonnych zada .................................................. 81614.11.2. Klasa SwingWorker ........................................................................... 82014.11.3. Zasada jednego wtku ...................................................................... 827

    Dodatek A. Sowa kluczowe Javy .........................................................................................................829Skorowidz ..............................................................................................................................................831

  • 12 Java. Podstawy

  • WstpDo Czytelnika

    Jzyk programowania Java pojawi si na scenie pod koniec 1995 roku i od razu zyska sobiereputacj gwiazdy. Ta nowa technologia miaa si sta uniwersalnym cznikiem pomidzyuytkownikami a informacj, bez wzgldu na to, czy informacje te pochodziy z serwera sie-ciowego, bazy danych, serwisu informacyjnego, czy jakiegokolwiek innego rda. I rze-czywicie, Java ma niepowtarzaln okazj spenienia tych wymaga. Ten zaprojektowanyz niezwyk starannoci jzyk zyska akceptacj wszystkich najwikszych firm z wyjtkiemMicrosoftu. Wbudowane w jzyk zabezpieczenia dziaaj uspokajajco zarwno na progra-mistw, jak i uytkownikw programw napisanych w Javie. Dziki wbudowanym funkcjomzaawansowane zadania programistyczne, takie jak programowanie sieciowe, czno pomi-dzy bazami danych i wielowtkowo, s znacznie prostsze.Do tej pory pojawio si ju osiem wersji pakietu Java Development Kit. Przez ostatnich osiem-nacie lat interfejs programowania aplikacji (ang. Application Programming Interface API)rozrs si z okoo 200 do ponad 3000 klas. API to obejmuje obecnie tak rne aspekty two-rzenia aplikacji, jak konstruowanie interfejsu uytkownika, zarzdzanie bazami danych, inter-nacjonalizacja, bezpieczestwo i przetwarzanie XML.Ksika, ktr trzymasz w rce, jest pierwszym tomem dziewitego wydania ksiki Java.Podstawy. Kada edycja tej ksiki nastpuje najszybciej, jak to tylko moliwe, po wydaniukolejnej wersji pakietu Java Development Kit. Za kadym razem uaktualnialimy tekst ksikiz uwzgldnieniem najnowszych narzdzi dostpnych w Javie. To wydanie opisuje Java Stan-dard Edition (SE) 7.

    Tak jak w przypadku poprzednich wyda tej ksiki, to rwnie przeznaczone jest dla powa-nych programistw, ktrzy chc wykorzysta technologi Java w rzeczywistych projektach.Zakadamy, e odbiorca naszego tekstu jest programist posiadajcym due dowiadczeniew programowaniu w innym jzyku ni Java. Ponadto prno tu szuka dziecinnych przykadw(jak tostery, zwierzta z zoo czy rozbiegany tekst). Nic z tych rzeczy tutaj nie znajdziesz.

  • 14 Java. Podstawy

    Naszym celem byo przedstawienie wiedzy w taki sposb, aby Czytelnik mg bez problemuw peni zrozumie zasady rzdzce jzykiem Java i jego bibliotek, a nie tylko myla, ewszystko rozumie.

    Ksika ta zawiera mnstwo przykadw kodu, obrazujcych zasady dziaania niemal ka-dej opisywanej przez nas funkcji i biblioteki. Przedstawiane przez nas przykadowe programys proste, poniewa chcielimy si w nich skoncentrowa na najwaniejszych zagadnieniach.Niemniej znakomita wikszo z nich zawiera prawdziwy, nieskrcony kod. Powinny dobrzesuy jako punkt wyjcia do pisania wasnych programw.Wychodzimy z zaoenia, e osoby czytajce t ksik chc (albo wrcz pragn) poznawszystkie zaawansowane cechy Javy. Oto kilka przykadowych zagadnie, ktre opisujemyszczegowo: programowanie obiektowe,

    mechanizm refleksji (ang. reflections) i obiekty proxy,

    interfejsy i klasy wewntrzne, delegacyjny model obsugi zdarze, projektowanie graficznego interfejsu uytkownika za pomoc pakietu narzdzi

    Swing UI,

    obsuga wyjtkw, programowanie generyczne,

    kolekcje,

    wspbieno.Ze wzgldu na niebyway wrcz rozwj biblioteki klas Javy opisanie w jednym tomie wszyst-kich wasnoci tego jzyka, ktrych potrzebuje powany programista, graniczyoby z cudem.Z tego powodu postanowilimy podzieli nasz ksik na dwa tomy. Pierwszy, ktry trzy-masz w rku, opisuje podstawy jzyka Java oraz najwaniejsze zagadnienia zwizane z pro-gramowaniem interfejsu uytkownika. Tom drugi (ktry niebawem si ukae) zawiera informa-cje dotyczce bardziej zaawansowanych tematw oraz opisuje zoone zagadnienia zwizanez programowaniem interfejsu uytkownika. Poruszane w nim tematy to: pliki i strumienie,

    obiekty rozproszone,

    bazy danych,

    zaawansowane komponenty GUI,

    metody rodzime,

    przetwarzanie dokumentw XML,

    programowanie sieciowe,

    zaawansowana obrbka grafiki,

  • Wstp 15

    obsuga wielu jzykw, JavaBeans,

    adnotacje.

    Podczas pisania ksiki nie da si unikn drobnych bdw i wpadek. Bardzo chcielibymyby o nich informowani. Jednak kad tak informacj wolelibymy otrzyma tylko jeden raz.W zwizku z tym na stronie http://horstmann.com/corejava zamiecilimy list najczciejzadawanych pyta, obej i poprawek do bdw. Formularz sucy do wysyania informacjio bdach i propozycji poprawek zosta celowo umieszczony na kocu strony z errat, abyzachci potencjalnego nadawc do wczeniejszego zapoznania si z istniejcymi ju infor-macjami. Nie naley zraa si, jeli nie odpowiemy na kade pytanie lub nie zrobimy tegonatychmiast. Naprawd czytamy wszystkie przychodzce do nas listy i doceniamy wysikiwszystkich naszych Czytelnikw wkadane w to, aby przysze wydania naszej ksiki byyjeszcze bardziej zrozumiae i zawieray jeszcze wicej poytecznych informacji.

    O ksiceRozdzia 1. stanowi przegld waciwoci jzyka Java, ktre wyrniaj go na tle innychjzykw programowania. Wyjaniamy, co projektanci chcieli zrobi, a co si im udao. Nastp-nie krtko opisujemy histori powstania Javy oraz sposb, w jaki ewoluowaa.W rozdziale 2. opisujemy proces pobierania i instalacji pakietu JDK (ang. Java DevelopmentKit) oraz doczonych do tej ksiki przykadw kodu. Nastpnie opisujemy krok po krokukompilacj i uruchamianie trzech typowych programw w Javie: aplikacji konsolowej, apli-kacji graficznej i apletu. Naszymi narzdziami s czyste rodowisko JDK, edytor tekstowyobsugujcy Jav i zintegrowane rodowisko programowania (ang. Integrated DevelopmentEnvironment IDE) dla Javy.

    Od rozdziau 3. zaczynamy opis jzyka programowania Java. Na pocztku zajmujemy si pod-stawami: zmiennymi, ptlami i prostymi funkcjami. Dla programistw jzykw C i C++ bdzieto buka z masem, poniewa Java i C w tych sprawach w zasadzie niczym si nie rni.Programici innych jzykw, takich jak Visual Basic, powinni bardzo starannie zapoznasi z treci tego rozdziau.Obecnie najpopularniejsz metodologi stosowan przez programistw jest programowanieobiektowe, a Java to jzyk w peni obiektowy. W rozdziale 4. wprowadzamy pojcie herme-tyzacji (ang. encapsulation), ktra stanowi jeden z dwch filarw programowania obiekto-wego, oraz piszemy o mechanizmach Javy sucych do jej implementacji, czyli o klasachi metodach. Poza opisem zasad rzdzcych jzykiem Java dostarczamy take informacji natemat solidnego projektowania programw zorientowanych obiektowo. Na kocu powicamynieco miejsca doskonaemu narzdziu o nazwie javadoc, sucemu do konwersji komentarzyzawartych w kodzie na wzajemnie poczone hiperczami strony internetowe. Osoby zna-jce jzyk C++ mog przejrze ten rozdzia pobienie. Programici niemajcy dowiadczeniaw programowaniu obiektowym musz si liczy z tym, e opanowanie wiedzy przedstawionejw tym rozdziale zajmie im troch czasu.

  • 16 Java. Podstawy

    Klasy i hermetyzacja to dopiero poowa koncepcji programowania zorientowanego obiektowo.Rozdzia 5. wprowadza drug, czyli dziedziczenie. Mechanizm ten umoliwia modyfikacjistniejcych ju klas do wasnych specyficznych potrzeb. Jest to podstawowa technika progra-mowania zarwno w Javie, jak i C++, a oba te jzyki maj pod tym wzgldem wiele ze sobwsplnego. Dlatego te programici C++ mog rwnie w tym rozdziale skupi si tylko narnicach pomidzy tymi dwoma jzykami.W rozdziale 6. nauczymy si posugiwa interfejsami w Javie, ktre wykraczaj poza pro-sty model dziedziczenia opisywany w poprzednim rozdziale. Opanowanie technik zwiza-nych z interfejsami da nam peny dostp do moliwoci, jakie stwarza w peni obiektoweprogramowanie w Javie. Ponadto opisujemy bardzo przydatne w Javie klasy wewntrzne(ang. inner classes). Pomagaj one w pisaniu bardziej zwizego i przejrzystego kodu.Od rozdziau 7. zaczynamy powane programowanie. Jako e kady programista Javy powi-nien zna si na programowaniu GUI, w tym rozdziale opisujemy podstawy tego zagadnienia.Nauczysz si tworzy okna, rysowa w nich, rysowa figury geometryczne, formatowa tekstprzy zastosowaniu rnych krojw pisma oraz wywietla obrazy.W rozdziale 8. szczegowo opisujemy model zdarze AWT (ang. Abstract Window Toolkit).Nauczymy si pisa programy reagujce na zdarzenia, takie jak kliknicie przyciskiem myszyalbo nacinicie klawisza na klawiaturze. Dodatkowo opanujesz techniki pracy nad takimielementami GUI jak przyciski i panele.

    Rozdzia 9. zawiera bardzo szczegowy opis pakietu Swing. Pakiet ten umoliwia tworzenieniezalenych od platformy graficznych interfejsw uytkownika. Nauczysz si posugiwarnego rodzaju przyciskami, komponentami tekstowymi, obramowaniami, suwakami, polamilist, menu i oknami dialogowymi. Niektre zaawansowane komponenty zostay opisane dopierow drugim tomie.

    Rozdzia 10. zawiera informacje na temat wdraania programw jako aplikacji lub apletw.Nauczysz si pakowa programy do plikw JAR oraz udostpnia aplikacje poprzez internetza pomoc mechanizmw Java Web Start i apletw. Na zakoczenie opisujemy, w jaki sposbJava przechowuje i wyszukuje informacje na temat konfiguracji ju po ich wdroeniu.Rozdzia 11. powicilimy obsudze wyjtkw doskonaemu mechanizmowi pozwalaj-cemu radzi sobie z tym, e z dobrymi programami mog dzia si ze rzeczy. Wyjtki s sku-tecznym sposobem na oddzielenie kodu normalnego przetwarzania od kodu obsugujcegobdy. Oczywicie nawet zabezpieczenie w postaci obsugi wszystkich sytuacji wyjtkowychnie zawsze uchroni nas przed niespodziewanym zachowaniem programu. W drugiej czci tegorozdziau zawarlimy mnstwo wskazwek dotyczcych usuwania bdw z programu. Nakocu opisujemy krok po kroku ca sesj debugowania.W rozdziale 12. przedstawiamy zarys programowania oglnego najwaniejszej nowociw Java SE 5.0. Dziki tej technice mona tworzy atwiejsze do odczytu i bezpieczniejszeprogramy. Przedstawiamy sposoby stosowania cisej kontroli typw oraz pozbywania siszpetnych i niebezpiecznych konwersji. Ponadto nauczysz si radzi sobie w sytuacjach, kiedytrzeba zachowa zgodno ze starszymi wersjami Javy.

  • Wstp 17

    Tematem rozdziau 13. s kolekcje. Chcc zebra wiele obiektw, aby mc ich pniej uy,najlepiej posuy si kolekcj, zamiast po prostu wrzuca wszystkie obiekty do tablicy. W roz-dziale tym nauczysz si korzysta ze standardowych kolekcji, ktre s wbudowane w jzyki gotowe do uytku.Koczcy ksik rozdzia 14. zawiera opis wielowtkowoci, ktra umoliwia programo-wanie w taki sposb, aby rne zadania byy wykonywane jednoczenie (wtek to przepywsterowania w programie). Nauczysz si ustawia wtki i panowa nad ich synchronizacj.Jako e wielowtkowo w Java 5.0 ulega powanym zmianom, opisujemy wszystkie nowemechanizmy z ni zwizane.Dodatek zawiera list sw zarezerwowanych w jzyku Java.

    Konwencje typograficznePodobnie jak w wielu ksikach komputerowych, przykady kodu programw pisane sczcionk o staej szerokoci znakw.

    Tak ikon opatrzone s uwagi.

    T ikon opatrzone s wskazwki.

    Takiej ikony uywamy, aby ostrzec przed jakim niebezpieczestwem.

    W ksice pojawia si wiele uwag wyjaniajcych rnice pomidzy Jav a jzykiem C++. Jeli nie znasz si na programowaniu w C++ lub na myl o przykrych wspo-

    mnieniach z nim zwizanych dostajesz gsiej skrki, moesz je pomin.

    Java ma bardzo du bibliotek programistyczn, czyli API (ang. Application ProgrammingInterface). Kiedy po raz pierwszy uywamy jakiego wywoania API, na kocu sekcji umiesz-czamy jego krtki opis. Opisy te s nieco nieformalne, ale staralimy si, aby zawieray wicejpotrzebnych informacji ni te, ktre mona znale w oficjalnej dokumentacji API w inter-necie. Liczba znajdujca si za nazw klasy, interfejsu lub metody odpowiada wersji JDK,w ktrej opisywana wasno zostaa wprowadzona.Interfejs programowania aplikacji 1.2

  • 18 Java. Podstawy

    Programy, ktrych kod rdowy mona znale w internecie, s oznaczane jako listingi, np.:Listing 1.1. inputTest/InputTest.java

    Przykady koduW witrynie towarzyszcej tej ksice, pod adresem www.helion.pl/ksiazki/javpd9.htm,opublikowane s w postaci skompresowanego archiwum wszystkie pliki z przykadami kodurdowego. Mona je wypakowa za pomoc dowolnego programu otwierajcego paczkiZIP albo przy uyciu narzdzia jar dostpnego w zestawie Java Development Kit. Wicejinformacji na temat tego pakietu i przykady kodu mona znale w rozdziale 2.

  • PodzikowaniaPisanie ksiki to zawsze ogromny wysiek, a pisanie kolejnego wydania nie wydaje si duoatwiejsze, zwaszcza kiedy wemie si pod uwag cige zmiany zachodzce w technologiiJava. Aby ksika moga powsta, potrzeba zaangaowania wielu osb. Dlatego te z wielkprzyjemnoci chciabym podzikowa za wspprac caemu zespoowi Core Java.Wiele cennych uwag pochodzi od osb z wydawnictwa Prentice Hall, ktrym udao si pozo-sta w cieniu. Chciabym, aby wszystkie te osoby wiedziay, e bardzo doceniam ich prac.Jak zawsze gorce podzikowania kieruj do mojego redaktora z wydawnictwa PrenticeHall Grega Doencha za przeprowadzenie tej ksiki przez proces pisania i produkcjioraz za to, e pozwoli mi pozosta w bogiej niewiadomoci istnienia wszystkich osb pra-cujcych w zapleczu. Jestem wdziczny Julie Nahil za doskonae wsparcie w dziedzinie pro-dukcji, oraz Dmitryemu i Alinie Kirsanovom za korekt i skad. Dzikuj rwnie mojemuwspautorowi poprzednich wyda tej ksiki Garyemu Cornellowi, ktry podj innewyzwania.

    Dzikuj wszystkim Czytelnikom poprzednich wyda tej ksiki za informacje o enujcychbdach, ktre popeniem, i komentarze dotyczce ulepszenia mojej ksiki. Jestem szcze-glnie wdziczny znakomitemu zespoowi korektorw, ktrzy czytajc wstpn wersj tejksiki i wykazujc niebywa czuo na szczegy, uratowali mnie przed popenieniemjeszcze wikszej liczby bdw.Do recenzentw tego wydania i poprzednich edycji ksiki nale: Chuck Allison (Utah ValleyUniversity), Lance Andersen (Oracle), Alec Beaton (IBM), Cliff Berg, Joshua Bloch, DavidBrown, Corky Cartwright, Frank Cohen (PushToTest), Chris Crane (devXsolution), dr NicholasJ. De Lillo (Manhattan College), Rakesh Dhoopar (Oracle), David Geary (Clarity Training),Jim Gish (Oracle), Brian Goetz (Oracle), Angela Gordon, Dan Gordon (Electric Cloud), RobGordon, John Gray (University of Hartford), Cameron Gregory (olabs.com), Marty Hall(coreservlets.com, Inc.), Vincent Hardy (Adobe Systems), Dan Harkey (San Jose State Univer-sity), William Higgins (IBM), Vladimir Ivanovic (PointBase), Jerry Jackson (CA Technolo-gies), Tim Kimmet (Walmart), Chris Laffra, Charlie Lai (Apple), Angelika Langer, DougLangston, Hang Lau (McGill University), Mark Lawrence, Doug Lea (SUNY Oswego),Gregory Longshore, Bob Lynch (Lynch Associates), Philip Milne (konsultant), Mark Mor-rissey (The Oregon Graduate Institute), Mahesh Neelakanta (Florida Atlantic University),

  • 20 Java. Podstawy

    Hao Pham, Paul Philion, Blake Ragsdell, Stuart Reges (University of Arizona), Rich Rosen(Interactive Data Corporation), Peter Sanders (ESSI University, Nicea, Francja), dr Paul Sang-hera (San Jose State University, Brooks College), Paul Sevinc (Teamup AG), Devang Shah(Sun Microsystems), Bradley A. Smith, Steven Stelting (Oracle), Christopher Taylor, LukeTaylor (Valtech), George Thiruvathukal, Kim Topley (StreamingEdge), Janet Traub, PaulTyma (konsultant), Peter van der Linden (Motorola Mobile Devices), Burt Walsh, Dan Xu(Oracle) i John Zavgren (Oracle).

    Cay HorstmannSan Francisco, Kalifornia

    wrzesie 2012

  • 1Wstp do Javy

    W tym rozdziale: Java jako platforma programistyczna

    Sowa klucze biaej ksigi Javy Aplety Javy i internet

    Krtka historia Javy

    Najczstsze nieporozumienia dotyczce JavyPierwsze wydanie Javy w 1996 roku wywoao ogromne emocje nie tylko w prasie kom-puterowej, ale take w takich mediach nalecych do gwnego nurtu, jak The New YorkTimes, The Washington Post czy Business Week. Jzyk Java zosta jako pierwszy i dotej pory jedyny jzyk programowania wyrniony krtk, bo trwajc 10 minut, wzmiankw National Public Radio. Kapita wysokiego ryzyka w wysokoci 100 000 000 dolarw zostazebrany wycznie dla produktw powstaych przy zastosowaniu okrelonego jzyka kom-puterowego. Wracanie dzisiaj do tych wietnych czasw jest bardzo zabawne, a wic w tymrozdziale krtko opisujemy histori jzyka Java.

    1.1. Java jako platforma programistycznaW pierwszym wydaniu tej ksiki napisalimy o Javie takie oto sowa:

    Ten cay szum wok Javy jako jzyka programowania jest przesadzony. Java to z pewnocidobry jzyk programowania. Nie ma wtpliwoci, e jest to jedno z najlepszych narzdzidostpnych dla powanych programistw. Naszym zdaniem mogaby by wspaniaym jzy-kiem programowania, ale na to jest ju chyba zbyt pno. Kiedy przychodzi do rzeczywistychzastosowa, swoj gow podnosi ohydna zmora zgodnoci z istniejcym ju kodem.

  • 22 Java. Podstawy

    Za ten akapit na naszego redaktora posypay si gromy ze strony kogo bardzo wysoko posta-wionego w firmie Sun Microsystems, kogo nazwiska wolimy nie ujawnia. Jednak z perspek-tywy czasu wydaje si, e nasze przewidywania byy suszne. Java ma mnstwo bardzo poy-tecznych cech, ktre opisujemy w dalszej czci tego rozdziau. Ma te jednak pewne wady,a najnowsze dodatki do jzyka ze wzgldu na zgodno nie s ju tak eleganckie jak kiedy.Jak jednak napisalimy w pierwszym wydaniu tej ksiki, Java nigdy nie bya tylko jzykiem.Istnieje bardzo duo jzykw programowania, a tylko kilka z nich zrobio furor. Java tocaa platforma z du bibliotek zawierajc ogromne iloci gotowego do wykorzystania koduoraz rodowisko wykonawcze, ktre zapewnia bezpieczestwo, przenono midzy rnymisystemami operacyjnymi oraz automatyczne usuwanie nieuytkw (ang. garbage collecting).Jako programici damy jzyka o przyjaznej skadni i zrozumiaej semantyce (a wic nie C++).Do tego opisu pasuje Java, jak rwnie wiele innych dobrych jzykw programowania. Nie-ktre z nich oferuj przenono, zbieranie nieuytkw itd., ale nie maj bogatych bibliotek,przez co zmuszeni jestemy pisa wasne, kiedy chcemy wykona obrbk grafiki, stworzyaplikacj sieciow bd czc si z baz danych. C, Java ma to wszystko jest to dobryjzyk, ktry oddaje do dyspozycji programisty wysokiej jakoci rodowisko wykonawcze wrazz ogromn bibliotek. To wanie to poczenie sprawia, e tak wielu programistw nie potrafioprze si urokowi Javy.

    1.2. Sowa klucze biaej ksigi JavyTwrcy jzyka Java napisali bardzo wpywow bia ksig, w ktrej opisali swoje celei osignicia. Dodatkowo opublikowali krtkie streszczenie zorganizowane wedug nastpu-jcych 11 sw kluczowych:

    1. prosty,

    2. obiektowy,

    3. sieciowy,

    4. niezawodny,

    5. bezpieczny,

    6. niezaleny od architektury,7. przenony,8. interpretowany,

    9. wysokowydajny,

    10. wielowtkowy,11. dynamiczny.

  • Rozdzia 1. Wstp do Javy 23

    W tej czci rozdziau: Krtko podsumujemy, posikujc si fragmentami z biaej ksigi, co projektanci

    Javy maj do powiedzenia na temat kadego ze sw kluczowych. Wyrazimy wasne zdanie na temat kadego z tych sw kluczowych, opierajc

    si na naszych dowiadczeniach zwizanych z aktualn wersj Javy.

    W trakcie pisania tej ksiki biaa ksiga Javy bya dostpna pod adresem http://www.oracle.com/technetwork/java/langenv-140151.html.

    1.2.1. Prosty

    Naszym celem byo zbudowanie takiego systemu, ktry mona zaprogramowa bezukoczenia tajemnych szkole, a ktry podtrzymywaby obecne standardowe praktyki.W zwizku z tym mimo e w naszym przekonaniu jzyk C++ nie nadawa si do tegocelu Java pod wzgldem projektowym jest do niego podobna, jak to tylko moliwe.Dziki temu nasz system jest bardziej zrozumiay. Java jest pozbawiona wielu rzadkouywanych, sabo poznanych i wywoujcych zamieszanie funkcji, ktre zgodnie z naszymidowiadczeniami przynosz wicej zego ni dobrego.

    Skadnia Javy rzeczywicie jest oczyszczon wersj skadni jzyka C++. Nie ma potrzebydoczania plikw nagwkowych, posugiwania si arytmetyk wskanikow (a nawet skadniwskanikow), strukturami, uniami, przecianiem operatorw, wirtualnymi klasami bazo-wymi itd. (wicej rnic pomidzy Jav a C++ mona znale w uwagach rozmieszczonychna kartach tej ksiki). Nie jest jednak tak, e projektanci pozbyli si wszystkich waciwocijzyka C++, ktre nie byy eleganckie. Na przykad nie zrobiono nic ze skadni instrukcjiswitch. Kady, kto zna jzyk C++, z atwoci przeczy si na skadni jzyka Java.Osoby przyzwyczajone do rodowisk wizualnych (jak Visual Basic) przy nauce Javy bdnapotyka trudnoci. Trzeba poj mnstwo dziwnych elementw skadni (cho nie zabierato zbyt duo czasu). Wiksze znaczenie ma to, e w Javie trzeba znacznie wicej pisa.Pikno jzyka Visual Basic polega na tym, e dua cz infrastruktury aplikacji jest automa-tycznie dostarczana przez rodowisko programistyczne. Wszystko to w Javie trzeba napisawasnorcznie, a to z reguy wymaga do duej iloci kodu. Istniej jednak rodowiskaudostpniane przez niezalenych producentw, ktre umoliwiaj programowanie w styluprzecignij i upu.

    Wyznacznikiem prostoty s take niewielkie rozmiary. Jednym z celw Javyjest umoliwienie tworzenia oprogramowania dziaajcego niezalenie na maychurzdzeniach. Rozmiar podstawowego interpretera i obsugi klas wynosi okoo40 kilobajtw. Podstawowe standardowe biblioteki i obsuga wtkw (w zasadziejest to samodzielne mikrojdro) to dodatkowe 175 K.

    W tamtych czasach byo to niebywae wrcz osignicie. Oczywicie od tamtej pory bibliotekaJavy rozrosa si do nieprawdopodobnych rozmiarw. W zwizku z tym powstaa oddzielnawersja Javy o nazwie Java Micro Edition z mniejsz bibliotek, ktra nadaje si do stoso-wania na maych urzdzeniach.

  • 24 Java. Podstawy

    1.2.2. Obiektowy

    Mwic krtko, projektowanie obiektowe to technika programowania, ktrej punktemcentralnym s dane (czyli obiekty) oraz interfejsy dajce dostp do tych obiektw.Przez analogi obiektowy stolarz byby przede wszystkim zainteresowany krzesem,ktre ma zrobi, a potrzebne do tego narzdzia stawiaby na drugim miejscu.Nieobiektowy stolarz z kolei na pierwszym miejscu stawiaby swoje narzdzia. Narzdziazwizane z programowaniem obiektowym w Javie s w zasadzie takie jak w C++.

    Obiektowa metoda programowania udowodnia swoj warto w cigu ostatnich 30 lat. Jestnie do pomylenia, aby jakikolwiek nowoczesny jzyk z niej nie korzysta. Rzeczywiciewaciwoci Javy, dziki ktrym mona nazywa j jzykiem obiektowym, s podobne dojzyka C++. Gwna rnica pomidzy tymi dwoma jzykami objawia si w wielodziedzi-czeniu, ktre w Javie zostao zastpione prostszymi interfejsami, oraz w modelu metaklasJavy (ktry jest opisany w rozdziale 5.).

    Osoby, ktre nie miay stycznoci z programowaniem obiektowym, powinny bardzo uwanie przeczyta rozdziay 4. 6. Zawieraj one opis technik programowania

    obiektowego oraz wyjanienie, czemu ta technika lepiej nadaje si do wyrafinowanychprojektw ni tradycyjne jzyki proceduralne, takie jak C lub Basic.

    1.2.3. Sieciowy

    Java ma bogat bibliotek procedur wspomagajcych prac z takimi protokoamiTCP/IP jak HTTP i FTP. Aplikacje w tym jzyku mog uzyskiwa dostp poprzez siedo obiektw z tak sam atwoci, jakby znajdoway si one w lokalnym systemie plikw.

    W naszej ocenie funkcje sieciowe Javy s zarwno solidne, jak i atwe w uyciu. Kady, ktokiedykolwiek sprbowa programowania sieciowego w innym jzyku programowania, bdziezachwycony tym, jak proste s tak niegdy uciliwe zadania jak poczenia na poziomiegniazd (ang. socket connection); programowanie sieciowe opisalimy w drugim tomie. Mecha-nizm zdalnych wywoa metod umoliwia komunikacj pomidzy obiektami rozproszonymi(take opisany w drugim tomie).

    1.2.4. Niezawodny

    Java zostaa stworzona do pisania programw, ktre musz by niezawodne w rozmaitychsytuacjach. Duo uwagi powicono wczesnemu sprawdzaniu moliwoci wystpieniaewentualnych problemw, pniejszemu sprawdzaniu dynamicznemu (w trakciedziaania programu) oraz wyeliminowaniu sytuacji, w ktrych atwo popeni bd.Najwiksza rnica pomidzy Jav a C/C++ polega na tym, e model wskanikowytego pierwszego jzyka jest tak zaprojektowany, aby nie byo moliwoci nadpisaniapamici i zniszczenia w ten sposb danych.

  • Rozdzia 1. Wstp do Javy 25

    Jest to take bardzo przydatna funkcja. Kompilator Javy wykrywa wiele bdw, ktre w innychjzykach ujawniyby si dopiero po uruchomieniu programu. Wracajc do wskanikw, kady,kto spdzi wiele godzin na poszukiwaniu uszkodzenia w pamici spowodowanego bdnymwskanikiem, bdzie bardzo zadowolony z Javy.Osoby programujce do tej pory w jzyku takim jak Visual Basic, w ktrym nie stosuje si jaw-nie wskanikw, pewnie zastanawiaj si, czemu s one takie wane. Programici jzyka Cnie maj ju tyle szczcia. Im wskaniki potrzebne s do uzyskiwania dostpu do acuchw,tablic, obiektw, a nawet plikw. W jzyku Visual Basic w adnej z wymienionych sytuacjinie stosuje si wskanikw ani nie trzeba zajmowa si przydzielaniem dla nich pamici.Z drugiej jednak strony w jzykach pozbawionych wskanikw trudniej jest zaimplemen-towa wiele rnych struktur danych. Java czy w sobie to, co najlepsze w obu tych podej-ciach. Wskaniki nie s potrzebne do najczciej uywanych struktur, jak acuchy czy tablice.Moliwoci stwarzane przez wskaniki s jednak cay czas w zasigu rki przydaj si naprzykad w przypadku list dwukierunkowych (ang. linked lists). Ponadto cay czas jestemyw peni bezpieczni, poniewa nie ma moliwoci uzyskania dostpu do niewaciwego wska-nika, popenienia bdu przydzielania pamici ani koniecznoci wystrzegania si przed wycie-kami pamici.

    1.2.5. Bezpieczny

    Java jest przystosowana do zastosowa w rodowiskach sieciowych i rozproszonych.W tej dziedzinie pooono duy nacisk na bezpieczestwo. Java umoliwia tworzeniesystemw odpornych na wirusy i ingerencj.

    W pierwszym wydaniu naszej ksiki napisalimy: Nigdy nie mw nigdy i okazao si, emielimy racj. Niedugo po wydaniu pakietu JDK zesp ekspertw z Princeton Universityznalaz ukryte bdy w zabezpieczeniach Java 1.0. Firma Sun Microsystems zaprosia pro-gramistw do zbadania zabezpiecze Javy, udostpniajc publicznie specyfikacj i imple-mentacj wirtualnej maszyny Javy oraz biblioteki zabezpiecze. Wszystkie znane bdy zabez-piecze zostay szybko naprawione. Dziki temu przechytrzenie zabezpiecze Javy jest nielada sztuk. Znalezione do tej pory bdy byy cile zwizane z techniczn stron jzykai byo ich niewiele.Od samego pocztku przy projektowaniu Javy starano si uniemoliwi przeprowadzanieniektrych rodzajw atakw, takich jak:

    przepenienie stosu wykonywania czsto stosowany atak przez robaki i wirusy; niszczenie pamici poza swoj wasn przestrzeni procesow; odczyt lub zapis plikw bez zezwolenia.

    Pewna liczba zabezpiecze zostaa dodana do Javy z biegiem czasu. Od wersji 1.1 istnieje poj-cie klasy podpisanej cyfrowo (ang. digitally signed class), ktre opisane jest w drugim tomie.Dziki temu zawsze wiadomo, kto napisa dan klas. Jeli ufamy klasie napisanej przezkogo innego, mona da jej wiksze przywileje.

  • 26 Java. Podstawy

    W konkurencyjnej technologii firmy Microsoft, opartej na ActiveX, jako zabezpie- czenie stosuje si tylko podpisy cyfrowe. To oczywicie za mao kady uyt-

    kownik produktw firmy Microsoft moe potwierdzi, e programy od znanych dostawcwpsuj si i mog powodowa szkody. Model zabezpiecze Javy jest o niebo lepszy niten oparty na ActiveX, poniewa kontroluje dziaajc aplikacj i zapobiega spustosze-niom, ktre moe ona wyrzdzi.

    1.2.6. Niezaleny od architekturyKompilator generuje niezaleny od konkretnej architektury plik w formacie obiektowym.Tak skompilowany kod mona uruchamia na wielu procesorach, pod warunkieme zainstalowano Java Runtime System. Kompilator dokonuje tego, generujc kodbajtowy niemajcy nic wsplnego z adnym konkretnym procesorem. W zamian kodten jest tak konstruowany, aby by atwy do interpretacji na kadym urzdzeniu i abymona go byo z atwoci przetumaczy na kod maszynowy w locie.

    Nie jest to adna nowo. Ju ponad 30 lat temu Niklaus Wirth zastosowa t technikw swoich oryginalnych implementacjach systemw Pascal i UCSD.

    Oczywicie interpretowanie kodu bajtowego musi by wolniejsze ni dziaanie instrukcjimaszynowych z pen prdkoci i nie wiadomo, czy jest to tak naprawd dobry pomys.Jednak maszyny wirtualne mog tumaczy czsto wykonywany kod bajtowy na kod maszy-nowy w procesie nazywanym kompilacj w czasie rzeczywistym (ang. just-in-time compi-lation). Metoda ta okazaa si tak efektywna, e nawet firma Microsoft zastosowaa maszynwirtualn na swojej platformie .NET.Maszyna wirtualna Javy ma take inne zalety. Zwiksza bezpieczestwo, poniewa moekontrolowa dziaanie sekwencji instrukcji. Niektre programy tworz nawet kod bajtowyw locie, tym samym dynamicznie zwikszajc moliwoci dziaajcego programu.

    1.2.7. PrzenonyW przeciwiestwie do jzykw C i C++ Java nie jest w aden sposb uzalenionaod implementacji. Rozmiary podstawowych typw danych s okrelone, podobniejak wykonywane na nich dziaania arytmetyczne.

    Na przykad typ int w Javie zawsze oznacza 32-bitow liczb cakowit. W C i C++ typ intmoe przechowywa liczb cakowit 16-, 32-bitow lub o dowolnym innym rozmiarze,jaki wymyli sobie twrca kompilatora. Jedyne ograniczenie polega na tym, e typ int niemoe by mniejszy ni typ short int i wikszy ni long int. Ustalenie rozmiarw typwliczbowych spowodowao zniknicie gwnego problemu z przenoszeniem programw. Danebinarne s przechowywane i przesyane w ustalonym formacie, dziki czemu unika si nie-porozumie zwizanych z kolejnoci bajtw. acuchy s przechowywane w standardo-wym formacie Unicode.

  • Rozdzia 1. Wstp do Javy 27

    Biblioteki wchodzce w skad systemu definiuj przenone interfejsy. Dostpnajest na przykad abstrakcyjna klasa Window i jej implementacje dla systemw Unix,Windows i Mac OS X.

    Kady, kto kiedykolwiek prbowa napisa program, ktry mia wyglda dobrze w syste-mie Windows, na komputerach Macintosh i w dziesiciu rnych odmianach Uniksa, wie,jak ogromny jest to wysiek. Java 1.0 wykonaa to heroiczne zadanie i udostpnia prostyzestaw narzdzi, ktre odwzorowyway elementy interfejsu uytkownika na kilku rnychplatformach. Niestety, w wyniku tego powstaa biblioteka, ktra przy duym nakadzie pracydawaa ledwie akceptowalne w rnych systemach rezultaty (dodatkowo na rnych plat-formach wystpoway rne bdy). Ale to byy dopiero pocztki. W wielu aplikacjach odpiknego interfejsu uytkownika waniejsze s inne rzeczy wanie takie aplikacje korzy-stay na pierwszych wersjach Javy. Obecny zestaw narzdzi do tworzenia interfejsu uyt-kownika jest napisany od nowa i nie jest uzaleniony od interfejsu uytkownika hosta. Wyni-kiem jest znacznie spjniejszy i w naszym odczuciu atrakcyjniejszy interfejs ni ten, ktryby dostpny we wczesnych wersjach Javy.

    1.2.8. Interpretowany

    Interpreter Javy moe wykona kady kod bajtowy Javy bezporednio na urzdzeniu,na ktrym interpreter ten zainstalowano. Jako e czenie jest bardziej inkrementalnymi lekkim procesem, proces rozwoju moe by znacznie szybszy i bardziej odkrywczy.

    czenie narastajce ma swoje zalety, ale opowieci o korzyciach pyncych z jego stoso-wania w procesie rozwoju aplikacji s przesadzone. Pierwsze narzdzia Javy rzeczywiciebyy powolne. Obecnie kod bajtowy jest tumaczony przez kompilator JIT (ang. just-in-timecompiler) na kod maszynowy.

    1.2.9. Wysokowydajny

    Mimo e wydajno interpretowanego kodu bajtowego jest zazwyczaj wicej niwystarczajca, zdarzaj si sytuacje, w ktrych potrzebna jest wiksza wydajno.Kod bajtowy moe by tumaczony w locie (w trakcie dziaania programu) na kodmaszynowy przeznaczony dla okrelonego procesora, na ktrym dziaa aplikacja.

    Na pocztku istnienia Javy wielu uytkownikw nie zgadzao si ze stwierdzeniem, e jejwydajno jest wicej ni wystarczajca. Jednak najnowsze kompilatory JIT s tak dobre,e mog konkurowa z tradycyjnymi kompilatorami, a czasami nawet je przeciga, poniewamaj dostp do wikszej iloci informacji. Na przykad kompilator JIT moe sprawdza, ktracz kodu jest najczciej wykonywana, i zoptymalizowa j pod ktem szybkoci. Bardziejzaawansowana technika optymalizacji polega na eliminacji wywoa funkcji (ang. inlining).Kompilator JIT wie, ktre klasy zostay zaadowane. Moe zastosowa wstawianie kodufunkcji w miejsce ich wywoa, kiedy biorc pod uwag aktualnie zaadowane kolekcjeklas okrelona funkcja nie jest przesonita i moliwe jest cofnicie tej optymalizacjiw razie potrzeby.

  • 28 Java. Podstawy

    1.2.10. WielowtkowyKorzyci pynce z wielowtkowoci to lepsza interaktywno i dziaanie w czasierzeczywistym.

    Kady, kto prbowa programowania wielowtkowego w innym jzyku ni Java, bdzie milezaskoczony tym, jak atwe jest to w Javie. Wtki w Javie mog korzysta z systemw wie-loprocesorowych, jeli podstawowy system operacyjny to umoliwia. Problem w tym, eimplementacje wtkw na rnych platformach znacznie si rni, a Java nic nie robi podtym wzgldem, aby zapewni niezaleno od platformy. Taki sam w rnych urzdzeniachpozostaje tylko kod sucy do wywoywania wielowtkowoci. Implementacja wielowt-kowoci jest w Javie zrzucana na system operacyjny lub bibliotek wtkw. Niemniej atwo,z jak przychodzi korzystanie z niej w Javie, sprawia, e jest ona bardzo kuszc propozycj,jeli chodzi o programowanie po stronie serwera.

    1.2.11. Dynamiczny

    Java jest bardziej dynamicznym jzykiem ni C i C++ pod wieloma wzgldami. Zostaazaprojektowana tak, aby dostosowywa si do ewoluujcego rodowiska. Do bibliotekmona bez przeszkd dodawa nowe metody i zmienne egzemplarzy, nie wywierajcadnego wpywu na klienty. Sprawdzanie informacji o typach w Javie nie sprawiatrudnoci.

    Cecha ta jest wana w sytuacjach, kiedy trzeba doda kod do dziaajcego programu.Najwaniejszy przykad takiej sytuacji to pobieranie kodu z internetu w celu uruchomieniaw przegldarce. W Javie 1.0 sprawdzenie typu w czasie dziaania programu byo proste, alew aktualnej wersji Javy programista ma moliwo penego wgldu zarwno w struktur, jaki dziaanie obiektw. Jest to niezwykle wane, zwaszcza dla systemw, w ktrych koniecznejest analizowanie obiektw w czasie pracy, takich jak kreatory GUI Javy, inteligentne debugery,komponenty zdolne do podczania si w czasie rzeczywistym oraz obiektowe bazy danych.

    Niedugo po pocztkowym sukcesie Javy firma Microsoft wydaa produkt o nazwie J++. By to jzyk programowania i maszyna wirtualna udzco podobne do Javy.

    Obecnie Microsoft nie zajmuje si ju tym projektem i zwrci si w stron innegojzyka C#, ktry rwnie przypomina Jav. Istnieje nawet jzyk J# sucy do migracjiaplikacji napisanych w J++ na maszyn wirtualn uywan przez C#. W ksice tej nieopisujemy jzykw J++, C# i J#.

    1.3. Aplety Javy i internetZaoenie jest proste: uytkownik pobiera kod bajtowy z internetu i uruchamia go na wasnymurzdzeniu. Programy napisane w Javie, ktre dziaaj na stronach internetowych, nosz nazwapletw Javy. Aby uywa apletw, wystarczy mie przegldark obsugujc Jav, w kt-rej mona uruchomi kod bajtowy tego jzyka. Nie trzeba niczego instalowa. Dziki temu,

  • Rozdzia 1. Wstp do Javy 29

    e firma Sun udziela licencji na kod rdowy Javy i nie zezwala na wprowadzanie adnychzmian w jzyku i bibliotece standardowej, kady aplet powinien dziaa w kadej przegl-darce reklamowanej jako obsugujca Jav. Najnowsz wersj oprogramowania pobiera siw trakcie odwiedzin strony internetowej zawierajcej aplet. Najwaniejsze jest jednak to, edziki zabezpieczeniom maszyny wirtualnej nie trzeba si obawia atakw ze strony zoli-wego kodu.

    Pobieranie apletu odbywa si w podobny sposb jak wstawianie obrazu na stron internetow.Aplet integruje si ze stron, a tekst otacza go ze wszystkich stron jak obraz. Rnica polegana tym, e ten obraz jest ywy. Reaguje na polecenia uytkownika, zmienia wygld oraz prze-sya dane pomidzy komputerem, na ktrym zosta uruchomiony, a komputerem, z ktregopochodzi.

    Rysunek 1.1 przedstawia dobry przykad dynamicznej strony internetowej, na ktrej wykony-wane s skomplikowane obliczenia. Aplet Jmol wywietla budow czsteczek. Wywietlonczsteczk mona za pomoc myszy obraca w rne strony, co pozwala lepiej zrozumie jejbudow. Tego typu bezporednia manipulacja obiektami nie jest moliwa na statycznych stro-nach WWW, ale w apletach tak (aplet ten mona znale na stronie http://jmol.sourceforge.net).

    Rysunek 1.1. Aplet Jmol

    Kiedy aplety pojawiy si na scenie, wywoay niemae poruszenie. Wielu ludzi uwaa, e towanie dziki zaletom apletw Java zyskaa tak du popularno. Jednak pocztkowe zauro-czenie przemienio si szybko w rozczarowanie. Rne wersje przegldarek Netscape i InternetExplorer dziaay z rnymi wersjami Javy. Niektre z nich byy przestarzae. Ze wzgldu nat przykr sytuacj tworzenie apletw przy wykorzystaniu najnowszych wersji Javy byocoraz trudniejsze. Obecnie wikszo dynamicznych efektw na stronach internetowych jestrealizowana za pomoc JavaScriptu i technologii Flash. Java natomiast staa si najpopu-larniejszym jzykiem do tworzenia aplikacji dziaajcych po stronie serwera, ktre generujstrony internetowe i stanowi ich zaplecze logiczne.

  • 30 Java. Podstawy

    1.4. Krtka historia JavyPodrozdzia ten krtko opisuje histori ewolucji Javy. Informacje tu zawarte pochodz z r-nych rde (najwaniejsze z nich to wywiad z twrcami Javy opublikowany w interneto-wym magazynie SunWorld w 1995 roku).

    Historia Javy siga 1991 roku, kiedy zesp inynierw z firmy Sun, ktrego przewodnicz-cymi byli Patrick Naughton i (wszdobylski geniusz komputerowy) James Gosling, piastujcyjedno z najwyszych stanowisk w firmie o nazwie Sun Fellow, postanowi zaprojektowaniewielki jzyk programowania nadajcy si do uytku w takich urzdzeniach konsumenc-kich jak tunery telewizji kablowej. Jako e urzdzenia te nie dysponuj du moc ani pami-ci, zaoono, e jzyk musi by bardzo niewielki i powinien generowa zwizy kod. Ponadtoze wzgldu na fakt, e producenci mog w swoich urzdzeniach stosowa rne procesory,jzyk ten nie mg by zwizany tylko z jedn architektur. Projekt otrzyma kryptonim Green.Ch utworzenia kompaktowego i niezalenego od platformy kodu doprowadzia zesp dowskrzeszenia modelu znanego z implementacji Pascala z wczesnych dni istnienia kompute-rw osobistych. Pionierski projekt przenonego jzyka generujcego kod poredni dla hipo-tetycznej maszyny nalea do Niklausa Wirtha wynalazcy Pascala (maszyny te nazywanes czsto wirtualnymi, std nazwa wirtualna maszyna Javy). Ten kod poredni monabyo nastpnie uruchamia na wszystkich urzdzeniach, ktre miay odpowiedni interpreter.Inynierowie skupieni wok projektu Green take posuyli si maszyn wirtualn, rozwi-zujc w ten sposb swj gwny problem.Jako e pracownicy firmy Sun obracali si w rodowisku uniksowym, swj jzyk oparli naC++, a nie na Pascalu. Stworzony przez nich jzyk by obiektowy, a nie proceduralny. Jakjednak mwi w wywiadzie Gosling: Przez cay czas jzyk by tylko narzdziem, a nie celem.Gosling zdecydowa si nazwa swj jzyk Oak (db), prawdopodobnie dlatego e lubiwidok dbu stojcego za oknem jego biura w Sun. Pniej odkryto, e jzyk programowaniao tej nazwie ju istnia, i zmieniono nazw na Java. Okazao si to strzaem w dziesitk.W 1992 roku inynierowie skupieni wok projektu Green przedstawili swoje pierwsze dzieoo nazwie *7. By to niezwykle inteligentny pilot zdalnego sterowania (mia moc stacji SPARCzamknit w pudeku o wymiarach 151010 centymetrw). Niestety, nikt w firmie Sun nieby nim zainteresowany, przez co inynierowie musieli znale inny sposb na wypromo-wanie swojej technologii. Jednak adna z typowych firm produkujcych elektronik uyt-kow nie wykazaa zainteresowania. Nastpnym krokiem zespou by udzia w przetargu nautworzenie urzdzenia TV Box obsugujcego takie nowe usugi telewizji kablowej jak filmyna danie. Nie dostali jednak kontraktu (co zabawne, umow podpisa ten sam Jim Clark,ktry zaoy firm Netscape firma ta miaa duy wkad w sukces Javy).Inynierowie pracujcy nad projektem Green (przechrzczonym na First Person, Inc.) sp-dzili cay rok 1993 i poow 1994 na poszukiwaniu kupca dla ich technologii nie znalelinikogo (Patrick Naughton, ktry by jednym z zaoycieli zespou i zajmowa si promocjjego produktw, twierdzi, e uzbiera 300 000 punktw Air Miles, prbujc sprzeda ichtechnologi). Projekt First Person przesta istnie w 1994 roku.

  • Rozdzia 1. Wstp do Javy 31

    Podczas gdy w firmie Sun miay miejsce te wszystkie wydarzenia, sie oglnowiatowa bdcaczci internetu cay czas si rozrastaa. Kluczem do sieci jest przegldarka, ktra inter-pretuje hipertekst i wywietla wynik na ekranie monitora. W 1994 roku wikszo uytkow-nikw internetu korzystaa z niekomercyjnej przegldarki o nazwie Mosaic, ktra powstaaw 1993 roku w centrum komputerowym uniwersytetu Illinois (pracowa nad ni midzyinnymi Marc Andreessen, ktry by wtedy studentem tego uniwersytetu i dostawa 6,85 dolaraza godzin. Andreessen zdoby saw i pienidze jako jeden ze wspzaoycieli i szef dziautechnologii firmy Netscape).

    W wywiadzie dla SunWorld Gosling przyzna, e w poowie 1994 roku projektanci jzykazdali sobie spraw, i mogli stworzy naprawd dobr przegldark. Bya to jedna z nie-wielu aplikacji klient-serwer nalecych do gwnego nurtu, wymagajca tych dziwnych rze-czy, ktre zrobilimy, czyli niezalenoci od architektury, pracy w czasie rzeczywistym, nie-zawodnoci i bezpieczestwa. W wiecie stacji roboczych pojcia te nie miay wielkiegoznaczenia. Postanowilimy wic napisa przegldark internetow.Budow przegldarki, ktra przeobrazia si w przegldark o nazwie HotJava, zajli siPatrick Naughton i Jonathan Payne. Przegldark HotJava naturalnie napisano w jzykuJava, poniewa jej celem byo zaprezentowanie ogromnych moliwoci, ktre stwarza tenjzyk. Programici pamitali jednak te o czym, co obecnie nazywamy apletami, i dodalimoliwo uruchamiania kodu wbudowanego w strony internetowe. 23 maja 1995 roku owoctej pracy, majcej na celu udowodnienie wartoci Javy, ujrza wiato dzienne w magazynieSunWorld. Sta si on kamieniem wgielnym szalonej popularnoci Javy, ktra trwa dodzisiaj.

    Pierwsze wydanie Javy firma Sun opublikowaa na pocztku 1996 roku. Szybko zorientowanosi, e Java 1.0 nie stanie si narzdziem wykorzystywanym do tworzenia powanych apli-kacji. Oczywicie mona byo za jej pomoc stworzy nerwowo poruszajcy si tekst w obsza-rze roboczym przegldarki, ale nie byo ju na przykad moliwoci drukowania. Mwicszczerze, Java 1.0 nie bya gotowa na wielkie rzeczy. W kolejnej wersji, Java 1.1, uzupe-niono najbardziej oczywiste braki, znacznie ulepszono refleksj i dodano model zdarze dlaprogramowania GUI. Jednak nadal moliwoci byy raczej ograniczone.Wielkim wydarzeniem na konferencji JavaOne w 1998 roku byo ogoszenie, e niebawempojawi si Java 1.2. Zastpiono w niej dziecinne narzdzia do obrbki grafiki i tworzeniaGUI wyrafinowanymi i skalowalnymi wersjami, ktre znacznie przybliay spenienie obiet-nicy: Napisz raz, uruchamiaj wszdzie w stosunku do poprzednich wersji. Trzy dni po jejwydaniu (!), w grudniu 1998 roku, dzia marketingu firmy Sun zmieni nazw Java 1.2 nabardziej chwytliw Java 2 Standard Edition Software Development Kit Version 1.2.Poza wydaniem standardowym opracowano jeszcze dwa inne: Micro Edition dla urzdzetakich jak telefony komrkowe oraz Enterprise Edition do przetwarzania po stronie serwera.Ta ksika koncentruje si na wersji standardowej.Kolejne wersje Java 1.3 i Java 1.4 to stopniowe ulepszenia w stosunku do pocztkowej wersjiJava 2. Jednoczenie rozrastaa si biblioteka standardowa, zwikszaa si wydajno i oczy-wicie poprawiono wiele bdw. W tym samym czasie ucicha wrzawa wok apletw i apli-kacji dziaajcych po stronie klienta, a Java staa si najczciej wybieran platform do two-rzenia aplikacji dziaajcych po stronie serwera.

  • 32 Java. Podstawy

    Pierwsza wersja Javy, w ktrej wprowadzono znaczce zmiany w jzyku programowaniaJava w stosunku do wersji 1.1, miaa numer 5 (pierwotnie by to numer 1.5, ale na konfe-rencji JavaOne w 2004 roku podskoczy do pitki). Po wielu latach bada dodano typy spara-metryzowane (ang. generic types), ktre mona z grubsza porwna do szablonw w C++.Sztuka polegaa na tym, aby przy dodawaniu tej funkcji nie zmienia nic w maszynie wirtu-alnej. Niektre z dodanych funkcji zostay zaczerpnite z jzyka C#: ptla for each, moli-wo automatycznej konwersji typw prostych na referencyjne i odwrotnie (ang. autoboxing)oraz