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.
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
1.5.Megjegyzések
1.6.Osztályok és objektumok
1.7.Metódusok és paraméterek
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.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.2.Példányváltozók
4.2.1.Változók deklarációja
4.3.Metódusok
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.2.Osztálymetódusok
4.8.Konstruktorok
4.8.2.Példányosítás paraméterekkel
4.10.Destruktor jellegű metódusok
4.11.Öröklődés
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.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
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ó
Statikus importdeklaráció
Automatikus importálások
6.5.Csomag névválasztása
6.6.A fejlesztői környezet csomagjai
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.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.5.Kivételosztályok helye az osztályhierarchiában
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.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.1.Motiváció
8.2.Célok
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.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
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.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.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.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)
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.5.Külső nyomkövető programok (jdb
)
A Java Platform Nyomkövetési Architektúrája (JPDA
)
A jdb
segédprogram
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.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.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.7.Rendszerszintű osztályok
11.1.A java.util csomag interfészei
11.1.2.A java.util.Observer interfész
11.2.A java.util csomag osztályai
11.2.4.Szótárak, hashtáblák, jellemzők
11.2.5.Adaptáció a környezethez
Számok adaptációja
11.2.6.A Random 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.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.1.Alapvető gyűjtemények és leképezések
13.1.4.Sor
13.1.5.Leképezé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
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
További tudnivalók
Egy teljes példa
14.1.2.Az adatfolyamok adatainak tárolása
Fájlok
Csövek
A szűrők működési elve: delegálás és toldalékolás
Adattípus-értékek beolvasása és kiírása
Objektumok beolvasása és kiírása
A Serializable interfész
Az Externalizable interfész
A tárolni kívánt adattagok kijelölése
Szerializációs jogosultságok
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 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.1.A bufferek működése
14.7.2.Bufferek létrehozása
Tömb a buffer belsejében
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
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
Többszörös nem statikus beágyazás
Hivatkozás a befoglaló példányokra
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
15.2.2.Névtelen osztályok
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.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.4.Az AWT segédelemei
16.4.1.Kapcsolat az ablakozó rendszerrel
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.4.Konténerek
16.5.5.A komponensek "súlyossága"
16.5.7.Swing komponensek
16.6.Elrendezési stratégiák
16.6.3.Kézi elrendezési stratégia
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.8.Felsőszintű AWT konténerek
16.8.1.Ablakok
16.8.2.Párbeszédablakok
Fájlkiválasztó dialógus
16.9.AWT konténerek
16.9.1.Panel
16.9.2.Görgethető panel
16.10.AWT felületelemek
16.10.1.Canvas
16.10.2.Címke
16.10.4.Nyomógomb
16.10.5.Jelölőnégyzet/rádiógomb
16.10.7.Szövegmezők
16.10.8.Lista
16.10.9.Legördíthető lista
16.10.11.Görgetősáv
16.11.AWT menük
16.11.1.Menü elemek
16.11.2.Menü konténerek
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.3.Beviteli módszerek
Kliens oldal
Szerver oldal
16.12.5.Beviteli eszköztámogatás
16.12.6.Tesztelés
16.12.8.Biztonsá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.3.Ütemezett szálindítás
17.2.4.Szálcsoportok
17.3.1.Monitoros szinkronizáció
17.3.3.Szálak összekapcsolása
17.3.5.További eszközök
17.4.Védett változók
17.4.1.volatile változók
17.4.3.Szinkronizált adattárolók
17.4.4.Konkurens adattárolók
17.5.Futásvezérlé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.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.6.Saját programszálak használata
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.4.Kommunikáció appletek között
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.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
Matematikai alapfogalmak
Az affin transzformációk használata
19.4.Alakzatok
19.4.1.Az egyszerű elemek és az iterátorok
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.7.Kurzorok megjelenítése és mozgatása
19.5.11.Betűtípusok dinamikus betöltése
19.5.12.Alapfogalmak
19.6.Színkezelés
19.6.2.A Color osztály
19.7.Képkezelés
19.7.1.Alapfogalmak
19.7.3.A Raster osztály használata
19.7.5.A ColorModel osztály használata
19.7.7.Szűrők
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.4.Összetett dokumentumok nyomtatása
19.9.Angol-magyar szótár
20.1.Bevezetés
20.2.áttekintés
20.4.Felderítés
20.4.1.Osztály
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.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
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.7.Megízhatóság biztosítása
22.1.Egységes erőforrásnevek, nevek rendszere
22.2.Hálózati erőforrások URL-azonosítói
22.4.Az URI 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ó
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).
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.