Java 2 útikalauz programozóknak 5.0
A kávé

Nyékyné Gaizler Judit,
Antal György, Balázs Iván József, Csepregi Szabolcs,
Csizmazia Balázs, Csonka Ferenc, Csontos Péter,
Dezső András, Dezső Balázs, Dévai Gergely,
Fodor Szabina, Fornai Péter, Frohner Ákos,
Kégli Zoltán, Kitlei Róbert, Kozsik Tamás,
Lakatos Attila, Mészáros Mónika, Pécsy Gábor,
Porkoláb Zoltán, Riskó Gergely, Salamon András,
Selmeci Attila, Szabó Richárd

BUDAPEST, 2008.


Útilap

Mottó: NE ESS PÁNIKBA![Ada 87]
Az előzményekről:
Kezdetben voltak különálló számítógépek, melyek nagyon sok feladatot meg tudtak oldani a 2*2 kiszámításától kezdve a kölcsönadott könyvek nyilvántartásáig, de a rajtuk dolgozó emberek úgy érezték, ez nem elég.
Már tudtak levelet írni elektronikus készülékeiken, és ki tudták azt nyomtatni papírra, majd a papírt elküldték barátaiknak, ismerőseiknek és üzletfeleiknek, akik elolvasták, és ismét elektronikus készülékekbe töltötték a bennük rejlő információt. Úgy gondolták, ennél sokkal jobb dolgokat is lehet csinálni, ha a papírt kihagyják az egész játékból.
Összekötötték különálló gépeiket mindenféle drótokkal, és így naponta sokkal nagyobb mennyiségű levelet tudtak rázúdítani mit sem sejtő barátaikra... Ez lehet, hogy nem vívta ki az illető barátok és a papírgyárak osztatlan lelkesedését, de az ügyben érintett fáknak nagyon tetszett.
A drótokat addig húzogatták, míg a világ nagy részét össze nem kötötték. Ezt a világot beborító hálót elnevezték Internetnek.
Az Interneten nagyon sokféle formában küldözgettek egymásnak leveleket az emberek, de a levelekből hiányzott valami. Hiányoztak a színek és a képek, míg valaki - kóborló atomdarabkák fölött és havas hegyek között - ki nem talált egy módszert, mellyel kedvenc teásbögréjének képét is megmutathatta barátainak.
Ez a HTML-nek nevezett oldalleíró forma sokaknak nagyon tetszett, és néhány év alatt meg is hódította a világot. Ez a könyv mégsem erről a formátumról szól, hanem egy másik nyelvről.
Az Internet útvesztőinek Napos vidékén megirigyelték a fényreklámok változatosságát, és ezt az eddigi nyugodt oldalakba akarták beépíteni. Erre a célra kifejlesztettek egy új nyelvet, mellyel már nem csak egy egyszerű teásbögrét, de egy gőzölgő kávéscsészét is meg tudtak jeleníteni. A nyelvet a fejlesztés közben elfogyasztott kávé származási helyének tiszteletére Javának nevezték el.
A nyelv persze a gőzölgő kávéscsészénél többre képes, és ezt szeretnénk bemutatni ebben a könyvben, mely a programkönyvtárak és felhasználók számának növekedésével maga is megnőtt az előző kiadáshoz képest.


Tartalomjegyzék

 Útilap
 Bevezetés
1.Nyolc lap alatt a nyelv körül
1.1.Az első alkalmazás
1.2.Az első applet
1.3.Változók
1.4.Konstansok
1.5.Megjegyzések
1.6.Osztályok és objektumok
1.7.Metódusok és paraméterek
1.8.Megízhatóság
1.9.Biztonság
1.10.AWT
1.11.Grafika
1.12.Párhuzamosság
1.13.Swing
2.Az alapok
2.1.Karakterkészlet
2.2.Azonosítók
2.3.Egyszerű típusok
2.4.Literálok
2.5.Változódeklarációk
 Kezdeti érték
2.6.Tömbök
 Többdimenziós tömbök
 Tömbliterál
2.7.Felsorolási típusok
2.8.Operátorok
2.9.Típuskonverzió
2.9.1.Automatikus konverzió
2.9.2.Explicit konverzió
2.9.3.Szövegkonverzió
2.10.Mező, metódus elérése
3.Vezérlés
3.1.Utasítás és blokk
3.2.Elágazások
3.2.1.Egyszerű elágazás
3.2.2.Összetett elágazás
3.3.Ciklusok
3.3.1.Elöltesztelő ciklus
3.3.2.Hátultesztelő ciklus
3.3.3.Léptető ciklus
3.3.4.Bejáró ciklus
3.4.Feltétlen vezérlésátadás
3.4.1.Címkék
3.4.2.A break utasítás
3.4.3.A continue utasítás
3.4.4.Visszatérés
3.4.5.Goto?
4.Osztályok
4.1.Egy egyszerű példa
4.2.Példányváltozók
4.2.1.Változók deklarációja
4.2.2.Változók használata
4.3.Metódusok
4.3.1.Metódusok definíciója
4.3.2.Metódusok meghívása
4.3.3.A this pszeudováltozó
4.3.4.Metódusnevek túlterhelése
4.3.5.Fordítás közbeni adatfolyam-ellenőrzés
4.4.Objektumok használata
4.5.Hozzáférési kategóriák
4.5.1.Félnyilvános tagok
4.5.2.Nyilvános tagok
4.5.3.Privát tagok
4.5.4.Leszármazottban hozzáférhető tagok
4.6.Osztály szintű tagok
4.6.1.Osztályváltozók
4.6.2.Osztálymetódusok
4.7.A főprogram
4.8.Konstruktorok
4.8.1.Konstruktorok definíciója
4.8.2.Példányosítás paraméterekkel
4.9.Inicializáló blokkok
4.10.Destruktor jellegű metódusok
4.11.Öröklődés
4.11.1.Osztály kiegészítése új tagokkal
4.11.2.A konstruktorok és az öröklődés
4.11.3.Polimorfizmus
4.11.4.Példánymetódusok felüldefiniálása
4.11.5.A túlterhelés és az öröklődés viszonya
4.11.6.Osztálymetódusok elfedése
4.11.7.Változók elfedése
4.11.8.A protected hozzáférési kategória
4.11.9.Az osztályhierarchia
4.11.10.Absztrakt osztályok és metódusok
4.11.11.Végleges osztályok és metódusok
5.Interfészek
5.1.Az interfészek alapjai
5.2.Interfészek deklarációja
5.3.Interfészek implementálása
5.4.Interfészek használata deklarációkban
5.5.Interfészek kiterjesztése
5.6.Az interfészdeklaráció törzse
5.6.1.Konstansok
5.6.2.Absztrakt metódusok
5.7.Interfészek használata
6.Csomagok
6.1.Csomagok elemei
6.2.A csomagok leképezése
6.2.1.Fájlrendszerben tárolt csomagok
6.2.2.Adatbázisban tárolt csomagok
6.3.Fordítási egység
6.3.1.Csomagdeklaráció
Csomagdeklaráció
Névtelen csomagok
6.3.2.Importdeklarációk
Egyszerű típusimport-deklaráció
Igény szerinti típusimport-deklaráció
Statikus importdeklaráció
Automatikus importálások
6.3.3.Típusdeklarációk
6.4.Csomag létrehozása
6.5.Csomag névválasztása
6.6.A fejlesztői környezet csomagjai
6.7.Több fordítási egységet alkotó program kezelése
7.Kivételkezelés
7.1.A Java kivételkezelésének működése
7.1.1.Kivétel keletkezése
7.1.2.Megfelelő kivételkezelő keresése
7.2.A kivételkezelés alkalmazási köre
7.3.A kivételkezelés megvalósítása
7.3.1.A kivétel kiváltása
7.3.2.A kivétel elkapása
7.3.3.A kivétel specifikálása
7.4.Példa kivételkezelés megvalósítására
7.5.Kivételosztályok helye az osztályhierarchiában
7.6.A kivételkezelés előnyei
7.6.1.A hibakezelő kód jól elkülönül a tényleges kódtól
7.6.2.A hiba könnyen eljut oda, ahol azt kezelni kell
7.6.3.A hibatípusok csoportosítása
7.7.Az állítások
7.7.1.Az állítások típusai
Helyesség ellenőrzése tetszőleges ponton
Program haladásának kontrollálása
Elő- és utófeltételek, osztályinvariánsok
7.7.2.Az állítások használata
8.Generikusok
8.1.Motiváció
8.2.Célok
8.3.Típustörlés és nyers típusok
8.4.Típusbiztos gyűjtemény keretrendszer
8.5.Típusmegszorítás
8.6.Altípusok
8.7.Típushelyettesítők
8.8.Amire figyelni kell
8.8.1.Generikus new
8.8.2.Generikus tömbök
8.8.3.Felsorolási típusok
8.8.4.instanceof
8.8.5.A Class osztály
9.Java programok
9.1.Programfejlesztés
9.1.1.A Java 2 platform
9.1.2.Sun J2SE JDK
9.1.3.Verziószámok
9.1.4.Programfajták
9.2.A .java forrásfájlok
9.2.1.Unicode (native2ascii)
Az Unicode szabvány
Az UTF-32 kódolás
Az UTF-16 kódolás
Az UTF-8 kódolás
Módosított UTF-8 kódolás
9.3.Annotációk
9.3.1.Generátor annotációk (apt)
Az apt használata
Tükör API
9.3.2.Az APTTeszt példaprogram
ImplGeneralas.java
APTTeszt.java
9.4.Beágyazott dokumentáció (javadoc)
9.4.1.Dokumentációs stílus
9.4.2.Blokkleíró elemek
9.4.3.Speciális beágyazható elemek
9.4.4.Tagletek
9.4.5.Docletek
9.4.6.Dokumentált annotációk
9.4.7.Dokumentációs forrásfájlok
9.4.8.Generált fájlok
9.4.9.A TagletTeszt példaprogram
9.5.Fordítás
9.5.1.Fordítási annotációk
9.5.2.A javac fordítóprogram
9.6.A .class bájtkód fájlok
9.6.1.Visszafordítás (javap)
9.6.2.Bájtkód ellenőrzés
9.7.A .jar Java archívumok
9.7.1.A .jar fájlformátum
A META-INF könyvtár
A leírófájlok szerkezete
A MANIFEST.MF fájl
9.7.2.Verziókezelés
Csomagverziók
Archívumok lezárása
9.7.3.Opcionális kiegészítő csomagok (extcheck)
Verzióelőírás
Verzióellenőrzés
Automatikus telepítés
9.7.4.Támogatott csomagok
9.7.5.Digitálisan aláírt Java archívumok (jarsigner)
Az .SF leírófájlok
A digitális aláírás fájlok
A digitális aláírás ellenőrzése
A jarsigner segédprogram
9.7.6.A jar segédprogram
9.7.7.Archívumok optimalizálása (pack200)
GZIP
Pack200
A pack200 és unpack200 segédprogramok
9.8.A futtató rendszer
9.8.1.A java futtató
9.8.2.Keresési útvonal
Keresés a Java archívumokban
9.8.3.Bájtkód betöltés
Típusok inicializálása
Kezdeti osztálybetöltés optimalizálása
9.8.4.Dinamikus fordítás (HotSpot)
9.8.5.Memóriakezelés (szemétgyűjtés)
Automatikus szemétgyűjtés
9.8.6.A BajtkodTeszt példaprogram
9.9.Alkalmazások készítése
9.9.1.Alkalmazás indítása
9.9.2.Paraméterátadás
9.9.3.Felhasználói felület
9.9.4.Kommunikáció az operációs rendszerrel
9.9.5.Program befejezése
9.9.6.Az AlkalmazasTeszt példaprogram
9.10.Alkalmazások terjesztése
9.10.1.Java Hálózati Indítási Protokoll (JNLP)
9.10.2.A JNLP működése
9.10.3.A JNLP leíró fájl
9.10.4.A JNLP API
9.10.5.Java Web Start (javaws)
9.10.6.A JNLPTeszt példaprogram
A JNLPTeszt.jnlp leírófájl
A JNLPTeszt.java forrásfájl
9.11.Nyomkövetés (hibakeresés)
9.11.1.Interfész a virtuális géphez (JVMTI)
9.11.2.Teljesítménymérés (HPROF)
9.11.3.Hívási lánc kilistázása és holtpontkeresés
9.11.4.A NyomkovetesTeszt példaprogram
9.11.5.Külső nyomkövető programok (jdb)
A Java Platform Nyomkövetési Architektúrája (JPDA)
A jdb segédprogram
9.11.6.A NyomkovetesTesztNyomkoveto példaprogram
9.11.7.Ha elszáll/lefagy a JVM
9.12.Felügyeleti eszközök
9.12.1.Platformfelügyelet (javacpl)
A Java konzol
A Java vezérlőpult (javacpl)
9.12.2.JVM felügyeleti segédprogramok
9.12.3.Felügyeleti komponensek (JMX)
JMX komponensmodell
9.12.4.Távoli felügyelet (jconsole)
A jconsole felügyeleti program
10.A java.lang csomag
10.1.Az Object osztály
10.2.A Comparable interfész
10.3.Elemi típusok osztályba csomagolása
10.3.1.Az Integer osztály
Konstruktorok
Konverziók
érték lekérdezése
Rendszerjellemzők lekérdezése
10.3.2.Numerikus konstansok
10.3.3.Automatikus csomagolás
10.4.Sztringkezelés
10.4.1.A String osztály
Sztring létrehozása
Konverziók
Sztring tartalmának lekérdezése
Reguláris kifejezések
Egyéb, sztringekkel kapcsolatos műveletek
10.4.2.A StringBuffer és StringBuilder osztályok
10.5.A Math és StrictMath osztályok
10.6.Felsorolás típus
10.7.Rendszerszintű osztályok
11.Eszközök és nemzetközi programozás
11.1.A java.util csomag interfészei
11.1.1.A java.util.Enumeration interfész
11.1.2.A java.util.Observer interfész
11.2.A java.util csomag osztályai
11.2.1.Az Observable osztály
11.2.2.A BitSet osztály
11.2.3.Dátum- és időkezelés
11.2.4.Szótárak, hashtáblák, jellemzők
11.2.5.Adaptáció a környezethez
Környezetfüggő osztályok
Szövegelemek fordítása
Számok adaptációja
11.2.6.A Random osztály
11.2.7.A StringTokenizer osztály
11.2.8.A Timer és a TimerTask osztály
11.2.9.A Stack osztály
11.2.10.A Vector osztály
11.3.Reguláris kifejezések illesztése és helyettesítése
11.3.1.A Java reguláris kifejezései
Karakterosztályok és határminták
Csoportosítás
Alternatívák
Mennyiségi módosítók
11.3.2.Az API használata: illesztés és helyettesítés
12.Változó argumentumszámú metódusok
12.1.Korábbi módszerek
12.2.Az új szintaktikai elem
12.3.Kapcsolat a tömb típusú argumentumokkal
12.4.Túlterhelés
12.5.Hibalehetőségek
12.6.Egy alkalmazás: printf
13.Gyűjtemény Keretrendszer
13.1.Alapvető gyűjtemények és leképezések
13.1.1.Gyűjtemény
13.1.2.Halmaz
13.1.3.Lista
13.1.4.Sor
13.1.5.Leképezés
13.1.6.Rendezés
13.1.7.Rendezett halmaz
13.1.8.Rendezett leképezés
13.2.Generikus gyűjtemények
13.3.A Collections osztály
13.3.1.Burkoló implementációk
Szinkronizációs burok
Módosíthatatlansági burok
Típushelyességet ellenőrző burok
13.3.2.Algoritmusok
Rendezés
Rendezés megszüntetése
Megfordítás, feltöltés és másolás
Bináris keresés
Minimum- és maximumkeresés
Rotálás
Helyettesítés
Rész-lista keresése
Csere
Gyakoriság lekérdezése
Diszjunkt gyűjtemények
13.3.3.További hasznos műveletek
Többszörözés
Singleton gyűjtemények
Üres konstans gyűjtemények
Felsorolás listává alakítása
Tömeges elem-hozzáadás
Fordított összehasonlítás
13.4.Az Arrays osztály
13.5.Gyűjtemények a java.util.concurrent csomagban
13.5.1.A ConcurrentLinkedQueue osztály
13.5.2.A BlockingQueue interfész és megvalósításai
13.5.3.A ConcurrentMap interfész és megvalósítása
13.5.4.Másoló lista és halmaz
13.6.Saját implementációk
13.7.Felhasználás programkönyvtárakban
14.A bemenet és kimenet kezelése
Miről szól ez a fejezet?
14.1.Adatfolyamok
Bájt- és karakterfolyamok
Feladat szerinti csoportosítás
Szabványos be- és kimenet, valamint hibafolyam
14.1.1.Alapfunkciók
Adatfolyam megnyitása és lezárása
Kiíró műveletek
Olvasó műveletek
A könyvjelző-mechanizmus
További tudnivalók
Egy teljes példa
14.1.2.Az adatfolyamok adatainak tárolása
Fájlok
Csövek
Bájt- és karaktertömbök, sztringek
Bájtfolyam felett létrehozott karakterfolyamok
Adatfolyamok egymás után fűzése
14.1.3.Szűrők
A szűrők működési elve: delegálás és toldalékolás
Adatfolyamok bufferelése
Adattípus-értékek beolvasása és kiírása
Szöveges kiírás
A bemenet sorainak számolása
Adat visszatevése a bemenetre
Objektumok beolvasása és kiírása
14.1.4.Objektumok szerializációja
A Serializable interfész
Az Externalizable interfész
A tárolni kívánt adattagok kijelölése
Szerializációs jogosultságok
14.2.Közvetlen elérésű fájlok
14.3.A File osztály: kapcsolat a fájlrendszerrel
14.3.1.Könyvtárak kilistázása
14.3.2.A fájlokhoz való hozzáférés korlátozása
14.4.Szövegfeldolgozás
A beolvasott karakterek értelmezése
A tokenek előállítása
Egyéb műveletek
Számok beolvasása szövegfájlból
14.5.A Java módosított UTF-8 formátuma
14.6.Tömörítés: a java.util.zip csomag
14.7.Az új be- és kimenet könyvtár
14.7.1.A bufferek működése
14.7.2.Bufferek létrehozása
Tömb a buffer belsejében
Bufferek tartalmának megosztása
Különböző primitív típusok támogatása
Csak olvasható bufferek
Közvetlen és leképzett bufferek
14.7.3.Nem blokkoló IO
14.8.Példák gyakori feladatok megoldására
14.8.1.Számok olvasása szövegfájlból
14.8.2.Szövegfájlok kezelése
14.8.3.Adatok bináris formában
14.8.4.Többszálú szerver
14.8.5.Több kliens kiszolgálása egy szálon
15.Beágyazott osztályok
15.1.Tagosztályok
15.1.1.Statikus tagosztályok
Statikus tagosztályok alkalmazása
Taginterfészek
Tagosztályok és öröklődés
15.1.2.Nem statikus tagosztályok
Nem statikus tagosztályok alkalmazása
Többszörös nem statikus beágyazás
Hivatkozás a befoglaló példányokra
Nem statikus tagosztály kiterjesztése
A befoglaló felülírálása
Egyes Java implementációk korlátai
15.2.Lokális és névtelen osztályok
15.2.1.Lokális osztályok
A zárványozódás működése
15.2.2.Névtelen osztályok
Lokális és névtelen osztályok alkalmazása
16.Grafikus felhasználói felület
16.1.GUI
16.1.1.Grafikus komponensek
16.1.2.JFC
16.1.3.Az AWT megvalósítása
16.2.A felhasználói felület életciklusa
16.2.1.A FaktorialisGUI példaprogram
16.2.2.Felület felépítése
16.2.3.Felület használata
16.2.4.Felület bezárása
16.3.Eseményvezérelt programozás
16.3.1.Alacsonyszintű események
16.3.2.Beviteli események
Billentyűzet események
Egéresemények
Görgetőgomb események
16.3.3.Események feldolgozása
16.3.4.Események figyelése
Rendszerszintű események figyelése
16.3.5.Beviteli események figyelése
Billentyűzet események figyelése
Egéresemények figyelése
16.3.6.Az EsemenyTeszt példaprogram
16.4.Az AWT segédelemei
16.4.1.Kapcsolat az ablakozó rendszerrel
16.4.2.A ToolkitTeszt példaprogram
16.4.3.Megjelenítési hardverkörnyezet
16.4.4.Pozíció és méret reprezentálása
16.4.5.Alakzatok
16.4.6.Egérkurzor
16.4.7.Betűtípusok
16.4.8.Színkezelés
16.4.9.Képkezelés
16.4.10.Rajzolás
16.5.Grafikus komponensek
16.5.1.Grafikus megjelenítés
16.5.2.A PaintTeszt példaprogram
16.5.3.A CanvasPaintTeszt példaprogram
16.5.4.Konténerek
16.5.5.A komponensek "súlyossága"
16.5.6.A PehelyPaintTeszt példaprogram
16.5.7.Swing komponensek
16.6.Elrendezési stratégiák
16.6.1.A TesztLayout példa elrendezési stratégia
16.6.2.A LayoutTeszt példaprogram
16.6.3.Kézi elrendezési stratégia
16.6.4.A NullLayoutTeszt példaprogram
16.6.5.A CardLayout elrendezési stratégia
16.6.6.A BorderLayout elrendezési stratégia
16.6.7.A FlowLayout elrendezési stratégia
16.6.8.A GridLayout elrendezési stratégia
16.6.9.A GridBagLayout elrendezési stratégia
16.7.Fókuszkezelés
16.7.1.A központi fókuszkezelő
16.7.2.Billentyűzet események
16.7.3.Fókusz események
16.7.4.Fókuszléptetés
16.7.5.Fókusz megszerzése és elvesztése
16.7.6.A FokuszTeszt példaprogram
16.8.Felsőszintű AWT konténerek
16.8.1.Ablakok
16.8.2.Párbeszédablakok
Fájlkiválasztó dialógus
16.8.3.Az AblakTeszt példaprogram
16.9.AWT konténerek
16.9.1.Panel
16.9.2.Görgethető panel
16.9.3.A ScrollPaneTeszt példaprogram
16.10.AWT felületelemek
16.10.1.Canvas
16.10.2.Címke
16.10.3.A TobbSorosCimke példaprogram
16.10.4.Nyomógomb
16.10.5.Jelölőnégyzet/rádiógomb
16.10.6.A CheckboxTeszt példaprogram
16.10.7.Szövegmezők
16.10.8.Lista
16.10.9.Legördíthető lista
16.10.10.A ListaTeszt példaprogram
16.10.11.Görgetősáv
16.10.12.A ScrollbarTeszt példaprogram
16.11.AWT menük
16.11.1.Menü elemek
16.11.2.Menü konténerek
16.11.3.A MenuTeszt példaprogram
16.12.Az AWT további lehetőségei
16.12.1.Drag & Drop
áthúzási kezdeményezés figyelése
áthúzás indítása
áthúzás fogadása
Adatátvitel
Vágólap kezelés
16.12.2.A DnDTeszt példaprogram
16.12.3.Beviteli módszerek
Kliens oldal
Szerver oldal
16.12.4.Az IMTeszt példaprogram
16.12.5.Beviteli eszköztámogatás
16.12.6.Tesztelés
16.12.7.A RoboTeszt példaprogram
16.12.8.Biztonság
17.Párhuzamosság
17.1.Párhuzamosság a számítástechnikában
17.1.1.Folyamatok, szálak
17.1.2.Párhuzamosság és erőforrás-használat
17.1.3.Mikor alkalmazzunk szálakat?
17.2.Szálak használata
17.2.1.Hogyan készítsünk szálakat?
17.2.2.Hatékony szálindítás
17.2.3.Ütemezett szálindítás
17.2.4.Szálcsoportok
Számláló, listázó metódusok
Csoportot kezelő metódusok
A csoport szálaival foglalkozó metódusok
17.2.5.Démon szálak
17.2.6.Prioritások
17.2.7.Önző és udvarias szálak
17.2.8.Lokális szálváltozók
17.3.Szinkronizáció
17.3.1.Monitoros szinkronizáció
17.3.2.Szinkronizáció üzenetekkel
17.3.3.Szálak összekapcsolása
17.3.4.Zárolás
17.3.5.További eszközök
17.4.Védett változók
17.4.1.volatile változók
17.4.2.Atomi típusok
17.4.3.Szinkronizált adattárolók
17.4.4.Konkurens adattárolók
17.5.Futásvezérlés
17.5.1.Felfüggesztés
17.5.2.Megszakítás
17.5.3.Leállítás
17.6.Szálak állapotai
17.6.1.Futtatható és futó állapot
17.6.2.Blokkolt állapot
17.6.3.Várakozó állapot
17.6.4.Terminált állapot
17.7.Visszatekintés
18.Appletek
18.1.Applet beágyazása
18.1.1.A HTMLConverter segédprogram
18.2.Applet futtatása
18.2.1.A Java Plug-in
Appletek gyorsítótárazása
18.2.2.Az appletviewer segédprogram
18.2.3.Keresési útvonal
18.3.Appletek megvalósítása
18.3.1.Indítás
Beágyazó környezet
Paraméterkezelés
18.3.2.Appletinformációk lekérdezése
18.3.3.Egy applet életciklusa
18.3.4.Grafikus felhasználói felület
18.3.5.Az EletciklusTeszt példaprogram
18.3.6.Saját programszálak használata
18.3.7.Az AppletPaintTeszt példaprogram
18.4.Applet kommunikációja a böngészővel
18.4.1.A böngészőprogram elérése
18.4.2.Kép és hang kezelése
Java audio
18.4.3.A HipermediaTeszt példaprogram
18.4.4.Kommunikáció appletek között
18.4.5.A KommunikacioTeszt példaprogram
18.4.6.JavaScript elérése
JSObject
DOM elérési API
18.5.Appletek biztonsági megkötései
18.5.1.Digitálisan aláírt appletek
19.Java2D
19.1.Az 1.1-es Javával való kompatibilitás
19.2.Rajzolás a Graphics2D osztállyal
19.2.1.Az attribútumok
19.2.2.A rajzolás folyamata
19.2.3.A megjelenítésre használt eszközök
19.3.A Graphics2D attribútumai
19.3.1.A rajzolás minőségének beállítása
19.3.2.Kontúr
19.3.3.Kitöltés
19.3.4.Kombinálás
19.3.5.Vágás
19.3.6.Affin transzformációk
Matematikai alapfogalmak
Az affin transzformációk használata
19.4.Alakzatok
19.4.1.Az egyszerű elemek és az iterátorok
19.4.2.CAG, halmazműveletek
19.4.3.Befoglaló téglalapok, találatvizsgálat
19.4.4.Egyedi alakzatok létrehozása
19.5.Szövegmegjelenítés
19.5.1.Betűtípusok
19.5.2.A szövegmegjelenítés folyamata
A szöveg létrehozása
A szöveg sorrendisége
A szöveg mérésének és pozícionálásának problémái
19.5.3.Egy- és kétirányú szövegek megjelenítése
19.5.4.Többsoros szövegek megjelenítése
19.5.5.Képek elhelyezése a szövegben
19.5.6.Találatok kezelése
19.5.7.Kurzorok megjelenítése és mozgatása
19.5.8.Szövegek kijelölése
19.5.9.Textúrázott betűtípusok használata
19.5.10.Új betűtípus készítése
19.5.11.Betűtípusok dinamikus betöltése
19.5.12.Alapfogalmak
19.6.Színkezelés
19.6.1.A ColorSpace osztály
19.6.2.A Color osztály
19.7.Képkezelés
19.7.1.Alapfogalmak
19.7.2.A BufferedImage és a virtuális képernyők
19.7.3.A Raster osztály használata
19.7.4.A DataBuffer és a SampleModel osztályok
19.7.5.A ColorModel osztály használata
19.7.6.Egy egyszerű példa
19.7.7.Szűrők
Konvolúció
Keresési táblázatok
19.8.Nyomtatás
19.8.1.Visszahívásos nyomtatási modell
19.8.2.A nyomtatás részei
A jobok vezérlése
A nyomtatási képek elkészítése
19.8.3.Egyszerű dokumentumok nyomtatása
19.8.4.Összetett dokumentumok nyomtatása
19.8.5.Nyomtatáshoz kapcsolódó párbeszéd ablakok
19.9.Angol-magyar szótár
20.Önelemzés
20.1.Bevezetés
20.2.áttekintés
20.3.Egy rövid példa
20.4.Felderítés
20.4.1.Osztály
20.4.2.Tömb
20.4.3.Primitív típusok
20.5.Beavatkozás
20.5.1.Adattagok megváltoztatása
20.5.2.Metódusok meghívása
20.6.Helyettesítés
20.6.1.Szelektív nyomkövetés
20.6.2.A nyomkövetés megvalósítása
20.6.3.További ötletek
20.7.Adatkonverzió
20.7.1.Csomagolás
20.7.2.Bővítés
20.8.Biztonsági követelmények
20.9.Egy nagyobb példa
21.Hálózatkezelést támogató alaposztályok
21.1.A hálózat modellje
21.2.Az IP-címek és az útvonalkijelölés
21.3.A hálózati kapcsolat modellje
21.3.1.Összeköttetés-alapú kapcsolatok
21.3.2.Összeköttetés-mentes kapcsolatok
21.3.3.A kommunikáció további kérdései
21.4.A hálózatkezelési osztályok
21.5.Összeköttetés-alapú kommunikáció Javában
21.6.Összeköttetés-mentes kommunikáció Javában
21.7.Kommunikációs végpont opciók
21.8.Hálózati kommunikációs bufferek mérete
21.9.Adatfolyam lezárásának jelzése
21.10.Internetcímek - A DNS tartomány-hierarchiája
21.11.Internetcímek kezelése
21.12.Több hálózati kártyával ellátott számítógépek
21.13.Csoportkommunikáció
21.14.A Java 2 biztonsági vonatkozásai
21.15.Kapcsolódás SOCKS hálózati tűzfalakhoz
21.16.Származtatás a hálózatkezelési osztályokból
21.16.1.Alkalmazkodás a helyi hálózati tűzfalakhoz
21.16.2.Más transzport protokollok elérése
21.17.Példaprogramok
21.17.1.Összeköttetés-alapú szerveralkalmazás
21.17.2.Összeköttetés-alapú kliensalkalmazás
21.17.3.Összeköttetés-mentes szerveralkalmazás
21.17.4.Összeköttetés-mentes kliensalkalmazás
21.17.5.Egy multicast-csomagokat fogadó alkalmazás
21.17.6.Egy multicast-csomagokat küldő alkalmazás
21.17.7.Megízhatóság biztosítása
22.Internet- és WWW-objektumok elérése
22.1.Egységes erőforrásnevek, nevek rendszere
22.2.Hálózati erőforrások URL-azonosítói
22.3.Az URL osztály
22.4.Az URI osztály
22.5.Az URLConnection osztály
22.6.JAR fájlok hálózati elérése
22.7.A HTTP protokoll és alkalmazásai
22.7.1.A MIME-szabvány
22.7.2.A HTTP protokoll architektúrája
22.7.3.HTTP-fejlécmezők
22.7.4.CGI-programok és a servletek
22.7.5.A HttpURLConnection osztály
22.8.Az elért WWW erőforrások tartalma
22.8.1.Protokollkezelő osztályok felépítése
22.8.2.A Java platform bővítése új protokollkezelővel
22.8.3.Tartalomkezelő osztályok
22.8.4.A Java platform bővítése új tartalomkezelővel
22.9.HTML űrlapok működése - alapok
22.9.1.A HTML-űrlapok és működésük
22.9.2.A Java servletek és a HTTP protokoll
 Tárgymutató


Bevezetés

Az Olvasó már bizonyára hallott az Internetről és a World Wide Web-ről, a ma legdinamikusabban fejlődő kommunikációs és információs hálózatról. A Java programozási nyelv egy fejlődő, objektumorientált programozási technológia, amely lehetővé teszi hordozható interaktív alkalmazások készítését. Itt a hordozhatóság nemcsak a forrásprogram új architektúrákra történő problémamentes átvitelét jelenti, hanem a lefordított "gépi kódú" tárgyprogram korlátozások nélküli hordozhatóságát is.
A Java mögött lévő technológia jó néhány komponense már évtizedes múltra tekinthet vissza; a professzionális szoftverfejlesztők már régóta használhatták ezeket szoftvertermékeikben. A Java tervezői ezen eszközöket és szabványokat integrálták egy rendszerbe. A Java technológia jelentőségét tehát abban kell keresni, hogy már kikristályosodott szabványokat, eszközöket foglal egy rendszerbe, ezáltal elérhetővé téve azt bárki számára. Ezt a technológia-népszerűsítő szerepet az is segíti, hogy a programok írásához szükséges fejlesztői eszközök (fordítóprogram, futtató környezet és segédprogramok), valamint ezek dokumentációja bárki számára szabadon elérhető.
A Java egy objektumorientált eszközkészletből építkező programozási nyelv. Ma az objektumorientált szoftverfejlesztés, illetve ennek különféle módszertanai és eszközei igen elterjedtek. Mint a programozásról általában, erről is elmondható, hogy nem lehet csupán osztályteremben, tábláról elsajátítani, gyakorlati ismeretek megszerzésére is szükség van. Eddig erre leginkább az objektumorientált programozási nyelvek nyelvi eszközein keresztül volt lehetőség, mivel az igazán nagyméretű programok, illetve programrendszerek rendszerterveihez elég nehéz (oktatási célokra szinte lehetetlen) hozzáférni.
A Java technológia e téren is nagy segítséget nyújthat a benne levő szabványos könyvtárak, illetve komponensek szabad elérhetőségével, ugyanis ezeken keresztül jól megtervezett és felépített objektumorientált eszközökhöz férhet hozzá bárki. Azon túl, hogy ezek önmagukban is megállják a helyüket, úgy is érdemes őket vizsgálni, mint régóta létező - még nem objektumorientált szemlélettel megtervezett - szabványos eszközök objektumorientált köntösbe bújtatott változatait. Manapság a szoftverfejlesztők egyre gyakrabban találkoznak azzal a problémával, hogy a korábban procedurális tervezési elvekkel kialakított szoftvereszközeiket tovább szeretnék használni a modern fejlesztői környezetekben: a Java szabványos csomagjain keresztül tanulmányozhatjuk, hogy ezt a feladatot a Java tervezőinek hogyan és milyen kompromisszumok árán sikerült megoldaniuk.

A könyvünkben megcélzott olvasókör

Könyvünkkel elsősorban a számítástechnikai és informatikai témákkal foglalkozó szakemberek, valamint a felsőfokú tanulmányaik keretein belül ezen témakörökkel foglalkozó egyetemi és főiskolai hallgatók munkáját szeretnénk megkönnyíteni. Feltételezünk bizonyos mennyiségű informatikai előismereteket olvasóinktól: így legalább egy másik (például C, C++ vagy Modula-2) programozási nyelv ismeretét, valamint azt is, hogy ténylegesen írt is már programokat valamilyen más programozási nyelven, és ismer egy szövegszerkesztő programot, mellyel a programok forráskódját a számítógépbe tudja írni.
Reméljük, hogy mindazok is haszonnal forgatják majd könyvünket, akik a nyílt rendszerek vagy a Java témakörében keresnek szakdolgozati vagy diplomamunka-témákat, és bízunk benne, hogy az itt leírtak újabb ötleteket adnak kutatásaikhoz.

Újdonságok az előző kiadáshoz képest

Míg a könyvünk előző kiadásában a kiadás időpontjában aktuálisnak tekinthető Java 1.3 szabvány elemeinek ismertetését tűztük ki célunknak, addig ebben az újabb kiadásban már a szabvány egy újabb, 1.5-ös verziószámot, illetve újabban már Java 2 SE 5 nevet viselő változata főbb elemeinek bemutatása a célunk. A Java 2-es változat megjelenésével a Java szabvány komponensei olyan mértékben megszaporodtak, hogy a könyvet nagy terjedelme miatt több kötetre kellett szétbontani. A korábban nyomtatott formában is megjelent referencia részeket a továbbiakban a könyv weblapjáról lehet ingyenesen letölteni. Ezt a lépést azért tettük meg, hogy az abban leírt információk minél szélesebb körben és minél hatékonyabban terjedhessenek.
A viszonylag nagy terjedelem lehetővé tette a Java 2 szabvány lényeges és legújabb komponenseinek a korábbi kiadásokhoz képest részletesebb ismertetését, bár a szabvány nagymértékű bővülése néhol itt is megkövetelte egyfajta "fontossági" sorrend kialakítását, amely szerint dönteni lehet arról, hogy az egyes eszközöket milyen mélységben tárgyaljuk a rendelkezésünkre álló kereten belül.
A könyvnek ebben a kiadásában az Olvasó számos tematikus és tartalmi újítást is találhat. Elsők közt említjük a generikus típusokat (amikor egy osztályt adattípussal paraméterezünk). Másik mindenki számára érdekes újításunk, hogy a grafikus felhasználói felületek készítésére szolgáló AWT mellett már a Swinget is komolyan alkalmazzuk.
Említést érdemel még az új, a Java nyelv használatát beágyazott eszközökön (például ilyen képességekkel rendelkező mobiltelefonon) bemutató fejezet.
A Java nyelv eszközeinek ismertetése mellett áttekintést adunk két objektum-orientált szoftvertervezési módszertanról is, melyek segítségével szisztematikusan elkészíthetjük különféle problémák objektumorientált eszközökre épülő megoldását, a megoldást támogató osztályhierarchiát és ennek a Java - vagy más objektumorientált - nyelvre történő leképezési módszerét. A két módszer egyike a tervezési mintákra, a tipikus problémák megoldása során szerzett általános tapasztalatokra, míg a másik egy probléma specifikációjának elemzésére és annak alapján egy program elkészítésére épít.
A könyv tárgyal továbbá a kezdők számára talán kevéssé érdekes, de a haladóknak esetenként nagyon hasznos témaköröket is, mint az önelemzés, amely segítségével Java programok saját belső szerkezetüket, lehetőségeiket térképezhetik fel futásidőben.

A Java nyelv elsajátítása

A könyv mérete az első kiadáshoz képest megtöbbszöröződött, ami jól jellemzi magának a nyelvnek a fejlődését, a szabványos osztálykönyvtárak méretének az alakulását is. Ennek köszönhetően a Java elsajátítása a fogalmak mély megértése miatt komoly szellemi és időbeli ráfordítást igényel. Eddigi tapasztalataink alapján azt ajánljuk az Olvasónak, hogy ha teheti, kérjen a munkahelyén 2 hét fizetett szabadságot, és ezalatt otthon vagy munkahelyén nyugodtan tanulmányozza át ezt a könyvet, esetleg, ha ideje engedi, a könyvben levő példaprogramok mellett próbálgassa azok kibővítését is, hiszen így lehet minél rövidebb idő alatt jártasságot szerezni a nyelv használatában!
A Java elsajátítása során a legtöbbet a szabványos osztálykönyvtárral kell foglalkoznunk. Míg ciklust szervezni, elágazásokat írni - vagy éppen adatokat a konzolon hatékonyan megjeleníteni egyetlen nap alatt is megtanulhatunk, addig az osztálykönyvtár olyan mély megismerésére, hogy pontosan tudjuk mi mit csinál - milyen körülmények között és hogyan használható, hetek és hónapok szükségesek. Például vannak osztályok, amelyek eleve úgy lettek megírva, hogy párhuzamos környezetben helyesen dolgoznak: tartalmazzák a szükséges szinkronizációs mechanizmusokat. Bizony korábbi projektjeimben láttam olyan programozókat, akik nem tudták ezt - és ezért raktak köréjük felesleges szinkronizációs burkot. A kódjuk értéke ezáltal rengeteget csökkent (ugyan ki tudja majd 2 év múlva, hogy van-e valami alapos oka a második szinkronizációs buroknak - vajon mennyi idő fog majd elmenni, mire a kód akkori karbantartója rájön arra, hogy egyszerűen arról van szó, hogy a korábbi programozó szakmailag nem állt a helyzet magaslatán).

Olvasói visszajelzések

Egy ilyen nagy terjedelmű könyvben, annak ellenére, hogy a szerzők és a szerkesztők a legjobb tudásuk szerint állították össze, előfordulhatnak hibák. Megkérjük az Olvasót, ha ilyet talál, akkor ezt írja meg elektronikus levélben a javamegj@java.inf.elte.hu címre. A szerzők minden konstruktív kritikát örömmel fogadnak.
Továbbá minden érdeklődő szíves figyelmébe ajánljuk a könyv java.inf.elte.hu címen elérhető honlapját.

Köszönetnyilvánítások

A szerzők ezúton köszönik meg Horváth Zoltánnak, Csárdy Gábornak és Steingart Ferencnek a könyv elkészítéséhez használt LaTeX stílus kialakításánál nyújtott segítségüket.
A könyv megírása során szabadon felhasználhattuk, és fel is használtuk az ELTE Informatikai Karának infrastruktúráját. E nélkül ez a könyv nem készülhetett volna el. Ezért köszönjük Kozma László dékán úr ilyen irányú támogatását.


Copyright ©2008, Antal György, Balázs Iván József, Csepregi Szabolcs, Csizmazia Balázs, Csonka Ferenc, Csontos Péter, Dezső András, Dezső Balázs, Dévai Gergely, Fodor Szabina, Fornai Péter, Frohner Ákos, Kégli Zoltán, Kitlei Róbert, Kozsik Tamás, Lakatos Attila, Mészáros Mónika, Nyékyné Gaizler Judit, Pécsy Gábor, Porkoláb Zoltán, Riskó Gergely, Salamon András, Selmeci Attila, Szabó Richárd

Minden jog fenntartva.

Nyolcadik átdolgozott, bővített kiadás, 2008 december

A Szerzők és a Kiadó e könyv tartalmi és formai összeállítása során a legjobb tudásuk szerint jártak el. Ennek ellenére nem zárható ki, hogy a könyvben előfordulnak hibák. A könyv, illetve a benne levő ismeretanyag használatából közvetlen vagy közvetett módon származó károkért sem a Szerzők, sem pedig a Kiadó nem vállal felelősséget.

Ezen kiadvány egészének vagy egy részének a másolása, reprodukálása (bármilyen formában), valamint lefordítása más nyelvekre kizárólag a Kiadó előzetes írásbeli hozzájárulásának birtokában engedélyezett.

A UNIX az X/Open bejegyzett védjegye.
A Java a Sun Microsystems, Inc. védjegye.
A Windows a Microsoft, Corp. védjegye.
A könyvben előforduló más védjegyek nevei nagy kezdőbetűkkel vannak írva, ha a Kiadónak tudomása van az adott védjegyről.

Összkiadás: ISBN 978-963-06-4092-3 ö
I. kötet: ISBN 978-963-06-4093-0

Kiadó: ELTE TTK Hallgatói Alapítvány
   Budapest
A könyv szerkesztése és szedése LaTeX-ben készült
Nyomtatta és kötötte az EFO Nyomda.
   Felelős vezető: Fonyódi Ottó
Borítóterv: Ruszkai Gábor
Példányszám: 3000.