Benkő Tibomé Tóth Bertalan Együtt könnyebb a programozás Java LEKTOR Kuzmina Jekatverina C0MPUTERB00KS BUDAPEST, 2006 A Könyv készítése során a Kiadó és a Szerzők a legnagyobb gondossággal jártak el. Ennek ellenére hibák előfordulása nem kizárható. Az ismeretanyag felhasználásának következményeiért sem a Szerzők, sem a Kiadó felelősséget nem vállalnak. Minden jog fenntartva. Jelen könyvet vagy annak részleteit a Kiadó engedélye nélkül bármilyen formában vagy eszközzel reprodukálni, tárolni és közölni tilos. © Benkő Tibomé, Tóth Bertalan, 2005. A Sun Microsystems, a Java, a JVM, a JDK és a J2SE a Sun Microsystems, Inc. márkajelei, A Borland és a JBuilder a Borland Software Corporation bejegyzett márkajelei, Az Adobe és a Reader az Adobe Systems Incorporated bejegyzett márkajelei. Első kiadás, 2005. november ISBN : 963 618 337 6 ©Kiadó: ComputerBooks Kiadó Kft. 1126 Budapest, Tartsay Vilmos u. 12. Telefon: 375-1564, Tel/Fax: 375-3591 E-mail: [email protected] http://www.computerbooks.hu Felelős kiadó: ComputerBooks Kft Ügyvezetője Borítóterv: Székely Edith Nyomdai munkák: Pressman Nyomdaipari Bt. Tartalomjegyzék Előszó............................................................................................................................1 Bevezetés a Java világba............................................................................................3 1. A Java alkalmazások szerkezete..........................................................................13 1.1 Egyszerű Java alkalmazás.................................................................................13 1.2 Szöveg írása a képernyőre.................................................................................14 1.3 Az osztályok dokumentálása.............................................................................15 2. Alaptípusok, változók és konstansok....................................................................17 2.1 A Java nyelv primitív típusai.............................................................................17 2.2 Szabványos bement és kimenet.........................................................................18 2.2.1 Képernyőn való megjelenítés.................................................................18 2.2.2 Beolvasás billentyűzetről........................................................................19 2.2.3 Karakter beolvasása billentyűzetről........................................................20 2.3 Konstansok a Java nyelvben.............................................................................20 2.4 Értékadás..........................................................................................................21 2.5 Java függvények (metódusok) hívása...............................................................22 2.5.1 Matematikai függvények........................................................................23 3. Operátorok és kifejezések......................................................................................25 3.1 Aritmetikai operátorok.....................................................................................25 3.2 Precedencia és asszociativitás..........................................................................26 3.2.1 A precedencia-szabály............................................................................27 3.2.2 Az asszociativitás szabály.......................................................................29 3.3 Értékadó operátorok.........................................................................................29 3.4 Léptető (inkrementáló/dekrementáló) operátorok.............................................30 3.5 Bitműveletek......................................................................................................31 3.5.1 Biteltoló műveletek.................................................................................33 3.6 Konstansok használata......................................................................................34 4. A Java nyelv utasításai...........................................................................................35 4.1 Utasítások és blokkok........................................................................................35 4.2 Szelekciós utasítások.........................................................................................35 4.2.1 Relációs műveletek és logikai operátorok..............................................35 4.2.2 A feltételes operátor...............................................................................36 4.2.3 Az if utasítás...........................................................................................37 4.2.4 A switch utasítás.....................................................................................42 4.3 Ciklusutasítások................................................................................................44 4.3.1 A while ciklus......................................................................................44 1 TARTALOMJEGYZÉK 4.3.2 A fór ciklus.................................. 45 4.3.3 A do־while ciklus...................................................................................46 4.3.4 A break és a continue utasítások............................................................49 5. Tömbök használata...............................................................................................55 5.1 Tömbök definíciója..........................................................................................55 5.2 Egydimenziós tömbök......................................................................................55 5.3 Többdimenziós tömbök....................................................................................60 6. Metódusok...............................................................................................................65 6.1 A metódusok definiálása..................................................................................65 6.2 Különböző típusú paraméterek.........................................................................67 6.2.1 Primitív típusú paraméterek...................................................................67 6.2.2 Tömbtípusú paraméterek.......................................................................70 6.3 Metódusok túlterhelése....................................................................................74 7. Osztályok és objektumok..................................................................... 77 7.1 Adatmezők, metódusok és a this hivatkozás....................................................78 7.2 Statikus osztálytagok alkalmazása, osztályok elhelyezése...............................80 7.3 Objektumok létrehozása - konstruktőrök..........................................................82 7.4 Az osztálytagok és az osztályok elérésének szabályozása................................88 7.5 Objektum és objektumtömb típusú metódusparaméterek................................98 7.6 Csomagok (package) készítése, importálása...................................................101 7.7 Kivételkezelés.................................................................................................104 8. Öröklés...................................................................................................................113 8.1 Egyszeres öröklés és a polimorfizmus............................................................114 8.2 Absztrakt metódusok és osztályok..................................................................122 8.3 Interfészek (interface)......................................................................................126 8.4 Végleges (final) osztályok...............................................................................131 8.5 OOP a gyakorlatban........................................................................................132 9. A Java 2 API általános osztályai........................................... 139 9.1 Primitív típusú adatok objektumokként való kezelése....................................139 9.2 Szövegek kezelése...........................................................................................143 9.2.1 A String osztály....................................................................................143 9.2.2 A StringBuffer osztály..........................................................................149 9.2.3 A StringTokenizer osztály....................................................................154 9.3 Állományok kezelése.......................................................................................157 9.3.1 A Fiié osztály használata......................................................................159 9.3.2 A RandomAccessFile osztály alkalmazása...........................................162 9.3.3 A FileOutputStream és a FilelnputStream osztályok használata..........164 9.4 Adattároló osztályok........................................................................................167 9.4.1 Általánosított osztályok......................................................................167 ii TARTALOMJEGYZÉK 9.4.2 A konténerosztályok használata........................................................168 9.5 Többszálúság - a Thread osztály..................................................................178 10. Grafikus felületű alkalmazások.......................................................................183 10.1 A grafikus felület felépítésének alapelvei.....................................................185 10.1.1 Színekés betűtípusok.........................................................................185 10.1.2 Az alkalmazás ablaka, a Frame osztály.............................................187 10.2 Az AWT komponensek kezelése...................................................................190 10.2.1 Alapvezérlők.......................................................................................190 10.2.2 A komponensek elrendezése...............................................................195 10.2.3 Események kezelése...........................................................................199 10.2.4 Komponensek használata alkalmazásokban.......................................203 10.2.5 Párbeszédablakok kialakítása.............................................................207 10.3 Swing komponensek alkalmazása................................................................215 10.3.1 Alapvezérlők......................................................................................216 10.3.2 Komponensek használata alkalmazásokban.......................................223 10.3.3 Összetett fájlkezelő Swing-alkalmazások...........................................245 11. Grafika programozása.......................................................................................257 11.1 Grafikus megjelenítés AWT és Swing környezetben...................................257 11.2 A grafikus környezet (context) állapotváltozói.............................................258 11.3 Grafikus primitívek.......................................................................................260 11.4 Grafika programozott megjelenítése............................................................262 11.5 Multimédiás elemek.....................................................................................280 11.5.1 Képek betöltése és megjelenítése.......................................................280 11.5.2 Hang megszólaltatása........................................................................289 11.6 A Java2D grafika rövid áttekintése...............................................................295 12. Kisalkalmazások (appletek)...............................................................................301 12.1 Az appletek felépítése...................................................................................301 12.1.1 A kisalkalmazás osztályának deklarálása....................... 302 12.1.2 A főosztály konstruktora.....................................................................303 12.1.3 Az init() és a destroy() metódusok.....................................................303 12.1.4 A start() és a stop() metódusok - a kisalkalmazás indítása, megállítása..........................................................................................304 12.1.5 A paint() - az applet grafikus megjelenítése.....................................304 12.1.7 Az applet a HTML-dokumentumban..................................................305 12.1.8 A példaapplet tesztelése a böngészőben............................................305 12.2 Az appletek paraméterezése..........................................................................306 12.3 Az applet és alkalmazás egyben....................................................................309 12.4 Komponensek használata appletekben..........................................................311 12.4.1 AWT komponensek használata.................... 311 12.4.2 Swing komponensek használata.........................................................321 iii TARTALOMJEGYZÉK 12.5 Grafika alkalmazása az appletekben.............................................................340 12.6 Hangok..........................................................................................................356 12.7 Internet...........................................................................................................357 12.8 Animációk....................................................................................................359 13. Algoritmusok programozása (CD).................................................................369 FI. Hasznos táblázatok................................. 371 Fl.l Java kulcsszavak..........................................................................................371 FI.2 Primitív adattípusok.....................................................................................371 FI.3 Escape karakterkódok..................................................................................372 FI.4 Operátorok precedenciája............................................................................372 FI.5 Java módosítók..............................................................................................373 FI.6 Az Object osztály metódusai........................................................................374 F2. A Java 2 Platform elemei.................................................................................377 F2.1 A Java 2 Platform leggyakrabban használt csomagjai.................................377 F2.2 A java.lang.Math osztály statikus tagjai.......................................................378 F2.3 AWT-események és kezelésük.....................................................................380 F2.4 A JDK segédprogramjai...............................................................................381 F2.4.1 A JDK Windows alatti telepítésekor kialakuló könyvtárstruktúra....381 F2.4.2 Gyakrabban használt parancssor programok......................................381 F3. A JBuilder 2005 Foundation használata..........................................................383 Irodalomjegyzék.................................................... 387 Tárgymutató.............................................................................................................389 ív Előszó A Java nyelv 2005. május 23-án ünnepelte 10. születésnapját. A 10 esztendő alatt ez az egyszerű programozási nyelv a világ egyik felét meghatározó technológiává nőtte ki magát. Ahhoz azonban, hogy a valós igényeknek megfelelő megoldások szüléssé- nek, nem elegendő az a professzionális osztálygyűjtemény, amely a Java 2 platformo- kon keresztül (J2SE, J2EE) rendelkezésünkre áll. Minden technológiai megoldás fel- tételezi a Java nyelv alapjainak és alapvető osztályainak (Java API) készségszintű ismeretét. A legtöbb magyar nyelven megjelent Java szakkönyv nagyvonalúan kezeli ezeket a részeket, és a különböző Java technológiákra helyezi a hangsúlyt. Mások a Java nyel- vet csupán eszköznek tekintik ahhoz, hogy az objektum-orientált programozást ma- gyarázzák, megint mások pedig az UML leírónyelvvel kapcsolják össze. Az eredmény - amit az oktatási tapasztalatunk is igazol hogy a gazdag szakkönyvkínálat ellenére a kezdő programozók nehezen sajátítják el a Java nyelvet. Az ,Együtt könnyebb a programozás - Java" könyv az alapoktól indulva, a szöveges és grafikus felületű alkalmazásokon át, a HTML-oldalakba ágyazott kisalkalmazások fejlesztéséig viszi el az Olvasót. Innen kezdve azonban ״átengedjük a terepet” a már említett műveknek. A könyv fejezetei az ״Együtt könnyebb a programozás” sorozat filozófiájának meg- felelően, egy rövid elméleti összefoglalót követően, részletesen magyarázott példák sorával segíti az ismeretek elsajátítását. A CD-mellékleten a könyv példáin túlmenően egy tudásfelmérő alkalmazás, és néhány Java kérdéssor is megtalálható. Reményeink szerint a könyv feldolgozását követően az Olvasó magabiztosan készít grafikus felületű Java alkalmazásokat és appleteket. Ehhez kívánunk sok sikert! A szerzők 1 JEGYZET Bevezetés a Java világba Könyvünk első fejezetében egy kirándulásra hívjuk az Olvasót. A kirándulás során - a részletekben való elmélyülés nélkül - betekintést nyerhetnek a Java múltjába és jele- nébe. A fejezet végén már programot is készítünk, bevezetve ezzel a könyv további fejezeteit. Az előzményekről röviden Az 1990־es évek elején a Sun Microsystems cégen belül elindult egy kisebb projekt azzal a céllal, hogy a cég részesedést szerezzen a felhasználói elektronikai piac ún. ״okos” (smart), processzorral vezérelt, programozható készülékek területéből. E ké- sziilékcsalád jellegzetes képviselője a kábel-TV társaságok által használt eszköz volt. Az ilyen berendezések programozásához olyan architektúra-független technológiára volt szükség, amely lehetővé tette a kész programok hálózaton keresztüli letöltését és megbízható futtatását. A fejlesztők kezdetben a C++ nyelvet használták a projekthez, azonban ezt alkalmat- lannak találták a célkitűzéseik maradéktalan megvalósítására. Mivel más, létező nyelvvel sem boldogultak, új nyelvet terveztek maguknak. Alapul a C++ nyelvet vet- ték, kigyomlálva belőle a bonyolultnak, nem megbízhatónak tartott szerkezeteket, hozzáadva az innen-onnan átvett, hasznosnak tűnő ötleteket, nyelvi elemeket. A felhasználói elektronikai berendezések piaca azonban lassabban nőtt a vártnál. A projekt és a kidolgozott Oak (tölgy) nyelv eltűnt volna a világ szeme elől, ha eközben az Internet nem indul rohamos fejlődésnek. A Netscape cég munkatársai észrevették, hogy az Internet a programozható elektronikai berendezésekhez hasonló körülménye- két teremt, és hasonló igényeket támaszt egy új programozási technológiával szemben. Az Oak nyelv Java néven 1995-ben (1995. május 23-án) indult világhódító útjára, mint a böngészőben futtatható kisalkalmazások (appletek) fejlesztőeszköze. A Java alapvető tulajdonságai A előzményekben már említettük, hogy az Internet és a World Wide Web fejlődése a programtermékek fejlesztésének és terjesztésének újszerű megközelítését igényli. A Java nyelv fejlesztésénél szem előtt tartótták/tartják ezeket az igényeket. Egyszerű Az egyszerűség azt jelenti, hogy a programozók gyorsan elsajátíthatják a Java nyelv alapjait, és néhány objektum megismerése után már programot is írhatnak. A nyelv kidolgozásánál figyelembe vették, hogy a programozók többsége ismeri a C++ nyel 3