java programozas 1.3

of 258 /258
Nagy Gusztáv Java programozás 1.3. verzió 2007. február

Author: kulcstar

Post on 13-Aug-2015

94 views

Category:

Documents


4 download

Embed Size (px)

TRANSCRIPT

Nagy Gusztv

Java programozs

1.3. verzi

2007. februr

2. oldal

Java programozs (1.3. verzi)

Jogi nyilatkozat

Nevezd meg! - Ne add el! 2.5 Magyarorszg

A kvetkezket teheted a mvel: szabadon msolhatod, terjesztheted, bemutathatod s eladhatod a mvet szrmazkos mveket (feldolgozsokat) hozhatsz ltre

Az albbi felttelekkel:Jelld meg! A szerz vagy a jogosult ltal meghatrozott mdon kell megjellni a mvet (pl. a szerz s a cm feltntetsvel).

Ne add el! Ezt a mvet nem hasznlhatod fel kereskedelmi clokra. A szerzi jogok tulajdonosnak rsos engedlyvel brmelyik fenti feltteltl eltrhetsz. A fentiek nem befolysoljk a szabad felhasznlshoz fzd, illetve az egyb jogokat. Ez a Legal Code (Jogi vltozat, vagyis a teljes licenc) szvegnek kzrthet nyelven megfogalmazott kivonata. Ez a kivonat a http://creativecommons.org/licenses/by-nc/2.5/hu/ oldalon is olvashat. A teljes licensz a http://creativecommons.org/licenses/by-nc/2.5/hu/legalcode oldalon rhet el. E jegyzet hivatalos honlapjrl (http://nagygusztav.hu) tlthet le a mindenkori legfrissebb verzi.

3. oldal

BevezetsFelhasznlsEzzel a jegyzettel arra vllalkozok, hogy a Kecskemti Fiskola GAMF Karn tanul mszaki informatikus hallgatk kezbe olyan rsos anyagot adjak, amely az eladsok s gyakorlatok mellett tovbbi segtsget ad a Java nyelv alapjainak s alapvetbb osztlyainak alapos megismersre. A jegyzet hasznlathoz nem nlklzhetetlen, de ersen javasolt az eladsok ltogatsa s a gyakorlatokon val aktv rszvtel. A jegyzet alapveten a tanrk menethez kapcsold lineris feldolgozsra kszlt, de a fejezetek egy rsze nem pt a kzvetlen megelz fejezetekre. Az egyes fejezetek tananyagnak elsajttshoz az elmleti rsz tolvassa utn az ellenrz krdsek alapos tgondolst, valamint a gyakorl feladatok megoldst javaslom. Enlkl a tantrgy teljestse a hallgatk tbbsge szmra nem lesz eredmnyes. A jegyzet felttelezi a C++ programozsi nyelv minimum kzp szint ismerett. Az anyag elsajttsa ennek hinyban sem lehetetlen, de tbb idt kell rfordtani. A jegyzet alapos ttanulmnyozsa s a Java programozs komolyabb gyakorlsa utn akr a Sun Java programozi minstsnek megszerzsre is lehet kszlni.

KsznetA jegyzet elksztshez elssorban a Sun Microsystems Java Tutorial-jt hasznltam. Tovbbi informcikrt a http://java.sun.com oldalt, valamint az ELTE pillanatnyilag nehezen elrhet, de nagyon npszer Java tikalauz programozknak cm knyvt ajnlom. Szeretnk ksznetet mondani a Sun-nak a Java megalkotsrt, a hallgatknak, akik a jegyzet alapjul szolgl Java Tutorial nyers fordtsnak elksztsben rszt vettek, s vgl, de nem utols sorban kollgmnak, Gurka Dezsn Csizms Editnek a jegyzet alapos tolvassrt s pt tleteirt.

TervekA tavaszi flv folyamt ellenrz s gyakorl feladatokkal szeretnm a jegyzetet bvteni. Ennek prhuzamosan tvoktatsi jegyzett alakts is meg fog trtnni. Kecskemt, 2007. februr a szerz

4. oldal

Java programozs (1.3. verzi)

Tartalomjegyzk1.Els lpsek......................................................................................................................... 9 1.1.Az els cssze kv.......................................................................................................9 1.1.1Az els alkalmazs ltrehozsa...............................................................................9 1.2.Bevezets a Java technolgiba.................................................................................11 1.2.1A Java programozsi nyelv...................................................................................11 1.2.2Java platform........................................................................................................12 1.3.Mire j a Java technolgia?.......................................................................................12 1.4.Mg egyszer a HelloWorld programrl.....................................................................13 1.4.1Megjegyzsek a Java nyelvben.............................................................................13 1.4.2Osztlydefinci....................................................................................................14 1.4.3A main metdus...................................................................................................14 1.4.4Osztlyok s objektumok hasznlata...................................................................15 1.5.Ellenrz krdsek.....................................................................................................16 2.Objektumorientlt paradigma..........................................................................................17 2.1.Az objektum................................................................................................................17 2.2.Az zenet....................................................................................................................18 2.3.Az osztly.................................................................................................................... 9 1 2.4.Az rklds............................................................................................................... 1 2 2.5.Publikus interfsz......................................................................................................23 2.6.Ellenrz krdsek....................................................................................................23 2.7.Gyakorl feladat........................................................................................................24 3.Vltozk............................................................................................................................25 3.1.Adattpusok................................................................................................................26 3.2.Vltoz nevek.............................................................................................................27 3.3.rvnyessgi tartomny............................................................................................28 3.4.Vltozk inicializlsa...............................................................................................28 3.5.Vgleges vltozk......................................................................................................29 3.6.Ellenrz krdsek....................................................................................................29 4.Opertorok.......................................................................................................................32 4.1.Aritmetikai opertorok..............................................................................................32 4.1.1Implicit konverzi................................................................................................34 4.2.Relcis opertorok...................................................................................................35 4.3.Logikai opertorok....................................................................................................36 4.3.1Rvidzr kirtkels.............................................................................................37 4.4.Bitlptet s bitenknti logikai opertorok..............................................................38 4.4.1Bitmanipulcik a gyakorlatban.........................................................................39 4.5.rtkad opertorok.................................................................................................40 4.6.Egyb opertorok.......................................................................................................41 4.7.Ellenrz krdsek.....................................................................................................41 5.Kifejezsek, utastsok, blokkok......................................................................................43 5.1.Kifejezsek.................................................................................................................. 3 4 5.2.Utastsok..................................................................................................................45 5.3.Blokkok......................................................................................................................46 5.4.sszefoglals.............................................................................................................46 5.5.Ellenrz krdsek....................................................................................................46 5.6.Gyakorl feladatok....................................................................................................47 6.Vezrlsi szerkezetek.......................................................................................................48 6.1.A while s a do-while ciklusok..................................................................................48

5. oldal 6.2.A for ciklus................................................................................................................. 9 4 6.3.Az if-else szerkezet.....................................................................................................51 6.4.A switch-case szerkezet.............................................................................................53 6.4.1A switch utasts s a felsorolt tpus...................................................................54 6.5.Vezrlstad utastsok...........................................................................................55 6.6.Ellenrz krdsek....................................................................................................59 6.7.Gyakorl feladatok....................................................................................................60 7.Objektumok hasznlata...................................................................................................62 7.1.Objektumok ltrehozsa............................................................................................62 7.2.Hivatkozs egy objektum tagjaira.............................................................................66 7.3.Metdushvs............................................................................................................. 6 6 7.4.Nem hasznlt objektumok eltvoltsa.....................................................................67 7.5.Takarts....................................................................................................................67 7.6.Ellenrz krdsek....................................................................................................67 7.7.Gyakorl feladat........................................................................................................68 8.Karakterek s sztringek...................................................................................................69 8.1.A Character osztly....................................................................................................69 8.2.String, StringBuffer s StringBuilder osztly...........................................................70 8.3.Sztringek darabolsa.................................................................................................78 8.4.Ellenrz krdsek....................................................................................................78 8.5.Gyakorl feladatok....................................................................................................80 9.Szmok.............................................................................................................................. 1 8 9.1.A csomagol osztlyok nhny hasznlata............................................................... 81 9.2.Szvegbl szmm konvertls................................................................................83 9.3.Szmbl szvegg konvertls .................................................................................83 9.4.Szmok formzott konvertlsa...............................................................................84 9.5.Aritmetika..................................................................................................................87 9.6.Ellenrz krdsek....................................................................................................90 10.Tmbk........................................................................................................................... 2 9 10.1.Tmbk ltrehozsa s hasznlata..........................................................................92 10.2.Objektum tmbk...................................................................................................94 10.3.Tmbk tmbjei......................................................................................................95 10.4.Tmbk msolsa....................................................................................................96 10.5.Ellenrz krdsek..................................................................................................97 10.6.Gyakorl feladatok..................................................................................................98 11. Osztlyok ltrehozsa..................................................................................................100 11.1.Osztlyok deklarlsa.............................................................................................100 11.2.Tagvltozk deklarlsa.........................................................................................101 11.3.Metdusok deklarlsa..........................................................................................102 11.4.Konstruktorok........................................................................................................103 11.5.Informcitads metdus vagy konstruktor szmra........................................ 104 11.6.A metdusok visszatrsi rtke............................................................................107 11.7.A this kulcssz hasznlata......................................................................................108 11.8.Egy osztly tagjai elrhetsgnek felgyelete .....................................................109 11.9.A pldnyok s az osztly tagok..............................................................................114 11.9.1A pldnyok s az osztly tagok inicializlsa..................................................115 11.10.Ellenrz krdsek................................................................................................116 11.11.Gyakorl feladatok.................................................................................................118 12.rklds......................................................................................................................120 12.1.Metdusok fellrsa s elrejtse...........................................................................120 12.2.Tagvltozk elrejtse..............................................................................................122 12.3.A super hasznlata.................................................................................................122

6. oldal

Java programozs (1.3. verzi)

12.4.Az Object osztly metdusai..................................................................................124 12.5.Vgleges osztlyok s metdusok..........................................................................126 12.6.Ellenrz krdsek.................................................................................................127 12.7.Gyakorl feladatok.................................................................................................128 13.Begyazott osztlyok.....................................................................................................129 13.1.Bels osztlyok ......................................................................................................130 13.2.Nhny tovbbi rdekessg....................................................................................131 13.3.Ellenrz krdsek.................................................................................................132 14.Felsorols tpus.............................................................................................................133 14.1.Ellenrz krdsek.................................................................................................134 15.ltalnos programozs.................................................................................................135 15.1.ltalnos tpus definilsa s hasznlata...............................................................135 15.2.Kapcsolatok az ltalnos tpusok kztt...............................................................136 15.3.Helyettest tpus ................................................................................................... 37 1 15.4.ltalnos metdusok definilsa s hasznlata ...................................................138 15.5.ltalnos tpusok hasznlata az rklsben......................................................... 138 15.6.Ellenrz krdsek.................................................................................................140 16.Interfszek.....................................................................................................................141 16.1.Interfsz definilsa................................................................................................141 16.2.Interfszek implementlsa..................................................................................142 16.3.Az interface hasznlata tpusknt..........................................................................143 16.4.Ellenrz krdsek.................................................................................................143 17.Csomagok......................................................................................................................145 17.1.Csomag ltrehozsa................................................................................................145 17.2.Egy csomag elnevezse...........................................................................................146 17.3.Csomag tagok hasznlata.......................................................................................146 17.4.Forrs s osztly fjlok menedzselse...................................................................148 17.5.Ellenrz krdsek.................................................................................................150 18.Kivtelkezels................................................................................................................152 18.1.Kivtelek elkapsa vagy tovbbengedse.............................................................. 153 18.2.Kivtelek dobsa....................................................................................................159 18.2.1A throw hasznlata...........................................................................................160 18.3.Eldobhat osztlyok s leszrmazottai.................................................................160 18.4.Lncolt kivtelek....................................................................................................161 18.5.Sajt kivtel osztlyok ltrehozsa........................................................................162 18.6.Ellenrz krdsek.................................................................................................163 19.Programszlak kezelse................................................................................................165 19.1.A Timer s a TimerTask osztly.............................................................................166 19.1.1Idztett szlak lelltsa...................................................................................167 19.1.2Ismtelt futtats................................................................................................167 19.2.Szlak pldnyostsa............................................................................................168 19.2.1Thread leszrmazott s a run fellrsa...........................................................168 19.2.2Runnable interfsz pldnyostsa..................................................................170 19.3.Programszl letciklusa.........................................................................................172 19.3.1Programszl ltrehozsa...................................................................................172 19.3.2Programszl elindtsa.....................................................................................172 19.3.3Programszl nem futtathat llapotba lltsa............................................... 173 19.3.4Programszl lelltsa......................................................................................174 19.3.5Programszl sttusz tesztelse.........................................................................175 19.3.6A processzor hasznlatnak feladsa...............................................................175 19.4.Ellenrz krdsek.................................................................................................176 20.Fjlkezels....................................................................................................................178

7. oldal 20.1.Adatfolyamok.........................................................................................................178 20.1.1Fjl adatfolyamok hasznlata .........................................................................182 20.1.2Szr adatfolyamok.........................................................................................183 20.2.Objektum szerializci..........................................................................................186 20.2.1Objektumok szerializlsa...............................................................................186 20.2.2Objektum szerializci a gyakorlatban...........................................................187 20.2.3Az Externalizable interfsz implementlsa..................................................188 20.2.4Az rzkeny informci megvdse................................................................188 20.3.Kzvetlen elrs llomnyok..............................................................................189 20.3.1A kzvetlen elrs llomnyok hasznlata................................................... 190 20.4.Tovbbi osztlyok s interfszek..........................................................................190 20.5.Ellenrz krdsek.................................................................................................191 21.Gyjtemnyek...............................................................................................................193 21.1.A gyjtemny keretrendszer..................................................................................193 21.1.1A Gyjtemny keretrendszer hasznlatnak elnyei.......................................193 21.2.Interfszek..............................................................................................................194 21.2.1A gyjtemny interfszek.................................................................................195 21.2.2A Collection interfsz.......................................................................................196 21.2.3A Set interfsz..................................................................................................198 21.2.4A List interfsz.................................................................................................201 21.2.5Map interfsz...................................................................................................206 21.2.6Objektumok rendezse....................................................................................208 21.3.Implementcik.....................................................................................................212 21.3.1ltalnos cl Set implementcik..................................................................213 21.3.2ltalnos cl List implementcik................................................................214 21.3.3ltalnos cl Map implementcik...............................................................214 21.4.Algoritmusok..........................................................................................................214 21.4.1Rendezs...........................................................................................................214 21.4.2Kevers.............................................................................................................216 21.4.3Keress.............................................................................................................. 16 2 21.5.Ellenrz krdsek.................................................................................................216 22.Hlzatkezels..............................................................................................................218 22.1.Hlzati alapok......................................................................................................218 22.1.1TCP....................................................................................................................218 22.1.2UDP..................................................................................................................218 22.1.3A portokrl ltalnossgban............................................................................219 22.1.4Hlzati osztlyok a JDK-ban.........................................................................220 22.2.URL-ek kezelse....................................................................................................220 22.2.1URL objektum ltrehozsa..............................................................................221 22.2.2URL elemzs....................................................................................................223 22.2.3Kzvetlen olvass URL-bl.............................................................................224 22.2.4Csatlakozs egy URL-hez................................................................................224 22.3.Socketek kezelse..................................................................................................226 22.3.1Mi az a socket?.................................................................................................226 22.3.2Olvass s rs a socket-rl.............................................................................227 23.JDBC adatbzis-kezels...............................................................................................230 23.1.Adatbzis belltsa...............................................................................................230 23.2.Tblk hasznlata..................................................................................................232 23.2.1Tbla ltrehozsa.............................................................................................232 23.2.2JDBC Statement ltrehozsa..........................................................................233 23.2.3SQL parancs vgrehajtsa...............................................................................234 23.2.4Lekrdezsek eredmnynek feldolgozsa.....................................................235

8. oldal

Java programozs (1.3. verzi)

24.Kdolsi konvencik....................................................................................................237 24.1.Fjlok szervezse.................................................................................................... 37 2 24.2.Behzs.................................................................................................................238 24.3.Megjegyzsek........................................................................................................240 24.3.1Implementcis megjegyzsek....................................................................... 240 24.3.2Dokumentcis megjegyzsek........................................................................241 24.4.Deklarcik...........................................................................................................242 24.4.1A deklarci helye............................................................................................243 24.4.2Osztly s interfsz deklarci........................................................................243 24.5.Utastsok..............................................................................................................244 24.6.Elvlasztk............................................................................................................246 24.7.Elnevezsi konvencik..........................................................................................246 25.Tervezsi mintk..........................................................................................................248 25.1.Ltrehozsi mintk................................................................................................249 25.1.1Egyke (Singleton).............................................................................................249 25.1.2Gyrtfggvny (Factory Method) minta.......................................................250 25.2.Szerkezeti mintk..................................................................................................252 25.3.Viselkedsi mintk................................................................................................252 26.Java fejleszteszkzk.................................................................................................253 26.1.JCreator.................................................................................................................. 53 2 26.2.Netbeans................................................................................................................253 26.2.1Alapvet hasznlat...........................................................................................254 26.3.Eclipse.................................................................................................................... 56 2 26.3.1Alap tulajdonsgok..........................................................................................256 26.3.2Az Eclipse beszerzse s zembe helyezse....................................................257

1.Els lpsek

9. oldal

1. Els lpsekEz a fejezet a Java programozs alapjaihoz mutat utat. Bemutatja, hogyan tudjuk a Javt beszerezni, s hogyan tudjuk elkszteni, fordtani s futtatni az egyszer Java programokat. Vgl megismerhetjk azt a httrtudst, amely a programok mkdsnek megrtshez szksges.

1.1.

Az els cssze kv

A Java programok ksztshez szksgnk lesz a kvetkezkre:

Java fejlesztkrnyezet (Java SE Development Kit)A JDK-t (Java SE Development Kit) a http://java.sun.com/javase/downloads/index.jsp cmrl tlthetjk le, majd rtelemszeren teleptsk is. (Fontos, hogy a JDK-t, s ne a JRE-t tltsk le!)Megjegyzs: Termszetesen jabb verzi megjelense esetn azt rdemes letlteni s telepteni.

A telepts a Windowsban megszokott egyszersggel trtnik, ltalban elegend a Next gombra kattintani.

DokumentciA Java fejlesztkrnyezeten kvl rdemes beszerezni (br a fordtshoz kzvetlenl nem szksges) az API (Application Programming Interface) dokumentcit is (szintn az elz letltsi oldalrl indulva). Ez a Java platformon hasznlhat tbb ezer osztly igen rszletes dokumentcijt tartalmazza. A tmrtett ZIP llomny tartalmt (docs knyvtr) a fejlesztkrnyezet gykrknyvtrba (pl. C:\Program Files\ jdk1.6.0_01) rdemes kicsomagolni.

SzvegszerkesztBrmilyen editor megfelel a jegyzettmbtl (Notepad.exe) az sszetett programozi editorokig. Nem rdemes a tanuls legelejn olyan integrlt fejlesztkrnyezet (IDE Integrated Development Environment) alkalmazni, amelyik bizonyos nyelvi elemeket elrejt a programoz ell (pl. JBuilder), ugyanakkor a rendszer rengeteg szolgltatsa kztt elveszik a kezd felhasznl. Elegend a kdkiemelst biztost, esetleg a gpelst knnyt szerkeszt hasznlata is. A nyelvtani alapok, fordts, futtatsi ciklus begyakorlsa utn mr praktikus lehet az tlls egy komolyabb tmogatst nyjt eszkzre. A Jegyzet 25. fejezetben hrom npszer editor hasznlathoz tallnak tippeket. (E fejezet pldi a parancssori fordts-futtats kiss nehzkes mdszert mutatjk be.)

1.1.1

Az els alkalmazs ltrehozsa

A fejleszts menett jl mutatja a kvetkez bra: a forrsllomnybl a fordts hatsra elll bjtkdot (bytecode) klnbz (Java Virtulis Gpet, JVM-et tartalmaz) opercis rendszeren tudjuk futtatni.

10. oldal

Java programozs (1.3. verzi)

Az els program (HelloWorldApp) egyszeren kirja a kpernyre a Hello World! zenetet. A kvetkez lpsek szksgesek:

Hozzunk ltre egy forrsllomnytA forrsllomny egyszer szveges llomny a Java nyelv szintaxisa szerint. A Java forrsllomny kiterjesztse .java.Megjegyzs: Unicode (egsz pontosan UTF) kdols forrskd is hasznlhat! (A Unicode kdols kt bjton trol egy-egy karaktert, gy a legtbbet hasznlt nyelvek legtbb betje s rsjele brzolhat vele.)

Az els programunk:public class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); } }

Mentsk el a programot HelloWorldApp.java nven.Megjegyzs: A Java nyelvben s az llomnynvben is klnbsget kell tenni kis-, s nagybet kztt, fggetlenl a Windowsban megszokott lazasgtl.

Fordtsuk le a forrsllomnyt bjtkdraA javac (bin\javac.exe) fordt a szvegbl olyan utastsokat llt el, amelyeket a JVM (Java Virtual Machine, Java virtulis gp) vgre tud hajtani. A bjtkd programllomny kiterjesztse .class. Nyissunk meg egy parancssor ablakot (Start men / Futtats / cmd.exe), majd lltsuk be az aktulis knyvtrat a Java bin alknyvtrra (pl. cd C:\Program Files\ jdk1.6.0_01\bin). Indtsuk el a javac fordtt: javac HelloWorldApp.java. (Bizonyos esetekben szksg lehet a forrsllomny teljes elrsi tjnak megadsra.)

1.Els lpsek

11. oldal

Futtassuk a programot tartalmaz bjtkd llomnytA Java rtelmez (bin\java.exe) a szmtgpre teleptett Java VM szmra rtelmezi a bjtkd program utastsait, a VM pedig futtatja azokat. Gpeljk be (kiterjeszts nlkl):java HelloWorldApp

Ha mindent jl csinltunk, megjelenik a konzol ablak kvetkez sorban a program dvzlete.

1.2. Bevezets a Java technolgibaA Java technolgia egyarnt programozsi nyelv s platform.

1.2.1

A Java programozsi nyelv

A Java egy magas szint nyelv a kvetkez fbb jellemzkkel: egyszer objektumorientlt elfordtott rtelmezett robusztus biztonsgos semleges architektrj hordozhat nagy teljestmny tbbszl dinamikus

Megjegyzs: Valsznleg a felsorols egy rsze most mg nem sokat mond. Mire azonban a jegyzet vgre rnek, s a Java nyelv fejlesztsben legalbb alap szint gyakorlatuk lesz, ez a lista sokkal tbbet fog mondani.

A legtbb programozsi nyelv esetn fordtst vagy rtelmezst hajtunk vgre, mieltt a program futna a gpnkn. A Java esetn a kettnek egy klns keverkt hasznljuk. Elszr a forrsprogramot (myProgram.java) a fordt (compiler, bin\javac.exe) egy kzbls nyelvre fordtva Java bjtkdot (myProgram.class) llt el, s ezt a platformfggetlen kdot rtelmezi s futtatja a Java VM (interpreter, bin\java.exe). A fordts egy alkalommal trtnik, az rtelmezs pedig minden alkalommal, ahnyszor a program vgrehajtdik. A kvetkez bra ennek mkdst illusztrlja.

12. oldal

Java programozs (1.3. verzi)

A Java bjtkdot gpi kdd alaktja a Java VM. Minden Java rtelmez, akr a fejlesztkrnyezet, akr egy bngszben fut applet, tartalmaz Java VM-et a futtatshoz. A Java bjtkd segtsgvel megoldhat az, hogy csak egyszer kell megrni egy Java programot, majd tetszleges (megfelel verzij) Java VM-et tartalmaz gpen futtatni lehet. A Java programunkat brmelyik opercis rendszeren teleptett fordtval le lehet fordtani, mindentt hasznlhat lesz.Megjegyezs: A fordtst s rtelmezst is alkalmaz hibrid megolds manapsg egyre nagyobb npszersgnek rvend. A Microsoft .Net platformja sok architektrlis elemet vett t a Javtl, a web hagyomnyos rtelmez megoldsai ma mr sokszor elfordtssal is kombinlhatk.

1.2.2

Java platform

A platform hardver vagy szoftverkrnyezet, ahol a programok futnak. A legtbb platform a hardvert s az opercis rendszert jelenti. A Java platform annyiban klnbzik a legtbb ms platformtl, hogy teljesen szoftverplatform, s ms hardver alap platformokra pl. A Java platform kt komponensbl ll: Java VM Java API

A Java API igen sok (tbb ezer) hasznlatra ksz szoftverkomponenst tartalmaz: csomagokba szervezett osztlyokat s interfszeket. A kvetkez bra bemutatja a Java platform mkdst.

A natv kd olyan kdot jelent, amelyik a hardveren kzvetlenl futtathat. A platformfggetlen Java kd valamivel lassabb, mint a natv kd. Azonban j fordtval, optimalizlt rtelmezvel, s JIT bjtkd fordtval a klnbsg elg kicsi lehet. A mai futtatkrnyezetek mr tartalmazzk a JIT (Just in time) fordtt, amivel az els futtats eltt natv kdra fordul a bjtkd, gy a tovbbi futsok sorn mr kzvetlenl a natv kd futtathat.Megjegyzs: Az elzek kvetkezmnye, hogy egy Java alkalmazs els futtatsa tbb ideig tarthat, de a tovbbi futtatsoknl ez az idvesztesg nem fog jelentkezni.

1.3. Mire j a Java technolgia?A legtbb Java platformra kszlt program asztali alkalmazs vagy applet. Ha a weben szrfznk, tallkozhatunk appletekkel. Az applet olyan program, amely bizonyos megszortsokkal futtathat Javt ismer bngszben. Kezdetben ezt ltvnyos grafikai effektusok ksztsre hasznltk. Mra ez a felhasznls visszaszorult, s viszonylag ritkn tallkozhatunk appletekkel. Az eredeti clja szerint a Java magas szint programozsi nyelv s ers szoftverplatform kvn lenni. A gazdag osztlyknyvtr segtsgvel nagyon sokfle programot kszthetnk.

1.Els lpsek

13. oldal

Az asztali alkalmazs olyan program, amely kzvetlenl a Java platformon (pl. nem bngszben) futtathat. Az alkalmazsok specilis fajtja szerverknt fut, hlzati klienseket kiszolglva. Pldul lehet webszerver, proxy-szerver, levelez szerver vagy nyomtat szerver. Szintn specilis program a szervlet (servlet). Szerver oldalon fut, de nem nllan, hanem egy szerver-futtatkrnyezet rszeknt. Pl. egy portlt ki lehet szolglni nhny szervlet egyttesvel, vagy akr egyetlen szervlettel. Ebben az esetben a szervlet a webszerver rszeknt fut. A szervletek hasonlak az appletekhez, mivel futsidej kiterjesztsei a (szerver) alkalmazsoknak. A mobil telefonon, kzi szmtgpen fut alkalmazst midletnek hvjuk. Hogyan nyjtja az API ezt a sokfle tmogatst? Szoftverkomponensek csomagjaiknt, amelyek sokfle feladatot elltnak. A Java platform minden teljes implementcija (pldul a midlet futtatkrnyezet nem teljes) rendelkezik a kvetkez tulajdonsgokkal: Alap sszetevk: objektumok, sztringek, szlak, szmok, I/O, adatstruktrk, dtum s idkezels, stb. Appletek: a szoksos felhasznlsok Hlzatok: URL, TCP, UDP, socket-ek, IP cmzs Nemzetkzi programozs: Segtsg az egsz vilgon hasznlhat alkalmazsok rshoz. A programok knnyedn tudnak alkalmazkodni a helyi sajtossgokhoz, s tbbfle nyelven kommuniklni a felhasznlkkal Biztonsg: alacsony s magas szint vdelem, belertve az elektronikus alrst, titkos-, s nyilvnos kulcs titkostst, hozzfrs-szablyozst s azonostst Szoftver komponensek: a JavaBeans hasznlatval knnyen sszeilleszthet komponenseket fejleszthetnk Objektum szerializci: lehetv teszi a knnysly perzisztencit s az RMI-t JDBC: relcis adatbzis-kezelk szles krhez nyjt egysges elrsi felletet

A Java platform ezen fell tartalmaz API-t a 2D s 3D grafikhoz, szerverekhez, telefnihoz, beszdfeldolgozshoz, animcihoz stb.

1.4. Mg egyszer a HelloWorld programrl1.4.1 Megjegyzsek a Java nyelvben/* * A HelloWordApp program kirja a ksznt szveget */ public class HelloWorldApp { public static void main(String[] args) { // Kirja: "Hello World!" System.out.println("Hello World!"); } }

A Java nyelv a megjegyzsek hrom tpust tmogatja. Hagyomnyos (C stlus) megjegyzs:/* szveg */

14. oldal

Java programozs (1.3. verzi)

A fordt a begpelt szveget figyelmen kvl hagyja a /*-tl a */-ig./** dokumentci */

Ez egy dokumentcis megjegyzs, a fordt figyelmen kvl hagyja, mint az elz tpust is, de a javadoc eszkz (bin\javadoc.exe) segtsgvel automatikusan lehet generlni hypertext (HTML) dokumentcit, ami felhasznlja a dokumentcis megjegyzseket is.Megjegyzs: a letlthet Java dokumentci is ez alapjn kszlt.

// szveg

A fordt figyelmen kvl hagyja a sort a //-tl a sor vgig.

1.4.2

Osztlydefincipublic class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }

A kvetkez kd mutatja az osztlydefincis blokkot.

Az osztly (class) alapvet pteleme az objektumorientlt nyelveknek. Az osztly az adatok s viselkedsek sszessgbl ll pldnyok sablonjt adja meg. Amikor az osztlybl pldnyt hozunk ltre, akkor tulajdonkppen egy olyan objektum jn ltre, amelyik gy pl fel, s gy viselkedik, mint az osztly egyb pldnyai. Az adatok az objektumpldnyok vltoziknt rhatk le, a viselkedsek pedig a metdusokkal. A vals letbl egy hagyomnyos plda a tglalap osztly. Az osztly tartalmaz vltozkat a pozci, valamint a szlessg s magassg lersra, s tartalmaz metdust a terlet kiszmtsra. A Java nyelvben a legegyszerbb osztlydefinci a kvetkez:class name { . . . }

A class kulcsszval s az osztly nevvel kezddik az osztlydefinci, majd kapcsos-zrjelek kztt vltozk s metdusok kvetkeznek. A korbbi plda alkalmazsunkban nincs vltoz, s csak egyetlen metdus van main nven.

1.4.3

A main metduspublic static void main(String[] args)

Minden Java alkalmazsnak tartalmaznia kell main metdust a kvetkez deklarcival: A main metdus deklarcija hrom mdostt tartalmaz: public: jelzi, hogy a metdust ms osztlybeli objektumokbl is meg lehet hvni static: jelzi, hogy a main osztlymetdus void: jelzi, hogy a metdusnak nincs visszatrsi rtke

1.Els lpsek

15. oldal

Hogyan hvdik meg a main metdus?A Java nyelvben a main metdus hasonl a C nyelv main fggvnyhez. Amikor a Java rtelmez vgrehajt egy alkalmazst, elszr meghvja az osztly main metdust. Az alkalmazsunk tovbbi metdusait (kzvetlenl vagy kzvetve) a main fogja meghvni. Ha main nlkl prblunk egy alkalmazst futtatni, az rtelmez megtagadja a vgrehajtst, s hibazenetet kapunk.Megjegyzs: A main fggvnyre csak hagyomnyos alkalmazsok esetn van szksg. Begyazott Java program (applet, midlet, servlet) esetn a program az t tartalmaz futtatkrnyezet (bngsz, szervlet kontner) specilis kzremkdsvel fog futni.

A main metdus paramtereA main metdusnak egy paramtere van, amely sztringek tmbje. Ez a tmb a parancssori paramtereket tartalmazza. A pldaprogramunkban nem foglalkoztunk az esetleges parancssori paramterekkel.Megjegyzs: A C nyelvtl eltren az args tmb nem tartalmazza a program nevt. Ez ugyanis az nelemzs (reflection) mdszervel knnyen megllapthat. Msrszt a Java nyelvben a tmb objektum, tudja a mrett, gy nincs szksg tovbbi paramterre.

1.4.4

Osztlyok s objektumok hasznlata

A pldaalkalmazsunk egy nagyon egyszer Java program, ezrt nincs szksge arra, hogy ms osztlyokat alkalmazzunk, a kpernyre rst kivve. sszetettebb programok hasznlni fognak ms segt osztlyokat. A HelloWorld alkalmazs egyedl a System osztlyt hasznlja. Ez az osztly rendszerfggetlen hozzfrst tesz lehetv a rendszerfgg szolgltatsokhoz. Pldnkban egy osztlyvltoz (out) pldny metdust (println) hvjuk meg.

Osztlymetdusok s vltozk hasznlataA System.out a System osztly out vltozjnak a teljes neve. (A System osztlybl soha nem fog pldnyostani az alkalmazsunk, csupn az osztly nevvel tudunk hivatkozni a vltozra. Ez azrt van, mert az out osztlyvltoz, s az osztlyhoz van kapcsolva, nem egy pldnyhoz.

Pldnymetdusok s vltozk hasznlataAzokat a metdusokat s vltozkat, amelyek nem az osztlyhoz, hanem egy konkrt objektumpldnyhoz vannak kapcsolva, pldnymetdusoknak vagy pldnyvltozknak nevezzk. Az out osztlyvltoz, a PrintStream osztly egy pldnyra hivatkozik, s megvalstja a standard kimenetet. Amikor a System osztly betltdik, a PrintStream osztly pldnya jn ltre, s System.out vltoz nven hivatkozhatunk r. Most mr van egy pldnyunk, meg tudjuk hvni a pldnymetdust:System.out.println("Hello World!");

Ahogy ltszik, a pldnymetdusok s vltozk hasznlata hasonl az osztlymetdusok s vltozk mkdshez. A Java fordt megengedi egy lpsben a tbbszrs hivatkozst:

16. oldalSystem.out.println("Hello World!");

Java programozs (1.3. verzi)

1.5. Ellenrz krdsek Mi a klnbsg a gpi kd s a Java bjtkd kztt? Mi a Java platform kt f sszetevje? Mi a Java VM? Mi a legfontosabb felttele annak, hogy egy adott gpen lehessen Java programot futtatni? Mi a Java API? Milyen parancs indtja el a Java fordtprogramot? Milyen parancs indtja el a Java VM-t? Mi az a Java nyelvi szerkezet, amivel a konzolra lehet rni? Mire szolglnak a megjegyzsek a programban? Mi a klnbsg a /* */, /** */ s a // megjegyzs-szintaktika kztt? Melyik metdus fog elszr elindulni egy Java program esetn? rjon egy egyszer pldt az alkalmazsra!

Igaz vagy hamis? Indokolja! A natv kd az ember szmra knnyen rtelmezhet programkd. A Java fordt gpfggetlen kzbens kdot, bjtkdot generl. Az interpreter a trgykdot visszaalaktja forrskdd. A forrskd egy szveg, melyet a fordtprogram rtelmez, illetve fordt le. A forrskd a szmtgp ltal rtelmezhet, kzvetlenl futtathat kd.

Mit tartalmaz a main fggvny paramternek 0. eleme? A program nevt A paramterek szmt Az els paramtert

2.Objektumorientlt paradigma

17. oldal

2. Objektumorientlt paradigmaAz objektumorientlt programozs alapfogalmaival korbban mr bizonyra minden olvas tallkozott. A tma rendkvli fontossga miatt egy rvid bevezetst is olvashatnak ebben a fejezetben. A jegyzet pldi ltalban elg egyszerek, de rdemes minl elbb megismerkedni egy olyan jellsmddal, amivel az objektumorientlt programunkat elre megtervezhetjk. Ler eszkzknt a leginkbb elterjedt UML (Unified Modeling Language 1) jellseivel fog tallkozni a jegyzetben a tisztelt olvas.

2.1. Az objektumAz objektumok az objektumorientlt technolgia alapjai. Nhny plda a htkznapi letbl: kutya, asztal, tv, bicikli. Ezek a valdi objektumok kt jellemzvel rendelkeznek: llapottal s viselkedssel. Pldul a kutya llapott a neve, szne, fajtja, hessge stb. jellemzi, viselkedse az ugats, evs, csahols, farok-csvls stb. lehet. A bicikli llapott a sebessgfokozat, a pillanatnyi sebessg, viselkedst a gyorsuls, fkezs, sebessgvlts adhatja. A programbeli objektumok modelljei a valdi objektumoknak. Az objektum llapott egy vagy tbb vltozval, a viselkedst az objektumhoz rendelt metdussal (fggvnynyel) rjuk le. Definci: Az objektum vltozkbl s kapcsold metdusokbl felptett egysg. A vals let objektumait lerhatjuk program objektumokkal. Ha szksg van arra, hogy valdi kutykat brzoljunk egy animcis programban, akkor hasznlhatunk program objektumokat az elvont fogalmak modellezsre. Pldul egy htkznapi esemnyt modellezhet egy billentylets vagy egrkattints. Egy biciklit modellez objektum vltozkkal rja le a pillanatnyi llapotot: a sebessg 18 km/h, s a sebessgfokozat 5-s. Ezeket a vltozkat pldnyvltozknak nevezzk, mert ezek egy konkrt bicikli llapott rjk le. Az objektumorientlt terminolgiban egy nll objektumot pldnynak is neveznk. A kvetkez bra bemutat egy biciklit modellez objektumot az UML objektumdiagramja (Object diagram) segtsgvel.

az n biciklim : sebessg = 18km/h sebessgfokozat = 5A bicikli tud fkezni, sebessgfokozatot vltani is. Ezeket a metdusokat pldnymetdusoknak hvjuk, mivel egy konkrt bicikli (pldny) llapotban kpesek vltozst elrni.

1

http://www.uml.org/

18. oldal

Java programozs (1.3. verzi)

az n biciklim : sebessg = 18km/h sebessgfokozat = 5 sebessgvlts fkezsAz objektum tulajdonsgait szoks a klvilgtl elrejteni, s csak a metdusokon keresztl befolysolni. Definci: Az objektum vltozk becsomagolst, vdrizetbe helyezst egysgbezrsnak nevezzk. Idnknt gyakorlati megfontolsbl egy objektum megmutat nhny vltozjt s elrejti nhny metdust. A Java nyelvben az objektum meg tudja hatrozni, hogy ngy hozzfrsi szint kzl melyiket vlasztja az egyes vltozk s metdusok szmra. A hozzfrsi szint hatrozza meg, hogy ms objektumok s osztlyok hozz tudjanak-e frni az egyes vltozkhoz s objektumokhoz. Az egysgbezrs tiszta alkalmazsa esetn kt egyszer, de nagyon hasznos elnye lesz a szoftverfejlesztnek: Modularits: Az objektum forrskdja fggetlen marad ms objektumok forrskdjtl. Ezen kvl az objektum knnyen tud illeszkedni a rendszer klnbz rszeihez. Informci elrejts: Az objektum a publikus interfszn keresztl nyjt kommunikcis lehetsget a tbbi objektum fel. Az objektum gondoskodik a sajt adatairl, s csak a metdusain keresztl ad vltoztatsi lehetsget a kls objektumoknak. A kls objektumoknak igazbl nem is kell tudnia arrl, hogy az objektum llapota milyen bels vltozkkal van reprezentlva, csak a kvnt viselkedst kell krnie a metdusokon keresztl.

2.2. Az zenetAmg csak egy objektumunk van, addig nem sok haszna van a programnak. ltalban egy objektum csak egy kis rszt jelenti egy nagyobb alkalmazsnak. Ezrt klcsnhats van az objektumok kztt. A biciklink egy sszetett szerkezet, magban mgis hasznlhatatlan, kapcsolatba kell kerlnie ms objektummal, pl. velnk a pedlon keresztl. A program objektumok hatnak egymsra s kommuniklnak egymssal zeneteken keresztl. Amikor az A objektum meghvja a B objektum egy metdust, tulajdonkppen egy zenetet kld neki. Ezt az UML szekvencia diagramja a kvetkez mdon brzolja (az id fentrl lefel halad):

2.Objektumorientlt paradigmaA: B:

19. oldal

zenet

Nha a fogad objektum tbb informcit ignyel, hogy pontosan tudja, mi a dolga. Pldul amikor sebessget vltunk a biciklin, megadjuk a kvnt sebessgvlts irnyt is. Ezt az informcit paramterknt adjuk az zenethez. Az zenet hrom rsze sszefoglalva: Melyik objektum az zenet cmzettje A vgrehajtand metdus neve Az esetleges paramterek

Ez a hrom sszetev elegend, hogy a meghvott objektum vgrehajtsa a kvnt metdust. Az zenetek kt fontos elnnyel jrnak: Egy objektum viselkedst meghatrozzk a metdusai, zenetkldssel megvalsthat az sszes lehetsges kapcsolat kt objektum kztt. Nem szksges, hogy az objektumok ugyanabban a folyamatban, vagy akr ugyanazon gpen legyenek, az zenetklds s fogads ettl fggetlenl lehetsges.

zenetek a gyakorlatbanAz elmleti objektumorientlt szemlletben megklnbztetnk aszinkron s szinkron zenetkldses rendszert. Br a htkznapi modellt az aszinkron megkzelts jellemzi, gyakorlati, megvalsthatsgi okokbl a programnyelvek tbbnyire a szinkron zenetkldses modellen alapulnak.

2.3. Az osztlyA valdi vilgban gyakran sok objektummal tallkozunk ugyanabbl a fajtbl. Pldul a biciklink nagyon sok ms biciklire jelentsen hasonlt. Az objektumorientlt szhasznlatban azt mondjuk, hogy egy konkrt bicikli a biciklik osztlynak egy pldnya. A biciklik rendelkeznek llapottal (aktulis sebessgfokozat, fordulatszm stb.) s viselkedssel (sebessgvlts, fkezs). Ennek ellenre minden bicikli konkrt llapota fggetlen az sszes tbbi bicikli llapottl. Definci: Osztlyozsnak nevezzk azt a folyamatot, amelynek sorn a hasonl objektumokat kzs csoportokba, ms nven osztlyokba soroljuk. Amikor a biciklik kszlnek, a gyrtk nyeresget szeretnnek ellltani, ezrt a biciklik nagy mennyisgben, kzs tervrajz alapjn sorozatgyrtsban kszlnek. Nagyon rossz lenne a hatsfok, ha minden biciklihez egyedi tervrajzot kellene kszteni.

20. oldal

Java programozs (1.3. verzi)

Az objektumorientlt programokban is hasonl a helyzet: kzs tervezsre ad lehetsget, hogy sok objektum hasonl jellemzkkel rendelkezik: tglalapok, alkalmazottak, videofelvtelek, stb. A kerkprgyrtkhoz hasonlan neknk is elnys az, ha sok hasonl objektumot kzs tervrajz alapjn kszthetnk el. Az objektumok tervrajzait hvjuk osztlyoknak. Definci: Az osztly bizonyos fajta objektumok kzs vltozit s metdusait ler tervrajz. A bicikli osztly legszksgesebb pldnyvltozi az aktulis sebessg s a sebessgfokozat lehetnek. Az osztly tartalmazza a pldnymetdusokat is: a sebessgvltst s a fkezst, ahogy a kvetkez UML osztlydiagramon (Class diagram) ltszik:

Bicikli sebessg : int = 0 sebessgfokozat : int = 0 sebessgvlts (irny) fkezs (mrtk)A kvetkez kd az gy megtervezett osztly kdjt tartalmazza:class Bicycle { int cadence = 0; int speed = 0; int gear = 1; void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; } void speedUp(int increment) { speed = speed + increment; } void applyBrakes(int decrement) { speed = speed decrement; } void printStates() { System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear); } }

Miutn ltrehoztuk a Bicikli osztlyt, az osztly alapjn akrmennyi bicikli objektumot ltre tudunk hozni. Amikor pldnyostunk egy osztlybl, a futtatrendszer elegend memrit foglal az objektum pldnyvltozinak. Minden pldny kap egy msolatot a definilt vltozkrl:

2.Objektumorientlt paradigma

21. oldal

az n biciklim : Bicikli sebessg : 18km/h sebessgfokozat : 5 sebessgvlts (irny) fkezs (mrtk)Nzzk meg egy bicikliket pldnyost kdot:

a te biciklid : Bicikli sebessg : 10km/h sebessgfokozat : 2 sebessgvlts (irny) fkezs (mrtk)

class BicycleDemo { public static void main(String[] args) { // Create two different Bicycle objects Bicycle bike1 = new Bicycle(); Bicycle bike2 = new Bicycle(); // Invoke methods on those objects bike1.changeCadence(50); bike1.speedUp(10); bike1.changeGear(2); bike1.printStates(); bike2.changeCadence(50); bike2.speedUp(10); bike2.changeGear(2); bike2.changeCadence(40); bike2.speedUp(10); bike2.changeGear(3); bike2.printStates(); } }

A pldnyvltozk mellett az osztlyok definilhatnak osztlyvltozkat is. Az osztlyvltozk az sszes objektumpldny szmra megosztott informcikat tartalmaznak. Pldul kpzeljk el, hogy az sszes kerkpr ugyanannyi sebessgfokozattal rendelkezik. Ebben az esetben felesleges pldnyvltozt alkalmazni, minden pldny ugyanazt a msolatot troln. Ilyenkor osztlyvltozban rdemes az adatot trolni, amit minden pldny el tud rni. Ha egy objektum megvltoztatja az rtkt, az sszes objektum szmra is megvltozik. Az osztlynak lehet osztlymetdusa is. Az objektumok hasznlatnak elnye a modularits s az informcielrejts. Az osztlyok hasznlatnak elnye az jrafelhasznlhatsg. A bicikligyrak jra s jra fel tudjk hasznlni a gyrts sorn az egyszer elksztett tervrajzokat. A programozk ugyanazokat az osztlyokat, ugyanazokat a kdokat jra s jra felhasznljk a pldnyosts sorn.

2.4. Az rkldsAz objektumorientlt rendszerekben egyes objektumok kztt tovbbi sszefggseket figyelhetnk meg. Bizonyos feltteleknek megfelel objektumok egy msik osztlyba sorolhatk. Pldul a hegyi vagy ppen a vrosi biciklik a biciklik specilis fajti. Az objektumorientlt szhasznlatban ezeket leszrmazott osztlynak (leszrmazott osztlynak) nevezzk. Hasonlan, a bicikli osztly sosztlya (szl osztlya, bzisosztlya) a vrosi biciklik osztlynak. Ezt az sszefggst mutatja a kvetkez bra:

22. oldal

Java programozs (1.3. verzi)

Bicikli

Hegyi bicikli

Vrosi bicikli

Iker bicikli

Az objektumorientlt tervezs folyamn hasznlt ltalnosts s specializls fogalmak az osztlyhierarchia kialaktsa sorn hasznlatosak. Az stl a gyermek fel specilisabb osztlyokat ltunk, visszafele pedig egyre ltalnosabbakat. Minden gyermekosztly rkli az sosztly llapott s a metdusait, de nincs ezekre korltozva. A gyermekosztlyok hozzadhatnak vltozkat s metdusokat ahhoz, amit az sosztlytl rklt. A gyermekosztlyok fell tudjk rni az rklt metdusokat, vagy specilisabb megvalstst tud adni azoknak. Pldul a Hegyi bicikli a Bicikli leszrmazottja:class MountainBike extends Bicycle { // j adattagok s metdusok helye }

Az rkldsnl nem vagyunk behatrolva egy szintre. Az rklsi fa, vagy ms nven az osztlyhierarchia tbb szint rklst is lehetv tesz, br egy tlagos felhasznli program esetn legtbbszr 4-5 szint elegend. Az rklds a kvetkez elnykkel jr: A leszrmazott osztlyok tudjk specializlni az sosztlytl rklt viselkedst. Az rklds segtsgvel az egyes osztlyokat jra fel lehet hasznlni. A programozk meg tudnak valstani olyan viselkedseket, amelyek az sosztlyban mg nem voltak konkrtan lerva. (Az ilyen osztlyokat absztrakt, elvont osztlyoknak nevezzk.) Az absztrakt sosztlyok csak rszben valstjk meg a szksges viselkedseket, s akr ms programozk fogjk azt a leszrmazottakban megvalstani.

Megjegyzs: Az objektumorientlt szemllet megismerse utn sok fejleszt szmra ers a ksrts, hogy olyankor is az rkldst alkalmazza, amikor inkbb ms technikkat (pl. kompozci, aggregci) rdemes alkalmazni.

Javban az Object osztly az osztlyhierarchia legfels eleme, minden ms osztly belle szrmazik (kzvetlenl vagy kzvetve). Az Object tpus vltoz brmilyen objektumra tud hivatkozni. Az Object osztlynak olyan megosztott viselkedsei (metdusai) vannak, amelyek lehetv teszik a Java VM-en val futst. Pldul minden osztly rkli a toString metdust, hogy az objektum sztringknt is megmutathat legyen.

2.Objektumorientlt paradigma

23. oldal

2.5. Publikus interfszltalnossgban egy eszkznek vagy rendszernek szoks az interfszrl beszlni: azt rja le, hogy kls dolgok hogyan tudnak kapcsoldni hozz. Ilyen rtelemben kt magyar ember kztt egy interfsz a magyar nyelv. Egy tetszleges osztly esetn teht a publikus interfsz alatt az osztly kvlrl is lthat (publikus) fellett rtjk. (Ez tbbnyire a publikus konstruktorokra s metdusokra korltozdik.) Az zenetklds fogalmra visszautalva az osztly publikus interfsze azt hatrozza meg, hogy ms objektumok milyen zenetet kldhetnek az objektumnak, illetve milyen mdon hozhatnak ltre az osztlynak egy pldnyt.

Java interfszrdemes itt megemlteni, hogy ez az elmleti fogalom nem egyezik meg a Java interfsz fogalmval. A Java nyelven bell az interfsz egy tpus, mint ahogy az osztly is tpus. Az osztlyhoz hasonlan az interfsz is definil metdusokat, de attl eltren soha nem valst meg metdust. Az interfszt megvalst osztly fogja annak metdusait megvalstani. Az interfszek hasznosak a kvetkez esetekben: Hasonlsgok megfogalmazsa anlkl, hogy mesterklt osztlyhierarchit ptennk fel Olyan metdusok definilsa, amelyeket tbb osztlyban meg kell valstani Tbbszrs rklds modellezse a ms nyelvekbl ismert veszlyek nlkl

2.6. Ellenrz krdsek Mi az objektum? Mi az zenet? Hogyan valsul meg a Java nyelvben? Mi az osztly? Mi az informci-elrejts? Mit rtnk egy osztly publikus interfszn? Mi az Object osztly szerepe? Mitl objektumorientlt egy program?

Igaz vagy hamis? Indokolja! Az absztrakci az objektumok kztti hasonlsgok figyelse, sszegyjtse. Az osztlyozs a vilg objektumainak rendszerezse. Az ltalnosts a vilg objektumainak leegyszerstse. A specializls egy szkebb kategria meghatrozsa az objektumok klnbzsge alapjn. Az objektumorientlt program egymssal kommunikl objektumok sszessge, ahol minden objektumnak megvan a jl meghatrozott feladatkre.

24. oldal

Java programozs (1.3. verzi)

Az objektum pldnyokat tulajdonsgaik s viselkedsk alapjn osztlyokba soroljuk. Csak akkor kldhet zenet egy objektumnak, ha a kld s a fogad objektum kapcsolatban llnak egymssal. Ha kt objektum llapota megegyezik, akkor a kt objektum azonos. Az osztly meghatrozza objektumainak viselkedst. Ha kt objektum ugyanahhoz az osztlyhoz tartozik, s ugyanaz az llapota, akkor ugyanarra az zenetre ugyangy reagl.

2.7. Gyakorl feladatModellezze egy nyelviskola tanfolyam-szervezsi feladatkrt! Kik vesznek rszt a folyamatban? Hogyan osztlyozhatjuk ket? Milyen rklsi kapcsolatok vannak az osztlyok kztt? Milyen mveleteket kpesek vgezni az objektumok? Modellezze egy cg (pl. egy 5-10 fs Kft.) tevkenysgt! A munka sorn mik (s kik) tekinthetk objektumnak? Milyen jellemzkkel s viselkedsi lehetsgekkel (itt specilisabban munkakpessgekkel) rendelkeznek? Van-e osztlyozsi lehetsg az objektumok kztt?

3.Vltozk

25. oldal

3. VltozkA BasicsDemo program sszeadja 1-tl 10-ig az egsz szmokat, majd kirja az eredmnyt.public class BasicsDemo { public static void main(String[] args) { int sum = 0; for (int current = 1; current = 0; ) { for (int j = 0; j < i; j++) { if (arrayOfInts[j] > arrayOfInts[j+1]) { int temp = arrayOfInts[j]; arrayOfInts[j] = arrayOfInts[j+1]; arrayOfInts[j+1] = temp; } } }

4.Opertorokfor (int i = 0; i < arrayOfInts.length; i++) { System.out.print(arrayOfInts[i] + " "); } System.out.println(); } }

35. oldal

A program a rendezett szmsorozatot fogja megjelenteni.

4.2. Relcis opertorokA relcis opertorok sszehasonltanak kt rtket, s meghatrozzk a kztk lv kapcsolatot. Pldul a != true-t ad, ha a kt operandus nem egyenl. A kvetkez tblzatban sszegyjtttk a relcis opertorokat: Opertor > >= < op2 op1 >= op2 op1 < op2 op1 System.out.println(" j > System.out.println(" k > than..."); j = " + (i > j));//false i = " + (j > i));//true j = " + (k > j));//false; or equal to..."); " + (i >= j));//false " + (j >= i));//true " + (k >= j));//true

System.out.println("Greater than System.out.println(" i >= j = System.out.println(" j >= i = System.out.println(" k >= j =

36. oldal

Java programozs (1.3. verzi)System.out.println("Less than..."); System.out.println(" i < j = " + (i < j));//true System.out.println(" j < i = " + (j < i));//false System.out.println(" k < j = " + (k < j));//false System.out.println("Less than or System.out.println(" i = j = j >= i = k >= j =

Less than... i < j = true j < i = false k < j = false Less than or i op2 op1 >>> op2 op1 bitjeit op2 rtkvel balra lpteti; jobbrl nullkkal tlti fel op1 bitjeit op2 rtkvel jobbra lpteti; balrl a legnagyobb helyrtk bitet tlt fel op1 bitjeit op2 rtkvel jobbra lpteti; balrl nullkkal tlt fel.

Mindegyik opertor az els operandus bitjeit lpteti az opertor ltal megadott irnyba a msodik operandus rtkvel. Pldul a kvetkez kifejezsben a 13-as egsz szm bitjeit lptetjk 1-el jobbra:13 >> 1;

A 13-as szm kettes szmrendszerbeli rtke: 1101. A lptets eredmnye: 1101 egy pozcival jobbra - 110, (decimlisan 6). A bal oldali biteket 0-val tltttk fel. A kvetkez tblzatban a Java programozsi nyelvben hasznlatos bitenknti logikai opertorokat s funkcijukat lthatjuk: Opertor & | ^ ~ Alkalmazs op1 & op2 op1 | op2 op1 ^ op2 ~op2 Lers Bitenknti s, ha mindkt operandus szm; feltteles s ha mindkt operandus logikai Bitenknti vagy, ha mindkt operandus szm; feltteles vagy, ha mindkt operandus logikai Bitenknti kizr vagy (xor) Bitenknti negci

sHa az operandus szm, az & opertor bitenknti s mveletet hajt vgre pronknt (helyrtk szerint) az operandus bitjein. Az s mvelet akkor ad vissza 1-et, ha a kifejezs mindkt bitje 1. Ha az s mveletet kt decimlis szmon hajtjuk vgre, pldul a 12-n s 13-n (12&13) akkor az adott szmok kettes szmrendszerbeli alakjn bitenknt kell vgrehajtanunk az s mveletet. Az eredmny gy 12-lesz decimlisan. Ha mindkt operandus 1, az s mvelet eredmnyknt is 1-et ad. Ellenkez esetben 0-t.

4.Opertorok

39. oldal

VagyHa mindkt operandus szm, akkor a | opertor a vagy mveletet hajtja vgre. A vagy mvelet 1-et ad eredmnyl, ha kt bit kzl brmelyik rtke 1.

Kizr vagyHa mindkt operandus szm, akkor a ^ opertor a kizr vagy (xor) mveletet hajtja vgre. Kizr vagy esetn a kifejezs eredmnye akkor egy, ha a kt operandus bit klnbz, ellenkez esetben az eredmny 0.

NegciVgl a negcis opertor (~) az operandus bitjeit egyenknt az ellenkezjre fordtja: ha az operandus bitje 1, akkor az eredmny 0, ha az operandus bitje 0, akkor az eredmny 1. Pldul: ~1011 (11) = 0100 (4).

4.4.1

Bitmanipulcik a gyakorlatban

Egyebek kztt a bitenknti mveletekkel hasznosan kezelhetk a logikai bitek is. Tegyk fel pldul, hogy az adott programban vannak logikai bitek, melyek a klnbz sszetevk llapott hatrozzk meg a programban. Ez clravezetbb, mint klnbz boolean vltozk definilsa. Bitmanipulci segtsgvel bellthatk, s vltoztathatk az adott bitek rtkei. Elszr definiljunk konstansokat, melyek a program klnbz bitjeit hatrozzk majd meg. Ezek a konstansok a kettes szmrendszer klnbz helyi rtkei, gy biztosthatjuk, hogy ksbb nem lesznek sszekeverhetk. Ksbb ezek a konstansok a bit vltozk rtkeit segtik majd kinyerni. A kvetkez pldban a biteket 0 rtknek inicializljuk, ami azt jelenti, hogy minden rtk hamis.static static static static final final final final int int int int VISIBLE = 1; DRAGGABLE = 2; SELECTABLE = 4; EDITABLE = 8;

int flags = 0;

A VISIBLE szimbolikus konstans jelzi, ha valami lthatv vlik a programban. Ezt a bitet lltja egyesre a kvetkez sor:flags = flags | VISIBLE;

A lthatsgot a kvetkez kpen tesztelhetjk:if ((flags & VISIBLE) == VISIBLE) { ... }

Itt lthat a teljes program (BitwiseDemo), mely magban foglalja a fenti kdot:public class BitwiseDemo { static static static static final final final final int int int int VISIBLE = 1; DRAGGABLE = 2; SELECTABLE = 4; EDITABLE = 8;

40. oldal

Java programozs (1.3. verzi)public static void main(String[] args) { int flags = 0; flags = flags | VISIBLE; flags = flags | DRAGGABLE; if ((flags & VISIBLE) == VISIBLE) { if ((flags & DRAGGABLE) == DRAGGABLE) { System.out.println("Flags are Visible " + "and Draggable."); } } flags = flags | EDITABLE; if ((flags & EDITABLE) == EDITABLE) { System.out.println("Flags are now also Editable."); }

}

}

A fenti program kimenete:Flags are Visible and Draggable. Flags are now also Editable.

4.5. rtkad opertorokAz alap rtkad (=) opertort hasznlhatjuk arra, hogy egy rtket hozzrendeljnk egy vltozhoz. A MaxVariablesDemo program az =-t hasznlja, hogy inicializlja a vltozit:byte largestByte = short largestShort int largestInteger long largestLong = Byte.MAX_VALUE; = Short.MAX_VALUE; = Integer.MAX_VALUE; Long.MAX_VALUE;

float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; char aChar = 'S'; boolean aBoolean = true;

A Java programozsi nyelv azt is megengedi a rvidtett rtkad opertorok segtsgvel, hogy aritmetikai, rtknvelsi, valamint bitenknti mveletvgzst sszekssk az rtkadssal. Pldul, ha egy vltoz rtkt akarjuk nvelni, akkor:i=i+2;

Ezt le lehet rvidteni a += rvidtett opertor segtsgvel:i += 2;

A fenti kt rtkads megegyezik. A kvetkez tblzat tartalmazza a rvidtett rtkad opertorokat s a hosszabb alakjukat. Opertor Hasznlat += op1 += op2 Egyezik op1 = op1 + op2

4.Opertorok -= *= /= %= &= |= ^= = >>>= op1 -= op2 op1 *= op2 op1 /= op2 op1 %= op2 op1 &= op2 op1 |= op2 op1 ^= op2 op1 = op2 op1 >>>= op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1 / op2 op1 = op1 % op2 op1 = op1 & op2 op1 = op1 | op2 op1 = op1 ^ op2 op1 = op1 > op2 op1 = op1 >>> op2

41. oldal

4.6. Egyb opertorokA Java nyelv tmogatja mg a kvetkez tblzatban foglalt opertorokat. Opertor ?: [] . ( params ) ( type ) new instanceof Lers Feltteles opertor Tmbk deklarlsra, ltrehozsra s elemeinek hozzfrsre hasznlt opertor. Minstett hivatkozs Vesszvel elvlasztott paramtereket foglalja keretbe. tkonvertlja az rtket egy meghatrozott tpuss. j objektum ltrehozsa. Megllaptja, hogy az els operandus tpusa-e a msodik operandus.

4.7. Ellenrz krdsek Mit jelent a logikai kifejezs? Hogyan kell logikai tpus vltozkat deklarlni? Mire hasznlhat a != opertor? Mire hasznlhat a || opertor? Az s s vagy opertorok jobb oldali operandusa mikor kerl kirtkelsre?

42. oldal Mi a klnbsg a >> s >>> opertorok kztt?

Java programozs (1.3. verzi)

Mit r ki a kvetkez kdrszlet?System.out.println(4/3);

6 0 1 7

5.Kifejezsek, utastsok, blokkok

43. oldal

5. Kifejezsek, utastsok, blokkokA vltozk s az opertorok, amelyekkel az elz fejezetben ismerkedhettnk meg, a programok alapvet ptkvei. Vltozk, literlok s opertorok kombinciibl hozzuk ltre a kifejezseket kdszegmenseket, amelyek szmtsokat vgeznek, s rtkeket adnak vissza. Nhny kifejezs utastsokba szervezhet ezek komplett futtatsi egysgek. Ezeket az utastsokat kapcsos zrjelek kz csoportostva { s } kapjuk meg az utastsblokkokat.

5.1. KifejezsekA kifejezsek hajtjk vgre a program feladatt. A kifejezseket tbbek kztt vltozk kiszmtsra, rtkk belltsra s a program futsnak ellenrzsre hasznljuk. A kifejezseknek ktfle feladata van: vgrehajtani a szmtsokat, amelyeket a kifejezs alkotelemi hatroznak meg, s visszaadni a szmts vgeredmnyt. Definci: A kifejezs vltozk, opertorok s metdushvsok olyan sorozata (a nyelv szintaxist figyelembe vve) amely egy rtket ad vissza. Ahogy az elzekben mr emltettk, az opertorok egy rtket adnak vissza, gy az opertor hasznlatval egy kifejezst kapunk. A MaxVariablesDemo program rszlete nhnyat bemutat a program kifejezsei kzl:... char aChar = 'S'; boolean aBoolean = true; System.out.println("The largest byte value is " + largestByte); ... if (Character.isUpperCase(aChar)) { ... }

A kifejezsek kirtkelse sorn vgrehajtsra kerlnek mveletek, s a kifejezs visszaad egy rtket, mint az a kvetkez tblzatban is lthat: Kifejezs aChar = 'S' Mvelet Az 'S' karaktert adja rtkl az aChar karakter tpus vltoznak sszefzi a sztringet s a largestByte rtkt sztringg konvertlva isUpperCase metdus hvsa Visszaadott rtk aChar rtke az rtkads utn ('S') Az eredmny az szszefztt sztring A metdus visszatrsi rtke: true

"The largest byte value is " + largestByte Character.isUpperCase(aChar)

A kifejezs ltal visszaadott rtk adattpusa fgg a kifejezsben hasznlt alkotelemektl. Az aChar = 'S' kifejezs egy karaktert ad vissza, mert az rtkad opertor ugyan-

44. oldal

Java programozs (1.3. verzi)

olyan tpus rtkkel tr vissza, mint amilyenek az operandusai, s az aChar valamint az 'S' karakter tpusak. A tbbi kifejezsnl mr lthattuk, hogy egy kifejezs egy boolean rtkkel, egy sztringgel s egyb rtkekkel is visszatrhet. A Java nyelv lehetsget biztost sszetett kifejezsek s utastsok ltrehozsra kisebb kifejezsekbl, amg a kifejezs egyik rszben hasznlt adattpusok megegyeznek a tbbi rsz adattpusaival. Itt lthatunk egy pldt sszetett kifejezsre:x * y * z

Ebben a klnleges pldban a sorrend, amely szerint a kifejezs kirtkeldik, nem fontos, mivel a szorzs eredmnye nem fgg a tagok sorrendjtl, a vgeredmny mindig ugyanaz, nem szmt, milyen sorrendben vgezzk el a szorzsokat. Azonban ez nem minden kifejezsre igaz. Pldul a kvetkez kifejezs klnbz eredmnyt ad attl fggen, hogy az sszeads vagy az osztst megvalst opertor hajtdik-e vgre elsknt:x + y / 100

Zrjelezssel meghatrozhatjuk, hogy egy kifejezs hogyan rtkeldjn ki. Pldul gy tehetjk egyrtelmv a vgrehajtst az elz plda esetben:(x + y)/ 100

Ha hatrozattan nem jelezzk a sorrendet, amely szerint akarjuk, hogy az sszetett kifejezs kirtkeldjn, akkor a sorrendet az opertorok precedencija fogja meghatrozni. A magasabb precedencival rendelkez opertorok hajtdnak vgre elsknt. Pldul az oszts opertor magasabb precedencij, mint az sszeads. gy a kvetkez kt kifejezs megegyezik egymssal:x + y / 100 x + (y / 100)

Ha sszetett kifejezst runk, akkor kifejezetten figyelnnk kell a zrjelezsre s arra, hogy mely opertoroknak kell kirtkeldnik elsknt. Ennek a gyakorlsa segthet a forrskd jobb olvashatsgnak s karbantarthatsgnak elrsben. A kvetkez tblzat a Java platformban hasznlt opertorok precedencia-szintjeit mutatja be. Az opertorok a tblzatban precedencia-szint szerint vannak rendezve: legfell a legnagyobb precedencival rendelkez tallhat. A magasabb precedencival rendelkez opertorok elbb hajtdnak vgre, mint az alacsonyabbal rendelkezk. Az azonos szinten elhelyezked opertorok azonos precedencival rendelkeznek. Ha azonos precedencij opertorok szerepelnek egy kifejezsben, akkor szablyozni kell, hogy melyik rtkeldjn ki elsknt. Minden binris opertor, kivve az rtkad opertorokat balrl jobbra hajtdnak vgre. Az rtkad opertorok jobbrl balra hajtdnak vgre.

5.Kifejezsek, utastsok, blokkok

45. oldal

Opertor precedencia szintekpostfix unris multiplikatv additv lptets relcis egyenlsg bitenknti s expr++ expr-++expr --expr +expr -expr ~ ! * / % + > >>> < > = instanceof == != &

bitenknti kizr vagy ^ bitenknti vagy logikai s logikai vagy feltteles rtkads | && || ?: = += -= *= /= %= &= ^= |= = >>>=

5.2. UtastsokAz utastsok nagyjbl a beszlt nyelv mondatainak felelnek meg. Az utasts egy konkrt futsi egysget hoz ltre. A kvetkez kifejezstpusok szervezhetk utastsokba, amelyek pontosvesszvel vgzdnek (;): rtkad kifejezsek++ s -- hasznlata

metdushvsok objektumot ltrehoz kifejezsek

Az utastsoknak ezt a fajtjt kifejezs utastsoknak nevezzk. Itt lthatunk pr pldt a kifejezs-utastsokra:aValue = 8933.234; aValue++; System.out.println(aValue); Integer integerObject = new Integer(4); //rtkad utasts //nvels //metdus hvs //objektum ltrehozs

A kifejezs-utastsokon kvl mg ktfle tpust kell megemltennk. A deklarcis utasts ltrehoz egy vltozt. Sok pldt lthattunk mr deklarcis utastsokra.double aValue = 8933.234; //deklarcis utasts

46. oldal

Java programozs (1.3. verzi)

A vgrehajts-vezrl utasts szablyozza, hogy az utastsok milyen sorrendben hajtdnak vgre. A for ciklus s az if utasts j pldk a vgrehajts-vezrl szerkezetre.

5.3. BlokkokA blokk nulla vagy tbb utasts kapcsos zrjelek kztt, amely hasznlhat brhol, ahol az nll utastsok megengedettek. A kvetkez rszlet kt blokkot mutat be MaxVariablesDemo programbl, mindegyik tartalmaz egy nll utastst:if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); }

5.4. sszefoglalsEgy kifejezs vltozk, opertorok s metdushvsok sorozata (a nyelv szintaxist figyelembe vve), amely egy rtket ad vissza. rhatunk sszetett kifejezseket is egyszerbbekbl sszelltva mindaddig, amg a magban foglalt, az opertorokhoz szksges adattpusok megfelelek. Ha sszetett kifejezst runk, akkor kifejezetten figyelnnk kell a zrjelezsre s arra, hogy mely opertoroknak kell kirtkeldnik elsknt. Ha nem hasznljuk a zrjelezst, akkor a Java platform az opertorok precedencija szerint rtkeli ki az sszetett kifejezst. A korbbi tblzat mutatja be a Java platformban megtallhat opertorok precedencijt. Az utasts egy konkrt utastsi egysget valst meg, amelyet pontosvessz zr le (;). Az utastsoknak hrom fajtja van: kifejezs utastsok, deklarcis utastsok, vgrehajts-vezrl utastsok. Nulla vagy tbb utastsbl a kapcsos zrjelek segtsgvel blokkokat alakthatunk ki: { s }. Habr nem szksges, ajnlott az alkalmazsa akkor is, ha a blokk csak egy utastst tartalmaz.

5.5. Ellenrz krdsek Mit jelent a programblokk? Hogyan kell egy programblokkot lerni Jvban? Mondjon pldt kifejezs-utastsra! Kell e pontosvesszt (;) rni egy kifejezs vgre? Azonos precedencij opertorok esetn mikor fog jobbrl balra haladni a kirtkels?

A kvetkez sorok kzl melyik fog hiba nlkl lefordulni? float f=1.3; char c="a";

5.Kifejezsek, utastsok, blokkok byte b=257; boolean b=null; int i=10;

47. oldal

5.6. Gyakorl feladatokrjon programot, amely kiszmtja s kirja az 5 egysg sugar gmb trfogatt! Hozzon ltre egy r vltozt 5-s kezdrtkkel. Szmtsa ki a trfogat rtkt a kvetkez kplet alapjn. V = 4r 3 3

rjon programot, amely kiszmtja s kirja a msodfok egyenlet kt megoldst! (Felttelezzk, hogy kt megolds ltezik, a gyk alatti kifejezs esetleges negatv voltval most nem kell foglalkozni.) x1, 2 = b b 2 4ac 2a

Hozzon ltre a, b s c vals tpus vltozkat tetszleges kezdrtkkel! Hozzon ltre x1 s x2 nev vltozkat, s vgezze el a szmtsokat! (A ngyzetgykvonsra a Math.sqrt() metdust lehet alkalmazni. A metdus negatv paramter esetn NaN specilis rtket adja.) rja ki az eredmnyeket a konzolra! Mdostsa a programot gy, hogy a diszkriminns (a gykjel alatti kifejezs) rtkt egy d nev vltozba szmtsa ki elszr, majd ennek felhasznlsval szmtsa az x1 s x2 rtkt. (Plda adatok a tesztelshez: a = 1, b = -5, c = 6 esetn x1=2, x2=3) rjon programot, amelyik kirajzolja a karcsonyft!/ \ \ / \ ----------" " " " " " / / \

48. oldal

Java programozs (1.3. verzi)

6. Vezrlsi szerkezetek6.1. A while s a do-while ciklusokA while ciklus utastsblokk vgrehajtsra hasznlhat, amg a felttel igaz. A while ciklus szintaxisa:while (felttel) { utastsok }

A while ciklus elszr kirtkeli a felttelt, amely mvelet egy boolean rtket ad vissza. Ha a kifejezs rtke igaz, a while ciklus vgrehajtja while blokkjban szerepl utastsokat. A while ciklus addig rtkeli ki a kifejezst s hajtja vgre az utastsblokkot, amg a kifejezs hamis rtk nem lesz. A kvetkez WhileDemo nev pldaprogram a while ciklust hasznlja fel, amely megvizsglja a sztring karaktereit, hozzfzi a sztring minden karaktert a sztring puffer vghez, amg g betvel nem tallkozik.public class WhileDemo { public static void main(String[] args) { String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); while (c != 'g') { copyToMe.append(c); c = copyFromMe.charAt(++i); } System.out.println(copyToMe);

} }

Az rtk, amelyet az utols sor r ki:Copy this strin

A Java nyelv egy a while ciklushoz hasonl utastst is biztost a do-while ciklust. A do-while szintaxisa:do { utasts(ok) } while (felttel);

Ahelyett, hogy a felttelt a ciklus vgrehajtsa eltt rtkeln ki, a do-while ezt a ciklusmag lefutsa utn teszi meg. gy a do-while magjban szerepl utastsok minimum egyszer vgrehajtdnak. Itt lthat az elz program do-while ciklussal megvalstva, ami a DoWhileDemo nevet kapta:

6.Vezrlsi szerkezetekpublic class DoWhileDemo { public static void main(String[] args) {

49. oldal

String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); do { copyToMe.append(c); c = copyFromMe.charAt(++i); } while (c != 'g'); System.out.println(scopyToMe);

} }

Az rtk, amelyet az utols sorban kir:Copy this strin

6.2. A for ciklusA for utasts j mdszer egy rtktartomny bejrsra. A for utastsnak van egy hagyomnyos formja, s a Java 5.0-tl kezdden egy tovbbfejlesztett formja is, amit tmbkn s gyjtemnyeken val egyszer bejrsnl hasznlhatunk. A for utasts ltalnos formja a kvetkezkppen nz ki:for (inicializls; felttel; nvekmny) { utasts(ok) }

Az inicializls egy olyan kifejezs, amely kezdrtket ad a ciklusnak ez egyszer, a ciklus elejn fut le. A felttel kifejezs azt hatrozza meg, hogy meddig kell a ciklust ismtelni. Amikor a kifejezs hamisknt rtkeldik ki, a ciklus nem folytatdik. Vgezetl a nvekmny egy olyan kifejezs, amely minden ismtlds utn vgrehajtdik a ciklusban. Mindezen sszetevk opcionlisak. Tulajdonkppen ahhoz, hogy egy vgtelen ciklust rjunk, elhagyjuk mindhrom kifejezst:for ( ; ; ) { ... }

A for ciklusokat gyakran arra hasznljuk, hogy egy tmb elemein vagy egy karakterlncon vgezznk itercit. Az albbi plda, ForDemo, egy for utastst hasznl arra, hogy vgighaladjon egy tmb elemein s kirja ket.

50. oldal

Java programozs (1.3. verzi)

public class ForDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; for (int i = 0; i < arrayOfInts.length; i++) { System.out.print(arrayOfInts[i] + " "); } System.out.println();

} }

A program futsi eredmnye:32 87 3 589 12 1076 2000 8 622 127

Megjegyezzk, hogy egy loklis vltoz is deklarlhat a for ciklus inicializl kifejezsben. Ennek a vltoznak az rvnyessge a deklarcijtl a for utasts ltal vezrelt blokk vgig terjed, teht mind a lezr s a nvekmny kifejezseiben is hasznlhatk. Ha a for ciklust vezrl vltozra nincs szksg a cikluson kvl, a legjobb, ha a vltozt az rtkad kifejezsben deklarljuk. Az i, j s k neveket gyakran a for ciklusok vezrlsre hasznljuk, ezeknek a for ciklus rtkad kifejezsn bell val deklarlsa leszkti lettartamukat, s cskkenti a hibalehetsgeket.

Gyjtemnyeken s tmbkn val bejrs a kibvtett for ciklussalAz 5.0-ban egy jfajta for utastst hoztak ltre kifejezetten gyjtemnyekhez s tmbkhz. Az utasts ltalnos alakja:for (elemtpus elem : trol) { utasts(ok) }

Itt egy kis kdrszlet, ami ugyanazt a feladatot vgzi, mint az elz kdrszlet.public class ForEachDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; for (int element : arrayOfInts) { System.out.print(element + " "); } System.out.println();

} }

A kibvtett for utasts igazn akkor elnys, amikor gyjtemnyekre alkalmazzuk (osztlyok, amik a Collection interfszt implementljk). Itt lthat egy rgi tpus for utasts, ami itertor segtsgvel egy gyjtemnyen halad vgig:void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) i.next().cancel(); }

Most nem kell aggdnunk a klns kdrszlet miatt. Ksbb fogunk magyarzatot adni a rszletekre. A lnyeg az, hogy elkerlhetjk ezt a kibvtett for ciklus hasznlatval:

6.Vezrlsi szerkezetekvoid cancelAll(Collection c) { for (TimerTask t : c) t.cancel(); }

51. oldal

Amikor itercikat gyazunk egybe, a kibvtett for utasts mg jobb, mivel flsleges kdrszeket kerlhetnk el. Pldul:for (Suit suit : suits) { for (Rank rank : ranks) sortedDeck.add(new Card(suit, rank)); }

A kibvtett for utasts sajnos nem mkdik mindenhol. Hogyha pl. tmbindexekhez akarunk hozzfrni, a kibvtett for nem fog mkdni. Amikor csak lehet, a tovbbfejlesztett for-t hasznljuk, tbb programhibt is kikszblhetnk, s a forrskdunk rendezettebb lesz.

6.3. Az if-else szerkezetAz if utasts lehetv teszi a programunk szmra, hogy valamilyen kritrium szerint kivlasztva futtasson ms utastsokat. Pldul tegyk fel azt, hogy a programunk hibakeres (debugging) informcikat r ki egy DEBUG nev, boolean tpus vltoz rtke alapjn. Ha a DEBUG igaz, a program kirja az informcit, az x vltoz rtkt. Klnben a program futsa normlisan folytatdik. Egy ilyen feladatot implementl programrsz a kvetkezkppen nzhet ki:if (DEBUG) { System.out.println("DEBUG: x = " + x); }

Ez az if utasts legegyszerbb formja. Az if ltal vezrelt blokk vgrehajtdik, ha a felttel igaz. ltalban az if egyszer alakja gy nz ki:if (felttel) { kifejezsek }

Mi van akkor, ha az utastsok ms vltozatt akarjuk futtatni, ha a felttel kifejezs hamis? Erre az else utastst hasznlhatjuk. Vegynk egy msik pldt. Tegyk fel azt, hogy a programunknak klnbz mveleteket kell vgrehajtania attl fggen, hogy a felhasznl az OK gombot vagy ms gombot nyom meg a figyelmeztet ablakban. A programunk kpes lehet erre, ha egy if utastst egy else utastssal egytt hasznlunk.if (response == OK) { //code to perform OK action } else { //code to perform Cancel action }

Az else blokk akkor kerl vgrehajtsra, ha az if felttele hamis. Az else utasts egy msik formja az else if egy msik felttelen alapulva futtat egy utastst. Egy if utastsnak lehet akrhny else if ga, de else csak egy. Az albbi IfElseDemo program egy teszt pontszmot alapul vve egy osztlyzatot hatroz meg: 5-s 90%-rt vagy afltt, 4-es 80%-rt vagy afltt s gy tovbb:public class IfElseDemo { public static void main(String[] args) {

52. oldalint testscore = 76; int grade; if (testscore >= 90) grade = 5; } else if (testscore grade = 4; } else if (testscore grade = 3; } else if (testscore grade = 2; } else { grade = 1; } } { >= 80) { >= 70) { >= 60) {

Java programozs (1.3. verzi)

System.out.println("Grade = " + grade); }

Ennek a programnak a kimenete:Grade = 3

Megfigyelhetjk, hogy a testscore rtke tbb kifejezs felttelnek is eleget tehet az albbi if utastsok kzl: 76 >= 70 s 76 >= 60. Azonban, ahogy a vgrehajt rendszer feldolgoz egy olyan sszetett if utastst, mint ez, amint egy felttel kielgl, lefutnak a megfelel utastsok (grade = 3), s a vezrls kikerl az if utastsbl anlkl, hogy a tovbbi feltteleket kirtkeln. A Java programozsi nyelv tmogat egy hromoperandus opertort, ami egyszer esetekben az if utasts helyett alkalmazhat. Az opertor ltalnos alakja:logikai kifejezs ? kifejezs-ha-igaz : utasts-ha-hamis

Idzzk fel ezt az utastst a MaxVariablesDemo programbl:if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); }

Itt lthat, hogyan hasznlhatjuk ezt az opertort:System.out.println("The character " + aChar + " is " + (Character.isUpperCase(aChar) ? "upper" : "lower") + "case.");

A ?: opertor kirtkelsnek eredmnye az upper karaktersorozat lesz, ha az isUpperCase metdus igaz rtket ad vissza, egybknt pedig a lower karaktersorozat. Az eredmny ssze lesz fzve a megjelenteni kvnt zenet ms rszeivel. Ha megszokjuk ezt a szerkezetet, bizonyos esetekben knnyebben olvashatbb s tmrebb teheti a kdunkat.Megjegyzs: rdemes megfigyelni, hogy mirt is lehetett itt az if-else szerkezetet kivltani a hromoperandus opertorral: az if s else gon is ugyanazt akartuk tenni egy bizonyos kifejezssel: ki akartuk rni. Ha ez a kzs felhasznls nem ll fenn, akkor maradnunk kell az if-else utastsnl. Megjegyzs: ltalban nem felttlenl szksges, mgis sok alkalommal zrjelezzk az egyes operandusokat, s idmknt az egsz opertor-kifejezst is. (Az elz plda az egsz kifejezst zrjeleni.)

6.Vezrlsi szerkezetek

53. oldal

6.4. A switch-case szerkezetAkkor hasznlhatjuk a switch utastst, ha egy egsz szm rtke alapjn akarunk vgrehajtani utastsokat. A kvetkez SwitchDemo pldaprogram egy month nev egsz tpus vltozt deklarl, melynek rtke vlhetleg a hnapot reprezentlja egy dtumban. A program a switch utasts hasznlatval a hnap nevt jelenti meg a month rtke alapjn.public class SwitchDemo { public static void main(String[] args) { int month = 8; switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Not a month!"); break; } } }

A switch utasts kirtkeli kifejezst, ez esetben a month rtkt, s lefuttatja a megfelel case utastst. Ezltal a program futsi eredmnye az August lesz. Termszetesen ezt az if utasts felhasznlsval is megoldhatjuk:int month = 8; if (month == 1) { System.out.println("January"); } else if (month == 2) { System.out.println("February"); } ...

Annak eldntse, hogy az if vagy a switch utastst hasznljuk, programozi stlus krdse. Megbzhatsgi s ms tnyezk figyelembevtelvel eldnthetjk, melyiket hasznljuk. Mg egy if utastst hasznlhatunk arra, hogy egy rtkkszlet vagy egy felttel alapjn hozzunk dntseket, addig a switch utasts egy egsz szm rtke alapjn hoz dntst. Msrszt minden case rtknek egyedinek kell lennie, s a vizsglt rtkek csak konstansok lehetnek. Egy msik rdekessg a switch utastsban a minden case utni break utasts. Minden egyes break utasts megszaktja az pp bezrd switch utastst, s a vezrls szla a switch blokk utni els utastshoz kerl. A break utastsok szksgesek, mivel nlklk a case utastsok rtelmket vesztenk. Vagyis egy explicit break nlkl a vezrls folytatlagosan a rkvetkez case utastsra kerl (tcsorog). Az albbi SwitchDemo2 plda azt illusztrlja, hogyan lehet hasznos, ha a case utastsok egyms utn lefutnak.

54. oldal

Java programozs (1.3. verzi)

public class SwitchDemo2 { public static void main(String[] args) { int month = 2; int year = 2000; int numDays = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if ( ((year % || (year numDays = else numDays = break; default: numDays = 0; break; } }

4 == 0) && !(year % 100 == 0)) % 400 == 0) ) 29; 28;

System.out.println("Number of Days = " + numDays); }

A program kimenete:Number of Days = 29

Technikailag az utols break nem szksges, mivel a vezrls amgy is befejezdne, kilpve a switch utastsbl. Azonban javasolt ekkor is a break hasznlata, mivel gy a kd knnyebben mdosthat s kevsb hajlamos a hibra. Ksbb mg ltni fogjuk a ciklusok megszaktsra hasznlt break-et. Vgl a switch utastsban hasznlhatjuk a default utastst, hogy mindazokat az rtkeket is kezelhessk, amelyek nem voltak egy case utastsban sem kezelve.Megjegyzs: A default utastsnak nem kell felttlenl az utolsnak lenni, br gy a leglogikusabb s gy is szoks ltalban elhelyezni. Ugyangy a case gak sorrendjnek is csak akkor lehet jelentsge, ha van olyan g, amelyiket nem zrtunk le breakkel.

6.4.1

A switch utasts s a felsorolt tpus

A felsorolt adattpus az 5.0-ban bevezetett jdonsg, amirl ksbb olvashat majd. Ez a rsz csak azt mutatja be, hogyan hasznlhatjuk ket egy switch utastsban. Szerencsre ez pont olyan, mint a switch hasznlata az egsz tpus vltozk esetn.

6.Vezrlsi szerkezetek

55. oldal

Az albbi SwitchEnumDemo kdja majdnem megegyezik azzal a kddal, amit korbban a SwitchDemo2-ben lttunk. Ez az egsz tpusokat felsorolt tpusokkal helyettesti, de egybknt a switch utasts ugyanaz.public class SwitchEnumDemo { public enum Month { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER } public static void main(String[] args) { Month month = Month.FEBRUARY; int year = 2000; int numDays = 0; switch (month) { case JANUARY: case MARCH: case MAY: case JULY: case AUGUST: case OCTOBER: case DECEMBER: numDays = 31; break; case APRIL: case JUNE: case SEPTEMBER: case NOVEMBER: numDays = 30; break; case FEBRUARY: if ( ((year % || (year numDays = else numDays = break; default: numDays=0; break; } }

4 == 0) && !(year % 100 == 0)) % 400 == 0) ) 29; 28;

System.out.println("Number of Days = " + numDays); }

Ez a plda csak egy kis rszt mutatta be annak, amire a Java nyelvi felsorolsok kpesek. A tovbbiakat ksbb olvashatja el.

6.5. Vezrlstad utastsokKivtelkezel utastsokA Java programozsi nyelv egy kivtelkezelsnek nevezett szolgltatst nyjt, hogy segtse a programoknak a hibk feldertst s kezelst. Amikor egy hiba trtnik, a program dob egy kivtelt. Ez azt jelenti, hogy a program normlis vgrehajtsa megszakad, s megksrel tallni egy kivtelkezelt, vagyis egy olyan kdblokkot, ami a klnfle