You are on page 1of 258

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 m!vet
szrmaz"os m!ve"et (#eldolgozso"at) hozhatsz ltre
Az al!!i "elt#telekkel
Jel$ld meg% & szerz vag' a jogosult ltal meghatrozott mdon "ell meg(
jel$lni a m!vet (pl. a szerz s a )*m #elt+ntetsvel).
,e add el% -zt a m!vet nem hasznlhatod #el "eres"edelmi )lo"ra.
& szerzi jogo" tulajdonosna" *rsos engedl'vel brmel'i" #enti #eltteltl eltrhetsz.
& #entie" nem be#ol'solj" a szabad #elhasznlshoz #!zd, illetve az eg'b jogo"at.
-z a Legal Code (Jogi vltozat, vag'is a teljes li)en)) sz$vegne" "$zrthet n'elven
meg#ogalmazott "ivonata.
-z a "ivonat a http.//)reative)ommons.org/li)enses/b'(n)/2.0/hu/ oldalon is olvasha(
t. & teljes li)ensz a http.//)reative)ommons.org/li)enses/b'(n)/2.0/hu/legal)ode olda(
lon rhet el.
- jeg'zet hivatalos honlapjrl (http.//nag'gusztav.hu) t$lthet le a minden"ori leg#ris(
sebb verzi.
3. oldal
$evezet#s
%elhasznls
-zzel a jeg'zettel arra vllal"ozo", hog' a 1e)s"emti 2is"ola 3&42 1arn tanul m!(
sza"i in#ormati"us hallgat" 5"ezbe6 ol'an *rsos an'agot adja", amel' az eladso" s
g'a"orlato" mellett tovbbi seg*tsget ad a Java n'elv alapjaina" s alapvetbb osztl'a(
ina" alapos megismersre.
& jeg'zet hasznlathoz nem nl"+l$zhetetlen, de ersen javasolt az eladso" ltogat(
sa s a g'a"orlato"on val a"t*v rszvtel. & jeg'zet alapveten a tanr" menethez
"ap)sold lineris #eldolgozsra "sz+lt, de a #ejezete" eg' rsze nem p*t a "$zvetlen
megelz #ejezete"re.
&z eg'es #ejezete" tanan'agna" elsajt*tshoz az elmleti rsz tolvassa utn az el(
lenrz "rdse" alapos tgondolst, valamint a g'a"orl #eladato" megoldst javas(
lom. -nl"+l a tantrg' teljes*tse a hallgat" t$bbsge szmra nem lesz eredmn'es.
& jeg'zet #elttelezi a C++ programozsi n'elv minimum "$zp szint! ismerett. &z
an'ag elsajt*tsa enne" hin'ban sem lehetetlen, de t$bb idt "ell r#ord*tani.
& jeg'zet alapos ttanulmn'ozsa s a Java programozs "omol'abb g'a"orlsa utn
a"r a 7un Java &rogramoz'i mins(t#sne" megszerzsre is lehet "sz+lni.
)sznet
& jeg'zet el"sz*tshez elssorban a Sun Microsystems Java Tutorial(jt hasznltam.
8ovbbi in#orm)i"rt a http://java.sun.com oldalt, valamint az -98- pillanatn'ilag
nehezen elrhet, de nag'on npszer! Java ti!alau" programo"#!na!$ )*m! "$n'vt
ajnlom.
7zeretn" "$sz$netet mondani a Sun(na" a Java megal"otsrt, a hallgat"na", a"i" a
jeg'zet alapjul szolgl Java Tutorial n'ers #ord*tsna" el"sz*tsben rszt vette", s
vg+l, de nem utols sorban "ollgmna", 3ur"a :ezsn ;sizms -ditne" a jeg'zet
alapos tolvassrt s p*t $tleteirt.
*ervek
& tavaszi #lv #ol'amt ellenrz s g'a"orl #eladato""al szeretnm a jeg'zetet bv*te(
ni. -nne" prhuzamosan tvo"tatsi jeg'zett ala"*ts is meg #og t$rtnni.
1e)s"emt, 2<<=. #ebrur
a s"er"%
>. oldal Java programozs (1.3. verzi)
*artalom+egyz#k
1.-ls lpse".........................................................................................................................?
1.1.&z els )ssze "v.......................................................................................................?
1.1.1&z els al"almazs ltrehozsa...............................................................................?
1.2.@evezets a Java te)hnolgiba.................................................................................11
1.2.1& Java programozsi n'elv...................................................................................11
1.2.2Java plat#orm........................................................................................................12
1.3.4ire j a Java te)hnolgiaA.......................................................................................12
1.>.4g eg'szer a BelloCorld programrl.....................................................................13
1.>.14egjeg'zse" a Java n'elvben.............................................................................13
1.>.2Dsztl'de#in*)i....................................................................................................1>
1.>.3& main metdus...................................................................................................1>
1.>.>Dsztl'o" s obje"tumo" hasznlata...................................................................10
1.0.-llenrz "rdse".....................................................................................................1E
2.Dbje"tumorientlt paradigma..........................................................................................1=
2.1.&z obje"tum................................................................................................................1=
2.2.&z +zenet....................................................................................................................1F
2.3.&z osztl'....................................................................................................................1?
2.>.&z $r$"lds...............................................................................................................21
2.0.Gubli"us inter#sz......................................................................................................23
2.E.-llenrz "rdse"....................................................................................................23
2.=.3'a"orl #eladat........................................................................................................2>
3.Hltoz"............................................................................................................................20
3.1.&datt*puso"................................................................................................................2E
3.2.Hltoz neve".............................................................................................................2=
3.3.Irvn'essgi tartomn'............................................................................................2F
3.>.Hltoz" ini)ializlsa...............................................................................................2F
3.0.Hgleges vltoz"......................................................................................................2?
3.E.-llenrz "rdse"....................................................................................................2?
>.Dpertoro".......................................................................................................................32
>.1.&ritmeti"ai opertoro"..............................................................................................32
>.1.1Jmpli)it "onverzi................................................................................................3>
>.2.Kel)is opertoro"...................................................................................................30
>.3.9ogi"ai opertoro"....................................................................................................3E
>.3.1K$vidzr "irt"els.............................................................................................3=
>.>.@itlptet s biten"nti logi"ai opertoro"..............................................................3F
>.>.1@itmanipul)i" a g'a"orlatban.........................................................................3?
>.0.Irt"ad opertoro".................................................................................................><
>.E.-g'b opertoro".......................................................................................................>1
>.=.-llenrz "rdse".....................................................................................................>1
0.1i#ejezse", utas*tso", blo""o"......................................................................................>3
0.1.1i#ejezse"..................................................................................................................>3
0.2.Ltas*tso"..................................................................................................................>0
0.3.@lo""o"......................................................................................................................>E
0.>.Mssze#oglals.............................................................................................................>E
0.0.-llenrz "rdse"....................................................................................................>E
0.E.3'a"orl #eladato"....................................................................................................>=
E.Hezrlsi szer"ezete".......................................................................................................>F
E.1.& Nhile s a do(Nhile )i"luso"..................................................................................>F
0. oldal
E.2.& #or )i"lus.................................................................................................................>?
E.3.&z i#(else szer"ezet.....................................................................................................01
E.>.& sNit)h()ase szer"ezet.............................................................................................03
E.>.1& sNit)h utas*ts s a #elsorolt t*pus................................................................... 0>
E.0.Hezrlstad utas*tso"...........................................................................................00
E.E.-llenrz "rdse"....................................................................................................0?
E.=.3'a"orl #eladato"....................................................................................................E<
=.Dbje"tumo" hasznlata...................................................................................................E2
=.1.Dbje"tumo" ltrehozsa............................................................................................E2
=.2.Bivat"ozs eg' obje"tum tagjaira.............................................................................EE
=.3.4etdush*vs.............................................................................................................EE
=.>.,em hasznlt obje"tumo" eltvol*tsa.....................................................................E=
=.0.8a"ar*ts....................................................................................................................E=
=.E.-llenrz "rdse"....................................................................................................E=
=.=.3'a"orl #eladat........................................................................................................EF
F.1ara"tere" s sztringe"...................................................................................................E?
F.1.& ;hara)ter osztl'....................................................................................................E?
F.2.7tring, 7tring@u##er s 7tring@uilder osztl'...........................................................=<
F.3.7ztringe" darabolsa.................................................................................................=F
F.>.-llenrz "rdse"....................................................................................................=F
F.0.3'a"orl #eladato"....................................................................................................F<
?.7zmo"..............................................................................................................................F1
?.1.& )somagol osztl'o" nhn' hasznlata............................................................... F1
?.2.7z$vegbl szmm "onvertls................................................................................F3
?.3.7zmbl sz$vegg "onvertls .................................................................................F3
?.>.7zmo" #ormzott "onvertlsa...............................................................................F>
?.0.&ritmeti"a..................................................................................................................F=
?.E.-llenrz "rdse"....................................................................................................?<
1<.8$mb$"...........................................................................................................................?2
1<.1.8$mb$" ltrehozsa s hasznlata..........................................................................?2
1<.2.Dbje"tum t$mb$"...................................................................................................?>
1<.3.8$mb$" t$mbjei......................................................................................................?0
1<.>.8$mb$" msolsa....................................................................................................?E
1<.0.-llenrz "rdse"..................................................................................................?=
1<.E.3'a"orl #eladato"..................................................................................................?F
11. Dsztl'o" ltrehozsa..................................................................................................1<<
11.1.Dsztl'o" de"larlsa.............................................................................................1<<
11.2.8agvltoz" de"larlsa.........................................................................................1<1
11.3.4etduso" de"larlsa..........................................................................................1<2
11.>.1onstru"toro"........................................................................................................1<3
11.0.Jn#orm)itads metdus vag' "onstru"tor szmra........................................ 1<>
11.E.& metduso" visszatrsi rt"e............................................................................1<=
11.=.& this "ul)ssz hasznlata......................................................................................1<F
11.F.-g' osztl' tagjai elrhetsgne" #el+g'elete .....................................................1<?
11.?.& pldn'o" s az osztl' tago"..............................................................................11>
11.?.1& pldn'o" s az osztl' tago" ini)ializlsa..................................................110
11.1<.-llenrz "rdse"................................................................................................11E
11.11.3'a"orl #eladato".................................................................................................11F
12.Mr$"lds......................................................................................................................12<
12.1.4etduso" #el+l*rsa s elrejtse...........................................................................12<
12.2.8agvltoz" elrejtse..............................................................................................122
12.3.& super hasznlata.................................................................................................122
E. oldal Java programozs (1.3. verzi)
12.>.&z Dbje)t osztl' metdusai..................................................................................12>
12.0.Hgleges osztl'o" s metduso"..........................................................................12E
12.E.-llenrz "rdse".................................................................................................12=
12.=.3'a"orl #eladato".................................................................................................12F
13.@eg'azott osztl'o".....................................................................................................12?
13.1.@els osztl'o" ......................................................................................................13<
13.2.,hn' tovbbi rde"essg....................................................................................131
13.3.-llenrz "rdse".................................................................................................132
1>.2elsorols t*pus.............................................................................................................133
1>.1.-llenrz "rdse".................................................................................................13>
10.Oltalnos programozs.................................................................................................130
10.1.Oltalnos t*pus de#inilsa s hasznlata...............................................................130
10.2.1ap)solato" az ltalnos t*puso" "$z$tt............................................................... 13E
10.3.Bel'ettes*t t*pus ...................................................................................................13=
10.>.Oltalnos metduso" de#inilsa s hasznlata ...................................................13F
10.0.Oltalnos t*puso" hasznlata az $r$"lsben......................................................... 13F
10.E.-llenrz "rdse".................................................................................................1><
1E.Jnter#sze".....................................................................................................................1>1
1E.1.Jnter#sz de#inilsa................................................................................................1>1
1E.2.Jnter#sze" implementlsa.................................................................................. 1>2
1E.3.&z inter#a)e hasznlata t*pus"nt..........................................................................1>3
1E.>.-llenrz "rdse".................................................................................................1>3
1=.;somago"......................................................................................................................1>0
1=.1.;somag ltrehozsa................................................................................................1>0
1=.2.-g' )somag elnevezse...........................................................................................1>E
1=.3.;somag tago" hasznlata.......................................................................................1>E
1=.>.2orrs s osztl' #jlo" menedzselse...................................................................1>F
1=.0.-llenrz "rdse".................................................................................................10<
1F.1ivtel"ezels................................................................................................................102
1F.1.1ivtele" el"apsa vag' tovbbengedse.............................................................. 103
1F.2.1ivtele" dobsa....................................................................................................10?
1F.2.1& throN hasznlata...........................................................................................1E<
1F.3.-ldobhat osztl'o" s leszrmazottai.................................................................1E<
1F.>.9n)olt "ivtele"....................................................................................................1E1
1F.0.7ajt "ivtel osztl'o" ltrehozsa........................................................................1E2
1F.E.-llenrz "rdse".................................................................................................1E3
1?.Grogramszla" "ezelse................................................................................................1E0
1?.1.& 8imer s a 8imer8as" osztl'.............................................................................1EE
1?.1.1Jdz*tett szla" lell*tsa...................................................................................1E=
1?.1.2Jsmtelt #uttats................................................................................................1E=
1?.2.7zla" pldn'os*tsa............................................................................................1EF
1?.2.18hread leszrmazott s a run #el+l*rsa...........................................................1EF
1?.2.2Kunnable inter#sz pldn'os*tsa..................................................................1=<
1?.3.Grogramszl let)i"lusa.........................................................................................1=2
1?.3.1Grogramszl ltrehozsa...................................................................................1=2
1?.3.2Grogramszl elind*tsa.....................................................................................1=2
1?.3.3Grogramszl nem #uttathat llapotba ll*tsa............................................... 1=3
1?.3.>Grogramszl lell*tsa......................................................................................1=>
1?.3.0Grogramszl sttusz tesztelse.........................................................................1=0
1?.3.E& pro)esszor hasznlatna" #eladsa...............................................................1=0
1?.>.-llenrz "rdse".................................................................................................1=E
2<.2jl"ezels....................................................................................................................1=F
=. oldal
2<.1.&dat#ol'amo".........................................................................................................1=F
2<.1.12jl adat#ol'amo" hasznlata .........................................................................1F2
2<.1.27z!r adat#ol'amo".........................................................................................1F3
2<.2.Dbje"tum szerializ)i..........................................................................................1FE
2<.2.1Dbje"tumo" szerializlsa...............................................................................1FE
2<.2.2Dbje"tum szerializ)i a g'a"orlatban...........................................................1F=
2<.2.3&z -Pternalizable inter#sz implementlsa..................................................1FF
2<.2.>&z rz"en' in#orm)i megvdse................................................................1FF
2<.3.1$zvetlen elrs! llomn'o"..............................................................................1F?
2<.3.1& "$zvetlen elrs! llomn'o" hasznlata................................................... 1?<
2<.>.8ovbbi osztl'o" s inter#sze"..........................................................................1?<
2<.0.-llenrz "rdse".................................................................................................1?1
21.3'!jtemn'e"...............................................................................................................1?3
21.1.& g'!jtemn' "eretrendszer..................................................................................1?3
21.1.1& 3'!jtemn' "eretrendszer hasznlatna" eln'ei.......................................1?3
21.2.Jnter#sze"..............................................................................................................1?>
21.2.1& g'!jtemn' inter#sze".................................................................................1?0
21.2.2& ;olle)tion inter#sz.......................................................................................1?E
21.2.3& 7et inter#sz..................................................................................................1?F
21.2.>& 9ist inter#sz.................................................................................................2<1
21.2.04ap inter#sz...................................................................................................2<E
21.2.EDbje"tumo" rendezse....................................................................................2<F
21.3.Jmplement)i".....................................................................................................212
21.3.1Oltalnos )lQ 7et implement)i"..................................................................213
21.3.2Oltalnos )lQ 9ist implement)i"................................................................ 21>
21.3.3Oltalnos )lQ 4ap implement)i"...............................................................21>
21.>.&lgoritmuso"..........................................................................................................21>
21.>.1Kendezs...........................................................................................................21>
21.>.21evers.............................................................................................................21E
21.>.31eress..............................................................................................................21E
21.0.-llenrz "rdse".................................................................................................21E
22.Blzat"ezels..............................................................................................................21F
22.1.Blzati alapo"......................................................................................................21F
22.1.18;G....................................................................................................................21F
22.1.2L:G..................................................................................................................21F
22.1.3& porto"rl ltalnossgban............................................................................21?
22.1.>Blzati osztl'o" a J:1(ban.........................................................................22<
22.2.LK9(e" "ezelse....................................................................................................22<
22.2.1LK9 obje"tum ltrehozsa..............................................................................221
22.2.2LK9 elemzs....................................................................................................223
22.2.31$zvetlen olvass LK9(bl.............................................................................22>
22.2.>;satla"ozs eg' LK9(hez................................................................................22>
22.3.7o)"ete" "ezelse..................................................................................................22E
22.3.14i az a so)"etA.................................................................................................22E
22.3.2Dlvass s *rs a so)"et(rl.............................................................................22=
23.J:@; adatbzis("ezels...............................................................................................23<
23.1.&datbzis bell*tsa...............................................................................................23<
23.2.8bl" hasznlata..................................................................................................232
23.2.18bla ltrehozsa.............................................................................................232
23.2.2J:@; 7tatement ltrehozsa..........................................................................233
23.2.37R9 paran)s vgrehajtsa...............................................................................23>
23.2.>9e"rdezse" eredmn'ne" #eldolgozsa.....................................................230
F. oldal Java programozs (1.3. verzi)
2>.1dolsi "onven)i"....................................................................................................23=
2>.1.2jlo" szervezse....................................................................................................23=
2>.2.@ehQzs.................................................................................................................23F
2>.3.4egjeg'zse"........................................................................................................2><
2>.3.1Jmplement)is megjeg'zse"....................................................................... 2><
2>.3.2:o"ument)is megjeg'zse"........................................................................ 2>1
2>.>.:e"lar)i"...........................................................................................................2>2
2>.>.1& de"lar)i hel'e............................................................................................2>3
2>.>.2Dsztl' s inter#sz de"lar)i........................................................................2>3
2>.0.Ltas*tso"..............................................................................................................2>>
2>.E.-lvlaszt"............................................................................................................2>E
2>.=.-lnevezsi "onven)i"..........................................................................................2>E
20.8ervezsi mint"..........................................................................................................2>F
20.1.9trehozsi mint"................................................................................................2>?
20.1.1-g'"e (7ingleton).............................................................................................2>?
20.1.23'rt#+ggvn' (2a)tor' 4ethod) minta.......................................................20<
20.2.7zer"ezeti mint"..................................................................................................202
20.3.Hisel"edsi mint"................................................................................................202
2E.Java #ejlesztesz"$z$".................................................................................................203
2E.1.J;reator..................................................................................................................203
2E.2.,etbeans................................................................................................................203
2E.2.1&lapvet hasznlat...........................................................................................20>
2E.3.-)lipse....................................................................................................................20E
2E.3.1&lap tulajdonsgo"..........................................................................................20E
2E.3.2&z -)lipse beszerzse s +zembe hel'ezse....................................................20=
1.-ls lpse" ?. oldal
,. -ls l#&#sek
-z a #ejezet a Java programozs alapjaihoz mutat utat. @emutatja, hog'an tudju" a Javt
beszerezni, s hog'an tudju" el"sz*teni, #ord*tani s #uttatni az eg'szer! Java progra(
mo"at. Hg+l megismerhetj+" azt a httrtudst, amel' a programo" m!"$dsne"
megrtshez sz+"sges.
,.,. Az els .s#sze kv#
& Java programo" "sz*tshez sz+"sg+n" lesz a "$vet"ez"re.
Java "e+lesztkrnyezet /Java 0- 1evelo&ment )it2
& J:1(t (Java S& 'evelopment (it) a
http://java.sun.com/javase/do)nloads/inde*.jsp
)*mrl t$lthetj+" le, majd rtelemszer!en telep*ts+" is. (2ontos, hog' a J1)(t, s ne a
J3-(t t$lts+" le%)
Meg+egyz#s. 8ermszetesen Qjabb verzi megjelense esetn azt rdemes let$lteni s telep*teni.
& telep*ts a CindoNsban megszo"ott eg'szer!sggel t$rtni", ltalban elegend a
+e*t gombra "attintani.
1ok4ment.i'
& Java #ejleszt"$rn'ezeten "*v+l rdemes beszerezni (br a #ord*tshoz "$zvetlen+l
nem sz+"sges) az &GJ (,pplication -rogramming .nter/ace) do"ument)it is (szintn
az elz let$ltsi oldalrl indulva). -z a Java plat#ormon hasznlhat t$bb ezer osztl'
igen rszletes do"ument)ijt tartalmazza. & t$m$r*tett SJG llomn' tartalmt (docs
"$n'vtr) a #ejleszt"$rn'ezet g'$"r"$n'vtrba (pl. C:0-rogram 1iles0 jd!2.3.4542)
rdemes "i)somagolni.
0zvegszerkeszt
@rmil'en editor meg#elel a jeg'zett$mbtl (,otepad.ePe) az $sszetett programozi edi(
toro"ig.
,em rdemes a tanuls legelejn ol'an integrlt #ejleszt"$rn'ezet (.'& 6 .ntegrated
'evelopment &nvironment) al"almazni, amel'i" bizon'os n'elvi eleme"et elrejt a prog(
ramoz ell (pl. J7uilder), ug'ana""or a rendszer rengeteg szolgltatsa "$z$tt elveszi"
a "ezd #elhasznl. -legend a "d"iemelst biztos*t, esetleg a gpelst "$nn'*t szer(
"eszt hasznlata is. & n'elvtani alapo", #ord*ts, #uttatsi )i"lus beg'a"orlsa utn mr
pra"ti"us lehet az tlls eg' "omol'abb tmogatst n'Qjt esz"$zre.
& Jeg'zet 20. #ejezetben hrom npszer! editor hasznlathoz tallna" tippe"et. (- #e(
jezet pldi a paran)ssori #ord*ts(#uttats "iss nehz"es mdszert mutatj" be.)
,.,., Az els alkalmazs l#trehozsa
& #ejleszts menett jl mutatja a "$vet"ez bra. a #orrsllomn'bl a #ord*ts hats(
ra elll bjt"dot (8ytecode) "+l$nb$z (Java Hirtulis 3pet, JH4(et tartalmaz)
oper)is rendszeren tudju" #uttatni.
1<. oldal Java programozs (1.3. verzi)
&z els program (9ello:orld,pp) eg'szer!en "i*rja a "pern're a 9ello :orld; +zene(
tet. & "$vet"ez lpse" sz+"sgese".
5ozz4nk l#tre egy "orrsllomnyt
& #orrsllomn' eg'szer! sz$veges llomn' a Java n'elv szintaPisa szerint. & Java #or(
rsllomn' "iterjesztse .java.
Meg+egyz#s. <nicode (egsz pontosan L82) "dolsQ #orrs"d is hasznlhat%
(& 6ni.ode "dols "t bjton trol eg'(eg' "ara"tert, *g' a legt$bbet hasznlt n'elve" legt$bb bet!je s
*rsjele brzolhat vele.)
&z els programun".
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
4ents+" el a programot 9ello:orld,pp.java nven.
Meg+egyz#s. & Java n'elvben s az llomn'nvben is "+l$nbsget "ell tenni "is(, s nag'bet! "$z$tt,
#+ggetlen+l a CindoNsban megszo"ott lazasgtl.
%ord(ts4k le a "orrsllomnyt !+tk'dra
& javac (binTjava).ePe) #ord*t a sz$vegbl ol'an utas*tso"at ll*t el, amel'e"et a JH4
(Java =irtual Machine, Java virtulis gp) vgre tud hajtani. & bjt"dQ programllo(
mn' "iterjesztse .class.
,'issun" meg eg' paran)ssor abla"ot (Start men> / 1uttat?s / cmd.e*e), majd ll*t(
su" be az a"tulis "$n'vtrat a Java 8in al"$n'vtrra
(pl. cd $C:0-rogram 1iles0 jd!2.3.454208in$).
Jnd*tsu" el a javac #ord*tt. javac 9ello:orld,pp.java. (@izon'os esete"ben sz+"sg
lehet a #orrsllomn' teljes elrsi Qtjna" megadsra.)
1.-ls lpse" 11. oldal
%4ttass4k a &rogramot tartalmaz' !+tk'd llomnyt
& Java rtelmez (binTjava.ePe) a szm*tgpre telep*tett Java H4 szmra rtelmezi a
bjt"dQ program utas*tsait, a H4 pedig #uttatja azo"at.
3pelj+" be ("iterjeszts nl"+l).
java HelloWorldApp
Ba mindent jl )sinltun", megjeleni" a "onzol abla" "$vet"ez sorban a program +d(
v$zlete.
,.2. $evezet#s a Java te.hnol'gi!a
& Java te)hnolgia eg'arnt programozsi n'elv s plat#orm.
,.2., A Java &rogramozsi nyelv
& Java eg' magas szint! n'elv a "$vet"ez #bb jellemz""el.
eg'szer!
obje"tumorientlt
el#ord*tott
rtelmezett
robusztus
biztonsgos
semleges ar)hite"tQrjQ
hordozhat
nag' teljes*tmn'!
t$bbszlQ
dinami"us
Meg+egyz#s. Halsz*n!leg a #elsorols eg' rsze most mg nem so"at mond. 4ire azonban a jeg'zet v(
gre rne", s a Java n'elv! #ejlesztsben legalbb alap szint! g'a"orlatu" lesz, ez a lista so""al t$bbet #og
mondani.
& legt$bb programozsi n'elv esetn #ord*tst vag' rtelmezst hajtun" vgre, mieltt a
program #utna a gp+n"$n. & Java esetn a "ettne" eg' "+l$n$s "ever"t hasznlju".
-lsz$r a #orrsprogramot (my-rogram.java) a #ord*t (compiler@ 8in0javac.e*e) eg'
"$zb+ls n'elvre #ord*tva Java bjt"dot (my-rogram.class) ll*t el, s ezt a plat#orm(
#+ggetlen "dot rtelmezi s #uttatja a Java H4 (interpreter@ 8in0java.e*e). & #ord*ts
eg' al"alommal t$rtni", az rtelmezs pedig minden al"alommal, ahn'szor a program
vgrehajtdi". & "$vet"ez bra enne" m!"$dst illusztrlja.
12. oldal Java programozs (1.3. verzi)
& Java bjt"dot gpi "dd ala"*tja a Java H4. 4inden Java rtelmez, a"r a #ejlesz(
t"$rn'ezet, a"r eg' b$ngszben #ut applet, tartalmaz Java H4(et a #uttatshoz.
& Java bjt"d seg*tsgvel megoldhat az, hog' )sa" eg'szer "ell meg*rni eg' Java
programot, majd tetszleges (meg#elel verzijQ) Java H4(et tartalmaz gpen #uttatni
lehet. & Java programun"at brmel'i" oper)is rendszeren telep*tett #ord*tval le lehet
#ord*tani, minden+tt hasznlhat lesz.
Meg+egyez#s. & #ord*tst s rtelmezst is al"almaz hibrid megolds manapsg eg're nag'obb npsze(
r!sgne" $rvend. & 4i)roso#t .,et plat#ormja so" ar)hite"tQrlis elemet vett t a Javtl, a Neb hag'om(
n'os rtelmez megoldsai ma mr so"szor el#ord*tssal is "ombinlhat".
,.2.2 Java &lat"orm
& plat#orm hardver vag' szo#tver"$rn'ezet, ahol a programo" #utna". & legt$bb plat(
#orm a hardvert s az oper)is rendszert jelenti. & Java plat#orm ann'iban "+l$nb$zi"
a legt$bb ms plat#ormtl, hog' teljesen szo#tverplat#orm, s ms hardver alapQ plat#or(
mo"ra p+l. & Java plat#orm "t "omponensbl ll.
Java H4
Java &GJ
& Java &GJ igen so" (t$bb ezer) hasznlatra "sz szo#tver"omponenst tartalmaz. )soma(
go"ba szervezett osztl'o"at s inter#sze"et.
& "$vet"ez bra bemutatja a Java plat#orm m!"$dst.
& nat*v "d ol'an "dot jelent, amel'i" a hardveren "$zvetlen+l #uttathat. & plat#orm(
#+ggetlen Java "d valamivel lassabb, mint a nat*v "d. &zonban j #ord*tval, optimali(
zlt rtelmezvel, s JJ8 bjt"d #ord*tval a "+l$nbsg elg "i)si lehet. & mai #uttat(
"$rn'ezete" mr tartalmazz" a JJ8 (Just in time) #ord*tt, amivel az els #uttats eltt
nat*v "dra #ordul a bjt"d, *g' a tovbbi #utso" sorn mr "$zvetlen+l a nat*v "d #ut(
tathat.
Meg+egyz#s. &z elze" "$vet"ezmn'e, hog' eg' Java al"almazs els #uttatsa t$bb ideig tarthat, de a
tovbbi #uttatso"nl ez az idvesztesg nem #og jelent"ezni.
,.7. Mire +' a Java te.hnol'gia8
& legt$bb Java plat#ormra "sz+lt program asztali al"almazs vag' a&&let. Ba a Neben
sz$r#$z+n", tall"ozhatun" applete""el. &z applet ol'an program, amel' bizon'os meg(
szor*tso""al #uttathat Javt ismer b$ngszben. 1ezdetben ezt ltvn'os gra#i"ai e#(
#e"tuso" "sz*tsre hasznlt". 4ra ez a #elhasznls visszaszorult, s viszon'lag rit(
"n tall"ozhatun" applete""el.
&z eredeti )lja szerint a Java magas szint! programozsi n'elv s ers szo#tverplat#orm
"*vn lenni. & gazdag osztl'"$n'vtr seg*tsgvel nag'on so"#le programot "sz*the(
t+n".
1.-ls lpse" 13. oldal
&z asztali alkalmazs ol'an program, amel' "$zvetlen+l a Java plat#ormon (pl. nem
b$ngszben) #uttathat. &z al"almazso" spe)ilis #ajtja szerver"nt #ut, hlzati "li(
ense"et "iszolglva. Gldul lehet Nebszerver, proP'(szerver, levelez szerver vag'
n'omtat szerver.
7zintn spe)ilis program a szervlet (servlet). 7zerver oldalon #ut, de nem $nllan,
hanem eg' szerver(#uttat"$rn'ezet rsze"nt. Gl. eg' portlt "i lehet szolglni nhn'
szervlet eg'+ttesvel, vag' a"r eg'etlen szervlettel. -bben az esetben a szervlet a Neb(
szerver rsze"nt #ut. & szervlete" hasonla" az applete"hez, mivel #utsidej! "iterjesz(
tsei a (szerver) al"almazso"na".
& mobil tele#onon, "zi szm*tgpen #ut al"almazst midletnek h*vju".
Bog'an n'Qjtja az &GJ ezt a so"#le tmogatstA 7zo#tver"omponense" )somagjai"nt,
amel'e" so"#le #eladatot elltna". & Java plat#orm minden teljes implement)ija (pl(
dul a midlet #uttat"$rn'ezet nem teljes) rendel"ezi" a "$vet"ez tulajdonsgo""al.
Ala& sszetevk. obje"tumo", sztringe", szla", szmo", J/D, adatstru"tQr", d(
tum s id"ezels, stb.
A&&letek. a szo"sos #elhasznlso"
5l'zatok. LK9, 8;G, L:G, so)"et(e", JG )*mzs
Nemzetkzi &rogramozs. 7eg*tsg az egsz vilgon hasznlhat al"almazso"
*rshoz. & programo" "$nn'edn tudna" al"almaz"odni a hel'i sajtossgo"hoz, s
t$bb#le n'elven "ommuni"lni a #elhasznl""al
$iztonsg. ala)son' s magas szint! vdelem, belertve az ele"troni"us al*rst, tit(
"os(, s n'ilvnos "ul)sQ tit"os*tst, hozz#rs(szabl'ozst s azonos*tst
0zo"tver kom&onensek. a Java@eans hasznlatval "$nn'en $sszeilleszthet
"omponense"et #ejleszthet+n"
9!+ekt4m szerializ.i'. lehetv teszi a "$nn'!sQl'Q perziszten)it s az K4J(t
J1$:. rel)is adatbzis("ezel" szles "$rhez n'Qjt eg'sges elrsi #el+letet
& Java plat#orm ezen #el+l tartalmaz &GJ(t a 2: s 3: gra#i"hoz, szervere"hez, tele#ni(
hoz, beszd#eldolgozshoz, anim)ihoz stb.
,.;. M#g egyszer a HelloWorld &rogramr'l
,.;., Meg+egyz#sek a Java nyelv!en
/*
* A HelloWordApp program kirja a ksznt szveget
*/
public class HelloWorldApp {
public static void main(String[] args) {
// Kirja: "Hello World!"
System.out.println("Hello World!");
}
}
& Java n'elv a megjeg'zse" hrom t*pust tmogatja. Bag'omn'os (; st*lusQ) meg(
jeg'zs.
/* szveg */
1>. oldal Java programozs (1.3. verzi)
& #ord*t a begpelt sz$veget #ig'elmen "*v+l hag'ja a /A(tl a A/(ig.
/** dokumentci */
-z eg' do"ument)is megjeg'zs, a #ord*t #ig'elmen "*v+l hag'ja, mint az elz t*pust
is, de a javadoc esz"$z (binTjavado).ePe) seg*tsgvel automati"usan lehet generlni hyB
perte*t (B849) do"ument)it, ami #elhasznlja a do"ument)is megjeg'zse"et is.
Meg+egyz#s. a let$lthet Java do"ument)i is ez alapjn "sz+lt.
// szveg
& #ord*t #ig'elmen "*v+l hag'ja a sort a //(tl a sor vgig.
,.;.2 9sztlyde"in(.i'
& "$vet"ez "d mutatja az osztl'de#in*)is blo""ot.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
&z osztl' (class) alapvet p*teleme az obje"tumorientlt n'elve"ne". &z osztl' az
adato" s visel"edse" $sszessgbl ll pldn'o" sablonjt adja meg. &mi"or az osz(
tl'bl pldn't hozun" ltre, a""or tulajdon"ppen eg' ol'an obje"tum j$n ltre, ame(
l'i" Qg' p+l #el, s Qg' visel"edi", mint az osztl' eg'b pldn'ai.
&z adato" az obje"tumpldn'o" vltozi"nt *rhat" le, a visel"edse" pedig a metdu(
so""al.
& vals letbl eg' hag'omn'os plda a tglalap osztl'. &z osztl' tartalmaz vltoz(
"at a poz*)i, valamint a szlessg s magassg le*rsra, s tartalmaz metdust a ter+let
"iszm*tsra.
& Java n'elvben a legeg'szer!bb osztl'de#in*)i a "$vet"ez.
class name {
. . .
}
& class "ul)sszval s az osztl' nevvel "ezddi" az osztl'de#in*)i, majd "ap)sos(z(
rjele" "$z$tt vltoz" s metduso" "$vet"ezne". & "orbbi plda al"almazsun"ban
nin)s vltoz, s )sa" eg'etlen metdus van main nven.
,.;.7 A main met'd4s
4inden Java al"almazsna" tartalmaznia "ell main metdust a "$vet"ez de"lar)ival.
public static void main(String[] args)
& main metdus de"lar)ija hrom mdos*tt tartalmaz.
pu8lic. jelzi, hog' a metdust ms osztl'beli obje"tumo"bl is meg lehet h*vni
static. jelzi, hog' a main osztl'metdus
void. jelzi, hog' a metdusna" nin)s visszatrsi rt"e
1.-ls lpse" 10. oldal
5ogyan h(v'dik meg a main met'd4s8
& Java n'elvben a main metdus hasonl a ; n'elv main #+ggvn'hez. &mi"or a Java
rtelmez vgrehajt eg' al"almazst, elsz$r megh*vja az osztl' main metdust. &z al(
"almazsun" tovbbi metdusait ("$zvetlen+l vag' "$zvetve) a main #ogja megh*vni. Ba
main nl"+l prblun" eg' al"almazst #uttatni, az rtelmez megtagadja a vgrehajtst,
s hiba+zenetet "apun".
Meg+egyz#s. & main #+ggvn're )sa" hag'omn'os al"almazso" esetn van sz+"sg. @eg'azott Java
program (applet@ midlet@ servlet) esetn a program az t tartalmaz #uttat"$rn'ezet (b$ngsz, szervlet
"ontner) spe)ilis "$zrem!"$dsvel #og #utni.
A main met'd4s &aram#tere
& main metdusna" eg' paramtere van, amel' sztringe" t$mbje. -z a t$mb a paran)s(
sori paramtere"et tartalmazza. & pldaprogramun"ban nem #oglal"oztun" az esetleges
paran)ssori paramtere""el.
Meg+egyz#s. & ; n'elvtl eltren az args t$mb nem tartalmazza a program nevt. -z ug'anis az $n(
elemzs (re/lection) mdszervel "$nn'en megllap*that. 4srszt a Java n'elvben a t$mb obje"tum,
tudja a mrett, *g' nin)s sz+"sg tovbbi paramterre.
,.;.; 9sztlyok #s o!+ekt4mok hasznlata
& pldaal"almazsun" eg' nag'on eg'szer! Java program, ezrt nin)s sz+"sge arra,
hog' ms osztl'o"at al"almazzun", a "pern're *rst "ivve. Msszetettebb programo"
hasznlni #ogna" ms seg*t osztl'o"at.
& 9ello:orld al"almazs eg'ed+l a System osztl't hasznlja. -z az osztl' rendszer(
#+ggetlen hozz#rst tesz lehetv a rendszer#+gg szolgltatso"hoz.
Gldn"ban eg' osztl'vltoz (out) pldn' metdust (println) h*vju" meg.
9sztlymet'd4sok #s vltoz'k hasznlata
& System.out a System osztl' out vltozjna" a teljes neve. (& System osztl'bl soha
nem #og pldn'os*tani az al"almazsun", )supn az osztl' nevvel tudun" hivat"ozni
a vltozra. -z azrt van, mert az out osztl'vltoz, s az osztl'hoz van "ap)solva, nem
eg' pldn'hoz.
<#ldnymet'd4sok #s vltoz'k hasznlata
&zo"at a metduso"at s vltoz"at, amel'e" nem az osztl'hoz, hanem eg' "on"rt ob(
je"tumpldn'hoz vanna" "ap)solva, pldn'metduso"na" vag' pldn'vltoz"na"
nevezz+".
&z out osztl'vltoz, a -rintStream osztl' eg' pldn'ra hivat"ozi", s megvals*tja
a standard "imenetet. &mi"or a System osztl' bet$ltdi", a -rintStream osztl' pld(
n'a j$n ltre, s System.out vltoz nven hivat"ozhatun" r. 4ost mr van eg' pld(
n'un", meg tudju" h*vni a pldn'metdust.
System.out.println("Hello World!");
&hog' ltszi", a pldn'metduso" s vltoz" hasznlata hasonl az osztl'metduso"
s vltoz" m!"$dshez.
& Java #ord*t megengedi eg' lpsben a t$bbsz$r$s hivat"ozst.
1E. oldal Java programozs (1.3. verzi)
System.out.println("Hello World!");
,.5. -llenrz k#rd#sek
4i a "+l$nbsg a gpi "d s a Java bjt"d "$z$ttA
4i a Java plat#orm "t # $sszetevjeA
4i a Java H4A
4i a leg#ontosabb #elttele anna", hog' eg' adott gpen lehessen Java programot
#uttatniA
4i a Java &GJA
4il'en paran)s ind*tja el a Java #ord*tprogramotA
4il'en paran)s ind*tja el a Java H4(tA
4i az a Java n'elvi szer"ezet, amivel a "onzolra lehet *rniA
4ire szolglna" a megjeg'zse" a programbanA
4i a "+l$nbsg a /U VU/, /UU VU/ s a //V megjeg'zs(szinta"ti"a "$z$ttA
4el'i" metdus #og elsz$r elindulni eg' Java program esetnA Wrjon eg' eg'szer!
pldt az al"almazsra%
=gaz vagy hamis8 =ndokol+a!
& nat*v "d az ember szmra "$nn'en rtelmezhet program"d.
& Java #ord*t gp#+ggetlen "$zbens "dot, bjt"dot generl.
&z interpreter a trg'"dot visszaala"*tja #orrs"dd.
& #orrs"d eg' sz$veg, mel'et a #ord*tprogram rtelmez, illetve #ord*t le.
& #orrs"d a szm*tgp ltal rtelmezhet, "$zvetlen+l #uttathat "d.
Mit tartalmaz a main ">ggv#ny &aram#ter#nek ?. eleme8
& program nevt
& paramtere" szmt
&z els paramtert
2.Dbje"tumorientlt paradigma 1=. oldal
2. 9!+ekt4morientlt &aradigma
&z obje"tumorientlt programozs alap#ogalmaival "orbban mr bizon'ra minden ol(
vas tall"ozott. & tma rend"*v+li #ontossga miatt eg' r$vid bevezetst is olvashatna"
ebben a #ejezetben.
& jeg'zet pldi ltalban elg eg'szer!e", de rdemes minl elbb megismer"edni eg'
ol'an jel$lsmddal, amivel az obje"tumorientlt programun"at elre megtervezhetj+".
9e*r esz"$z"nt a legin"bb elterjedt L49 (Lni#ied 4odeling 9anguage
1
) jel$lseivel
#og tall"ozni a jeg'zetben a tisztelt olvas.
2.,. Az o!+ekt4m
&z obje"tumo" az obje"tumorientlt te)hnolgia alapjai. ,hn' plda a ht"$znapi
letbl. "ut'a, asztal, tv, bi)i"li. -ze" a valdi obje"tumo" "t jellemzvel rendel"ezne".
llapottal s visel"edssel. Gldul a "ut'a llapott a neve, sz*ne, #ajtja, hessge stb.
jellemzi, visel"edse az ugats, evs, )sahols, #aro"()svls stb. lehet. & bi)i"li llapo(
tt a sebessg#o"ozat, a pillanatn'i sebessg, visel"edst a g'orsuls, #"ezs, sebessg(
vlts adhatja.
& programbeli obje"tumo" modelljei a valdi obje"tumo"na". &z obje"tum llapott
eg' vag' t$bb vltozval, a visel"edst az obje"tumhoz rendelt metdussal (#+ggvn'(
n'el) *rju" le.
:e#in*)i. &z o!+ekt4m vltoz"bl s "ap)sold metduso"bl #elp*tett eg'sg.
& vals let obje"tumait le*rhatju" program obje"tumo""al. Ba sz+"sg van arra, hog'
valdi "ut'"at brzoljun" eg' anim)is programban, a""or hasznlhatun" program
obje"tumo"at az elvont #ogalma" modellezsre. Gldul eg' ht"$znapi esemn't mo(
dellezhet eg' billent'!le+ts vag' egr"attints.
-g' bi)i"lit modellez obje"tum vltoz""al *rja le a pillanatn'i llapotot. a sebessg 1F
"m/h, s a sebessg#o"ozat 0($s. -ze"et a vltoz"at pldn'vltoz"na" nevezz+",
mert eze" eg' "on"rt bi)i"li llapott *rj" le. &z obje"tumorientlt terminolgiban
eg' $nll obje"tumot pldn'na" is nevez+n". & "$vet"ez bra bemutat eg' bi)i"lit
modellez obje"tumot az L49 obje"tumdiagramja (C8ject diagram) seg*tsgvel.
az n biciklim :
sebessg = 18km/h
sebessgfokozat = 5
& bi)i"li tud #"ezni, sebessg#o"ozatot vltani is. -ze"et a metduso"at pldn'met(
duso"na" h*vju", mivel eg' "on"rt bi)i"li (pldn') llapotban "pese" vltozst elr(
ni.
1
http.//NNN.uml.org/
1F. oldal Java programozs (1.3. verzi)
az n biciklim :
sebessg = 18km/h
sebessgfokozat = 5
sebessgvlts
fkezs
&z obje"tum tulajdonsgait szo"s a "+lvilgtl elrejteni, s )sa" a metduso"on "eresz(
t+l be#ol'solni.
:e#in*)i. &z obje"tum vltoz" be)somagolst, vdrizetbe hel'ezst egys#g!ez-
rsna" nevezz+".
Jdn"nt X g'a"orlati meg#ontolsbl X eg' obje"tum megmutat nhn' vltozjt s
elrejti nhn' metdust. & Java n'elvben az obje"tum meg tudja hatrozni, hog' ng'
hozz#rsi szint "$z+l mel'i"et vlasztja az eg'es vltoz" s metduso" szmra. &
hozz#rsi szint hatrozza meg, hog' ms obje"tumo" s osztl'o" hozz tudjana"(e
#rni az eg'es vltoz"hoz s obje"tumo"hoz.
&z eg'sgbezrs tiszta al"almazsa esetn "t eg'szer!, de nag'on hasznos eln'e lesz
a szo#tver#ejlesztne".
Mod4larits. &z obje"tum #orrs"dja ">ggetlen marad ms obje"tumo" #orrs(
"djtl. -zen "*v+l az obje"tum "$nn'en tud illesz"edni a rendszer "+l$nb$z r(
szeihez.
=n"orm.i' elre+t#s. &z obje"tum a &4!lik4s inter"#sz#n "ereszt+l n'Qjt "om(
muni")is lehetsget a t$bbi obje"tum #el. &z obje"tum gondos"odi" a sajt ada(
tairl, s )sa" a metdusain "ereszt+l ad vltoztatsi lehetsget a "+ls obje"tumo"(
na". & "+ls obje"tumo"na" igazbl nem is "ell tudnia arrl, hog' az obje"tum lla(
pota mil'en bels vltoz""al van reprezentlva, )sa" a "*vnt visel"edst "ell "rnie
a metduso"on "ereszt+l.
2.2. Az >zenet
&m*g )sa" eg' obje"tumun" van, addig nem so" haszna van a programna". Oltalban
eg' obje"tum )sa" eg' "is rszt jelenti eg' nag'obb al"almazsna". -zrt "$l)s$nhats
van az obje"tumo" "$z$tt. & bi)i"lin" eg' $sszetett szer"ezet, magban mgis hasznl(
hatatlan, "ap)solatba "ell "er+lnie ms obje"tummal, pl. vel+n" a pedlon "ereszt+l.
& program obje"tumo" hatna" eg'msra s "ommuni"lna" eg'mssal +zenete"en "e(
reszt+l. &mi"or az , obje"tum megh*vja a 7 obje"tum eg' metdust, tulajdon"ppen
eg' +zenetet "+ld ne"i. -zt az L49 sze"ven)ia diagramja a "$vet"ez mdon brzolja
(az id #entrl le#el halad).
2.Dbje"tumorientlt paradigma 1?. oldal
A : B :
zenet
,ha a #ogad obje"tum t$bb in#orm)it ign'el, hog' pontosan tudja, mi a dolga. Gl(
dul ami"or sebessget vltun" a bi)i"lin, megadju" a "*vnt sebessgvlts irn't is.
-zt az in#orm)it paramter"nt adju" az +zenethez.
&z +zenet hrom rsze $ssze#oglalva.
4el'i" obje"tum az +zenet )*mzettje
& vgrehajtand metdus neve
&z esetleges paramtere"
-z a hrom $sszetev elegend, hog' a megh*vott obje"tum vgrehajtsa a "*vnt met(
dust. &z +zenete" "t #ontos elnn'el jrna".
-g' obje"tum visel"edst meghatrozz" a metdusai, +zenet"+ldssel megvals*t(
hat az $sszes lehetsges "ap)solat "t obje"tum "$z$tt.
,em sz+"sges, hog' az obje"tumo" ug'anabban a #ol'amatban, vag' a"r ug'an(
azon gpen leg'ene", az +zenet"+lds s #ogads ettl #+ggetlen+l lehetsges.
@zenetek a gyakorlat!an
&z elmleti obje"tumorientlt szemlletben meg"+l$nb$ztet+n" aszin"ron s szin"ron
+zenet"+ldses rendszert. @r a ht"$znapi modellt az aszin"ron meg"$zel*ts jellemzi,
g'a"orlati, megvals*thatsgi o"o"bl a programn'elve" t$bbn'ire a szin"ron +zenet(
"+ldses modellen alapulna".
2.7. Az osztly
& valdi vilgban g'a"ran so" obje"tummal tall"ozun" ug'anabbl a #ajtbl. Gldul a
bi)i"lin" nag'on so" ms bi)i"lire jelentsen hasonl*t. &z obje"tumorientlt szhaszn(
latban azt mondju", hog' eg' "on"rt bi)i"li a bi)i"li" osztl'na" eg' pldn'a. & bi(
)i"li" rendel"ezne" llapottal (a"tulis sebessg#o"ozat, #ordulatszm stb.) s visel"e(
dssel (sebessgvlts, #"ezs). -nne" ellenre minden bi)i"li "on"rt llapota #+gget(
len az $sszes t$bbi bi)i"li llapottl.
:e#in*)i. 9sztlyozsnak nevezz+" azt a #ol'amatot, amel'ne" sorn a hasonl ob(
je"tumo"at "$z$s )soporto"ba, ms nven osztl'o"ba sorolju".
&mi"or a bi)i"li" "sz+lne", a g'rt" n'eresget szeretnne" elll*tani, ezrt a bi)i"li"
nag' menn'isgben, "$z$s tervrajz alapjn sorozatg'rtsban "sz+lne". ,ag'on rossz
lenne a hats#o", ha minden bi)i"lihez eg'edi tervrajzot "ellene "sz*teni.
2<. oldal Java programozs (1.3. verzi)
&z obje"tumorientlt programo"ban is hasonl a hel'zet. "$z$s tervezsre ad lehets(
get, hog' so" obje"tum hasonl jellemz""el rendel"ezi". tglalapo", al"almazotta", vi(
deo#elvtele", stb. & "er"prg'rt"hoz hasonlan ne"+n" is eln'$s az, ha so" hason(
l obje"tumot "$z$s tervrajz alapjn "sz*thet+n" el. &z obje"tumo" tervrajzait h*vju"
osztl'o"na".
:e#in*)i. &z osztly bizon'os #ajta obje"tumo" "$z$s vltozit s metdusait le*r
tervrajz.
& bi)i"li osztl' legsz+"sgesebb pldn'vltozi az a"tulis sebessg s a sebessg#o"o(
zat lehetne". &z osztl' tartalmazza a pldn'metduso"at is. a sebessgvltst s a #(
"ezst, ahog' a "$vet"ez L49 osztl'diagramon (Class diagram) ltszi".
Bicikli
sebessg : int = 0
sebessgfokozat : int = 0
sebessgvlts (in!"
fkezs (mtk"
& "$vet"ez "d az *g' megtervezett osztl' "djt 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);
}
}
4iutn ltrehoztu" a 7ici!li osztl't, az osztl' alapjn a"rmenn'i bi)i"li obje"tumot
ltre tudun" hozni. &mi"or pldn'os*tun" eg' osztl'bl, a #uttatrendszer elegend
memrit #oglal az obje"tum pldn'vltozina". 4inden pldn' "ap eg' msolatot a
de#inilt vltoz"rl.
2.Dbje"tumorientlt paradigma 21. oldal
az n biciklim : Bicikli
sebessg : 18km/h
sebessgfokozat : 5
sebessgvlts (in!"
fkezs (mtk"
a te biciklid : Bicikli
sebessg : 10km/h
sebessgfokozat : #
sebessgvlts (in!"
fkezs (mtk"
,zz+" meg eg' bi)i"li"et pldn'os*t "dot.
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();
}
}
& pldn'vltoz" mellett az osztl'o" de#inilhatna" osztl'vltoz"at is. &z osztly-
vltoz'k az $sszes obje"tumpldn' szmra megosztott in#orm)i"at tartalmazna".
Gldul "pzelj+" el, hog' az $sszes "er"pr ug'anann'i sebessg#o"ozattal rendel"e(
zi". -bben az esetben #elesleges pldn'vltozt al"almazni, minden pldn' ug'anazt a
msolatot troln. Jl'en"or osztl'vltozban rdemes az adatot trolni, amit minden
pldn' el tud rni. Ba eg' obje"tum megvltoztatja az rt"t, az $sszes obje"tum sz(
mra is megvltozi".
&z osztl'na" lehet osztlymet'd4sa is.
&z obje"tumo" hasznlatna" eln'e a modularits s az in#orm)ielrejts. &z oszt(
l'o" hasznlatna" eln'e az A+ra"elhasznlhat'sg. & bi)i"lig'ra" Qjra s Qjra #el
tudj" hasznlni a g'rts sorn az eg'szer el"sz*tett tervrajzo"at. & programoz"
ug'anazo"at az osztl'o"at, ug'anazo"at a "do"at Qjra s Qjra #elhasznlj" a pld(
n'os*ts sorn.
2.;. Az rkld#s
&z obje"tumorientlt rendszere"ben eg'es obje"tumo" "$z$tt tovbbi $ssze#+ggse"et
#ig'elhet+n" meg. @izon'os #elttele"ne" meg#elel obje"tumo" eg' msi" osztl'ba so(
rolhat". Gldul a heg'i vag' ppen a vrosi bi)i"li" a bi)i"li" spe)ilis #ajti. &z obje"(
tumorientlt szhasznlatban eze"et leszrmazott osztl'na" (leszrmazott osztl'na")
nevezz+". Basonlan, a bi)i"li osztl' sosztl'a (sz+l osztl'a, bzisosztl'a) a vrosi
bi)i"li" osztl'na". -zt az $ssze#+ggst mutatja a "$vet"ez bra.
22. oldal Java programozs (1.3. verzi)
Bicikli
Vrosi bicikli
Hegyi bicikli
Iker bicikli
&z obje"tumorientlt tervezs #ol'amn hasznlt ltalnos(ts s s&e.ializls #ogal(
ma" az osztl'hierar)hia "iala"*tsa sorn hasznlatosa". &z stl a g'erme" #el spe)i(
lisabb osztl'o"at ltun", vissza#ele pedig eg're ltalnosabba"at.
4inden g'erme"osztl' $r$"li az sosztl' llapott s a metdusait, de nin)s eze"re
"orltozva. & g'erme"osztl'o" hozzadhatna" vltoz"at s metduso"at ahhoz, amit
az sosztl'tl $r$"$lt. & g'erme"osztl'o" #el+l tudj" *rni az $r$"$lt metduso"at,
vag' spe)ilisabb megvals*tst tud adni azo"na".
Gldul a Beg'i bi)i"li a @i)i"li leszrmazottja.
class MountainBike extends Bicycle {
// j adattagok s metdusok helye
}
&z $r$"ldsnl nem vag'un" behatrolva eg' szintre. &z $r$"lsi #a, vag' ms nven az
osztl'hierar)hia t$bb szint! $r$"lst is lehetv tesz, br eg' tlagos #elhasznli prog(
ram esetn legt$bbsz$r >(0 szint elegend.
&z $r$"lds a "$vet"ez eln'$""el jr.
& leszrmazott osztl'o" tudj" spe)ializlni az sosztl'tl $r$"$lt visel"edst. &z
$r$"lds seg*tsgvel az eg'es osztl'o"at Qjra #el lehet hasznlni.
& programoz" meg tudna" vals*tani ol'an visel"edse"et, amel'e" az sosztl'ban
mg nem volta" "on"rtan le*rva. (&z il'en osztl'o"at absztra"t, elvont osztl'o"(
na" nevezz+".) &z absztra"t sosztl'o" )sa" rszben vals*tj" meg a sz+"sges vi(
sel"edse"et, s a"r ms programoz" #ogj" azt a leszrmazotta"ban megvals*ta(
ni.
Meg+egyz#s. &z obje"tumorientlt szemllet megismerse utn so" #ejleszt szmra ers a "*srts,
hog' ol'an"or is az $r$"ldst al"almazza, ami"or in"bb ms te)hni""at (pl. "ompoz*)i, aggreg)i)
rdemes al"almazni.
Javban az C8ject osztl' az osztl'hierar)hia leg#els eleme, minden ms osztl' belle
szrmazi" ("$zvetlen+l vag' "$zvetve). &z C8ject t*pusQ vltoz brmil'en obje"tumra
tud hivat"ozni.
&z C8ject osztl'na" ol'an megosztott visel"edsei (metdusai) vanna", amel'e" lehe(
tv teszi" a Java H4(en val #utst. Gldul minden osztl' $r$"li a toString metdust,
hog' az obje"tum sztring"nt is megmutathat leg'en.
2.Dbje"tumorientlt paradigma 23. oldal
2.5. <4!lik4s inter"#sz
Oltalnossgban eg' esz"$zne" vag' rendszerne" szo"s az inter"#szrl beszlni. azt
*rja le, hog' "+ls dolgo" hog'an tudna" "ap)soldni hozz. Jl'en rtelemben "t ma(
g'ar ember "$z$tt eg' inter#sz a mag'ar n'elv.
-g' tetszleges osztl' esetn teht a publi"us inter#sz alatt az osztl' "*v+lrl is ltha(
t (publi"us) #el+lett rtj+". (-z t$bbn'ire a publi"us "onstru"toro"ra s metduso"ra
"orltozdi".) &z +zenet"+lds #ogalmra visszautalva az osztl' publi"us inter#sze azt
hatrozza meg, hog' ms obje"tumo" mil'en +zenetet "+ldhetne" az obje"tumna", illet(
ve mil'en mdon hozhatna" ltre az osztl'na" eg' pldn't.
Java inter"#sz
Irdemes itt megeml*teni, hog' ez az elmleti #ogalom nem eg'ezi" meg a Java inter#sz
#ogalmval. & Java n'elven bel+l az inter#sz eg' t*pus, mint ahog' az osztl' is t*pus. &z
osztl'hoz hasonlan az inter#sz is de#inil metduso"at, de attl eltren soha nem
vals*t meg metdust. &z inter#szt megvals*t osztl' #ogja anna" metdusait megva(
ls*tani.
&z inter#sze" hasznosa" a "$vet"ez esete"ben.
Basonlsgo" meg#ogalmazsa anl"+l, hog' mester"lt osztl'hierar)hit p*te(
nn" #el
Dl'an metduso" de#inilsa, amel'e"et t$bb osztl'ban meg "ell vals*tani
8$bbsz$r$s $r$"lds modellezse a ms n'elve"bl ismert veszl'e" nl"+l
2.B. -llenrz k#rd#sek
4i az obje"tumA
4i az +zenetA Bog'an valsul meg a Java n'elvbenA
4i az osztl'A
4i az in#orm)i(elrejtsA
4it rt+n" eg' osztl' publi"us inter#sznA
4i az C8ject osztl' szerepeA
4itl obje"tumorientlt eg' programA
=gaz vagy hamis8 =ndokol+a!
&z absztra")i az obje"tumo" "$z$tti hasonlsgo" #ig'else, $sszeg'!jtse.
&z osztl'ozs a vilg obje"tumaina" rendszerezse.
&z ltalnos*ts a vilg obje"tumaina" leeg'szer!s*tse.
& spe)ializls eg' sz!"ebb "ategria meghatrozsa az obje"tumo" "+l$nb$zsge
alapjn.
&z obje"tumorientlt program eg'mssal "ommuni"l obje"tumo" $sszessge, ahol
minden obje"tumna" megvan a jl meghatrozott #eladat"$re.
2>. oldal Java programozs (1.3. verzi)
&z obje"tum pldn'o"at tulajdonsgai" s visel"eds+" alapjn osztl'o"ba sorol(
ju".
;sa" a""or "+ldhet +zenet eg' obje"tumna", ha a "+ld s a #ogad obje"tum "ap(
)solatban llna" eg'mssal.
Ba "t obje"tum llapota megeg'ezi", a""or a "t obje"tum azonos.
&z osztl' meghatrozza obje"tumaina" visel"edst.
Ba "t obje"tum ug'anahhoz az osztl'hoz tartozi", s ug'anaz az llapota, a""or
ug'anarra az +zenetre ug'anQg' reagl.
2.C. Dyakorl' "eladat
Modellezze egy nyelviskola tan"olyam-szervez#si "eladatkr#t!
1i" veszne" rszt a #ol'amatbanA Bog'an osztl'ozhatju" "etA 4il'en $r$"lsi "ap)so(
lato" vanna" az osztl'o" "$z$ttA 4il'en m!velete"et "pese" vgezni az obje"tumo"A
Modellezze egy .#g /&l. egy 5-,? "s )"t.2 tev#kenys#g#t!
& mun"a sorn mi" (s "i") te"inthet" obje"tumna"A 4il'en jellemz""el s visel"e(
dsi lehetsge""el (itt spe)ilisabban mun"a"pessge""el) rendel"ezne"A Han(e osz(
tl'ozsi lehetsg az obje"tumo" "$z$ttA
3.Hltoz" 20. oldal
7. Eltoz'k
& 7asics'emo program $sszeadja 1(tl 1<(ig az egsz szmo"at, majd "i*rja az ered(
mn't.
public class BasicsDemo {
public static void main(String[] args) {
int sum = 0;
for (int current = 1; current <= 10; current++) {
sum += current;
}
System.out.println("Sum = " + sum);
}
}
& program a "$vet"ezt *rja "i.
Sum = 55
-z a "is program hasznlja az alapvet n'elvi eleme"et. vltoz"at, opertoro"at s ve(
zrlsi szer"ezete"et.
&z obje"tum az llapott vltoz"ban trolja.
:e#in*)i. & vltoz' ol'an adatelem, amel' azonos*tval van elltva.
-g' vltoz nevt s t*pust eg'rtelm!en meg "ell adni a programun"ban, ha hasznlni
a"arju" azt. & vltoz neve )sa" rvn'es azonos*t lehet. tetszleges hosszQsgQ <niB
code "ara"tere"bl ll sorozat, de az els hel'en )sa" bet! szerepelhet. & vltoz t*pusa
meghatrozza, hog' mil'en rt"e"et vehet #el a vltoz, s mil'en m!velete"et hajtha(
tun" vgre rajta. & vltoz nevt s t*pust a vltozde"lar)iban adju" meg, ami lta(
lban ehhez hasonl.
type name;
& vltoz rendel"ezi" hat"$rrel (rvn'essgi tartomnn'al) is. & hats"$rt a vltoz(
de"lar)i hel'e eg'rtelm!en meghatrozza.
&z albbi plda "+l$nb$z vltoz" de"lar)ijt mutatja.
public class MaxVariablesDemo {
public static void main(String args[]) {
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
char aChar = 'S';
boolean aBoolean = true;
2E. oldal Java programozs (1.3. verzi)
System.out.println("The largest byte value is "
+ largestByte);
System.out.println("The largest short value is "
+ largestShort);
System.out.println("The largest integer value is "
+ largestInteger);
System.out.println("The largest long value is "
+ largestLong);
System.out.println("The largest float value is "
+ largestFloat);
System.out.println("The largest double value is "
+ largestDouble);
if (Character.isUpperCase(aChar)) {
System.out.println("The character " + aChar
+ " is upper case.");
} else {
System.out.println("The character " + aChar
+ " is lower case.");
}
System.out.println("The value of aBoolean is "
+ aBoolean);
}
}
& program "imenete.
The largest byte value is 127
The largest short value is 32767
The largest integer value is 2147483647
The largest long value is 9223372036854775807
The largest float value is 3.40282e+38
The largest double value is 1.79769e+308
The character S is upper case.
The value of aBoolean is true
7.,. Adatt(&4sok
4inden vltoz rendel"ezi" adatt*pussal. & vltoz adatt*pusa hatrozza meg, hog' mi(
l'en rt"e"et vehet #el a vltoz, s mil'en m!velete" vgezhet" vele. & Ma*=aria8B
les'emo pldaprogramban az
int largestInteger;
de"larl eg' largest.nteger nev! vltozt int adatt*pussal. &z int t*pus )sa" egsz szmot
tud trolni.
& Java n'elvben az adatt*puso"na" "t t*pusa van. primit*v s re#eren)ia t*puso". & pri(
mit*v adatt*puso" eg' eg'szer! rt"et "pese" trolni. szmot, "ara"tert vag' logi"ai
rt"et. & vltoz neve (varia8le+ame) "$zvetlen+l eg' rt"et (value) jelent.
& "$vet"ez tblzat az $sszes primit*v t*pust tartalmazza. & pldaprogramun" minden
t*pusbl de"larl eg'et.
3.Hltoz" 2=. oldal
*(&4s Fe(rs M#retG"ormt4m
DegEs"e!F
8yte bjt mret! egsz F(bit "ettes "omplemens
short r$vid egsz 1E(bit "ettes "omplemens
int egsz 32(bit "ettes "omplemens
long hosszQ egsz E>(bit "ettes "omplemens
Dval#s s"?mo!F
/loat eg'szeres pontossgQ lebegpontos 32(bit J--- =0>
dou8le dupla pontossgQ lebegpontos E>(bit J--- =0>
DegyE8 tGpuso!F
char "ara"ter 1E(bit Lni)ode "ara"ter
8oolean logi"ai rt" true vag' /alse
9ehetsg+n" van eg'bl "ezdrt"et is adni a vltozn"na".
int anInt = 4;
& t$mb$", az osztl'o" s az inter#sze" re#eren)ia(t*pusQa". & re#eren)ia(vltoz ms
n'elve" mutat vag' memria)*m #ogalmra hasonl*t. &z obje"tum neve (o8ject+ame)
nem eg' "$zvetlen rt"et, hanem )sa" eg' re#eren)it (re/erence) jelent. &z rt"et "$z(
vetetten, a re#eren)in "ereszt+l rhetj+" el.
int [] intArray = new int intArray[10];
7.2. Eltoz' nevek
& program vltozneve""el azonos*tja a vltozrt"e"et.
& Java n'elvben a "$vet"ez" rvn'ese" a neve"re.
Haldi azonos*t leg'en, tetszlegesen hosszQ Lni)ode "ara"tersorozat, de az els
"ara"ter )sa" bet! lehet.
,em lehet #oglalt sz, logi"ai literl (true vag' /alse) vag' null.
-g'edine" "ell lenni az rvn'essgi tartomn'ban, viszont ms tartomn'beli vlto(
zval megeg'ezhet.
1onven)i (teht nem "$telez, de szo"s), hog' a vltozneve"et "isbet!vel "ezdj+", az
osztl'neve"et pedig nagg'al. Ba a nv t$bb szbl ll $ssze, a "$zb+ls szava" "ezdbe(
t!it mindig nagg'al *rju". & t$bbszavas neve" ragasztsra ms n'elve"ben hasznlt Y
"ara"ter Javban nem hasznlatos.
2F. oldal Java programozs (1.3. verzi)
7.7. Hrv#nyess#gi tartomny
& vltoz rvn'essgi tartomn'a a programna" az a ter+lete, ahol a vltoz hasznlha(
t eg'szer! nv"nt. -zen "*v+l meghatrozza, hog' a rendszer mi"or #oglal le s szaba(
d*t #el memrit a vltoz" szmra.
& vltozde"lar)i hel'e hatrozza meg az rvn'essgi tartomn't. & "$vet"ez brn
lthat ng' "ategrit "+l$nb$ztet+n" meg.
& tagvltoz (mem8er varia8le) az osztl' vag' obje"tum rsze. &z osztl'on bel+l, de a
metduso"on "*v+l lehet de"larlni. & tagvltoz az osztl' egszben lthat.
& lo"lis vltoz" (local varia8le) eg' "dblo""on bel+l vanna". & lthatsgu" a de"la(
r)i hel'tl az "et "$zvetlen+l "$r+lvev blo"" vgig tart.
& metduso" #ormlis paramterei (method parameters) az egsz metduson bel+l lt(
hat".
& "ivtel"ezel paramtere" (e*ception handler parameters) hasonl" a #ormlis para(
mtere"hez.
2ig'elj+" meg a "$vet"ez pldt.
if (...) {
int i = 17;
...
}
System.out.println("The value of i = " + i); //error
&z utols sor "*v+l van az i lo"lis vltoz rvn'essgi "$rn, ezrt a #ord*ts hibval le(
ll.
7.;. Eltoz'k ini.ializlsa
& lo"lis s tagvltoz"at lehet ini)ializlni ("ezdrt""el elltni) a de"lar)inl. &
vltoz adatt*pusa meghatrozza a lehetsges "ezdrt" t*pust is.
3.Hltoz" 2?. oldal
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
char aChar = 'S';
boolean aBoolean = true;
& Java #ord*t nem engedi meg, hog' ini)ializlatlan lo"lis vltozt hasznljun", vag'is
az els hasznlat eltt minden"ppen ini)ializlni "ell azt. 8agvltoz" esetn a < rt"
alaprtelmezett, teht az ini)ializls elmaradsa esetn az rt" (t*pustl #+gg) < vag'
null lesz. -nne" ellenre j szo"s tagvltoz" < "ezdrt"t is ePpli)it megadni.
& metduso" s "onstru"toro" #ormlis paramtereine", valamint a "ivtel"ezel para(
mtere"ne" nem lehet "ezdrt"et adni, az rt"t a h*vs"or "apj" meg.
Meg+egyz#s. & ;ZZ n'elvvel szemben teht a paramtere" esetn nem adhat meg "onstans "ezdrt".
& "$vet"ez "d )sa" ;ZZ(ban m!"$di", Javban nem.
void move(int x = 1, int y = 1) {...}
Hltoz" ini)ializlshoz a leg)lszer!bb ug'anol'an t*pusQ literlt megadni, mint a
vltoz. Jtt is igaz az az alapelv, hog' az adatvesztssel jr impli)it "onverzi nem meg(
engedett, teht a "$vet"ez "d hibs.
int i = 3.2;
Meg+egyz#s. &z elz pldban szerepl 3.2 literl dou8le t*pusQ, teht pl. /loat vltoz esetn sem lenne
hel'es az ini)ializls. H.I/ lenne az al"almas /loat literlt.
7.5. E#gleges vltoz'k
Hltozt lehet vglegesen is de"larlni. & vgleges vltoz rt"t nem lehet megvltoz(
tatni az ini)ializls utn. 4s n'elve"ben ezt "onstans vltoz"na" is h*vj".
& vgleges vltoz" de"lar)ijnl a /inal "ul)sszt "ell hasznlni.
final int aFinalVar = 0;
& vgleges lo"lis vltozt nem "$telez a de"lar)inl ini)ializlni, de addig nem hasz(
nlhatju" a vltozt, am*g nem t$rtni" meg az ini)ializls.
final int blankFinal;
. . . // nem hasznlhat
blankFinal = 0;
7.B. -llenrz k#rd#sek
4i az $ssze#+ggs a vltoz neve s rt"e "$z$ttA
4it jelent, hog' eg' vltozt de"larlni "ellA
Bol "ell lennie eg' vltoz de"lar)ijna"A
Bog'an "ell le*rni eg' egsz t*pusQ vltoz de"lar)ijtA
4i a legnag'obb s leg"isebb rt", amit eg' egsz t*pusQ vltozban trolhatun"A
3<. oldal Java programozs (1.3. verzi)
4i a "+l$nbsg a Java rt"ad utas*tsa s a matemati"ai eg'enlsg "$z$ttA
4i a lebegpontos t*pusA
Mit ta&asztal4nkI ha "ord(tani #s "4ttatni &r'!l+4k a kvetkez &rogramot8
public class Test {
public static void main (String args []) {
int age;
age = age + 1;
System.out.println("The age is " + age);
}
}
9e#ordul, majd le#ut "imenet nl"+l
1i*rja a 5The age is 26 sz$veget
9e#ordul, majd elindul, s #utsi hibval lell
,em #ordul le
Melyik a helyes "ormaI ha egy a !ett tartalmaz' karakterliterlt szeret-
n#nk l#trehozni8
JaJ
$a$
ne) CharacterDaF
0444a
Milyen #rt#keket vehet "el egy !yte t(&4sA vltoz'8
< X E0 030
(X12F) X 12=
(X32 =EF) X 32 =E=
(X20E) X 200
Melyik nem "ord4l le8
int i K HIL
/loat / K MN.4L
dou8le d K MN.4L
Melyik sor "ord4l le hi!a #s "igyelmeztet#s n#lk>l8
(4inden hel'es vlaszt jel$lj$n meg%)
/loat /K2.HL
char cKOaOL
8yte 8KINPL
8oolean 8KnullL
int iK24L
3.Hltoz" 31. oldal
Melyik korrekt vltoz'n#v8
(4inden hel'es vlaszt jel$lj$n meg%)
Ivaria8le
varia8leI
5)hatavaria8le
5H5
Qmyvar
Mit ta&asztal4nkI ha "ord(tani #s "4ttatni &r'!l+4k a kvetkez &rogramot8
public class Question01 {
public static void main(String[] args){
int y=0;
int x=z=1; // A
System.out.println(y+","+x+","+z); // B
}
}
1i*rja. <, 1, 1
1i*rja. <, <, 1
2ord*tsi hiba az & jel! sorban
2ord*tsi hiba a @ jel! sorban
2ord*tsi hiba mind"t (& s @) sorban
32. oldal Java programozs (1.3. verzi)
;. 9&ertorok
&z opertoro" eg', "ett vag' hrom operanduson hajtana" vgre eg' m!veletet. &z eg'(
operandusQ opertoro"at unris opertoro"na" h*vju". Gldul a ++ opertor az ope(
randust 1(el n$veli. & "toperandusQ opertoro"at binris opertoro"na" h*vju". Gl(
dul az K opertor a jobb oldali operandus rt"t a baloldali operandusba msolja. H(
g+l a hromoperandusQ opertor hrom operandust vr. Javban eg' hromoperandusQ
opertor van, a R: #eltteles opertor.
&z unris opertoro" lehetv teszi" a pre#iP s post#iP jel$ls is.
operator op //prefix
op operator //postfix
&z $sszes binris opertor in#iP jel$lst al"almaz, vag'is az opertor az operanduso" "$(
z$tt szerepel.
op1 operator op2 //infix
& hromoperandusQ opertor szintn in#iP jel$lst tesz lehetv. &z opertor mind"t
"omponense az operanduso" "$z$tt szerepel.
op1 ? op2 : op3 //infix
& m!velet vgrehajtsa utn a "i#ejezs rt"e rendel"ezsre ll. &z rt" #+gg az oper(
tortl s az operanduso" t*pustl is. &ritmeti"ai opertoro" esetn a t*pus al van ren(
delve az operanduso"na". ha "t int rt"et adun" $ssze, az rt" is int lesz.
4egjeg'zend, hog' a Javban a "i#ejezse" "irt"elsi sorrendje r$gz*tett, vag'is eg'
m!velet operandusai mindig balrl jobbra rt"eldne" "i (ha eg'ltaln "irt"eld(
ne", lsd r$vidzr "irt"els), mg a m!velet elvgzse eltt.
;.,. Aritmetikai o&ertorok
& Java programozsi n'elvben so"#le aritmeti"ai opertor ll rendel"ezsre lebegpon(
tos s egsz szmo"hoz. -ze" az opertoro" a Z ($sszeads), ( ("ivons), U (szorzs), /
(oszts) s [ (marad""pzs). & "$vet"ez tblzat $ssze#oglalja a Java n'elv "tope(
randusQ aritmeti"ai opertorait.
o&ertor hasznlat Fe(rs
Z op1 Z op2 op1 s op2 $sszeadsa, valamint sztring $ssze#!zs
( op1 ( op2 op2 s op1 "+l$nbsge
U op1 U op2 op1 s op2 szorzata
/ op1 / op2 op1 s op2 (egsz) hn'adosa
[ op1 [ op2 op1 s op2 egsz oszts marad"a
&z ,rithmetic'emo pldaprogram de#inil "t egsz s "t dupla(pontossgQ lebeg(
pontos szmot, s $t aritmeti"ai opertort mutat be. -zen "*v+l hasznlja a Z opertort
sztringe" $ssze#!zsre. &z aritmeti"ai opertoro" #l"$vre".
>.Dpertoro" 33. oldal
public class ArithmeticDemo {
public static void main(String[] args) {
int i = 37;
int j = 42;
double x = 27.475;
double y = 7.22;
System.out.println("Variable values...");
System.out.println(" i = " + i);
System.out.println(" j = " + j);
System.out.println(" x = " + x);
System.out.println(" y = " + y);
System.out.println("Adding...");
System.out.println(" i + j = " + (i + j));
System.out.println(" x + y = " + (x + y));
System.out.println("Subtracting...");
System.out.println(" i - j = " + (i - j));
System.out.println(" x - y = " + (x y));
System.out.println("Multiplying...");
System.out.println(" i * j = " + (i * j));
System.out.println(" x * y = " + (x * y));
System.out.println("Dividing...");
System.out.println(" i / j = " + (i / j));
System.out.println(" x / y = " + (x / y));
System.out.println("Computing the remainder...");
System.out.println(" i % j = " + (i % j));
System.out.println(" x % y = " + (x % y));
System.out.println("Mixing types...");
System.out.println(" j + y = " + (j + y));
System.out.println(" i * x = " + (i * x));
}
}
& program "imenete.
Variable values...
i = 37
j = 42
x = 27.475
y = 7.22
Adding...
i + j = 79
x + y = 34.695
Subtracting...
i - j = -5
x - y = 20.255
Multiplying...
i * j = 1554
x * y = 198.37
Dividing...
i / j = 0
x / y = 3.8054
3>. oldal Java programozs (1.3. verzi)
Computing the remainder...
i % j = 37
x % y = 5.815
Mixing types...
j + y = 49.22
i * x = 1016.58
;.,., =m&li.it konverzi'
&mi"or eg' aritmeti"ai opertor eg'i" operandusa egsz, a msi" pedig lebegpontos,
a""or az eredmn' is lebegpontos lesz. &z egsz rt" impli)it mdon lebegpontos
szmm "onvertldi", mieltt a m!velet vgrehajtdna. & "$vet"ez tblzat $ssze#og(
lalja az aritmeti"ai opertoro" rt"t az adatt*puso" #+ggvn'ben. & sz+"sges "on(
verzi" mg a m!velet vgrehajtsa eltt vgre #ogna" hajtdni.
long az eg'i" operandus sem lebegpontos, s legalbb az eg'i" long
int az eg'i" operandus sem lebegpontos, s nem long
dou8le legalbb az eg'i" operandus dou8le
/loat legalbb az eg'i" operandus /loat, s a msi" nem dou8le
& Z s ( opertoro" unris (eg'operandusQ) opertoro""nt is hasznlhat".
+op int rt"" "onvertlja a 8yte, short s char rt"et
Bop aritmeti"ai negls
& ZZ opertor n$veli az operandus rt"t, a (( pedig )s$""enti egg'el. 4ind"ettt *rhat(
ju" az operandus el (pre#iP) s utn (post#iP) is. & pre#iP #orma esetn elsz$r t$rtni"
az rt" n$velse vag' )s$""entse, majd a "i#ejezs rt"e is a megvltozott rt" lesz.
& post#iP hasznlat esetn #ord*tva t$rtni" a vgrehajts. elsz$r rt"eldi" "i az ope(
randus, majd utna hajtdi" vgre a ZZ vag' (( m!velet.
& "$vet"ez Sort'emo program mind"t opertort hasznlja.
public class SortDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076,
2000, 8, 622, 127 };
for (int i = arrayOfInts.length; --i >= 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;
}
}
}
>.Dpertoro" 30. oldal
for (int i = 0; i < arrayOfInts.length; i++) {
System.out.print(arrayOfInts[i] + " ");
}
System.out.println();
}
}
& program a rendezett szmsorozatot #ogja megjelen*teni.
;.2. 3el.i's o&ertorok
& rel)is opertoro" $sszehasonl*tana" "t rt"et, s meghatrozz" a "$zt+" lv
"ap)solatot. Gldul a ;K true(t ad, ha a "t operandus nem eg'enl. & "$vet"ez tbl(
zatban $sszeg'!jt$tt+" a rel)is opertoro"at.
Dpertor &l"almazs 9e*rs
\ op1 \ op2 true(t ad vissza, ha op1 nag'obb, mint op2
\] op1 \] op2 true(t ad vissza, ha op1 nag'obb vag' eg'enl, mint op2
^ op1 ^ op2 true(t ad vissza, ha op1 "isebb, mint op2
^] op1 ^] op2 true(t ad vissza, ha op1 "isebb vag' eg'enl, mint op2
]] op1 ]] op2 true(t ad vissza, ha op1 s op2 eg'enl"
%] op1 %] op2 true(t ad vissza, ha op1 s op2 nem eg'enl"
& "$vet"ez pldban (Selational'emo) de#inilun" hrom int t*pusQ szmot, s rel)i(
s opertoro" hasznlatval $sszehasonl*tju" "et. &z $sszehasonl*t m!velete"et #l"$(
vr bet!t*pussal emelt+" "i.
public class RelationalDemo {
public static void main(String[] args) {
int i = 37;
int j = 42;
int k = 42;
System.out.println("Variable values...");
System.out.println(" i = " + i);
System.out.println(" j = " + j);
System.out.println(" k = " + k);
System.out.println("Greater than...");
System.out.println(" i > j = " + (i > j));//false
System.out.println(" j > i = " + (j > i));//true
System.out.println(" k > j = " + ( > j));//false;
System.out.println("Greater than or equal to...");
System.out.println(" i >= j = " + (i >! j));//false
System.out.println(" j >= i = " + (j >! i));//true
System.out.println(" k >= j = " + ( >! j));//true
3E. 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 = " + ( " j));//false
System.out.println("Less than or equal to...");
System.out.println(" i <= j = " + (i "! j));//true
System.out.println(" j <= i = " + (j "! i));//false
System.out.println(" k <= j = " + ( "! j));//true
System.out.println("Equal to...");
System.out.println(" i == j = " + (i !! j));//false
System.out.println(" k == j = " + ( !! j));//true
System.out.println("Not equal to...");
System.out.println(" i != j = " + (i #! j));//true
System.out.println(" k != j = " + ( #! j));//false
}
}
& #enti program "imenete.
Variable values...
i = 37
j = 42
k = 42
Greater than...
i > j = false
j > i = true
k > j = false
Greater than or equal to...
i >= j = false
j >= i = true
k >= j = true
Less than...
i < j = true
j < i = false
k < j = false
Less than or equal to...
i <= j = true
j <= i = false
k <= j = true
Equal to...
i == j = false
k == j = true
Not equal to...
i != j = true
k != j = false
;.7. Fogikai o&ertorok
& rel)is opertoro"at g'a"ran hasznlj" logi"ai opertoro""al eg'+tt, *g' $sszetet(
tebb logi"ai "i#ejezse"et hozhatun" ltre. & Java programozsi n'elv hat#le logi"ai
opertort X $t binris s eg' unris X tmogat, ahog' azt a "$vet"ez tblzat mutatja.
>.Dpertoro" 3=. oldal
9&ertor Alkalmazs Fe(rs
__ op1 __ op2 9ogi"ai s. true(t ad vissza, ha op1 s op2 eg'arnt true`
op2 #eltteles "irt"els!
aa op1 aa op2 9ogi"ai vag'. true(t ad vissza, ha op1 vag' op2 true` op2
#eltteles "irt"els!
% %op 9ogi"ai nem. true(t ad vissza, ha op /alse
_ op1 _ op2 @iten"nti s. true(t ad vissza, ha op1 s op2 eg'arnt
8oolean s true` op1 s op2 mindig "irt"eldi"` ha
mind"t operandus szm, a""or biten"nti Es m!velet
a op1 a op2 @iten"nti vag'. true(t ad vissza, ha op1 s op2 eg'arnt
8oolean vag' op1 vag' op2 true` op1 s op2 mindig "ir(
t"eldi"` ha mind"t operandus szm, a""or biten"n(
ti vagy m!velet
b op1 b op2 @iten"nti nem. true(t ad vissza, ha op1 s op2 "+l$n(
b$z c vag' eg'i", vag' msi", de nem eg'szerre mind(
"t operandus true
& "$vet"ez plda az TT opertort hasznlja a "t rsz("i#ejezs logi"ai rt"ne" $ssze(
"ap)solsra.
0 <= index && index < NUM_ENTRIES
;.7., 3vidzr ki#rt#kel#s
@izon'os esete"ben a logi"ai opertor msodi" operandusa nem rt"eldi" "i. Gldul
a "$vet"ez esetben.
(numChars < LIMIT) && (...)
&z TT opertor )sa" a""or ad vissza true(t, ha mind"t operandus true. 8eht, ha numB
Chars nag'obb vag' eg'enl, mint 9J4J8, a""or TT bal oldala /alse, s a "i#ejezs visz(
szaadott eredmn'e a jobb oldali operandus "irt"else nl"+l sz+leti" meg. Jl'en ese(
te"ben a #ord*t nem rt"eli "i a jobb oldali operandust. Jl'en"or a jobb oldali "i#ejezs
miatt "$zvetett mell"hatso" lphetne" #el, pldul ha adat#ol'ambl olvasun", rt"e(
"et a"tualizlun", vag' szm*tso"at vgz+n" a jobb oldali operandusban. -hhez hason(
lan, ha a aa opertor bal oldali operandusa igaz, #elesleges a jobboldalt "irt"elni, nem
is #og megt$rtnni.
Ba mind"t operandus logi"ai, az T opertor hasonlan visel"edi", mint az TT. &zon(
ban T mindig "irt"eldi" s true(t ad vissza, ha mind"t operandusa true. Ba az ope(
randuso" 8oolean(t*pusQa", U azonos m!veletet vgez, mint UU.
& #enti m!"$ds miatt nem rdemes ol'an "dot "sz*teni, amel'i" a jobboldali operan(
dusna" "irt"else sorn a "irt"elsen tQl mst is tesz. Gldul veszl'es, nehezen
tte"inthet lesz a "$vet"ez #eltteles "i#ejezs.
if (a < b && b++ < f(c) ) {...}
Ba a bal oldali operandus (a^b) hamis, a""or sem a ZZ opertor, sem az # #+ggvn'h*vs
nem #og vgrehajtdni.
3F. oldal Java programozs (1.3. verzi)
;.;. $itl#&tet #s !itenk#nti logikai o&ertorok
& lptet opertoro" bit m!velete"et vgezne", a "i#ejezs els operandusna" bitjeit
jobbra, vag' balra lpteti". & "$vet"ez tblzat a Java n'elvben hasznlt lptet oper(
toro"at mutatja be.
9&ertor Alkalmazs Fe(rs
^^ op1 ^^ op2 op1 bitjeit op2 rt"vel balra lpteti` jobbrl
null""al t$lti #el
\\ op1 \\ op2 op1 bitjeit op2 rt"vel jobbra lpteti` balrl
a legnag'obb hel'rt"! bitet t$lt #el
\\\ op1 \\\ op2 op1 bitjeit op2 rt"vel jobbra lpteti` balrl
null""al t$lt #el.
4indeg'i" opertor az els operandus bitjeit lpteti az opertor ltal megadott irn'ba a
msodi" operandus rt"vel. Gldul a "$vet"ez "i#ejezsben a 13(as egsz szm bitje(
it lptetj+" 1(el jobbra.
13 >> 1;
& 13(as szm "ettes szmrendszerbeli rt"e. 11<1. & lptets eredmn'e. 11<1 eg' poz*(
)ival jobbra ( 11<, (de)imlisan E). & bal oldali bite"et <(val t$lt$tt+" #el.
& "$vet"ez tblzatban a Java programozsi n'elvben hasznlatos biten"nti logi"ai
opertoro"at s #un")iju"at lthatju".
9&ertor Alkalmazs Fe(rs
_ op1 _ op2 @iten"nti Es, ha mind"t operandus szm` #eltteles Es
ha mind"t operandus logi"ai
a op1 a op2 @iten"nti vagy@ ha mind"t operandus szm` #eltteles
vagy@ ha mind"t operandus logi"ai
b op1 b op2 @iten"nti !i"?r# vagy (*or)
d dop2 @iten"nti neg)i
Hs
Ba az operandus szm, az T opertor biten"nti Es m!veletet hajt vgre pron"nt
(hel'rt" szerint) az operandus bitjein. &z Es m!velet a""or ad vissza 1(et, ha a "i#eje(
zs mind"t bitje 1.
Ba az Es m!veletet "t de)imlis szmon hajtju" vgre, pldul a 12(n s 13(n (12_13)
a""or az adott szmo" "ettes szmrendszerbeli ala"jn biten"nt "ell vgrehajtanun" az
Es m!veletet. &z eredmn' *g' 12(lesz de)imlisan.
Ba mind"t operandus 1, az s m!velet eredmn'"nt is 1(et ad. -llen"ez esetben <(t.
>.Dpertoro" 3?. oldal
Eagy
Ba mind"t operandus szm, a""or a | opertor a vag' m!veletet hajtja vgre. & vag'
m!velet 1(et ad eredmn'+l, ha "t bit "$z+l brmel'i" rt"e 1.
)izr' vagy
Ba mind"t operandus szm, a""or a V opertor a "izr vag' (*or) m!veletet hajtja
vgre. 1izr vag' esetn a "i#ejezs eredmn'e a""or eg', ha a "t operandus 8it "+l$n(
b$z, ellen"ez esetben az eredmn' <.
Neg.i'
Hg+l a neg)is opertor (d) az operandus bitjeit eg'en"nt az ellen"ezjre #ord*tja.
ha az operandus bitje 1, a""or az eredmn' <, ha az operandus bitje <, a""or az ered(
mn' 1. Gldul. d1<11 (11) ] <1<< (>).
;.;., $itmani&4l.i'k a gyakorlat!an
-g'ebe" "$z$tt a biten"nti m!velete""el hasznosan "ezelhet" a logi"ai bite" is. 8e(
g'+" #el pldul, hog' az adott programban vanna" logi"ai bite", mel'e" a "+l$nb$z
$sszetev" llapott hatrozz" meg a programban. -z )lravezetbb, mint "+l$nb$z
8oolean vltoz" de#inilsa. @itmanipul)i seg*tsgvel bell*that", s vltoztathat"
az adott bite" rt"ei.
-lsz$r de#iniljun" "onstanso"at, mel'e" a program "+l$nb$z bitjeit hatrozz" majd
meg. -ze" a "onstanso" a "ettes szmrendszer "+l$nb$z hel'i rt"ei, *g' biztos*that(
ju", hog' "sbb nem leszne" $ssze"everhet". 1sbb eze" a "onstanso" a bit vltoz"
rt"eit seg*ti" majd "in'erni. & "$vet"ez pldban a bite"et < rt"!ne" ini)ializlju",
ami azt jelenti, hog' minden rt" hamis.
static final int VISIBLE = 1;
static final int DRAGGABLE = 2;
static final int SELECTABLE = 4;
static final int EDITABLE = 8;
int flags = 0;
& =.S.7L& szimboli"us "onstans jelzi, ha valami lthatv vli" a programban. -zt a bi(
tet ll*tja eg'esre a "$vet"ez sor.
flags = flags | VISIBLE;
& lthatsgot a "$vet"ez "pen tesztelhetj+".
if ((flags & VISIBLE) == VISIBLE) {
...
}
Jtt lthat a teljes program (7it)ise'emo), mel' magban #oglalja a #enti "dot.
public class BitwiseDemo {
static final int VISIBLE = 1;
static final int DRAGGABLE = 2;
static final int SELECTABLE = 4;
static final int EDITABLE = 8;
><. 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.");
}
}
}
& #enti program "imenete.
Flags are Visible and Draggable.
Flags are now also Editable.
;.5. Hrt#kad' o&ertorok
&z alap rt"ad (]) opertort hasznlhatju" arra, hog' eg' rt"et hozzrendelj+n" eg'
vltozhoz. & Ma*=aria8les'emo program az 6]6(t hasznlja, hog' ini)ializlja a vlto(
zit.
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
char aChar = 'S';
boolean aBoolean = true;
& Java programozsi n'elv azt is megengedi a r$vid*tett rt"ad opertoro" seg*tsg(
vel, hog' aritmeti"ai, rt"n$velsi, valamint biten"nti m!veletvgzst $ssze"$ss+" az
rt"adssal.
Gldul, ha eg' vltoz rt"t a"arju" n$velni, a""or.
i=i+2;
-zt le lehet r$vid*teni a Z] r$vid*tett opertor seg*tsgvel.
i += 2;
& #enti "t rt"ads megeg'ezi".
& "$vet"ez tblzat tartalmazza a r$vid*tett rt"ad opertoro"at s a hosszabb ala"(
ju"at.
9&ertor 5asznlat -gyezik
Z] op1 Z] op2 op1 ] op1 Z op2
>.Dpertoro" >1. oldal
(] op1 (] op2 op1 ] op1 ( op2
U] op1 U] op2 op1 ] op1 U op2
/] op1 /] op2 op1 ] op1 / op2
[] op1 [] op2 op1 ] op1 [ op2
_] op1 _] op2 op1 ] op1 _ op2
a] op1 a] op2 op1 ] op1 a op2
b] op1 b] op2 op1 ] op1 b op2
^^] op1 ^^] op2 op1 ] op1 ^^ op2
\\] op1 \\] op2 op1 ] op1 \\ op2
\\\] op1 \\\] op2 op1 ] op1 \\\ op2
;.B. -gy#! o&ertorok
& Java n'elv tmogatja mg a "$vet"ez tblzatban #oglalt opertoro"at.
9&ertor Fe(rs
A. 2eltteles opertor
ef 8$mb$" de"larlsra, ltrehozsra s elemeine" hozz#rsre hasz(
nlt opertor.
. 4ins*tett hivat"ozs
( params ) Hesszvel elvlasztott paramtere"et #oglalja "eretbe.
( t'pe ) Ot"onvertlja az rt"et eg' meghatrozott t*puss.
neN gj obje"tum ltrehozsa.
instan)eo# 4egllap*tja, hog' az els operandus t*pusa(e a msodi" operandus.
;.C. -llenrz k#rd#sek
4it jelent a logi"ai "i#ejezsA
Bog'an "ell logi"ai t*pusQ vltoz"at de"larlniA
4ire hasznlhat a %] opertorA
4ire hasznlhat a aa opertorA
&z Es s vagy opertoro" jobb oldali operandusa mi"or "er+l "irt"elsreA
>2. oldal Java programozs (1.3. verzi)
4i a "+l$nbsg a \\ s \\\ opertoro" "$z$ttA
Mit (r ki a kvetkez k'dr#szlet8
System.out.println(4/3);
E
<
1
=
0.1i#ejezse", utas*tso", blo""o" >3. oldal
5. )i"e+ez#sekI 4tas(tsokI !lokkok
& vltoz" s az opertoro", amel'e""el az elz #ejezetben ismer"edhett+n" meg, a
programo" alapvet p*t"$vei. Hltoz", literlo" s opertoro" "ombin)iibl hoz(
zu" ltre a "i#ejezse"et c "dszegmense"et, amel'e" szm*tso"at vgezne", s rt"e(
"et adna" vissza. ,hn' "i#ejezs utas*tso"ba szervezhet c eze" "omplett #uttatsi
eg'sge". -ze"et az utas*tso"at "ap)sos zrjele" "$z )soportos*tva c h s i c "apju"
meg az utas*tsblo""o"at.
5.,. )i"e+ez#sek
& "i#ejezse" hajtj" vgre a program #eladatt. & "i#ejezse"et t$bbe" "$z$tt vltoz"
"iszm*tsra, rt"+" bell*tsra s a program #utsna" ellenrzsre hasznlju". &
"i#ejezse"ne" "t#le #eladata van. vgrehajtani a szm*tso"at, amel'e"et a "i#ejezs
al"otelemi hatrozna" meg, s visszaadni a szm*ts vgeredmn't.
:e#in*)i. & ki"e+ez#s vltoz", opertoro" s metdush*vso" ol'an sorozata (a n'elv
szintaPist #ig'elembe vve) amel' eg' rt"et ad vissza.
&hog' az elze"ben mr eml*tett+", az opertoro" eg' rt"et adna" vissza, *g' az ope(
rtor hasznlatval eg' "i#ejezst "apun". & Ma*=aria8les'emo program rszlete nh(
n'at bemutat a program "i#ejezsei "$z+l.
...
char aChar = 'S';
boolean aBoolean = true;
System.out.println("The largest byte value is "
+ largestByte);
...
if (Character.isUpperCase(aChar)) {
...
}
& "i#ejezse" "irt"else sorn vgrehajtsra "er+lne" m!velete", s a "i#ejezs vissza(
ad eg' rt"et, mint az a "$vet"ez tblzatban is lthat.
)i"e+ez#s Mvelet Eisszaadott
#rt#k
aChar K WSW &z j7j "ara"tert adja rt(
"+l az aChar "ara"ter t*(
pusQ vltozna"
aChar rt"e az r(
t"ads utn (j7j)
OThe largest 8yte
value is O + largest7yte
Mssze#!zi a sztringet s a
largest7yte rt"t
sztringg "onvertlva
&z eredmn' az $sz(
sze#!z$tt sztring
Character.is<pperCaseDaCharF is<pperCase metdus h*(
vsa
& metdus visszat(
rsi rt"e. true
& "i#ejezs ltal visszaadott rt" adatt*pusa #+gg a "i#ejezsben hasznlt al"oteleme"(
tl. &z aChar K WSW "i#ejezs eg' "ara"tert ad vissza, mert az rt"ad opertor ug'an(
>>. oldal Java programozs (1.3. verzi)
ol'an t*pusQ rt""el tr vissza, mint amil'ene" az operandusai, s az aChar valamint az
WSW "ara"ter t*pusQa". & t$bbi "i#ejezsnl mr lthattu", hog' eg' "i#ejezs eg' 8oolean
rt""el, eg' sztringgel s eg'b rt"e""el is visszatrhet.
& Java n'elv lehetsget biztos*t sszetett ki"e+ez#se" s utas*tso" ltrehozsra "i(
sebb "i#ejezse"bl, am*g a "i#ejezs eg'i" rszben hasznlt adatt*puso" megeg'ezne" a
t$bbi rsz adatt*pusaival. Jtt lthatun" eg' pldt $sszetett "i#ejezsre.
x * y * z
-bben a "+l$nleges pldban a sorrend, amel' szerint a "i#ejezs "irt"eldi", nem
#ontos, mivel a szorzs eredmn'e nem #+gg a tago" sorrendjtl, a vgeredmn' mindig
ug'anaz, nem szm*t, mil'en sorrendben vgezz+" el a szorzso"at. &zonban ez nem
minden "i#ejezsre igaz. Gldul a "$vet"ez "i#ejezs "+l$nb$z eredmn't ad attl #+g(
gen, hog' az $sszeads vag' az osztst megvals*t opertor hajtdi"(e vgre els"nt.
x + y / 100
Srjelezssel meghatrozhatju", hog' eg' "i#ejezs hog'an rt"eldj$n "i. Gldul *g'
tehetj+" eg'rtelm!v a vgrehajtst az elz plda esetben.
(x + y)/ 100
Ba hatrozattan nem jelezz+" a sorrendet, amel' szerint a"arju", hog' az $sszetett "i#e(
jezs "irt"eldj$n, a""or a sorrendet az o&ertorok &re.eden.i+a #ogja meghat(
rozni. & magasabb pre)eden)ival rendel"ez opertoro" hajtdna" vgre els"nt. Gl(
dul az oszts opertor magasabb pre)eden)ijQ, mint az $sszeads. Wg' a "$vet"ez "t
"i#ejezs megeg'ezi" eg'mssal.
x + y / 100
x + (y / 100)
Ba $sszetett "i#ejezst *run", a""or "i#ejezetten #ig'eln+n" "ell a zrjelezsre s arra,
hog' mel' opertoro"na" "ell "irt"eldni+" els"nt. -nne" a g'a"orlsa seg*thet a
#orrs"d jobb olvashatsgna" s "arbantarthatsgna" elrsben.
& "$vet"ez tblzat a Java plat#ormban hasznlt opertoro" pre)eden)ia(szintjeit mu(
tatja be. &z opertoro" a tblzatban pre)eden)ia(szint szerint vanna" rendezve. leg#el+l
a legnag'obb pre)eden)ival rendel"ez tallhat. & magasabb pre)eden)ival rendel(
"ez opertoro" elbb hajtdna" vgre, mint az ala)son'abbal rendel"ez". &z azonos
szinten elhel'ez"ed opertoro" azonos pre)eden)ival rendel"ezne". Ba azonos pre)e(
den)ijQ opertoro" szerepelne" eg' "i#ejezsben, a""or szabl'ozni "ell, hog' mel'i"
rt"eldj$n "i els"nt. 4inden binris opertor, "ivve az rt"ad opertoro"at bal(
rl jobbra hajtdna" vgre. &z rt"ad opertoro" jobbrl balra hajtdna" vgre.
0.1i#ejezse", utas*tso", blo""o" >0. oldal
9&ertor &re.eden.ia szintek
post#iP e*prZZ e*pr((
unris ZZe*pr ((e*pr Ze*pr (e*pr d %
multipli"at*v U / [
addit*v Z (
lptets ^^ \\ \\\
rel)is ^ \ ^] \] instanceo/
eg'enlsg ]] %]
biten"nti s _
biten"nti "izr vag' b
biten"nti vag' a
logi"ai s __
logi"ai vag' aa
#eltteles A .
rt"ads ] Z] (] U] /] [] _] b] a] ^^] \\] \\\]
5.2. 6tas(tsok
&z utas*tso" nag'jbl a beszlt n'elv mondataina" #elelne" meg. &z utas*ts eg' "on"(
rt #utsi eg'sget hoz ltre. & "$vet"ez "i#ejezst*puso" szervezhet" utas*tso"ba,
amel'e" pontosvesszvel vgzdne" (;).
rt"ad "i#ejezse"
++ s -- hasznlata
metdush*vso"
obje"tumot ltrehoz "i#ejezse"
&z utas*tso"na" ezt a #ajtjt ki"e+ez#s 4tas(tsokna" nevezz+". Jtt lthatun" pr
pldt a "i#ejezs(utas*tso"ra.
aValue = 8933.234; //rtkad utasts
aValue++; //nvels
System.out.println(aValue); //metdus hvs
Integer integerObject = new Integer(4); //objektum ltrehozs
& "i#ejezs(utas*tso"on "*v+l mg "t#le t*pust "ell megeml*ten+n". & deklar.i's
4tas(ts ltrehoz eg' vltozt. 7o" pldt lthattun" mr de"lar)is utas*tso"ra.
double aValue = 8933.234; //deklarcis utasts
>E. oldal Java programozs (1.3. verzi)
& v#greha+ts-vez#rl 4tas(ts szabl'ozza, hog' az utas*tso" mil'en sorrendben
hajtdna" vgre. & /or )i"lus s az i/ utas*ts j pld" a vgrehajts(vezrl szer"ezetre.
5.7. $lokkok
& blo"" nulla vag' t$bb utas*ts "ap)sos zrjele" "$z$tt, amel' hasznlhat brhol,
ahol az $nll utas*tso" megengedette". & "$vet"ez rszlet "t blo""ot mutat be Ma*B
=aria8les'emo programbl, mindeg'i" tartalmaz eg' $nll utas*tst.
if (Character.isUpperCase(a$har)) {
System.out.println("The character " + aChar
+ " is upper case.");
} else {
System.out.println("The character " + aChar
+ " is lower case.");
}
5.;. Jssze"oglals
-g' "i#ejezs vltoz", opertoro" s metdush*vso" sorozata (a n'elv szintaPist #ig'e(
lembe vve), amel' eg' rt"et ad vissza. Wrhatun" $sszetett "i#ejezse"et is eg'szer!b(
be"bl $sszell*tva mindaddig, am*g a magban #oglalt, az opertoro"hoz sz+"sges
adatt*puso" meg#elele". Ba $sszetett "i#ejezst *run", a""or "i#ejezetten #ig'eln+n" "ell
a zrjelezsre s arra, hog' mel' opertoro"na" "ell "irt"eldni+" els"nt.
Ba nem hasznlju" a zrjelezst, a""or a Java plat#orm az opertoro" pre)eden)ija
szerint rt"eli "i az $sszetett "i#ejezst. & "orbbi tblzat mutatja be a Java plat#orm(
ban megtallhat opertoro" pre)eden)ijt.
&z utas*ts eg' "on"rt utas*tsi eg'sget vals*t meg, amel'et pontosvessz zr le (;).
&z utas*tso"na" hrom #ajtja van. "i#ejezs utas*tso", de"lar)is utas*tso", vgre(
hajts(vezrl utas*tso".
,ulla vag' t$bb utas*tsbl a "ap)sos zrjele" seg*tsgvel blo""o"at ala"*thatun" "i. {
s }. Babr nem sz+"sges, ajnlott az al"almazsa a""or is, ha a blo"" )sa" eg' utas*(
tst tartalmaz.
5.5. -llenrz k#rd#sek
4it jelent a programblo""A
Bog'an "ell eg' programblo""ot le*rni JvbanA
4ondjon pldt "i#ejezs(utas*tsra%
1ell e pontosvesszt (`) *rni eg' "i#ejezs vgreA
&zonos pre)eden)ijQ opertoro" esetn mi"or #og jobbrl balra haladni a "irt"e(
lsA
A kvetkez sorok kz>l melyik "og hi!a n#lk>l le"ord4lni8
/loat /K2.HL
char cKOaOL
0.1i#ejezse", utas*tso", blo""o" >=. oldal
8yte 8KINPL
8oolean 8KnullL
int iK24L
5.B. Dyakorl' "eladatok
Kr+on &rogramotI amely kiszm(t+a #s ki(r+a az 5 egys#g s4garA gm! t#r"o-
gatt!
Bozzon ltre eg' r vltozt 0($s "ezdrt""el. 7zm*tsa "i a tr#ogat rt"t a "$vet"e(
z "plet alapjn.
$
%
$
r
V =
Kr+on &rogramotI amely kiszm(t+a #s ki(r+a a msod"okA egyenlet k#t meg-
oldst!
D1eltEtele"">!@ hogy !Et megold?s lEte"i!@ a gyX! alatti !i/eje"Es esetleges negatGv volB
t?val most nem !ell /oglal!o"ni.F
a
ac b b
x
#
%
#
# & 1

=
Bozzon ltre a, 8 s c vals t*pusQ vltoz"at tetszleges "ezdrt""el% Bozzon ltre *2
s *I nev! vltoz"at, s vgezze el a szm*tso"at% (& ng'zetg'$"vonsra a
Math.sYrtDF metdust lehet al"almazni. & metdus negat*v paramter esetn ,a, spe)i(
lis rt"et adja.) Wrja "i az eredmn'e"et a "onzolra%
4dos*tsa a programot Qg', hog' a disz"riminns (a g'$"jel alatti "i#ejezs) rt"t eg'
d nev! vltozba szm*tsa "i elsz$r, majd enne" #elhasznlsval szm*tsa az *2 s *I
rt"t.
(Glda adato" a tesztelshez. a ] 1, b ] (0, ) ] E esetn P1]2, P2]3)
Kr+on &rogramotI amelyik Lkira+zol+aM a kar.sony"t!
/ \
/ \
/ \
/ \
-----------
" "
" "
" "
>F. oldal Java programozs (1.3. verzi)
B. Eez#rl#si szerkezetek
B.,. A while #s a do-while .ikl4sok
& )hile )i"lus utas*tsblo"" vgrehajtsra hasznlhat, am*g a #elttel igaz. & )hile
)i"lus szintaPisa.
while (felttel) {
utastsok
}
& )hile )i"lus elsz$r "irt"eli a #elttelt, amel' m!velet eg' 8oolean rt"et ad vissza.
Ba a "i#ejezs rt"e igaz, a )hile )i"lus vgrehajtja )hile blo""jban szerepl utas*t(
so"at. & )hile )i"lus addig rt"eli "i a "i#ejezst s hajtja vgre az utas*tsblo""ot, am*g
a "i#ejezs hamis rt"! nem lesz.
& "$vet"ez :hile'emo nev! pldaprogram a )hile )i"lust hasznlja #el, amel' meg(
vizsglja a sztring "ara"tereit, hozz#!zi a sztring minden "ara"tert a sztring pu##er v(
ghez, am*g kgk bet!vel nem tall"ozi".
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);
}
}
&z rt", amel'et az utols sor *r "i.
Copy this strin
& Java n'elv eg' a )hile )i"lushoz hasonl utas*tst is biztos*t c a doB)hile )i"lust. &
doB)hile szintaPisa.
do {
utasts(ok)
} while (felttel);
&hel'ett, hog' a #elttelt a )i"lus vgrehajtsa eltt rt"eln "i, a doB)hile ezt a )i"lus(
mag le#utsa utn teszi meg. Wg' a doB)hile magjban szerepl utas*tso" minimum eg'(
szer vgrehajtdna".
Jtt lthat az elz program doB)hile )i"lussal megvals*tva, ami a 'o:hile'emo nevet
"apta.
E.Hezrlsi szer"ezete" >?. oldal
public class DoWhileDemo {
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);
do {
copyToMe.append(c);
c = copyFromMe.charAt(++i);
} while (c != 'g');
System.out.println(scopyToMe);
}
}
&z rt", amel'et az utols sorban "i*r.
Copy this strin
B.2. A for .ikl4s
& /or utas*ts j mdszer eg' rt"tartomn' bejrsra. & /or utas*tsna" van eg' ha(
g'omn'os #ormja, s a Java 0.<(tl "ezdden eg' tovbb#ejlesztett #ormja is, amit
t$mb$"$n s g'!jtemn'e"en val eg'szer! bejrsnl hasznlhatun". & /or utas*ts l(
talnos #ormja a "$vet"ez"ppen nz "i.
for (inicializls; felttel; nvekmny) {
utasts(ok)
}
&z ini)ializls eg' ol'an "i#ejezs, amel' "ezdrt"et ad a )i"lusna" X ez eg'szer, a )i"(
lus elejn #ut le. & #elttel "i#ejezs azt hatrozza meg, hog' meddig "ell a )i"lust ism(
telni. &mi"or a "i#ejezs hamis"nt rt"eldi" "i, a )i"lus nem #ol'tatdi". Hgezet+l a
n$ve"mn' eg' ol'an "i#ejezs, amel' minden ismtlds utn vgrehajtdi" a )i"lus(
ban. 4indezen $sszetev" op)ionlisa". 8ulajdon"ppen ahhoz, hog' eg' vgtelen )i"(
lust *rjun", elhag'ju" mindhrom "i#ejezst.
for ( ; ; ) {
...
}
& /or )i"luso"at g'a"ran arra hasznlju", hog' eg' t$mb elemein vag' eg' "ara"terln(
)on vgezz+n" iter)it. &z albbi plda, 1or'emo, eg' /or utas*tst hasznl arra, hog'
vgighaladjon eg' t$mb elemein s "i*rja "et.
0<. 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();
}
}
& program #utsi eredmn'e.
32 87 3 589 12 1076 2000 8 622 127
4egjeg'ezz+", hog' eg' lo"lis vltoz is de"larlhat a /or )i"lus ini)ializl "i#ejezs(
ben. -nne" a vltozna" az rvn'essge a de"lar)ijtl a /or utas*ts ltal vezrelt
blo"" vgig terjed, teht mind a lezr s a n$ve"mn' "i#ejezseiben is hasznlhat".
Ba a /or )i"lust vezrl vltozra nin)s sz+"sg a )i"luson "*v+l, a legjobb, ha a vltozt
az rt"ad "i#ejezsben de"larlju". &z i, j s ! neve"et g'a"ran a /or )i"luso" vezrl(
sre hasznlju", eze"ne" a /or )i"lus rt"ad "i#ejezsn bel+l val de"larlsa lesz!"*ti
lettartamu"at, s )s$""enti a hibalehetsge"et.
Dy+tem#nyeken #s tm!kn val' !e+rs a ki!v(tett for .ikl4ssal
&z 0.<(ban eg' Qj#ajta /or utas*tst hozta" ltre "i#ejezetten g'!jtemn'e"hez s t$m(
b$"h$z. &z utas*ts ltalnos ala"ja.
for (elemtpus elem : trol) {
utasts(ok)
}
Jtt eg' "is "drszlet, ami ug'anazt a #eladatot vgzi, mint az elz "drszlet.
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();
}
}
& "ibv*tett /or utas*ts igazn a""or eln'$s, ami"or g'!jtemn'e"re al"almazzu" (osz(
tl'o", ami" a Collection inter#szt implementlj"). Jtt lthat eg' rgi t*pusQ /or utas*(
ts, ami itertor seg*tsgvel eg' g'!jtemn'en halad vgig.
void cancelAll(Collection<TimerTask> c) {
for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
i.next().cancel();
}
4ost nem "ell aggdnun" a "+l$n$s ZTimerTas![ "drszlet miatt. 1sbb #ogun" ma(
g'arzatot adni a rszlete"re. & ln'eg az, hog' el"er+lhetj+" ezt a "ibv*tett /or )i"lus
hasznlatval.
E.Hezrlsi szer"ezete" 01. oldal
void cancelAll(Collection<TimerTask> c) {
for (TimerTask t : c)
t.cancel();
}
&mi"or iter)i"at g'azun" eg'be, a "ibv*tett /or utas*ts mg jobb, mivel #$l$sleges
"drsze"et "er+lhet+n" el. Gldul.
for (Suit suit : suits) {
for (Rank rank : ranks)
sortedDeck.add(new Card(suit, rank));
}
& "ibv*tett /or utas*ts sajnos nem m!"$di" mindenhol. Bog'ha pl. t$mbindePe"hez
a"arun" hozz#rni, a "ibv*tett /or nem #og m!"$dni. &mi"or )sa" lehet, a tovbb#ej(
lesztett /or(t hasznlju", t$bb programhibt is "i"+sz$b$lhet+n", s a #orrs"dun" ren(
dezettebb lesz.
B.7. Az if-else szerkezet
&z i/ utas*ts lehetv teszi a programun" szmra, hog' valamil'en "ritrium szerint
"ivlasztva #uttasson ms utas*tso"at. Gldul teg'+" #el azt, hog' a programun" hiba(
"eres (de8ugging) in#orm)i"at *r "i eg' '&7<\ nev!, 8oolean t*pusQ vltoz rt"e
alapjn. Ba a '&7<\ igaz, a program "i*rja az in#orm)it, az * vltoz rt"t. 1+l$n(
ben a program #utsa normlisan #ol'tatdi". -g' il'en #eladatot implementl prog(
ramrsz a "$vet"ez"ppen nzhet "i.
if (DEBUG) {
System.out.println("DEBUG: x = " + x);
}
-z az i/ utas*ts legeg'szer!bb #ormja. &z i/ ltal vezrelt blo"" vgrehajtdi", ha a #el(
ttel igaz. Oltalban az i/ eg'szer! ala"ja *g' nz "i.
if (felttel) {
kifejezsek
}
4i van a""or, ha az utas*tso" ms vltozatt a"arju" #uttatni, ha a #elttel "i#ejezs ha(
misA -rre az else utas*tst hasznlhatju". Heg'+n" eg' msi" pldt. 8eg'+" #el azt,
hog' a programun"na" "+l$nb$z m!velete"et "ell vgrehajtania attl #+ggen, hog' a
#elhasznl az C( gombot vag' ms gombot n'om meg a #ig'elmeztet abla"ban. &
programun" "pes lehet erre, ha eg' i/ utas*tst eg' else utas*tssal eg'+tt hasznlun".
if (response == OK) {
//code to perform OK action
} else {
//code to perform Cancel action
}
&z else blo"" a""or "er+l vgrehajtsra, ha az i/ #elttele hamis. &z else utas*ts eg' m(
si" #ormja az else i/ eg' msi" #elttelen alapulva #uttat eg' utas*tst. -g' i/ utas*tsna"
lehet a"rhn' else i/ ga, de else )sa" eg'. &z albbi ./&lse'emo program eg' teszt
pontszmot alapul vve eg' osztl'zatot hatroz meg. 0($s ?<[(rt vag' a#$l$tt, >(es
F<[(rt vag' a#$l$tt s *g' tovbb.
public class IfElseDemo {
public static void main(String[] args) {
02. oldal Java programozs (1.3. verzi)
int testscore = 76;
int grade;
if (testscore >= 90) {
grade = 5;
} else if (testscore >= 80) {
grade = 4;
} else if (testscore >= 70) {
grade = 3;
} else if (testscore >= 60) {
grade = 2;
} else {
grade = 1;
}
System.out.println("Grade = " + grade);
}
}
-nne" a programna" a "imenete.
Grade = 3
4eg#ig'elhetj+", hog' a testscore rt"e t$bb "i#ejezs #elttelne" is eleget tehet az
albbi i/ utas*tso" "$z+l. =E \] =< s =E \] E<. &zonban, ahog' a vgrehajt rendszer
#eldolgoz eg' ol'an $sszetett i/ utas*tst, mint ez, amint eg' #elttel "ielg+l, le#utna" a
meg#elel utas*tso" (grade K H), s a vezrls "i"er+l az i/ utas*tsbl anl"+l, hog' a
tovbbi #elttele"et "irt"eln.
& Java programozsi n'elv tmogat eg' hromoperandusQ opertort, ami eg'szer! ese(
te"ben az i/ utas*ts hel'ett al"almazhat. &z opertor ltalnos ala"ja.
logikai kifejezs ? kifejezs-ha-igaz : utasts-ha-hamis
Jdzz+" #el ezt az utas*tst a Ma*=aria8les'emo programbl.
if (Character.isUpperCase(aChar)) {
System.out.println("The character " + aChar
+ " is upper case.");
} else {
System.out.println("The character " + aChar
+ " is lower case.");
}
Jtt lthat, hog'an hasznlhatju" ezt az opertort.
System.out.println("The character " + aChar + " is " +
(Character.isUpperCase(aChar) ? "upper" : "lower")
+ "case.");
& R: opertor "irt"elsne" eredmn'e az upper "ara"tersorozat lesz, ha az is<pperB
Case metdus igaz rt"et ad vissza, eg'b"nt pedig a lo)er "ara"tersorozat. &z ered(
mn' $ssze lesz #!zve a megjelen*teni "*vnt +zenet ms rszeivel. Ba megszo"ju" ezt a
szer"ezetet, bizon'os esete"ben "$nn'ebben olvashatbb s t$m$rebb teheti a "dun(
"at.
Meg+egyz#s. Irdemes meg#ig'elni, hog' mirt is lehetett itt az i/Belse szer"ezetet "ivltani a hromope(
randusQ opertorral. az i/ s else gon is ug'anazt a"artu" tenni eg' bizon'os "i#ejezssel. "i a"artu" *rni.
Ba ez a "$z$s #elhasznls nem ll #enn, a""or maradnun" "ell az i/Belse utas*tsnl.
Meg+egyz#s. Oltalban nem #elttlen+l sz+"sges, mgis so" al"alommal zrjelezz+" az eg'es operan(
duso"at, s idm"nt az egsz opertor("i#ejezst is. (&z elz plda az egsz "i#ejezst zrjeleni.)
E.Hezrlsi szer"ezete" 03. oldal
B.;. A switch-case szerkezet
&""or hasznlhatju" a s)itch utas*tst, ha eg' egsz szm rt"e alapjn a"arun" vgre(
hajtani utas*tso"at. & "$vet"ez S)itch'emo pldaprogram eg' month nev! egsz t*(
pusQ vltozt de"larl, mel'ne" rt"e vlhetleg a hnapot reprezentlja eg' dtum(
ban. & program a s)itch utas*ts hasznlatval a hnap nevt jelen*ti meg a month rt(
"e alapjn.
public class SwitchDemo {
public static void main(String[] args) {
int month = 8;
switch (month) {
case 1: System.out.println("January"); brea;
case 2: System.out.println("February"); brea;
case 3: System.out.println("March"); brea;
case 4: System.out.println("April"); brea;
case 5: System.out.println("May"); brea;
case 6: System.out.println("June"); brea;
case 7: System.out.println("July"); brea;
case 8: System.out.println("August"); brea;
case 9: System.out.println("September"); brea;
case 10: System.out.println("October"); brea;
case 11: System.out.println("November"); brea;
case 12: System.out.println("December"); brea;
default: System.out.println("Not a month!");
brea;
}
}
}
& s)itch utas*ts "irt"eli "i#ejezst, ez esetben a month rt"t, s le#uttatja a meg#e(
lel case utas*tst. -zltal a program #utsi eredmn'e az ,ugust lesz. 8ermszetesen
ezt a" i/ utas*ts #elhasznlsval is megoldhatju".
int month = 8;
if (month == 1) {
System.out.println("January");
} else if (month == 2) {
System.out.println("February");
}
...
&nna" eld$ntse, hog' az i/ vag' a s)itch utas*tst hasznlju", programozi st*lus "r(
dse. 4egb*zhatsgi s ms tn'ez" #ig'elembevtelvel eld$nthetj+", mel'i"et hasz(
nlju". 4*g eg' i/ utas*tst hasznlhatun" arra, hog' eg' rt""szlet vag' eg' #elttel
alapjn hozzun" d$ntse"et, addig a s)itch utas*ts eg' egsz szm rt"e alapjn hoz
d$ntst. 4srszt minden case rt"ne" eg'edine" "ell lennie, s a vizsglt rt"e" )sa"
"onstanso" lehetne".
-g' msi" rde"essg a s)itch utas*tsban a minden case utni 8rea! utas*ts. 4inden
eg'es 8rea! utas*ts megsza"*tja az pp bezrd s)itch utas*tst, s a vezrls szla a
s)itch blo"" utni els utas*tshoz "er+l. & 8rea! utas*tso" sz+"sgese", mivel nl"+(
l+" a case utas*tso" rtelm+"et veszten". Hag'is eg' ePpli)it 8rea! nl"+l a vezrls
#ol'tatlagosan a r"$vet"ez case utas*tsra "er+l (t)sorog). &z albbi S)itch'emoI
plda azt illusztrlja, hog'an lehet hasznos, ha a case utas*tso" eg'ms utn le#utna".
0>. 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;
brea;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
brea;
case 2:
if ( ((year % 4 == 0) && !(year % 100 == 0))
|| (year % 400 == 0) )
numDays = 29;
else
numDays = 28;
brea;
default:
numDays = 0;
brea;
}
System.out.println("Number of Days = " + numDays);
}
}
& program "imenete.
Number of Days = 29
8e)hni"ailag az utols 8rea! nem sz+"sges, mivel a vezrls amQg' is be#ejezdne, "i(
lpve a s)itch utas*tsbl. &zonban javasolt e""or is a 8rea! hasznlata, mivel *g' a "d
"$nn'ebben mdos*that s "evsb hajlamos a hibra. 1sbb mg ltni #ogju" a )i"lu(
so" megsza"*tsra hasznlt 8rea!Bet.
Hg+l a s)itch utas*tsban hasznlhatju" a de/ault utas*tst, hog' mindazo"at az rt"e(
"et is "ezelhess+", amel'e" nem volta" eg' case utas*tsban sem "ezelve.
Meg+egyz#s. & de/ault utas*tsna" nem "ell #elttlen+l az utolsna" lenni, br *g' a leglogi"usabb s *g'
is szo"s ltalban elhel'ezni. Lg'an*g' a case ga" sorrendjne" is )sa" a""or lehet jelentsge, ha van
ol'an g, amel'i"et nem zrtun" le 8rea!"el.
B.;., A switch 4tas(ts #s a "elsorolt t(&4s
& #elsorolt adatt*pus az 0.<(ban bevezetett Qjdonsg, amirl "sbb olvashat majd. -z a
rsz )sa" azt mutatja be, hog'an hasznlhatju" "et eg' s)itch utas*tsban. 7zeren)sre
ez pont ol'an, mint a s)itch hasznlata az egsz t*pusQ vltoz" esetn.
E.Hezrlsi szer"ezete" 00. oldal
&z albbi S)itch&num'emo "dja majdnem megeg'ezi" azzal a "ddal, amit "orbban
a S)itch'emoI(ben lttun". -z az egsz t*puso"at #elsorolt t*puso""al hel'ettes*ti, de
eg'b"nt a s)itch utas*ts ug'anaz.
public class SwitchEnumDemo {
public enu% 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;
brea;
case APRIL:
case JUNE:
case SEPTEMBER:
case NOVEMBER:
numDays = 30;
brea;
case FEBRUARY:
if ( ((year % 4 == 0) && !(year % 100 == 0))
|| (year % 400 == 0) )
numDays = 29;
else
numDays = 28;
brea;
default:
numDays=0;
brea;
}
System.out.println("Number of Days = " + numDays);
}
}
-z a plda )sa" eg' "is rszt mutatta be anna", amire a Java n'elvi #elsorolso" "pe(
se". & tovbbia"at "sbb olvashatja el.
B.5. Eez#rl#stad' 4tas(tsok
)iv#telkezel 4tas(tsok
& Java programozsi n'elv eg' "ivtel"ezelsne" nevezett szolgltatst n'Qjt, hog' seg*t(
se a programo"na" a hib" #elder*tst s "ezelst. &mi"or eg' hiba t$rtni", a prog(
ram 5dob eg' "ivtelt6. -z azt jelenti, hog' a program normlis vgrehajtsa megsza"ad,
s meg"*srel tallni eg' "ivtel"ezelt, vag'is eg' ol'an "dblo""ot, ami a "+l$n#le t*(
0E. oldal Java programozs (1.3. verzi)
pusQ hib"at le tudja "ezelni. & "ivtel"ezel blo"" meg"*srelheti a hiba "ijav*tst,
vag' ha Qg' t!ni", hog' a hiba visszall*thatatlan, a""or szabl'osan "ilp a programbl.
&lapveten hrom utas*ts jtszi" szerepet a "ivtel"ezelse"ben.
a try utas*ts tartalmaz eg' utas*ts blo""ot, amiben a "ivtel dobsa el"pzelhet
a catch utas*ts tartalmaz eg' ol'an utas*tsblo""ot, ami le tudja "ezelni az azonos
t*pusQ "ivtele"et. &z utas*tso" a""or hajtdna" vgre, ha !ivEteltGpus t*pusQ "ivtel
vltdi" "i a try blo""ban
a /inally eg' ol'an utas*ts blo""ot tartalmaz, ami vgrehajtdi" a""or is, ha a try
blo""ban hiba t$rtnt, s a""or is, ha hiba nl"+l #utott le a "d.
&z utas*tso" ltalnos ala"ja.
try {
utasts(ok)
} catch (kivteltpus kivtelobjektum) {
utasts(ok)
} finally {
utasts(ok)
}
& "ivtel"ezels mdszerne" rszletes ismertetsre "sbb "er+l sor.
%elt#tel n#lk>li vez#rl#stads
& Java programn'elv hrom#le #elttel nl"+li vezrlstadst tmogat.
a 8rea! utas*tst
a continue utas*tst
a return (visszatrs) utas*tst
& 8rea! s a continue utas*tso"at hasznlhatju" )*m"vel vag' anl"+l. & )*m"e eg'
azonos*t, ami az utas*ts eltt hel'ez"edi" el. & )*m"t eg' "ettspont (.) "$veti. & "$(
vet"ez programrszletben lthatun" eg' pldt a )*m"e al"almazsra.
statementName: someJavaStatement;
A break 4tas(ts
& 8rea! utas*tsna" "t ala"ja van. )*m"e nl"+li s )*m"s. & )*m"e nl"+li 8rea! uta(
s*tst "orbban a s)itch(nl mr hasznltu". &hol a )*m"e nl"+li 8rea! utas*tssal #e(
jezt+" be a sort, ott be#ejezi a s)itch utas*tst, s tadja a vezrlst a s)itch utn "$vet(
"ez utas*tsna". & )*m"e nl"+li 8rea! utas*ts hasznlhat mg a /or, )hile vag' doB
)hile )i"luso"bl val "ilpsre is. & 7rea!'emo pldaprogram tartalmaz eg' /or )i"(
lust, ami eg' bizon'os rt"et "eres eg' t$mb$n bel+l.
public class BreakDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076,
2000, 8, 622, 127 };
int searchfor = 12;
int i = 0;
boolean foundIt = false;
E.Hezrlsi szer"ezete" 0=. oldal
for ( ; i < arrayOfInts.length; i++) {
if (arrayOfInts[i] == searchfor) {
foundIt = true;
brea&
}
}
if (foundIt) {
System.out.println("Found " + searchfor
+ " at index " + i + '.');
} else {
System.out.println(searchfor
+ "not in the array");
}
}
}
& 8rea! utas*ts be#ejezi a /or )i"lust, ha megvan az rt". & vezrls taddi" a #or lez(
rsa utn lv utas*tsna", ami a print utas*tst tartalmaz i/ a program vgn.
& program "imenete.
Found 12 at index 4.
Meg+egyz#s. & /or )i"lusbl 8rea!("el val "ilpst so"szor hasznlju" eg' adott rt" "eresse rde"(
ben. Irdemes meg#ig'elni, hog' e""or a )i"lus utn meg "ell llap*tani (i/ utas*ts), hog' mirt is #ejez(
d$tt be a )i"lus. a tallat miatt, vag' mert a vgre rt+n".
& 8rea! utas*ts )*m"e nl"+li ala"jt hasznlhatju" a legbels s)itch, /or, )hile vag'
doB)hile be#ejezsre. & )*m"zett ala" be#ejez eg' ol'an "+ls utas*tst, ami a 8rea!
)*m"je ltal van azonos*tva. 4s"nt #ogalmazva. eg'szerre t$bb utas*tsbl is "pes
"iugrani. & "$vet"ez (7rea!:ithLa8el'emoF program hasonl az elzh$z, de itt "t(
dimenzis t$mbben "eress+" az rt"et. 1ett eg'msba g'azott /or )i"lus vizsglja t
a t$mb$t. &mi"or az rt" megvan, eg' )*m"zett 8rea! be#ejezi a search("nt )*m"zett
utas*tst, ami a "+ls /or )i"lus.
public class BreakWithLabelDemo {
public static void main(String[] args) {
int[][] arrayOfInts = { { 32, 87, 3, 589 },
{ 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 }
};
int searchfor = 12;
int i = 0;
int j = 0;
boolean foundIt = false;
search:
for ( ; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
brea search;
}
}
}
0F. oldal Java programozs (1.3. verzi)
if (foundIt) {
System.out.println("Found " + searchfor +
" at " + i + ", " + j + '.');
} else {
System.out.println(searchfor
+ "not in the array.");
}
}
}
& program "imenete.
Found 12 at 1, 0.
-z a szintaPis eg' "i)sit zavar lehet. & 8rea! utas*ts be#ejezi a )*m"zett utas*tst, s
nem a )*m"ne" adja t a vezrlst. & vezrls anna" az utas*tsna" addi" t, ami "$z(
vetlen a (be#ejezett) )*m"zett utas*ts utn van.
A continue 4tas(ts
& continue utas*ts arra hasznlhat, hog' tugorju" a )i"lusmag htralev rszt eg'
/or, )hile vag' doB)hile )i"lusna". & )*m"e nl"+li ala"ja tugri" a legbels )i"lusmag
vgre s "irt"eli a logi"ai "i#ejezs rt"t, ami a )i"lust vezrli. & "$vet"ez ContiB
nue'emo program vgig#ut eg' String7u//erBen, megvizsglva az $sszes bet!t. Ba a
vizsglt "ara"ter nem kpk, a continue utas*ts tugorja a )i"lus htralev rszt s vizs(
glja a "$vet"ez "ara"tert. Ba ez eg' kpk, a program megn$veli a szmll rt"t s t(
ala"*tja a kpk(t nag'bet!ss.
public class ContinueDemo {
public static void main(String[] args) {
StringBuffer searchMe = new StringBuffer(
"peter piper picked a peck of pickled peppers");
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
//interested only in p's
if (searchMe.charAt(i) != 'p')
continue;
//process p's
numPs++;
searchMe.setCharAt(i, 'P');
}
System.out.println("Found " + numPs
+ " p's in the string.");
System.out.println(searchMe);
}
}
-nne" a programna" a "imenete.
Found 9 p's in the string.
Peter PiPer Picked a Peck of Pickled PePPers
& continue utas*ts )*m"s ala"ja tugorja a )*m"zett )i"lus )i"lusmagjna" htralev
rszt. & "$vet"ez Continue:ithLa8el'emo pldaprogram eg'msba g'azott )i"luso(
"at hasznl eg' sz$vegrsz "eressre eg' msi" sz$vegben. 1t eg'msba g'azott )i"(
lus sz+"sges. eg', hog' ismtelje a sz$vegrszt, s eg', hog' addig ismtelje, am*g t
E.Hezrlsi szer"ezete" 0?. oldal
nem vizsglta a sz$veget. -z a program a continue )*m"zett ala"jt hasznlja, hog' t(
ugorjon eg' ismtlst a "+ls )i"lusban.
public class ContinueWithLabelDemo {
public static void main(String[] args) {
String searchMe = "Look for a substring in me";
String substring = "sub";
boolean foundIt = false;
int max = searchMe.length() - substring.length();
test:
for (int i = 0; i <= max; i++) {
int n = substring.length();
int j = i;
int k = 0;
while (n-- != 0) {
if (searchMe.charAt(j++)
!= substring.charAt(k++)) {
continue test;
}
}
foundIt = true;
brea test;
}
System.out.println(foundIt ? "Found it" :
"Didn't find it");
}
}
-nne" a programna" a "imenete.
Found it
Meg+egyez#s. &hog' a "orbbi pldbl is lthatju", a )*m"e nl"+li continue mindig "ivlthat a )i"lus
tszervezsvel, il'en esetben rit"n is al"almazzu".
A return /visszat#r#s2 4tas(ts
-z az utas*ts az utols a #elttlen vezrlstad utas*tso" "$z+l. & return(t az a"tulis
metdusbl vag' "onstru"torbl val "ilpsre hasznlju". & vezrls visszaaddi" an(
na" az utas*tsna", ami az eredeti h*vst "$veti. & return utas*tsna" "t #ormja van.
ami visszaad rt"et, s ami nem. Bog' visszatrjen eg' rt", eg'szer!en teg'+" az r(
t"et (vag' eg' "i#ejezst, ami "iszm*tja azt) a return "ul)ssz utn.
return ++count;
& visszaadott rt" adatt*pusa meg "ell, hog' eg'ezzen a #+ggvn'ben de"larlt visszat(
rsi rt" t*pusval. Ba a #+ggvn't void(na" de"larltu", hasznlju" a return azon ala"(
jt, ami nem ad vissza rt"et.
return;
B.B. -llenrz k#rd#sek
4i az i/ utas*tsA
4it jelent, ha az i/ utas*tsna" else ga vanA
E<. oldal Java programozs (1.3. verzi)
4i a )hile utas*tsA
4i a )i"lusmagA
4it jelent, hog' a )hile el$ltesztel )i"lusA
Bog'an lehet htultesztel )hile )i"lust *rniA
4i a /or )i"lusA
-ll(vag' htultesztel a /or )i"lusA
4it jelent az eg'msba g'azott )i"lusA
4it nevez+n" )*m"ne", hog'an )*m"zhet+n" utas*tso"atA
Jsmertesse a t$bbsz$r$s elgazs "sz*tsre al"almas utas*tst%
Jsmertesse a 8rea! utas*ts hasznlatt%
4ire hasznlhatju" a continue utas*tstA
Fe"ord4l-e hi!a n#lk>l a kvetkez k'dr#szlet8 5a nemI indokol+a!
int i=0;
if(i) {
System.out.println("Hello");
}
Fe"ord4l-e hi!a n#lk>l a kvetkez k'dr#szlet8 5a nemI indokol+a!
boolean b=true;
boolean b2=true;
if(b==b2) {
System.out.println("So true");
}
Fe"ord4l-e hi!a n#lk>l a kvetkez k'dr#szlet8 5a nemI indokol+a!
int i=1;
int j=2;
if(i==1 || j==2)
System.out.println("OK");
Fe"ord4l-e hi!a n#lk>l a kvetkez k'dr#szlet8 5a nemI indokol+a!
int i=1;
int j=2;
if(i==1 &| j==2)
System.out.println("OK");
B.C. Dyakorl' "eladatok
Kr+on &rogramotI
amel' "t egsz szm legnag'obb "$z$s osztjt szmolja "i.
Algoritm4s. & nag'obbi" szmot )s$""ents+" a "isebbi""el, am*g a "t szm eg'enl
nem lesz. Ba mr a "t szm eg'enl, meg"aptu" a legnag'obb "$z$s osztt. (2ig'elem.
lehet, hog' a "t szm mr eleve eg'enl%)
E.Hezrlsi szer"ezete" E1. oldal
Kr+on &rogramotI
amel' v, hnap s nap szmrt"e" alapjn "iszmolja, hog' az v hn'adi" napjrl
van sz. 2ig'elni "ell a sz$"ve"re is%
Kr+on &rogramotI
amel' "i*rja eg' egsz szm szmjeg'eine" $sszegt.
Jtlet. az utols jeg' marad""pzssel "$nn'edn meg"aphat, utna pedig osztssal
el lehet tvol*tani az utols szmjeg'et.
Gl. a szm 123. -""or az utols szmjeg' 3 (a 1<(es oszts marad"a), majd az utols
jeg' eldobsa a 1<(el val osztssal oldhat meg. 123/1< ] 12.
E2. oldal Java programozs (1.3. verzi)
C. 9!+ekt4mok hasznlata
-g' tipi"us Java program so" obje"tumot hoz ltre, ami" +zenete" "+ldsvel hatna"
eg'msra. -ze"en "ereszt+l tud eg' program "+l$nb$z #eladato"at vgrehajtani. &mi(
"or eg' obje"tum be#ejezi a m!"$dst, az er#orrsai #elszabadulna", hog' ms obje"(
tumo" hasznlhass" azo"at.
& "$vet"ez CreateC8ject'emo program hrom obje"tumot hoz ltre. eg' -oint s "t
Sectangle obje"tumot.
public class CreateObjectDemo {
public static void main(String[] args) {
Point originOne = new Point(23, 94);
Rectangle rectOne =
new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
System.out.println("Width of rectOne: " +
rectOne.width);
System.out.println("Height of rectOne: " +
rectOne.height);
System.out.println("Area of rectOne: "
+ rectOne.area());
rectTwo.origin = originOne;
System.out.println("X Position of rectTwo: "
+ rectTwo.origin.x);
System.out.println("Y Position of rectTwo: "
+ rectTwo.origin.y);
rectTwo.move(40, 72);
System.out.println("X Position of rectTwo: "
+ rectTwo.origin.x);
System.out.println("Y Position of rectTwo: "
+ rectTwo.origin.y);
}
}
-z a program ltrehoz, megvltoztat s in#orm)it *r "i "+l$nb$z obje"tumo"rl. 1i(
menete.
Width of rectOne: 100
Height of rectOne: 200
Area of rectOne: 20000
X Position of rectTwo: 23
Y Position of rectTwo: 94
X Position of rectTwo: 40
Y Position of rectTwo: 72
C.,. 9!+ekt4mok l#trehozsa
&z obje"tum alapjt eg' osztl' szolgltatja, osztl'bl hozun" ltre (pldn'os*tun")
obje"tumot. & "$vet"ez soro" obje"tumo"at hozna" ltre, s vltoz"hoz rendeli" "et.
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
=.Dbje"tumo" hasznlata E3. oldal
&z els sor eg' -oint osztl'bl, a msodi" s harmadi" a Sectangle osztl'bl hoz ltre
obje"tumot.
4inden sor a "$vet"ez"et tartalmazza.
1eklar.i'. &z ] eltti rsze" a de"lar)i", ami" a vltoz"hoz rendeli" hozz az
obje"tum t*puso"at.
<#ldnyos(ts. & ne) sz eg' Java opertor, ami ltrehoz eg' obje"tumot.
=ni.ializ.i'. & ne) opertort eg' "onstur"torh*vs "$veti. Gl. a -oint DIH@]MF
megh*vja a -oint eg'etlen "onstru"tort. & "onstru"tor ini)ializlja az Qj obje"tu(
mot.
Eltoz' deklarlsa o!+ekt4m hivatkozsk#nt
-g' vltozt a "$vet"ez"ppen de"larlun".
type name
-z "$zli a #ord*tval, hog' a name tagot hasznlju" eg' adatra hivat"ozshoz, amine" a
t*pusa type. & Java n'elv a vltoz t*puso"at "t # "ategrira osztja. eg'szer! t*puso"
s hivat"ozs (re#eren)ia) t*puso".
&z eg'szer! t*puso" (8yte, short, int, long, char, /loat, dou8le, 8oolean) mindig eg'szer!
rt"e"et tartalmazna" az adott t*pusbl.
& hivat"ozs t*puso" azonban nmileg $sszetettebbe". & "$vet"ez mdo" brmel'i"e
szerint de"larlhat".
& de"larlt t*pus megeg'ezi" az obje"tum osztl'val.
MyClass myObject = new MyClass();
& de"larlt t*pus eg' sz+l osztl'a az obje"tum osztl'na".
MyParent myObject = new MyClass();
& de"larlt t*pus eg' inter#sz, amit az obje"tum osztl'a implementl.
MyInterface myObject = new MyClass();
Wg' is de"larlhat eg' vltoz.
MyClass myObject;
Ba ezt hasznlju", a myC8ject rt"e automati"usan null lesz, am*g eg' obje"tum tn'(
legesen ltre nem lesz hozva s hozzrendelve. & vltoz de"lar)i $nmagban nem hoz
ltre obje"tumot. -hhez a ne) opertort "ell hasznlni.
&m*g eg' vltoz nem tartalmaz hivat"ozst obje"tumra, null hivat"ozst tartalmaz. Ba
az originCne vltozt il'en mdon de"larlju", a""or a "$vet"ez"pen illusztrlhat
(vltoz neve a hivat"ozssal, ami nem mutat sehova).
9!+ekt4m &#ldnyos(tsa
& ne) opertor eg' pldn't hoz ltre eg' osztl'bl, s memriater+letet #oglal az Qj
obje"tumna".
& ne) opertor utn sz+"sg van eg' osztl'ra, ami eg'ben eg' "onstru"tor h*vst is
el*r. & "onstru"tor neve adja meg, hog' mel'i" osztl'bl "ell pldn't ltrehozni. &
"onstru"tor ini)ializlja az Qj obje"tumot.
E>. oldal Java programozs (1.3. verzi)
& ne) opertor eg' hivat"ozst ad vissza a ltrehozott obje"tumra. 3'a"ran ezt a hivat(
"ozst hozzrendelj+" eg' vltozhoz. Ba a hivat"ozs nin)s hozzrendelve vltozhoz,
az obje"tumot nem lehet majd elrni, miutn a ne) opertort tartalmaz utas*ts vgre(
hajtdott. &z il'en obje"tumot n#vtelen o!+ekt4mnak is szo"tu" nevezni.
Meg+egyz#s. & nvtelen obje"tumo" nem ol'an rit"", mint ahog' azt gondolhatnn". Gl. eg' t$mbbe
vag' trolba hel'ezett obje"tum is nvtelen, hiszen nin)s sajt, nvvel elltott hivat"ozsa.
9!+ekt4m ini.ializlsa
& -oint osztl' "dja.
public class Point {
public int x = 0;
public int y = 0;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
-z az osztl' eg' "onstru"tort tartalmaz. & "onstru"torna" ug'anaz a neve, mint az osz(
tl'na", s nin)s visszatrsi rt"e. & -oint osztl' "onstru"tora "t egsz t*pusQ para(
mtert "ap. (int *@ int y). & "$vet"ez utas*ts a 23 s ?> rt"e"et adja t paramter(
"nt.
Point originOne = new Point(23, 94);
-nne" a hatst mutatja a "$vet"ez bra.
& Sectangle osztl' ng' "onstru"tort tartalmaz.
public class Rectangle {
public int width = 0;
public int height = 0;
public Point origin;
public Rectangle() {
origin = new Point(0, 0);
}
public Rectangle(Point p) {
origin = p;
}
public Rectangle(int w, int h) {
this(new Point(0, 0), w, h);
}
=.Dbje"tumo" hasznlata E0. oldal
public Rectangle(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
public int area() {
return width * height;
}
}
&"rmel'i" "onstru"torral "ezdeti rt"et adhatun" a tglalapna", "+l$nb$z szempon(
to" szerint. a "oordinti (origin)` szlessge s magassga` mind a hrom` vag' eg'i"
sem.
Ba eg' osztl'na" t$bb "onstru"tora van, mindne" ug'anaz a neve, de "+l$nb$z szmQ
vag' "+l$nb$z t*pusQ paramtere""el rendel"ezi". & Java plat#orm a "onstru"tort a pa(
ramtere" szma s t*pusa alapjn "+l$nb$zteti meg. & "$vet"ez "dnl a Sectangle
osztl'na" azt a "onstru"tort "ell megh*vnia, ami paramter"nt eg' -oint obje"tumot
s "t egszet vr.
Rectangle rectOne = new Rectangle(originOne, 100, 200);
-z a h*vs ini)ializlja a tglalap origin vltozjt az originCne(nal (originCne rt"t
veszi #el az origin vltoz), ami eg' -oint obje"tumra hivat"ozi", a )idth rt"e 1<<(zal
lesz eg'enl, a height rt"t 2<<(zal. 4ost mr "t hivat"ozs van ug'anarra a -oint
obje"tumra` eg' obje"tumra t$bb hivat"ozs is lehet.
& "$vet"ez sor "t egsz t*pusQ paramterrel rendel"ez "onstru"tort h*vja meg, ami"
a )idth s height rt"ei. Ba megnzz+" a "onstru"tor "djt, ltju", hog' ltrehoz eg'
Qj -oint obje"tumot, amine" az * s y rt"e is nulla lesz.
Rectangle rectTwo = new Rectangle(50, 100);
-z a "onstru"tor nem vr paramtere"et, paramter nl"+li "onstru"tor.
Rectangle rect = new Rectangle();
EE. oldal Java programozs (1.3. verzi)
Ba eg' osztl' nem de"larl eg' "onstru"tort se, a""or a Java plat#orm automati"usan
szolgltat eg' paramter nl"+li (alaprtelmezett, de#ault) "onstru"tort, ami 5nem )sinl
semmit6. Wg' minden osztl'na" van legalbb eg' "onstru"tora.
C.2. 5ivatkozs egy o!+ekt4m tag+aira
Ba ltrehozun" eg' obje"tumot, valsz*n!leg hasznlni is a"arju" valamire. -nne" "t
mdja lehet.
mdos*tani vag' megnzni a tagvltozit
megh*vni a metdusait
Oltalnos #ormja.
objectReference.variableName
&mi"or eg' vltoz az rvn'essgi "$rn bel+l van X itt az osztl'on bel+l X, hasznlha(
t az eg'szer! hivat"ozs is.
& hivat"ozs els rsze eg' obje"tum re#eren)ia "ell, hog' leg'en. 9ehet hasznlni eg'
obje"tum nevt, vag' eg' "i#ejezst, ami eg' obje"tum(hivat"ozssal tr vissza. & ne)
opertor eg' hivat"ozssal tr vissza, ezzel hozz#rhet+n" eg' Qj obje"tum vltozihoz.
int height = new Rectangle().height;
4iutn ez vgrehajtdi", t$bb nem lehet hivat"ozni a ltrej$tt Sectangle obje"tumra,
mert nem troltu" el a hivat"ozst eg' vltozban.
A tagvltoz'k hozz"#rhets#ge
1onven)i szerint eg' obje"tum tagvltozit ms obje"tum vag' osztl' "$zvetlen+l
nem mdos*thatja, mert lehet, hog' rtelmetlen rt" "er+lne bele.
-hel'ett, hog' a vltoztatst megengedje, eg' osztl' biztos*that metduso"at, ami"en
"ereszt+l ms obje"tumo" megnzheti", illetve mdos*thatj" a vltozit. -ze" a met(
duso" biztos*tj", hog' a meg#elel t*pus "er+lj$n a vltozba. & msi" eln'+", hog' az
osztl' megvltoztathatja a vltoz nevt s t*pust anl"+l, hog' hatssal lenne a "lien(
seire.
&zonban nha sz+"sg lehet arra, hog' "$zvetlen hozz#rst biztos*tsun" a vltoz"hoz.
-zt Qg' tehetj+" meg, hog' a pu8lic szt *rju" elj+", a private(tel pedig tilthatju" a "+l(
s hozz#rst.
C.7. Met'd4sh(vs
Jtt is hasznlhat ug'anaz a #orma, mint a vltoz"nl. & metdus neve utni zrjele"(
ben adhat" meg a paramtere". Ba nin)sene", +res zrjelet "ell *rnun".
objectReference.methodName(argumentList);
objectReference.methodName();
&z obje"tum re#eren)ia itt is lehet vltoz vag' "i#ejezs.
new Rectangle(100, 50).area();
& "i#ejezs eg' hivat"ozst ad vissza a Sectangle obje"tumra. & pont utn *rva a met(
dus nevt, az vgrehajtdi" az Qj Sectangle obje"tumon.
=.Dbje"tumo" hasznlata E=. oldal
,hn' eljrsna" van visszatrsi rt"e, ezrt eze" "i#ejezse"ben is hasznlhata". &
visszaadott rt"et vltozhoz rendelhetj+".
int areaOfRectangle = new Rectangle(100, 50).area();
Met'd4sok hozz"#rhets#ge
Lg'anQg' m!"$di", mint a vltoz"hoz val hozz#rs. & metduso"hoz val hozz#(
rst is a pu8lic "ul)sszval engedl'ezhetj+" ms obje"tumo"na", a private(tel pedig
tilthatju".
C.;. Nem hasznlt o!+ekt4mok eltvol(tsa
& Java plat#orm lehetv teszi ann'i obje"tum ltrehozst, amenn'it )sa" a"arun"
("orlt )sa" az, hog' menn'it tud "ezelni a rendszer+n"), s nem "ell aggdnun" a meg(
sz+ntets+" miatt. & #uttat"$rn'ezet t$rli az obje"tumo"at, ha t$bbet mr nem hasz(
nlju". -z a szemtg'!jts.
-g' obje"tum a""or t$r$lhet, ha mr nin)s r t$bb hivat"ozs. 4eg lehet sz+ntetni eg'
obje"tumot Qg' is, hog' a hivat"ozst null rt"re ll*tju". -g' obje"tumra t$bb hivat(
"ozs is lehet, eze"et mind meg "ell sz+ntetni, hog' az obje"tum a szemtg'!jtbe "e(
r+lhessen.
A szem#tgy+t
& szemtg'!jt peridi"usan #elszabad*tja a mr nem hasznlt obje"tumo" ltal #oglalt
memrit. &utomati"usan vgzi a dolgt, br nha sz+"sg lehet r, hog' "$zvetlen
megh*vju". -zt a System osztl' gc metdusval tehetj+" meg. Dl'an"or lehet r sz+"(
sg, ha eg' "drsz so" szemetet hoz ltre, vag' eg' "$vet"ez "drszne" so" memri(
ra van sz+"sge. Oltalban elegend hag'ni, hog' magtl #usson le.
Meg+egyz#s. -g'es #ejleszt" a Java eg'i" g'enge pontjna" tartj" a memria"ezelst. &"i Qg' gondol(
ja, hog' tud jobb megoldst a 7un programozi ltal ltrehozottnl, a"r a sajtjt is hasznlhatja.
C.5. *akar(ts
4ieltt eg' obje"tum a szemtg'!jtbe "er+lne, a g'!jt lehetsget ad az obje"tumna",
hog' "ita"ar*tson maga utn Qg', hog' megh*vja az obje"tum /inali"e metdust.
& /inali"e metdus az C8ject osztl' tagja, ami minden osztl' sz+losztl'a, a hierar(
)hia tetejn ll. -g' osztl' #el+l*rhatja a /inali"e metdust, ha sz+"sges, de e""or a me(
tdus legvgn meg "ell h*vnia a super./inali"eDF #+ggvn't.
C.B. -llenrz k#rd#sek
4i"or lehet eg' obje"tumot paramter nl"+l ltrehozniA 4i"or nemA
Bog' lehet eg' obje"tum adattagjaina" "ezdrt"t bell*taniA 4i t$rtni", ha ezt
nem tessz+" megA
4i t$rtni" azo""al az obje"tumo""al, amel'e"re mr nem hivat"ozi" a #ut prog(
ramA
4i"or #ut le a szemtg'!jt algoritmusA Bog'an m!"$di"A
EF. oldal Java programozs (1.3. verzi)
Bog' nz "i Javban a destru"torA
Mi a hi!a a kvetkez &rogram!an8
public class SomethingIsWrong {
public static void main(String[] args) {
Rectangle myRect;
myRect.width = 40;
myRect.height = 50;
System.out.println("myRect's area is " +
myRect.area());
}
}
A kvetkez k'd l#trehoz egy Point #s egy Rectangle o!+ekt4mot.
Bn' re#eren)ia hivat"ozi" az obje"tumo"ra a "$vet"ez "drszlet le#utsa utnA Ba
le#ut a szemtg'!jts, mel'i" obje"tum #og megsz!nniA
...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle(point, 20, 20);
point = null;
...
C.C. Dyakorl' "eladat
Wrjon programot, amel' a #elhasznltl beolvassa eg' tglalap, majd tetszleges szmQ
pont "oordintit, s minden eg'es pontrl megllap*tja, hog' bel+l van(e a tglalapon.
*ov!!"e+leszt#s /matematikailag neheze!!2
7zmolja "i, hog' a ponto" a tglalap mel'i" oldalhoz (vag' )sQ)shoz) vanna" a leg"$(
zelebb%
F.1ara"tere" s sztringe" E?. oldal
N. )arakterek #s sztringek
N.,. A Character osztly
-g' Character t*pusQ obje"tum eg'etlen "ara"ter rt"et tartalmaz. & Character obje"(
tumot az eg'szer! char vltoz hel'ett hasznlju", ami"or obje"tum sz+"sges, pldul.
ami"or tadun" eg' "ara"ter rt"et eg' metdusna", ami megvltoztatja az rt"et,
vag' ami"or eg' "ara"ter rt"et hel'ez+n" el eg' adattrolban, mint pldul eg' ,rB
rayListB8en, ami obje"tumo"at tud )sa" trolni, primit*v rt"e"et nem.
Meg+egyz#s. a bur"ol ()somagol) osztl'o"rl a "$vet"ez #ejezetben lesz sz.
& "$vet"ez pldaprogram (Character'emo) ltrehoz nhn' Character obje"tumot, s
megjelen*t rlu" nhn' in#orm)it. & Character osztl'hoz tartoz "d az albbia"(
ban lthat.
public class CharacterDemo {
public static void main(String args[]) {
Character a = new Character('a');
Character a2 = new Character('a');
Character b = new Character('b');
int difference = a.compareTo(b);
if (difference == 0) {
System.out.println("a is equal to b.");
} else if (difference < 0) {
System.out.println("a is less than b.");
} else if (difference > 0) {
System.out.println("a is greater than b.");
}
System.out.println("a is "
+ ((a.equals(a2)) ? "equal" : "not equal")
+ " to a2.");
System.out.println("The character " + a.toString()
+ " is " + (Character.isUpperCase(a.charValue()) ?
"upper" : "lower")
+ "case.");
}
}
& program "imenete a "$vet"ez lesz.
a is less than b.
a is equal to a2.
The character a is lowercase.
& #enti pldban a Character.is<pperCaseDa.char=alueDFF #+ggvn' adja az a nev!
Character obje"tum "djt. -z azrt van, mert az is<ppercase metdus char t*pusQ pa(
ramtert vr. Ba a J:1 0.<(t vag' Qjabb #ejleszt"$rn'ezetet hasznlun", a""or enne" a
metdusna" megadhatju" a Character t*pusQ obje"tumot is.
Character.isUpperCase(a)
& Character'emo program a Character osztl' albbi "onstru"torait, illetve metdusait
h*vja meg.
=<. oldal Java programozs (1.3. verzi)
CharacterDcharF. & Character osztl' eg'etlen "onstru"tora, amel' ltrehoz eg'
Character obje"tumot, mel'ne" rt"t a paramterben adju" meg, ltrehozs utn
a Character obje"tum rt"e nem vltozhat.
compareToDCharacterF. Msszehasonl*t "t Character obje"tumban trolt rt"et, azt
az obje"tumot, ami megh*vta (a pldban a), s azt, ami a paramterben van (8).
Hisszaad eg' egsz szmot, ami jelzi, hog' az obje"tum rt"e "isebb, eg'enl, vag'
nag'obb, mint a paramterben megadott rt".
eYualsDC8jectF. 2 Character obje"tumot hasonl*t $ssze. True rt""el tr vissza, ha a
"t rt" eg'enl.
toStringDF. StringgE "onvertlja az obje"tumot, a sztring 1 "ara"ter hosszQ lesz, s a
Character obje"tum rt"t tartalmazza.
char=alueDF. 4egadja az obje"tum rt"t eg'szer! char rt""nt.
is<pperCaseDcharF. 4eghatrozza, hog' az eg'szer! char rt" nag'bet!(e.
& Character osztl' nhn' tovbbi #ontosabb tag#+ggvn'e .
8oolean is<pperCaseDcharF
8oolean isLo)erCaseDcharF
char to<pperCaseDcharF
char toLo)erCaseDcharF
8oolean isLetterDcharF
8oolean is'igitDcharF
8oolean isLetterCr'igitDcharF
8oolean is:hitespaceDcharF
8oolean isSpaceCharDcharF
8oolean isJava.denti/ierStartDcharF
8oolean isJava.denti/ier-artDcharF
N.2. StringI StringBuffer #s StringBuilder osztly
& Java plat#orm a "ezdete"tl #ogva biztos*tott "t osztl't, mel'e""el trolhatun", illet(
ve manipullhatun" sztringe"et, eze" a String s a String7u//er. & String osztl'ban
ol'an sztringe"et trolun", mel'e" rt"e nem #og vltozni. & String7u//er osztl't a"(
"or hasznlju", ha a sz$vegen szeretnn" vltoztatni, ezt elssorban dinami"us "ara"(
terln) "sz*tse"or (pl. #jlbl olvass) hasznlju". & String7u//erBe" hasznlata biz(
tonsgos t$bb szlas "$rn'ezetben. & String7uilder osztl't a J:1 0.<(tl vezett" be,
ami g'orsabb, mint a String7u//er, de )sa" eg' szlon hasznlhat biztonsgosan.
& "$vet"ez irn'elve" alapjn d$nts+n", hog' mel'i" osztl't hasznlju".
Ba a sz$veg nem #og vltozni, hasznlju" a String(et.
Ba a sz$veg vltozni #og, s )sa" eg' szlon "ereszt+l #ogju" elrni, hasznlju" a
String7uilder(t.
Ba a sz$veg vltozni #og s t$bb szlon "ereszt+l #ogju" elrni String7u//er(t hasz(
nlju".
& "$vet"ez pldaprogram neve Strings'emo, amel' meg#ord*tja eg' sztring "ara"tere(
it. & program hasznlja a String s String7uilder osztl'o"at is. Ba a J:1 0.<(s vlto(
F.1ara"tere" s sztringe" =1. oldal
zatnl rgebbit hasznl, a String7uilder el#ordulsait le "ell )serlni String7u//er(re,
s a program m!"$dni #og.
public class StringsDemo {
public static void main(String[] args) {
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
StringBuilder dest = new StringBuilder(len);
for (int i = (len - 1); i >= 0; i--) {
dest.append(palindrome.charAt(i));
}
System.out.println(dest.toString());
}
}
& program "imenete a "$vet"ez lesz.
doT saw I was toD
Meg+egyz#s. Irdemes mg a pldn meg#ig'elni, hog' a String7uilder (s String7u//er) osztl' pld(
n'os*tsa"or az elre lthat mretet meg lehet adni. -z g'orsabb #utst eredmn'ez.
0ztring o!+ekt4mok l#trehozsa
& sztringet g'a"ran eg' sztring "onstansbl, eg' "ara"tersorozatbl "sz*tj+". &
Strings'emo program is ezt a mdszert hasznlja, hog' ltrehozzon eg' sztringet, amire
a palindrome vltozval hivat"ozi".
String palindrome = "Dot saw I was Tod";
StringBe"et Qg' is elll*thatun", min brmil'en ms Java obje"tumot. a ne) "ul)ssz
s a "onstru"tor seg*tsgvel. & String osztl' t$bb "onstru"tort szolgltat, amel'e""el
bell*thatju" a String "ezdrt"t, "+l$nb$z #orrso"at hasznlva, mint pldul "a(
ra"ter t$mb$t, b'te t$mb$t, String7u//ert, vag' String7uildert.
& "$vet"ez tblzat a String osztl' "onstru"torait tartalmazza.
StringDF lres StringBet hoz ltre.
StringD8yte^_F
StringD8yte^_@ int@ intF
StringD8yte^_@ int@ int@
StringF
StringD8yte^_@ StringF
@jtt$mb tartalma alapjn j$n ltre.
9ehetsg van eg' egsz "ezdindeP s hossz meg(
adsra rszintervallum #ig'elembevtelhez, illetve
meg lehet adni "ara"ter"dolst is.
StringDchar^_F
StringDchar^_@ int@ intF
1ara"tert$mb egsze vag' )sa" eg' rsze alapjn j$n
ltre.
StringDStringF 4si" String msolatt hozza ltre.
StringDString7u//erF String7u//er tartalma alapjn j$n ltre.
StringDString7uilderF String7uilder tartalma alapjn j$n ltre.
-g' plda arra, ami"or "ara"tert$mbbl "sz*t+n" sztringet.
char[] helloArray = { 'h', 'e', 'l', 'l', 'o' };
String helloString = new String(helloArray);
System.out.println(helloString);
=2. oldal Java programozs (1.3. verzi)
& "drszlet utols sora ezt *rja "i.
hello
Ba String7u//erBt, vag' String7uilderBt hozun" ltre, mindig hasznlnun" "ell a ne)
opertort. 4ivel a "t osztl'na" azonosa" a "onstru"torai, a "$vet"ez tblzat )sa" a
String7u//er osztl' "onstru"torait tartalmazza.
String7u//erDF
String7u//erDCharSeYuenceF
String7u//erDintF
String7u//erDStringF
& Strings'emo programban eg' dest nev! String7uildert hozun" ltre, azt a "onstru"(
tort hasznlva, amel' a pu##er "apa)itst ll*tja be.
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
StringBuilder dest = new StringBuilder(len);
& "d ltrehoz eg' String7uildert, mel'ne" "ezdeti "apa)itsa megeg'ezi" a palinB
drome nev! 7tring hosszval. -z )sa" a memria#oglalst biztos*tja a dest szmra, mert
enne" mrete pontosan elegend lesz a bemsoland "ara"tere" szmra. & String7u/B
/er vag' String7uilder "apa)itsna" ini)ializlsval eg' el#ogadhat mretre minima(
lizlhatju" a memria#oglalso" szmt, amivel so""al hat"on'abb tehetj+" progra(
mun"at, mert a memria#oglals elg "$ltsges m!velet.
Meg+egyz#s. Ba eg' String7uilder vag' String7u//er obje"tum mret n$velse sorn a szabad "apa)it(
sa el#og', a""or eg' Qj, "tszer a""ora memriater+let "er+l le#oglalsra, ahov a rgi tartalom tmsols(
ra "er+l. -bbl is ltszi", hog' ha tudju", rdemes pontosan (vag' legalbb be)s+lten) megadni a sz+"s(
ges "apa)itst.
A 0tringek hossza
&zon metduso"at, amel'e"et arra hasznlun", hog' in#orm)it szerezz+n" eg' obje"(
tumrl, olvas (vag' hozz#r) metduso"na" nevezz+". -g' il'en StringBe"nl,
String7u//erBe"n" s String7uilderBe"nl hasznlhat metdus a length, amel' vissza(
adja az obje"tumban trolt "ara"tere" szmt. 4iutn az albbi "t sor vgrehajtdi", a
len vltoz rt"e 1= lesz.
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
& length mellett String7u//er s String7uilder osztl'o" esetn hasznlhatju" mg a caB
pacity metdust is, amel' a le#oglalt ter+let mrett adja vissza, s nem a hasznlt ter+(
letet. Gldul a dest nev! String7uilder "apa)itsa a String'emo programban nem vl(
tozi", m*g a hossza minden "ara"ter beolvassa utn n eg'el. & "$vet"ez bra mutatja
a dest "apa)itst s hosszt, miutn "ilen) "ara"ter hozz lett #!zve.
F.1ara"tere" s sztringe" =3. oldal
& String7u//er vag' String7uilder hossza a benne trolt "ara"tere" szma, m*g "apa)i(
tsa az elre le#oglalt "ara"terhel'e" szma. & String osztl' esetn a capacity metdus
nem hasznlhat, mert a String tartalma nem vltozhat meg.
0tringek karaktereinek olvassa
& meg#elel indeP! "ara"tert meg"apju" a StringBen, String7u//erBen vag' a StringB
7uilderBen bel+l, ha megh*vju" a char,t #+ggvn't. &z els "ara"ter indePe <, az utols
"ara"ter pedig a lengthDFB2.
Gldul az albbi #orrs"dban a ?. indeP! "ara"tert "apju" meg a StringBben.
String anotherPalindrome = "Niagara. O roar again!";
char aChar = anotherPalindrome.charAt(9);
&z indePels <(val "ezddi", teht a ?(es indeP! "ara"ter az k<k, mint ahog' a "$vet"ez
bra is mutatja.
Basznlju" a )har,t #+ggvn't, hog' meg"apju" a meg#elel indeP! "ara"tert.
&z bra is mutatja, hog' hog'an lehet "iszm*tani eg' StringBben az utols "ara"ter in(
dePt. 1i "ell vonni a length() #+ggvn' visszatrsi rt"bl 1(et.
Ba t$bb, mint eg' "ara"tert szeretnn" meg"apni a StringBbl, String7u//erBbl vag'
String7uilderBbl, a""or a su8string #+ggvn't "ell hasznlni. & su8stringBne" "t #ajt(
ja van, amit az albbi tblzat is mutat.
String su8stringDintF
String su8stringDint@ intF
Hisszatrsi rt" eg' Qj String, ami az eredeti sztring
rszne" msolata. &z els paramter az els "ara"ter
indePe (ahonnan "rj+" a "ara"tere"et), a msodi" int
paramter pedig az utols "ara"ter indePe (ameddig "r(
j+")(1. & su8string hosszt meg"apju", ha a msodi" pa(
ramter rt"bl "ivonju" az els paramter rt"t. Ba
nem adju" meg a msodi" paramtert, a""or az eredeti
String vgig t$rtni" a msols.
&z albbi #orrs"d a ,iagara t+"$rmondatbl ad vissza eg' rszletet, ami a 11. indePtl
a 10. indePig tart, ez pedig a roar$ "i#ejezs.
String anotherPalindrome = "Niagara. O roar again!";
String roar = anotherPalindrome.substring(11, 15);
)arakter vagy 0tring keres#se 0tring!en
& String osztl' "t #+ggvn't n'Qjt, amel'e" poz*)ival trne" vissza. inde*C/ s a lastB
.nde*C/. & "$vet"ez tblzat e "t #+ggvn' ala"jait mutatja be.
int inde*C/DintF Hisszaadja az els (utols) el#ordul "ara"ter indePt.
=>. oldal Java programozs (1.3. verzi)
int last.nde*C/DintF
int inde*C/Dint@ intF
int last.nde*C/Dint@ intF
Hisszaadja az els (utols) el#ordul"ara"ter indePt,
az indePtl elre (vissza#ele) "eresve.
int inde*C/DStringF
int last.nde*C/DStringF
Hisszaadja az els (utols) el#ordul String indePt.
int inde*C/DString@ intF
int last.nde*C/DString@ intF
Hisszaadja a 7tring els (utols) el#ordulsna" inde(
Pt, a megadott indePtl elre (vissza#ele) "eresve.
& String7u//er s a String7uilder osztl'o" nem tmogatj" az inde*C/ s a last.nde*B
C/ #+ggvn'e"et. Ba hasznlni szeretnn" eze"et a metduso"at, elsz$r String(g "ell
"onvertlnun" az obje"tumot a toString #+ggvn' seg*tsgvel.
Meg+egyz#s. & metduso" az albbi 1ilename osztl'ban nem minden hibt "ezelne", s #elttelezi",
hog' az paramter tartalmazza a teljes "$n'vtr Qtvonalat, s a #jlnevet "iterjesztssel.
public class Filename {
private String fullPath;
private char pathSeparator, extensionSeparator;
public Filename(String str, char sep, char ext) {
fullPath = str;
pathSeparator = sep;
extensionSeparator = ext;
}
public String extension() {
int dot = fullPath.lastIndexOf(extensionSeparator);
return fullPath.substring(dot + 1);
}
public String filename() {
int dot = fullPath.lastIndexOf(extensionSeparator);
int sep = fullPath.lastIndexOf(pathSeparator);
return fullPath.substring(sep + 1, dot);
}
public String path() {
int sep = fullPath.lastIndexOf(pathSeparator);
return fullPath.substring(0, sep);
}
}
& "$vet"ez program ltrehoz eg' 1ilename obje"tumot, s megh*vja a metdusait.
public class FilenameDemo {
public static void main(String[] args) {
final String FPATH = "/home/mem/index.html";
Filename myHomePage = new Filename(FPATH,
'/', '.');
System.out.println("Extension = " +
myHomePage.extension());
System.out.println("Filename = " +
myHomePage.filename());
System.out.println("Path = " +
myHomePage.path());
}
}
F.1ara"tere" s sztringe" =0. oldal
& program "imenete.
Extension = html
Filename = index
Path = /home/mem
&hog' a #enti plda is mutatja, az e*tension metdus a last.nde*C/ #+ggvn't hasznlja,
hog' megtallja az utols pontot a #jlnvben. Ba a #jlnvben nin)s pont, a last.nde*C/
visszatrsi rt"e (1, s a su8string metdus String.nde*CutC/7ounds&*ception "iv(
telt dob.
Ba a pont "ara"ter (.) az utols "ara"ter a StringBben, a""or ez eg'enl a String hossz(
val, ami eg'el nag'obb, mint a legnag'obb indeP a StringBben (mivel az indePels <(val
"ezddi").
0ztringek #s r#sz-sztringek sszehasonl(tsa
& String osztl'na" van nhn' #+ggvn'e a sztringe" s a rsz(sztringe" $sszehasonl*(
tsra. &z albbi tblzat eze"et a #+ggvn'e"et mutatja be.
8oolean ends:ithDStringF
8oolean starts:ithDStringF
8oolean starts:ithDString@ intF
Hisszatrsi rt"e igaz, ha a String a param(
terben megadott szval "ezddi", vag' vgz(
di".
&z int paramterben az eltolsi rt"et adhat(
ju" meg, hog' az eredeti StringBben han'adi"
indePtl "ezddj$n a "eress.
int compareToDStringF
int compareToDC8jectF
int compareTo.gnoreCaseDStringF
1t StringBet hasonl*t $ssze &@; szerint, s
eg' egsz szmmal tr vissza, jelezve, hog' ez
a String nag'obb (eredmn'\<), eg'enl
(eredmn']<), illetve "isebb (eredmn'^<),
mint a paramter.
& CompareTo.gnoreCase nem tesz "+l$nbs(
get a "is(s nag'bet!" "$z$tt.
8oolean eYualsDC8jectF
8oolean eYuals.gnoreCaseDStringF
Hisszatrsi rt"e igaz, ha a String ug'anazt
a "ara"tersorozatot tartalmazza, mint a para(
mtere.
&z eYuals.gnoreCase #+ggvn' nem tesz "+(
l$nbsget "is( s nag'bet!" "$z$tt` *g' kak s
k,k eg'enl.
0ztringek m'dos(tsa
& String osztl' so"#le metdust tartalmaz a StringBe" mdos*tshoz. 8ermszetesen
a String obje"tumo"at nem tudja mdos*tani, eze" a metduso" eg' msi" StringBet
hozna" ltre, ez tartalmazza a vltoztatso"at. -zt "$vethetj+" az albbi tblzatban.
String concatDStringF & String vghez ln)olja a String paramtert. Ba az
paramter hossza <, a""or az eredeti 7tring obje"tu(
mot adja vissza.
String replaceDchar@ charF 2el)serli az $sszes els paramter"nt megadott "a(
=E. oldal Java programozs (1.3. verzi)
ra"tert a msodi" paramterben megadottra. Ba nin)s
sz+"sg )serre, a""or az eredeti String obje"tumot
adja vissza.
String trimDF -ltvol*tja az elvlaszt "ara"tere"et a String elejrl
s a vgrl.
String toLo)erCaseDF
String to<pperCaseDF
1onvertlja a StringBet "is, vag' nag'bet!sre. Ba nin)s
sz+"sg "onverzira, az eredeti StringBet adja vissza.
Wme eg' r$vid program (7oston,ccent'emo), ami a replace metdussal eg' StringBet
#ord*t @ostoni diale"tusra.
public class BostonAccentDemo {
private static void bostonAccent(String sentence) {
char r = 'r';
char h = 'h';
String translatedSentence = sentence.replace(r, h);
System.out.println(translatedSentence);
}
public static void main(String[] args) {
String translateThis =
"Park the car in Harvard yard.";
bostonAccent(translateThis);
}
}
& replace metdus "i)serli az $sszes r(t h(ra a mondato"ban.
& program "imenete.
Pahk the cah in Hahvahd yahd.
A StringBuffer-ek m'dos(tsa
& String7u//erBe" tartalma mdos*that. & "$vet"ez tblzat $ssze#oglalja a StringB
7u//erBe" mdos*tshoz hasznlhat metduso"at. &zonos metduso"at tartalmaz a
String7uilder osztl' is, de String7uilderBe"et is ad vissza, ezrt eze"et "+l$n nem so(
rolju" #el.
String7u//er appendD8ooleanF
String7u//er appendDcharF
String7u//er appendDchar^_F
String7u//er appendDchar^_@ int@ intF
String7u//er appendDdou8leF
String7u//er appendD/loatF
String7u//er appendDintF
String7u//er appendDlongF
String7u//er appendDC8jectF
String7u//er appendDStringF
Bozz#!zi a megadott paramtert a
7tring7u//erBhez. &z adat StringBg "on(
vertldi", mieltt a hozz#!zs megt$r(
tnne.
String7u//er deleteDint@ intF
String7u//er deleteChar,tDintF
8$rli a megadott "ara"tere"et a StringB
7u//erBbl.
String7u//er insertDint@ 8ooleanF & String7u//erBhez ad eg' Qj paramtert.
F.1ara"tere" s sztringe" ==. oldal
String7u//er insertDint@ charF
String7u//er insertDint@ char^_F
String7u//er insertDint@ char^_@ int@ intF
String7u//er insertDint@ dou8leF
String7u//er insertDint@ /loatF
String7u//er insertDint@ intF
String7u//er insertDint@ longF
String7u//er insertDint@ C8jectF
String7u//er insertDint@ StringF
&z els egsz t*pusQ paramter jelzi az
adat indePt, ahova a beilleszts t$rtni".
&z adat StringBg "onvertldi", mieltt
a beilleszts megt$rtni".
String7u//er replaceDint@ int@ StringF
void setChar,tDint@ charF
1i)serli a megadott "ara"tere"et a
String7u//erBben.
String7u//er reverseDF 2el)serli a "ara"tere" sorrendjt a
String7u//erBben.
&z append metdusra mr lttun" pldt a Strings'emo programban, a #ejezet elejn.
&z albbi .nsert'emo program bemutatja az insert metdus hasznlatt. @eilleszt eg'
StringBet a String7u//erBbe.
public class InsertDemo {
public static void main(String[] args) {
StringBuffer palindrome = new StringBuffer(
"A man, a plan, a canal; Panama.");
palindrome.insert(15, "a cat, ");
System.out.println(palindrome);
}
}
& program "imenete.
A man, a plan, a cat, a canal; Panama.
&z ltalun" megadott indeP utni hel're "er+l beillesztsre az adat. & String7u//er elej(
re val beillesztshez a < indePet "ell hasznlni. & vghez val beilleszts esetn az in(
deP rt"e megeg'ezi" a String7u//er jelenlegi hosszval, vag' hasznlju" a hozz#!zst
(append) is.
Ba a m!velet miatt tQlsgosan megn a String7u//er mrete, a""or az t$bb memrit
#og le#oglalni. 4ivel a memria le#oglals "$ltsges, ezrt lehetleg Qg' "ell el"sz*teni a
"dot, hog' meg#elelen be leg'en ll*tva a String7u//er mrete.
A String-ek #s a "ord(t'
& #ord*t #elhasznlja a String s a String7u//er osztl'o"at a httrben, hog' a StringB
literlo"at s "+l$nb$z $ssze#!zse"et "ezelje. & StringBet idzjele" "$z$tt adhatju"
meg.
"Hello World!"
String(literlo"at brhol hasznlhatun" String pldn'"nt. Glda"nt, a SysB
tem.out.println paramterne" StringBliterlt adun" meg.
System.out.println("Might I add that you look lovely today.");
Basznlhatun" String metdust "$zvetlen+l a StringBliterlbl h*vva.
int len = "Goodbye Cruel World".length();
=F. oldal Java programozs (1.3. verzi)
Basznlhatju" a StringBliterlt String ini)ializlsra.
String s = "Hola Mundo";
& "$vet"ez plda eg'enrt"! az elzvel, de nem ol'an hat"on'. 1t azonos StringBet
"sz*t, hasznlata "er+lend.
String s = new String("Hola Mundo"); //ne hasznljuk
Basznlhat a Z opertor a StringBe" $ssze#!zsre.
String cat = "cat";
System.out.println("con" + cat + "enation");
&z elz plda alapjn a #ord*t a String7u//er(e"et hasznlja az $ssze#!zs vgrehajt(
sra.
String cat = "cat";
System.out.println(new StringBuffer().append("con").
append(cat).append("enation").toString());
Basznlhat a Z opertor az $ssze#!zsre.
System.out.println("You're number " + 1);
& #ord*t "onvertlja a nem String rt"et (a pldban int 1(et) String obje"tumm, mi(
eltt az $ssze#!zst elvgzi.
N.7. 0ztringek dara!olsa
& java.util.StringTo!eni"er osztl' hasznos lehet, ha eg' StringBet adott elvlaszt "a(
ra"ter(e") mentn szt "ell bontani. & "$vet"ez eg'szer! plda bemutatja a hasznlat
mdjt.
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
& "d a "$vet"ez eredmn't *rja "i.
this
is
a
test
& StringTo!eni"er obje"tum n'ilvn tartja, hog' a #eldolgozs a String mel'i" pontjn
jr. & "onstru"torna" megadhatun" a sz$vegen "*v+l eg' elvlaszt("ara"tere"et tartal(
maz String(et is, e""or az alaprtelmezett O 0t0n0r0/O elvlaszt" hel'ett ezt #ogja az
obje"tum #ig'elembe venni.
N.;. -llenrz k#rd#sek
4i a "ara"terA
Bn'#le jelet "pes trolni a Java char t*pusaA
Bog' h*vj" a Java ltal tmogatott "ara"tert*pustA
4i a "ara"tersorozat (sztringA)
F.1ara"tere" s sztringe" =?. oldal
4it jelent, hog' a String nem megvltoztathatA
Bog'an lehet eg' StringBne" "ezdrt"et adniA
4ire val a String inde*C/ metdusaA
4ire val String su8string metdusaA
4i a "+l$nbsg a String7uilder, a String7u//er s a String "$z$ttA
Melyik ki"e+ez#s #rt#ke lesz logikailag igaz8
OjohnO KK OjohnO
OjohnO.eYualsDOjohnOF
OjohnO K OjohnO
OjohnO.eYualsDne) 7uttonDOjohnOFF
Melyik "ord4l le8
OjohnO + O )as O + O hereO
OjohnO + H
H + N
N + N.N
Mit (r ki a kvetkez k'dr#szlet8
String s = new String("Bicycle");
int iBegin=1;
char iEnd=3;
System.out.println(s.substring(iBegin, iEnd));
7ic
ic
icy
#ord*tsi hiba miatt nem indul el
5a a MJavaM tartalmA s String-!en keress>k a OvO !et &oz(.i'+t /a 2-t2I ak-
kor melyik met'd4sh(vssal ka&+4k ezt meg8
midDI@sFL
s.char,tDIFL
s.inde*C/DWvWFL
inde*C/Ds@WvWFL
A kvetkez deklar.i'k eset#n melyik mvelet #rv#nyes8
String s1 = new String("Hello")
String s2 = new String("there");
String s3 = new String();
sHKs2 + sIL
sHKs2 B sIL
F<. oldal Java programozs (1.3. verzi)
sHKs2 T sIL
sHKs2 TT sI
N.5. Dyakorl' "eladatok
Wrjon programot, amel' az 5Jndul a g$r$g aludni6 String tartalmt
meg#ord*tja s "i*rja,
szavan"nt meg#ord*tja s "i*rja,
t$rli az $sszes kgk bet!t s "i*rja.
2ig'elem, a meg#ord*tott String obje"tumot el "ell ll*tani%
?.7zmo" F1. oldal
P. 0zmok
& "$vet"ez bra bemutatja a Jva plat#ormon rendel"ezsre ll szm osztl'o" hierar(
)hijt.
-zen "*v+l a plat#orm tartalmazza a 7oolean, =oid s Character osztl'o"at, amel'e" a
szm osztl'o""al eg'+tt .somagol' (vag' !4rkol') osztl'o"na" h*vun".
8aln meglep, hog' mirt nl"+l$zhetetlene" a )somagol osztl'o", de ezt majd ltni
#ogju" a "sbbie"ben.
P.,. A .somagol' osztlyok n#hny hasznlata
8udun" hasznlni ol'an trol obje"tumo"at, amel'e"be "+l$nb$z t*pusQ szmo"
hel'ezhet" bele. Gl. az ,rrayList osztl' C8jectBe"et tud trolni, *g' a"r az C8ject
"+l$nb$z leszrmazott obje"tumait (vag'is )somagol obje"tumo"at) el tudun" he(
l'ezni benne.
&z elz ponthoz hasonlan a"r ms t*pusQ obje"tumo""al is tudun" eg'+tt trolni
szmo"at.
&z osztl'o" de#inilna" hasznos vltoz"at, mint pldul M.+5=,L<& vag'
M,`5=,L<&, eze" biztos*tj" az ltalnos in#orm)it az adatt*pusrl. &z osztl'o"
de#inilna" hasznos metduso"at, amel'e" rt"et "onvertlna" ms t*puss, pld(
ul StringBg, vag' eg' msi" szm t*puss.
8ovbb a 7ig.nteger s 7ig'ecimal "iterjeszti a hag'omn'os adatt*puso"at, s tetsz(
leges pontossg al"almazst engedi meg. & t$bbi osztl' a java.lang )somag rsze, a
7ig'ecimal s a 7ig.nteger a java.math )somagban van.
1$vet"ezzen eg' plda (+um8er'emo), amel' ltrehoz "t 1loat s eg' 'ou8le obje"tu(
mot, s utna hasznlja a compareTo s az eYualTo metduso"at $sszehasonl*tsra.
public class NumberDemo {
public static void main(String args[]) {
Float floatOne = new Float(14.78f - 13.78f);
Float floatTwo = Float.valueOf("1.0");
Double doubleOne = new Double(1.0);
int difference = floatOne.compareTo(floatTwo);
F2. oldal Java programozs (1.3. verzi)
if (difference == 0) {
System.out.println(
"floatOne is equal to floatTwo.");
} else if (difference < 0) {
System.out.println(
"floatOne is less than floatTwo.");
} else if (difference > 0) {
System.out.println(
"floatOne is greater than floatTwo.");
}
System.out.println("floatOne is "
+ ((floatOne.equals(doubleOne)) ?
"equal" : "not equal")
+ " to doubleOne.");
}
}
-nne" a programna" a "imenete "i)sit meglep lehet.
floatOne is equal to floatTwo.
floatOne is not equal to doubleOne.
& "$vet"ez tblzat bemutatja azon pldn'metduso"at, mel'e"et a +um8er osztl'
$sszes leszrmazott osztl'a tartalmaz, beleszm*tva az $sszehasonl*t s eg'enlsg(
vizsgl metduso"at, mel'e" az elz pldban szerepelte".
8yte 8yte=alueDF
short short=alueDF
int int=alueDF
long long=alueDF
/loat /loat=alueDF
dou8le dou8le=alueDF
1onvertlja a szm obje"tum rt"t eg' eg'szer!
adatt*puss (short, long, /loat, dou8e)
int compareToD.ntegerF
int compareToDC8jectF
Msszehasonl*tja a szm obje"tumot a paramterrel. &
metdus nullnl "isebb, nulla, vag' nullnl nag'obb
rt""el tr vissza attl #+ggen, hog' az obje"tum r(
t"e "isebb, eg'enl vag' nag'obb a hasonl*tott obje"(
tummal.
8oolean eYualsDC8jectF 4eghatrozza, hog' a szm obje"tum eg'enl(e a pa(
ramterrel.
1+l$nb$z t*pusQ szm obje"tumo" X a matemati"ai
rt"+"tl #+ggetlen+l X sosem eg'enle".
& szm )somagol osztl'o" t$bb hasznos publi"us s stati"us "onstanst tartalmazna".
-ze"re Qg' tudun" hivat"ozni "i#ejezse"ben, hog' az osztl' nevt s a "onstanst eg'
ponttal vlasztju" el, pl. .nteger.M.+5=,L<&.
& "$vet"ez tblzat #elsorol t$bb hasznos "onstanst a 1loat s 'ou8le osztl'o"bl
1loat.+a+
'ou8le.+a+
,em szm.
-z az alaprtelmezett rt", ha eg' "i#eje(
zs rt"e matemati"ailag nem rtelmez(
het.
?.7zmo" F3. oldal
1loat.+&\,T.=&5.+1.+.Ta
'ou8le.+&\,T.=&5.+1.+.Ta
,egat*v vgtelen rt"
1loat.-CS.T.=&5.+1.+.Ta
'ou8le.-CS.T.=&5.+1.+.Ta
Gozit*v vgtelen rt"
P.2. 0zveg!l szmm konvertls
,ha sz+"sg van arra, hog' a String"nt rendel"ezsre ll adatot szm"nt "ell rtel(
mezn+n", pldul a #elhasznl ltal bevitt adatot esetn.
& numeri"us )somagol osztl'o" mindeg'i"e biztos*tja a valueC/ metdust, amel'
StringBet "onvertl adott obje"tumm.
& "$vet"ez =alueC/'emo pldaprogram "ap "t StringBet paran)ssorbl, "onvertlja
azo"at szm obje"tumm, majd elvgez "t aritmeti"ai m!veletet az rt"e""el.
public class ValueOfDemo {
public static void main(String[] args) {
if (args.length == 2) {
float a = Float.valueOf(args[0]).floatValue();
float b = Float.valueOf(args[1]).floatValue();
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("a / b = " + (a / b) );
System.out.println("a % b = " + (a % b) );
} else {
System.out.println("This program requires" +
"two command-line arguments.");
}
}
}
& "$vet"ez"ben a program "imenett lthatju", amel' a M.N s a bP.I(t hasznlta pa(
ran)ssori paramterne".
a + b = 91.7
a - b = -82.7
a * b = 392.4
a / b = 0.0516055
a % b = 4.5
P.7. 0zm!'l szvegg# konvertls
,ha sz+"sg van a szmbl sz$vegbe "onvertlsra, mert sz+"sg van a String #orm(
tumban lv rt""el val m!velete"re.
&z $sszes osztl' $r$"li a toString metdust az C8ject osztl'tl. & )somagol osztl'o"
#el+l*rj" ezt a metdust, hog' biztos*ts" az sszer! "onverzit.
& "$vet"ez ToString'emo program hasznlja a toString metdust, s szmot "onvertl
sz$vegg. Ltna a program nhn' String metdust mutat be, amivel megszmolja a
szm tizedes pont eltti s utni szemjeg'eine" szmt.
F>. oldal Java programozs (1.3. verzi)
public class ToStringDemo {
public static void main(String[] args) {
double d = 858.48;
String s = Double.toString(d);
int dot = s.indexOf('.');
System.out.println(s.substring(0, dot).length()
+ " digits before decimal point.");
System.out.println(s.substring(dot+1).length()
+ " digits after decimal point.");
}
}
& program "imenete.
3 digits before decimal point.
2 digits after decimal point.
P.;. 0zmok "ormzott konvertlsa
& szm )somagol osztl'o" ug'an rendel"ezne" a toString metdussal, de az *g' ltre(
j$v sz$veges #orma nem minden esetben meg#elel. Gldul pnz$sszege" vals szm(
"nt val trolsnl ltalban elegend a "t tizedes jeg' hasznlata. 2ormzott "on(
verzihoz hasznlhat a +um8er1ormat s leszrmazottja, a 'ecimal1ormat osztl'o"
a java.te*t )somagbl.
& "$vet"ez "drszlet 'ou8le obje"tumot #ormz. & get+um8er.nstance metdus eg'
+um8er1ormat obje"tumot ad vissza. -nne" /ormat metdusa eg' 'ou8le rt"et vr,
s #ormzott StringBet ll*t el.
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance();
amountOut = numberFormatter.format(amount);
System.out.println(amountOut);
& "d utols sora a "$vet"ez *rja "i.
345,987.246
Meg+egyz#s. &z eredmn' #+gg a hel'i bell*tso"tl.
<#nznem "ormt4m
3azdasgi al"almazs esetn pnz$sszege" "ezelsre is sz+"sg van. -nne" al"almaz(
st mutatja a "$vet"ez "drszlet.
Double currency = new Double(9876543.21);
NumberFormat currencyFormatter;
String currencyOut;
currencyFormatter = NumberFormat.getCurrencyInstance();
currencyOut = currencyFormatter.format(currency);
System.out.println(currencyOut);
&z utols sor "i*rja hog'.
876,543.21
?.7zmo" F0. oldal
A szzal#k "ormt4m
7zzal" #ormban val "i*rshoz szintn a hel'i bell*tso"at #ig'elembe vev obje"tu(
mot "apun" a get-ercent.nstance metdus seg*tsgvel.
Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;
percentFormatter = NumberFormat.getPercentInstance();
percentOut = percentFormatter.format(percent);
System.out.println(percentOut);
A printf met'd4s lehets#gei
& J:1 0.< tette lehetv a java.io.-rintStream print/ metdusna" al"almazst, amel'
a "imenet #ormzst nag'ban leeg'szer!s*tette. & metdus de"lar)ija.
public PrintStream printf(String format, Object... args)
&z els paramter azt hatrozza meg, hog' a tovbbi paramtere" mil'en #ormtumban
"er+ljene" "i*rsra. & so"#le lehetsg szeren)sre alaposan do"umentlva van az ,-.
spe)i#i")iban.
,zz+" a "$vet"ez pldt.
Calendar c =...;
String s =
String.format("Duke's Birthday: %1$tm %1$te,%1$tY",c);
& #ormtum meghatrozs eg'szer!. Brom van bell+". c2dtm, c2dte, s c2dta, ame(
l'e" mindeg'i"e el#ogadja a c nev! Calendar obje"tumot. & #ormtum meghatrozs a
"$vet"ez"et jelenti.
c jelzi a #ormtum meghatrozs "ezdett
2d az els tovbbi paramter jelzse
tm jelenti a hnapot
te jelenti a hnap napjt
ta jelenti az vet
0a!lon k#sz(t#se
& 'ecimal1ormat osztl'ban meghatrozhatju" eg' String minta seg*tsgvel a spe)i(
lis "i*rsi #ormtumot. & minta #ogja meghatrozni, hog' hog'an nzzen "i a meg#orm(
zott szm. & "$vet"ez plda "sz*t eg' #ormzt, ami tadja a String mintt a 'ecimalB
1ormat "onstru"torna". & /ormat metdus tvesz eg' 'ou8le rt"et, s #ormzott
StringBgel tr vissza.
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
& #enti "dsoro" "imenete a lenti tblzatban lthat.
FE. oldal Java programozs (1.3. verzi)
value
rt"e
pattern rt"e eredmn' mag'arzat
123>0E.=F? mmm,mmm.mmm 123,>0E.=F
?
& "etts "ereszt (m) utal a szm(
jeg're, a vessz a )soportos*ts
hel't jelzi, s a pont jelzi a tize(
despont hel't.
123>0E.=F? mmm.mm 123>0E.=? & value(na" hrom szmjeg'e
van a tizedes pont utn, de a
pattern(ne" )sa" "ett. & /orB
mat metdus ezt Qg' oldja meg,
hog' #el"ere"*ti a szmot.
123.=F <<<<<<.<<< <<<123.=F< & pattern itt a "etts "ereszt (m)
hel'ett "ezd s soron "$vet"ez
null"at de#inil.
123>0.E= nmmm,mmm.mmm n12,3>0.E= &z els "ara"ter a pattern(ben a
dollr jel (n). -z ann'it jelent,
hog' r$gt$n a balrl els szm(
jeg' el "er+l.
123>0.E= Tu<<&0mmm,mmm.mmm o12,3>0.E= & pattern beilleszti a Japn
pnzt, a 'en(t (o) az Lni)ode r(
t"vel . <<&0.
A "ormzott szim!'l4mok m'dos(tsa
-rre a #eladatra a 'ecimal1ormatSym8ols osztl't lehet hasznlni. -zzel az osztll'al
meg tudju" vltoztatni a /ormat metdus ltal mr #ormzott szimblumo"at. -ze" a
szimblumo" t$bbe" "$z$tt magu"ba #oglalj" a tizedesvesszt, az ezres )soportos*tst,
a m*nuszjelet, s a szzal" jelet.
& "$vet"ez plda demonstrlja a 'ecimal1ormatSym8ols osztl't al"almazva eg' szo(
"atlan szmala"ra. & szo"atlan #ormtum eredmn'e a "$vet"ez metduso" h*vsa.
set'ecimalSeparator, set\roupingSeparator, set\roupingSi"e.
DecimalFormatSymbols unusualSymbols =
new DecimalFormatSymbols(currentLocale);
unusualSymbols.setDecimalSeparator('|');
unusualSymbols.setGroupingSeparator('^');
String strange = "#,##0.###";
DecimalFormat weirdFormatter =
new DecimalFormat(strange, unusualSymbols);
weirdFormatter.setGroupingSize(4);
String bizarre = weirdFormatter.format(12345.678);
System.out.println(bizarre);
2uttats sorn, a plda #ur)sa ala"ban jelen*ti meg a szmot.
1^2345|678
?.7zmo" F=. oldal
P.5. Aritmetika
& Java programozsi n'elv tmogatja az alapvet aritmeti"ai szm*tso"at az aritmeti(
"ai opertoro""al eg'+tt. Z, (, U, /, s [. & java.lang )somagban a Java plat#orm bizto(
s*tja a Math osztl't. -z ol'an metduso"at s vltoz"at biztos*t, ami" seg*tsgvel mr
magasabb rend! matemati"ai szm*tso" is elvgezhet", mit pldul eg' sz$g szinusz(
na" "iszm*tsa, vag' eg' szm bizon'os hatvn'ra emelse.
& Math osztl' metdusai osztl'metduso", teht "$zvetlen+l az osztl' nevvel "ell
"et megh*vni, pldul *g'.
Math.round(34.87);
& Math osztl' metdusai "$z+l els"nt "+l$nb$z alapvet matemati"ai #+ggvn'e"et
nzz+" meg, mint pldul eg' szm abszolQt rt"ne" "iszm*tsa vag' eg' szm "ere(
"*tse valamel'i" irn'ban. & "$vet"ez tblzat eze"et a metduso"at tartalmazza.
dou8le a8sDdou8leF
/loat a8sD/loatF
int a8sDintF
long a8sDlongF
& paramter"nt "apott paramter abszolQt rt"vel tr
vissza.
dou8le ceilDdou8leF & leg"isebb dou8le rt""el tr vissza, ami nag'obb vag'
eg'enl a paramterrel, s eg'enl eg' egsz szmmal.
(#el#el "ere"*t)
dou8le /loorDdou8leF & legnag'obb dou8le rt""el tr vissza, ami "isebb vag'
eg'enl a paramterrel, s azonos eg' egsz szmmal.
(le#el "ere"*t)
dou8le rintDdou8leF & paramterhez leg"$zelebb ll dou8le rt""el tr vissza,
s azonos eg' egsz szmmal.
(a leg"$zelebbi egszhez "ere"*t)
long roundDdou8leF
int roundD/loatF
& leg"$zelebbi long vag' int rt"et adja vissza, ahog' azt a
metdus visszatrsi rt"e jelzi.
& "$vet"ez 7asicMath'emo program nhn' al"almazsi mdot illusztrl a #entie"re.
public class BasicMathDemo {
public static void main(String[] args) {
double aNumber = -191.635;
System.out.println("The absolute value of " + aNumber
+ " is " + Math.abs(aNumber));
System.out.println("The ceiling of " + aNumber +" is "
+ Math.ceil(aNumber));
System.out.println("The floor of " + aNumber + " is "
+ Math.floor(aNumber));
System.out.println("The rint of " + aNumber + " is "
+ Math.rint(aNumber));
}
}
& program "imenetei.
FF. oldal Java programozs (1.3. verzi)
The absolute value of -191.635 is 191.635
The ceiling of -191.635 is -191
The floor of -191.635 is -192
The rint of -191.635 is -192
8ovbbi "t alapvet metdus tallhat a Math osztl'ban. -ze" a min s a ma*. &z
albbi tblzat mutatja be a min s ma* metduso" "+l$nb$z #ormit, ami" "t szmot
hasonl*tana" $ssze, s a meg#elel t*pusQ rt""el trne" vissza.
dou8le minDdou8le@ dou8leF
/loat minD/loat@ /loatF
int minDint@ intF
long minDlong@ longF
& "t paramterbl a "isebbel trne" vissza.
dou8le ma*Ddou8le@ dou8leF
/loat ma*D/loat@ /loatF
int ma*Dint@ intF
long ma*Dlong@ longF
& "t paramterbl a nag'obbal trne" vissza.
& Min'emo program mutatja be a min al"almazst "t rt" "$z+l a "isebb "iszm*t(
sra.
public class MinDemo {
public static void main(String[] args) {
double enrollmentPrice = 45.875;
double closingPrice = 54.375;
System.out.println("A vtelr: $"
+ Math.min(enrollmentPrice, closingPrice));
}
}
& program valban az ala)son'abb rat adta vissza.
A vtelr: $45.875
& Math osztl' "$vet"ez metdusai a hatvn'ozssal "ap)solatosa". -zen "*v+l meg(
"aphatju" az e rt"t a Math.& hasznlatval.
dou8le e*pDdou8leF & szm ePponen)ilis rt"vel tr vissza.
dou8le logDdou8leF & szm termszetes alapQ logaritmusval tr vissza.
dou8le po)Ddou8le@ dou8leF &z els paramtert a msodi" paramterne" meg#e(
lel hatvn'ra emeli.
dou8le sYrtDdou8leF & paramter ng'zetg'$"vel tr vissza.
& "$vet"ez &*ponential'emo program "i*rja az e rt"t, majd megh*vja eg'en"nt a
#enti tblzatban lthat metduso"at eg' szmra.
public class ExponentialDemo {
public static void main(String[] args) {
double x = 11.635;
double y = 2.76;
?.7zmo" F?. oldal
System.out.println("Az e rtke: " +
Math.E);
System.out.println("exp(" + x + ") is " +
Math.exp(x));
System.out.println("log(" + x + ") is " +
Math.log(x));
System.out.println("pow(" + x + ", " + y + ") is " +
Math.pow(x, y));
System.out.println("sqrt(" + x + ") is " +
Math.sqrt(x));
}
}
&z &*ponential'emo "imenete.
Az e rtke: 2.71828
exp(11.635) is 112984
log(11.635) is 2.45402
pow(11.635, 2.76) is 874.008
sqrt(11.635) is 3.41101
& Math osztl' eg' sor trigonometri"us #+ggvn't is "*nl, eze" a "$vet"ez tblzatban
vanna" $ssze#oglalva. & metduson thalad sz$ge" radinban rtend". Kadinbl #o"(
", s onnan vissza"onvertlsra "t #+ggvn' ll rendel"ezs+n"re. to'egrees s
toSadians. -lbbi #o"", utbbi radinn "onvertl. & Math.-. #+ggvn' megh*vsval
a GJ rt"t "apju" meg a lehet legpontosabban.
dou8le sinDdou8leF -g' dou8le szm szinuszval tr vissza.
dou8le cosDdou8leF -g' dou8le szm "oszinuszval tr vissza.
dou8le tanDdou8leF -g' dou8le szm tangensvel tr vissza.
dou8le asinDdou8leF -g' dou8le szm ar) szinuszval tr vissza.
dou8le acosDdou8leF -g' dou8le szm ar) "oszinuszval tr vissza.
dou8le atanDdou8leF -g' dou8le szm ar) tangensvel tr vissza.
dou8le atanIDdou8leF :er"sz$g! "oordint"at "onvertl (b, a) polriss (r,
thta).
dou8le
to'egreesDdou8leF
dou8le
toSadiansDdou8leF
& paramtert radinn vag' #o"" "onvertlj", a #+ggv(
n'e" adj" magu"at.
& "$vet"ez Trigonometric'emo program hasznlja a #enti tblzatban bemutatott $sz(
szes metdust, hog' "+l$nb$z trigonometri"us rt"e"et szmoljon "i a >0 #o"os sz$g(
re.
public class TrigonometricDemo {
public static void main(String[] args) {
double degrees = 45.0;
double radians = Math.toRadians(degrees);
?<. oldal Java programozs (1.3. verzi)
System.out.println("The value of pi is " +
Math.PI);
System.out.println("The sine of " + degrees +
" is " + Math.sin(radians));
System.out.println("The cosine of " + degrees +
" is " + Math.cos(radians));
System.out.println("The tangent of " + degrees +
" is " + Math.tan(radians));
}
}
& program "imenetei.
The value of pi is 3.141592653589793
The sine of 45.0 is 0.8060754911159176
The cosine of 45.0 is -0.5918127259718502
The tangent of 45.0 is -1.3620448762608377
4egjeg'ezz+", hog' a +a+ a""or jeleni" meg, ami"or az eredmn' matemati"ailag nem
de#inilt. & 'ou8le s a 1loat osztl'o" is tartalmazz" a +a+ "onstanst. Msszehasonl*t(
va a visszatrsi rt"et az eg'i" il'en "onstanssal, a programun" el tudja d$nteni, hog'
a visszaadott rt" rvn'es(e. Jl'en mdon a programun" el#ogadhatan tud reaglni,
ha eg' metdus nem de#inilt rt"et "ap.
&z utols Math metdus, amirl szt ejt+n", a random. & metdus eg' "vzi(vletlen
<.< s 1.< "$z es szmmal tr vissza. Gontosabban le*rva.
4.4 e Math.randomDF Z 2.4
Bog' ms intervallumban "apjun" meg szmo"at, m!velete"et hajthatun" vgre a #+gg(
vn' ltal visszaadott rt"en. Gldul, ha eg' egsz szmot szeretnn" "apni 1 s 1< "$(
z$tt, a""or a "$vet"ezt "ell begpeln+n".
int number = (int)(Math.random() * 10 + 1);
4egszorozva ezt az rt"et 1<(el a lehetsges rt"e" intervalluma megvltozi".
4.4 e s"?m Z 24.4.
1(et hozzadva az intervallum ismt megvltozi".
2.4 e s"?m Z 22.4.
Hg+l, az rt" egssz "onvertlsval eg' "on"rt szmot (int) "apun" 1 s 1< "$z$tt.
& Math.random hasznlata t$"letes, ha eg' eg'szer! szmot "ell generlni. Ba eg' v(
letlen szmsorozatot "ell generlni, a""or eg' hivat"ozst "ell ltrehozni a java.util.B
SandomXra, s megh*vni enne" az obje"tumna" a "+l$nb$z metdusait.
P.B. -llenrz k#rd#sek
4i a ,umber osztl' szerepe az osztl'hierar)hibanA
Bog'an tudun" eg' begpelt sz$veget (String) int rt""nt meg"apniA
Bog'an tudun" eg' egsz szmot (int) sz$vegg (String) "onvertlniA
Bog'an tudun" Javban $sszetett matemati"ai m!velete" (szinusz, ePponen)ilis)
vgrehajtaniA
?.7zmo" ?1. oldal
Mit (r ki a kvetkez k'dr#szlet8
Integer ten = new Integer(10);
Long nine = new Long (9);
System.out.println(ten + nine);
int i = 1;
System.out.println(i + ten);
1?, majd 2<
1?, majd 11
1<, majd 1
#ord*tsi hiba miatt nem indul el
?2. oldal Java programozs (1.3. verzi)
,?.*m!k
& t$mb eg' ol'an vltoz, amel' t$bb azonos t*pusQ adatot tartalmaz. & t$mb (#utsidei)
hossza a ltrehozsa"or "er+l megllap*tsra, s attl "ezdve a t$mb eg' lland mret!
adatszer"ezet.
& t$mb eg' eleme eg'i"e a t$mbben tallhat tago"na", mel' a t$mbben el#oglalt hel'e
(indePe) alapjn rhet el.
Ba "+l$nb$z t*pusQ adato"at a"arun" trolni eg' szer"ezeten bel+l, vag' ol'an szer"e(
zetre van sz+"sg, mel'ne" mrete dinami"usan mdos*that, a""or hasznljun" a
t$mb hel'ett ol'an g'!jtemn' implement)i"at, mint az ,rrayList.
2ontos megjeg'ezni, hog' a t$mb$" obje"tumo", eltren a ; n'elvtl. -z so" minden(
ben be#ol'solja a m!"$dst.
,?.,. *m!k l#trehozsa #s hasznlata
1$vet"ezzen az ,rray'emo nev! program, mel' ltrehoz eg' t$mb$t, adato""al t$lti #el,
majd "i*rja tartalmt.
public class ArrayDemo {
public static void main(String[] args) {
int[] anArray;
anArray = new int[10];
for (int i = 0; i < anArray.length; i++) {
anArray[i] = i;
System.out.print(anArray[i] + " ");
}
System.out.println();
}
}
& program "imenete.
0 1 2 3 4 5 6 7 8 9
*m!k deklarlsa
-z a sor eg' pldaprogrambl val, s eg' t$mb t*pusQ vltozt de"larl.
int[] anArray;
4int minden ms#ajta vltoz de"larlsa"or, a t$mb de"larlsa is "t rszbl ll. a
t$mb t*pusa s a t$mb neve. & t$mb t*pusa a tXm8^_ #ormtumban *rhat, ahol a t*pus a
t$mb ltal tartalmazott eleme" t*pusa, a ef pedig azt jelzi, hog' t$mbrl van sz. & t$mb
minden eleme azonos t*pusQ% & #enti plda int^_ t$mb$t hasznl, teht az an,rray nev!
t$mb int t*pusQ egsze" trolsra lesz al"almas. ,hn' ms t*pust trolni "pes t$mb
ltrehozsa.
1<.8$mb$" ?3. oldal
float[] anArrayOfFloats;
boolean[] anArrayOfBooleans;
Object[] anArrayOfObjects;
String[] anArrayOfStrings;
Wg' is *rhat a de"lar)i.
float anArrayOfFloats[];
-z a #orma nem ajnlott, mert a zrjele" jelzi", hog' t$mbrl van sz, *g' azo" a t*pus(
sal tartozna" $ssze, nem pedig a t$mb nevvel.
& t$mb vltoz" de"larlsval X mint brmel' ms nem primit*v vltozval X sem j$n
ltre tn'leges t$mb, s nem #oglal le hel'et a memriban az eleme" szmra. & plda(
"dban ePpli)it mdon "ell ltrehozni a t$mb$t s elnevezni an,rray(ne".
*m!k l#trehozsa
8$mb ltrehozhat ePpli)it mdon a Java ne) opertora seg*tsgvel. & pldaprogram
"$vet"ez rszben 1< egsz trolsra szolgl t$mbh$z elegend memrit #oglalun"
le, s elnevezz+" a mr "orbban de"larlt an,rray(ne".
anArray = new int[10];
Oltalban t$mb ltrehozsa"or hasznlni "ell a ne) opertort, majd a t$mb elemeine"
t*pust s vg+l a t$mb mrett "ell megadni sz$gletes zrjele" "$z$tt.
new elemtpus[tmbmret];
Ba a ne) opertort "ihag'tu" volna a pldaprogrambl, a #ord*t lellt volna "$vet"ez
hiba+zenettel.
ArrayDemo.java:4: Variable anArray may not have been
initialized.
*m! kezd#rt#k !ell(tsa
Basznlhat a t$mb$" ltrehozsra s ini)ializlsra a "$vet"ez r$vid #ormula.
boolean[] answers = {true, false, true, true, false};
Jl'e"or a t$mb nag'sgt a fg "$z *rt eleme" szma hatrozza meg.
*m!elemek el#r#se
4ost, hog' mr megt$rtnt a memria#oglals a t$mb szmra, a program rt"e"et
rendel a t$mb elemeihez.
for (int i = 0; i < anArray.length; i++) {
anArray[i] = i;
System.out.print(anArray[i] + " ");
}
& "d ezen rsze azt mutatja be, hog' ahhoz, hog' hivat"ozni tudju" a t$mb brmel'
elemre be*rs vag' "iolvass )ljbl, a t$mb nevhez eg' ef(et "ell *rni. & zrjelben
(vltoz vag' eg'b "i#ejezs seg*tsgvel) *rt rt" az elrni "*vnt t$mbelem indePt je(
l$li.
Meg+egyz#s. & t$mb (mivel obje"tum), tudja, hog' me""ora a mrete, s mil'en indeP hasznlhat az in(
dePels sorn. Irvn'telen indeP esetn (a ; n'elvvel szemben) a hiba #uts "$zben eg'rtelm!en "ider+l.
a #uttat"$rn'ezetet eg' ,rray.nde*CutC/7ounds&*eption t*pusQ "ivtelt dob.
?>. oldal Java programozs (1.3. verzi)
*m! m#ret#nek meghatrozsa
& t$mb mretne" meghatrozshoz hasznlhat.
Tmbnv.length;
2ig'elem% &zo", a"i"ne" Qj a Java programn'elv, g'a"ran +res zrjelet ra"na" a length
utn. -z nem m!"$di", mert a length nem metdus% & length eg' )sa" olvashat adat(
tag, mel'et a Java plat#orm n'Qjt minden t$mb szmra.
& /or )i"lus a programun"ban bejrja az an,rray minden elemt, rt"et adva ne"i". &
)i"lus an,rray.lengthXet hasznl a )i"lus vgne" megllap*tshoz.
,?.2. 9!+ekt4m tm!k
& t$mb$" trolhatna" re#eren)ia t*pusQ eleme"et a primit*v t*puso"hoz hasonlan. -ze(
"et a t$mb$"et is nag'rszt ug'anQg' "ell ltrehozni, mint a primit*v t*pust trol"at. &
"$vet"ez ,rrayC/Strings'emo nev! program hrom String obje"tumot trol, s "i*rja
"et "isbet!s*tve.
public class ArrayOfStringsDemo {
public static void main(String[] args) {
String[] anArray = { "String One",
"String Two",
"String Three" };
for (int i = 0; i < anArray.length; i++) {
System.out.println(anArray[i].toLowerCase());
}
}
}
& program "imenete.
string one
string two
string three
& J:1 0.<Xs s "sbbi verzii esetn lehetsg van a t$mb elemeine" bejrshoz eg'
Qjabb szinta"ti"a al"almazsra. -zt X ms n'elve"ben hasznlt nev+" alapjn X /orBeB
ach )i"lusna" is szo"s h*vni. 2ig'elni "ell azonban arra, hog' a )i"lust ug'anQg' a /or
"ul)ssz vezeti be, mint a hag'omn'os /or )i"lust.
String[] anArray = {"String One","String Two","String Three"};
for (String s : anArray) {
System.out.println(s.toLowerCase());
}
& "$vet"ez ,rrayC/.ntegers'emo nev! program #elt$lti a t$mb$t Jnteger obje"tumo"(
"al.
public class ArrayOfIntegersDemo {
public static void main(String[] args) {
Integer[] anArray = new Integer[10];
for (int i = 0; i < anArray.length; i++) {
anArray[i] = new Integer(i);
System.out.println(anArray[i]);
}
}
}
1<.8$mb$" ?0. oldal
& program "imenete.
0
1
2
3
4
& "$vet"ez programrszlet ltrehoz eg' t$mb$t, de nem ra" bele semmit.
Integer[] anArray = new Integer[5];
-z eg' poten)ilis hibzsi lehetsg, mel'et az Qjdons+lt Java programoz" g'a"ran el(
"$vetne", ami"or obje"tum t$mb$"et hasznlna". 4iutn a #enti "dsor vgrehajtdi",
a t$mb ltrej$tt s "pes 0 .nteger obje"tum trolsra, br a t$mbne" mg nin)s eleme.
lres. & programna" ePpli)it mdon ltre "ell hoznia az obje"tumo"at, s belera"ni a
t$mbbe. -z n'ilvnvalna" t!ni", habr so" "ezd azt gondolja, #enti "drszlet ltre(
hozza az +res t$mb$t s mg 0 +res obje"tumot is a t$mbbe. Ba a t$mbeleme" ltreho(
zsa nl"+l prblun" azo"ra hivat"ozni, a""or a #uttat"$rn'ezetet +ull-ointer&*ceptB
ion(t #og dobni.
& problma el#ordulsa mg veszl'esebb, ha a t$mb ltrehozsa a "onstru"torban,
vag' ms "ezdrt" ll*tssal t$rtni", s mshol hasznlju" a programban.
,?.7. *m!k tm!+ei
8$mb$" tartalmazhatna" t$mb$"et. & "$vet"ez pldaprogram ltrehoz eg' t$mb$t, s
"ezdeti rt"adsnl ng' msodlagos t$mb$t, hasznl.
public class ArrayOfArraysDemo {
public static void main(String[] args) {
String[][] cartoons =
{
{ "Flintstones", "Fred", "Wilma",
"Pebbles", "Dino" },
{ "Rubbles", "Barney", "Betty",
"Bam Bam" },
{ "Jetsons", "George", "Jane",
"Elroy", "Judy", "Rosie", "Astro" },
{ "Scooby Doo Gang", "Scooby Doo",
"Shaggy", "Velma", "Fred", "Daphne" }
};
for (int i = 0; i < cartoons.length; i++) {
System.out.print(cartoons[i][0] + ": ");
for (int j = 1; j < cartoons[i].length; j++) {
System.out.print(cartoons[i][j] + " ");
}
System.out.println();
}
}
}
& program "imenetele.
Flintstones: Fred Wilma Pebbles Dino
Rubbles: Barney Betty Bam Bam
Jetsons: George Jane Elroy Judy Rosie Astro
Scooby Doo Gang: Scooby Doo Shaggy Velma Fred Daphne
?E. oldal Java programozs (1.3. verzi)
Heg'+" szre, hog' mindeg'i" msodlagos t$mb "+l$nb$z hosszQsgQ. & mell"t$m(
b$" nevei cartoons^4_, cartoons^2_, s *g' tovbb.
4int az obje"tumo" t$mbjeinl, ltre "ell hoznun" a msodlagos t$mb$"et a t$mb$n
bel+l. Ba nem hasznlun" "ezdeti paramterini)ializlst, a""or a "$vet"ezh$z hasonl
"dot "ell *rnun".
public class ArrayOfArraysDemo2 {
public static void main(String[] args) {
int[][] aMatrix = new int[4][];
for (int i = 0; i < aMatrix.length; i++) {
aMatrix[i] = new int[5];
for (int j = 0; j < aMatrix[i].length; j++) {
aMatrix[i][j] = i + j;
}
}
for (int i = 0; i < aMatrix.length; i++) {
for (int j = 0; j < aMatrix[i].length; j++) {
System.out.print(aMatrix[i][j] + " ");
}
System.out.println();
}
}
}
& program "imenetele.
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4eg "ell adni a t$mb hosszQsgt, ami"or ltrehozzu". 8eht eg' t$mbne", ami tartal(
maz msodlagos t$mb$"et, meg "ell adni a hosszQsgt, ami"or ltrehozzu", de nem
"ell megadni a msodlagos t$mb$" hosszQsgt is.
,?.;. *m!k msolsa
Basznlhatju" a System osztl' arraycopy metdust, hog' adato"at msoljun" hat"o(
n'an eg'i" t$mbbl a msi"ba. &z arraycopy metdus $t paramtert vr.
public static void arraycopy(Object source,
int srcIndex, Object dest, int destIndex, int length)
& "t C8ject paramter rmutat a "iindul s a )l t$mbre. & hrom int paramter jelzi a
"ezd hel'et a #orrs s a )lt$mb$n bel+l, s az eleme" szmt, amenn'it msolni a"a(
run".
& "$vet"ez "p illusztrlja, hog'an meg' vgbe a msols.
1<.8$mb$" ?=. oldal
& "$vet"ez ,rrayCopy'emo program hasznlja az arraycopy metdust, ami az eleme(
"et a copy1rom t$mbbl a copyTo t$mbbe msolja.
public class ArrayCopyDemo {
public static void main(String[] args) {
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
System.out.println(new String(copyTo));
}
}
& program "imenetele.
caffein
& "$vet"ez "pen lehet ltni az arraycopy metdus m!"$dst.
&z eredmn't$mb$t ltre "ell hozni, mieltt megh*vdi" az arraycopy metdus, s elg
nag'mret!ne" "ell lennie, hog' bele#rjene" a msoland t$mb elemei.
8$mb"ezelshez tovbbi szolgltatso"at n'Qjt a java.util.,rrays osztl' is.
,?.5. -llenrz k#rd#sek
4i a t$mbA
4i lehet Javban eg' t$mb elemt*pusaA
4it jelent az, hog' Javban a t$mb$t t$mbre#eren)ival rhetj+" elA
4it trol a t$mb length pldn'vltozjaA
4it jelent, hog' eg' t$mb obje"tum(re#eren)i"at trolA
?F. oldal Java programozs (1.3. verzi)
4it jelent a t$bbdimenzis t$mbA
Melyik "ord4l le8
String temp ^_ K ne) String fOjO OaO O"OgL
String temp ^_ K f Oj O O 8O OcOgL
String temp K fOaO@ O8O@ OcOgL
String temp ^_ K fOaO@ O8O@ OcOgL
5ogyan t4dhat+4k meg a myarray tm! m#ret#t8
myarray.lengthDFL
myarray.lengthL
myarray.si"e
myarray.si"eDFL
,?.B. Dyakorl' "eladatok
Kr+on &rogramotI amely egy eg#sz szmokat tartalmaz' tm! elemeit &er-
m4tl+a /.ser#lgeti2
#ord*tsa meg a t$mb$t
"ettesvel )serlje meg az eleme"et
Kr+on &rogramotI amely gy>ml.snevek tm!+#t hozza l#tre!
-zutn "eresse meg s *rja "i, mel'i" g'+m$l)s nevben van a legt$bb magnhangz.
Mtlet. rdemes eg' azonos mret! msi" t$mb$t ltrehozni, amiben a darabszmo"at
trolju".
Kr+on &rogramotI amely a kvetkez tartalmA mtriQot hozza l#treI ma+d ki
is (r+a azt a k#&ernyre
2 3 4 1
1 1 2 1
2 2 1 2
2 3 1 1
-zutn transzponlja (a #tlra t+"r$zze) a mtriPot, s *g' is *rja "i. (7eg*tsg"nt. a
"$vet"ez eredmn't "ell a "pern'n "apni.)
2 1 2 2
3 1 2 3
4 2 1 1
1 1 2 1
Meg+egyz#s. &z idelis megolds a hel'ben t+"r$zs, de ha ez nem meg', lehet prbl"ozni azzal is, hog'
a transzponlt eg' msi" t$mbben j$jj$n ltre.
Kr+on &rogramotI amely az 5Q5-s egys#gmtriQot hozza l#tre!
&z eg'sgmtriPban #tlbeli eleme" 1(et, m*g az ezen "*v+li eleme" <(t tartalmazna".
1<.8$mb$" ??. oldal
Kr+on &rogramotI amely egy LhromszgmtriQotM re&rezentl!
& #tl elemei leg'ene" 2(ese", a #tl alatti eleme" 1(ese", a #tl #eletti eleme" pe(
dig ne szerepeljene" a mtriPban (te"inthetj+" null"na" is).
Wrja "i a "pern're is il'en #ormban.
1<<. oldal Java programozs (1.3. verzi)
,,. 9sztlyok l#trehozsa
-z a #ejezet az osztl'o" # al"otelemeit mutatja be.
&z osztl' de#in*)ija 2 # al"otelembl ll.
az osztl' de"lar)ibl,
s az osztl' t$rzsbl.
& "$vet"ez 7icycle osztl' pldjn bemutatju" az osztl' elemeit.
public class Bicycle {
&z osztl' de"lar)i az osztl' "djna" az els sora. 4inimlisan az osztl' de"lar)i
meghatrozza az osztl' nevt. &z osztl't$rzs az osztl' de"lar)it "$veti, s "ap)sos
zrjele" "$z$tt ll. &z osztl' t$rzs tartalmazza mindazt a "dot, amel' hozzjrul az
osztl'bl ltrehozott obje"tumo" let)i"lushoz. "onstru"toro", Qj obje"tumo" ini)iali(
zlsra, vltoz de"lar)i", amel'e" megadj" az osztl' s obje"tumna" llapott,
s eljrso"at az osztl' s obje"tumai visel"edsne" meghatrozsra.
private int cadence;
private int gear;
private int speed;
&z osztl' hrom tagvltozt de#inil az osztl't$rzs$n bel+l. & "$vet"ez "onsrtru"tor a
tagvltoz" "ezdrt"eine" bell*tsra biztos*t lehetsget.
public Bicycle(int startCadence, int startSpeed,
int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
Hg+l ng' metdus teszi teljess az osztl't.
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
,,.,. 9sztlyok deklarlsa
8$bb al"alommal lthatta, hog' az osztl'de#in*)i" a "$vet"ez #ormban llna".
11.Dsztl'o" ltrehozsa 1<1. oldal
class MyClass {
// tagvltozk, konstruktor s metdus deklarcik
}
& "d els sort osztl'de"lar)ina" nevezz+". & megelz osztl'de"lar)i eg' mini(
mlis osztl'de"lar)i` )sa" azo"at az eleme"et tartalmazza, amel'e" #elttlen+l sz+"(
sgese". ,hn' aspe"tusa enne" az osztl'na" ug'an nin)s spe)i#i"lva, alaprtelme(
zette". & leg#ontosabb az, hog' a Myclass osztl' "$zvetlen sosztl'a az C8ject osztl'.
8$bb in#orm)i is megadhat az osztl'rl, idertve az sosztl'a nevt, azt, hog' imp(
lementl(e inter#szt vag' nem, hog' lehetne"(e leszrmazott osztl'ai s *g' tovbb,
mindezt az osztl'de"lar)in bel+l.
& "$vet"ez tblzat bemutatja az $sszes lehetsges elemet, mel' el#ordulhat eg' osz(
tl'de"lar)iban el#ordulsu" sz+"sges sorrendjben.
pu8lic (op)ionlis) az osztl' n'ilvnosan hozz#rhet
a8stract (op)ionlis) az osztl't nem lehet pldn'os*tani
/inal (op)ionlis) az osztl' nem lehet se ms osztl'na"
class +ameC/Class az osztl' neve
e*tends Super (op)ionlis) az osztl' se
implement .nter/aces (op)ionlis) az osztl' ltal implementlt inter#sze"
f
os"t?lytXr"s
g
az osztl' m!"$dst biztos*tja
,,.2. *agvltoz'k deklarlsa
& 7icycle a "$vet"ez "d szerint de#inilja tagvltozit.
private int cadence;
private int gear;
private int speed;
-z a "d de"larlja a tagvltoz"at, de ms vltoz"at, mint pldul a lo"lis vltoz"at
nem. & tagvltoz" de"lar)ija az osztl't$rzsben, brmil'en "onstru"toron s eljr(
son "*v+l t$rtni" meg. &z itt de"larlt tagvltoz" int t*pusQa". 8ermszetesen a de"la(
r)i" "omplePebbe" is lehetne".
& private "ul)ssz mint privt tago"at vezeti be a tago"at. -z azt jelenti, hog' )sa" a
7icycle osztl' tagjai #rhetne" hozzju".
,em )sa" t*pust, nevet s hozz#rsi szintet lehet meghatrozni, hanem ms attribQtu(
mo"at is, idertve azt, hog' a vltoz(e, vag' "onstans. & "$vet"ez tblzat tartalmazza
az $sszes lehetsges tagvltoz de"lar)is elemet.
1<2. oldal Java programozs (1.3. verzi)
ho""?/ErEsi
s"int
(op)ionlis)
& "$vet"ez ng' hozz#rsi szint szerint vezrelhet, hog' ms osz(
tl'o" hog'an #rhessene" hozz a tagvltoz"hoz. pu8lic, protected,
)somag szint!, vag' private.
static (op)ionlis) Dsztl'vltozt, s nem pldn'vltozt de"larl.
/inal (op)ionlis) a vltoz rt"e vgleges, meg nem vltoztathat ("ons(
tans)
2ord*tsi idej! hibt o"oz, ha a program megprbl megvltoztatni
eg' /inal vltozt. 7zo"s szerint a "onstans rt"e" nevei nag'bet!vel
*rdna". & "$vet"ez vltoz de"lar)i a GJ vltozt hatrozza meg,
mel'ne" rt"e p (.3.1>10?2E030F?=?3), s nem lehet megvltoztatni.
/inal dou8le -. K H.2M2N]I3NHNb]P]HL
transient (op)ionlis) a vltozt tmeneti"nt azonos*tja
volatile (op)ionlis) 4ega"adl'ozza, hog' a #ord*t vgrehajtson bizon'os
optimalizlso"at a tagon.
tGpusnEv & vltoz t*pusa s neve
4int ms vltoz"na", a tagvltoz"na" is sz+"sges, hog' t*pusa le(
g'en. Basznlhat" eg'szer! t*pusneve", mint pldul az int, /loat
vag' 8oolean. 8ovbb hasznlhat" re#eren)ia t*puso", mint pldul
a t$mb, obje"tum vag' inter#sz neve".
-g' tagvltoz neve lehet minden megengedett azonos*t, mel' szo"s
szerint "isbet!vel "ezddi". 1t vag' t$bb tagvltozna" nem lehet
megeg'ez neve eg' osztl'on bel+l.
,,.7. Met'd4sok deklarlsa
& "$vet"ez plda a set\ear metdus, amel' a sebessgvltst teszi lehetv.
public void setGear(int newValue) {
gear = newValue;
}
4int az osztl't, a metdust is "t nag'obb rsz hatroz meg. a metdus de"lar)ija s
a metdus t$rzse. & metdus de"lar)i meghatrozza az $sszes metdus tulajdonsgt
Qg', mint az elrsi szint, visszatr t*pus, nv, s paramtere". & metdus t$rzs az a
rsz, ahol minden m!velet hel'et #oglal. Dl'an instru")i"at tartalmaz, amel're a met(
dus vgrehajtshoz van sz+"sg.
& metdus de"lar)i "$telez elemei. a metdus neve, visszatr t*pusa, s eg' zrjel(
pr. (). & "$vet"ez tblzat megmutat minden lehetsges rszt a metdus de"lar)ij(
ban.
11.Dsztl'o" ltrehozsa 1<3. oldal
ho""?/ErEsi s"int (op)ionlis) & metdus hozz#rsi szintje
static (op)ionlis) Dsztl' metdust de"larl
a8stract (op)ionlis) Jelzi, hog' a metdusna" nin)s t$rzse
/inal (op)ionlis) Jelzi, hog' a metdus nem *rhat #el+l a leszrmazot(
ta"ban
native (op)ionlis) Jelzi, hog' a metdust ms n'elven "sz+lt
synchroni"ed (op)ionlis) & metdus "r eg' monitort a szin"ronizlt #utshoz
returnType
method+ame
&z metdus visszatr t*pusa s neve
D paramList F & paramterlista a metdushoz
thro)s e*ceptions (op)ionlis) & metdus le nem "ezelt "ivtelei
A met'd4s neve
& metdus neve szo"s szerint "is bet!vel "ezddi", hasonlan a vltoz" neveihez.
Oltalban az osztl'on bel+l eg'edi neve van a metdusna".
Ba a metdus neve, paramterlistja s visszatrsi rt"e megeg'ezi" az sben de#ini(
lt metdussal, a""or #el+l*rja azt.
Javban az is megengedett, hog' ug'anazzal a nvvel, de "+l$nb$z paramterlistval
hozzun" ltre metduso"at.
,zz+" a "$vet"ez pldt.
public class DataArtist {
...
public void draw(String s) {
...
}
public void draw(int i) {
...
}
public void draw(float f) {
...
}
}
&zonos paramterlistval, de "+l$nb$z t*pusQ visszatrsi rt""el nem lehet metdu(
so"at ltrehozni.
,,.;. )onstr4ktorok
4inden osztl'ban van legalbb eg' "onstru"tor. & "onstru"tor ini)ializlja az Qj obje"(
tumot. & neve ug'anaz "ell, hog' leg'en, mint az osztl'. Gldul a 7icycle nev! eg'(
szer! osztl'na" a "onstru"tora is 7icycle.
1<>. oldal Java programozs (1.3. verzi)
public Bicycle(int startCadence, int startSpeed,
int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
-bben a pldban a "onstru"tor a paramter alapjn tudja ltrehozni a "*vnt mret!
t$mb$t.
& "onstru"tor nem metdus, *g' nin)s visszatr t*pusa. & "onstru"tor a ne) opertor
hatsra h*vdi" meg, majd visszaadja a ltrej$tt obje"tumot. -g' msi" "onstru"tor
)supn a < "ezdrt"e"et ll*tja be.
public Bicycle() {
gear = 0;
cadence = 0;
speed = 0;
}
4ind"t "onstru"torna" ug'anaz a neve (7icycle), de a paramterlistju" "+l$nb$z. &
metduso"hoz hasonlan a "onstru"toro"at is meg"+l$nb$zteti a Java plat#orm a para(
mtere" szma s t*pusa alapjn. -zrt nem *rhatun" "t ug'anol'an paramterlistval
rendel"ez "onstru"tort. (1+l$nben a #ord*t nem lenne "pes "et meg"+l$nb$ztetni,
*g' #ord*tsi hibt adna.)
&mi"or ltrehozun" eg' osztl't, meg "ell adnun", hog' az eg'es pldn'o" mil'en
"onstru"toro""al leg'en ltrehozhat". & "orbban bemutatott Sectangle osztl' ng'
"onstru"tort tartalmaz, s *g' lehetv teszi a "+l$nb$z ini)ializlsi lehetsge" "$zti
vlasztst.
,em "ell "onstru"toro"at *rni az osztl'ain"hoz, ha Qg' is el tudja ltni a #eladatt. &
rendszer automati"usan ltrehoz eg' paramter nl"+li "onstru"tort, "+l$nben nem
tudnn" pldn't ltrehozni.
& "onstru"tor de"lar)ijnl hasznlhatju" a "$vet"ez hozz#rsi szinte"et.
&rivate
;sa" ez az osztl' hasznlhatja ezt a "onstru"tort. Ba minden "onstru"toro" privt,
a""or az osztl'ban lehet eg' publi"us osztl' metdus, mel' ltrehoz s ini)ializl
eg' pldn't.
&rote.ted
&z osztl' s leszrmazott osztl'ai hasznlhatj" ezt a "onstru"tort.
&4!li.
4inden osztl' hasznlhatja ezt a "onstru"tort.
nin.s megadva
;sa" az osztll'al azonos )somagban elhel'ez"ed osztl'o"bl lesz elrhet ez a
"onstru"tor.
,,.5. =n"orm.i'tads met'd4s vagy konstr4ktor sz-
mra
& metdus vag' "onstru"tor de"lar)i megmutatja a paramtere" szmt s t*pust.
Gldul a "$vet"ez metdus "iszmolja a "$l)s$n havi t$rleszt rszleteit.
11.Dsztl'o" ltrehozsa 1<0. oldal
public double computePayment(double loanAmt, double rate,
double futureValue,
int numPeriods) {
double I, partial1, denominator, answer;
I = rate / 100.0;
partial1 = Math.pow((1 + I), (0.0 - numPeriods));
denominator = (1 - partial1) / I;
answer = ((-1 * loanAmt) / denominator)
- ((futureValue * partial1) / denominator);
return answer;
}
-bben a metdusna" ng' paramtere van. a "$l)s$n $sszege, "amata, vg$sszege, #ize(
ts g'a"orisga. &z els hrom dupla pontossgQ lebeg pontos szm, m*g a neg'edi"
egsz szm.
&hog' ennl a metdusnl is lthat, a metdus vag' "onstru"tor paramterlistja vl(
toz de"lar)i" vesszvel elvlasztott listja, ahol minden vltoz de"lar)i t*pus(nv
pro""al van megadva. &mint lthatju" a compute-ayment metdus t$rzsben a para(
mterneve""el eg'szer!en hivat"ozun" az rt"+"re.
<aram#terek t(&4sa
& metduso" vag' "onstru"toro" paramterei t*pussal rendel"ezne". & t*pus lehet pri(
mit*v (int, /loat, stb.), amint lthattu" a compute-ayment metdusnl, vag' re#eren)ia
t*pusQ (osztl'o", t$mb$" esetn). & "$vet"ez metdus eg' t$mb$t lap paramter"nt,
majd ltrehoz eg' Qj -olygon obje"tumot, s ini)ializlja a -oint obje"tumo" t$mbjbl.
(2elttelezz+", hog' a -oint eg' osztl', amel'i" *, y "oordint"at tartalmaz.)
public static Polygon polygonFrom (Point[] listOfPoints) {
...
}
& Java n'elv nem engedi, hog' metdust eg' msi" metduson bel+l hel'ezz+n" el.
<aram#ter nevek
&mi"or metdusban vag' "onstru"torban paramtert de"larlun", eld$nthetj+", hog'
mil'en nevet adun" a paramterne". -zt a nevet hasznlhatju" a metdus t$rzsben a
paramter rt"e" elrsre.
& paramter nevne" eg'edine" "ell lennie a hats"$rn bel+l. Hag'is nem lehet ug'an(
az, mint eg' msi" paramter, vag' lo"lis vltoz vag' brmel' paramter neve eg' caB
tch zrad"ban ug'anazon a metduson vag' "onstru"toron bel+l. 9ehet viszont ug'an(
az a nv, mint az osztl' eg' tagvltozja. -bben az esetben, azt mondju", hog' a para(
mter el#edi a tagvltozt. Jl'en el#edett tagvltozt is el lehet rni, br "i)sit "$r+lm(
n'es. Gldul nzz+" meg a "$vet"ez Circle osztl't s a setCrigin metdust.
public class Circle {
private int x, y, radius;
public void setOrigin(int x, int y) {
...
}
}
& Circle osztl'na" hrom tagvltozja van. *, y s radius. & setCrigin metdus "t pa(
ramtert vr, mind"ettne" ug'anaz a neve, mint a tagvltozna". & metdus mind"t
paramtere elrejti az azonos nev! tagvltozt. Ba a metdus t$rzsben hasznlju" az *
1<E. oldal Java programozs (1.3. verzi)
vag' y nevet, a""or a paramtere"re s nem a tagvltoz"ra hivat"ozun". & tagvltoz
elrshez mins*tett nevet "ell hasznlni, amirl "sbb olvashat.
<aram#ter-tads #rt#k szerint
& paramter(tads rt" szerint t$rtni". &mi"or megh*vun" eg' metdust vag' eg'
"onstru"tort, a""or a metdus meg"apja az rt" msolatt. &mi"or a paramter re#e(
ren)ia t*pusQ, a""or a re#eren)in "ereszt+l ug'anazt az obje"tumot rhetj+" el, mivel
)sa" a re#eren)ia rt"e msoldott t. megh*vhatju" az obje"tumo" metdusait s m(
dos*thatju" az obje"tum publi"us vltozit.
,zz+" meg a "$vet"ez getS\7Color metdust, amel'i" meg"*srli visszaadni a para(
mterein "ereszt+l a tagvltozi rt"eit.
public class Pen {
private int redValue, greenValue, blueValue;
...
public void getRGBColor(int red, int green, int blue) {
red = redValue;
green = greenValue;
blue = blueValue;
}
}
-z *g' nem m!"$di". & red, green s 8lue vltoz ltezi" ug'an, de a hats"$re a getS\B
7Color metduson bel+l van. &mi"or a metdusbl visszatr a program, eze" a vltoz"
megsz!nne".
Wrju" Qjra a getS\7Color metdust, hog' az t$rtnjen, amit szerett+n" volna. -lsz$r is,
"ell eg' Qj S\7Color t*pus, hog' megrizze a red, green s 8lue sz*ne" rt"t.
public class RGBColor {
public int red, green, blue;
}
4ost mr t*rhatju" a getS\7Color metdust, hog' paramter"nt S\7Color obje"tu(
mot vrjon. & getS\7Color metdus visszatr az a"tulis toll sz*nvel a bell*tott red,
green s 8lue tagvltoz rt"vel az S\7Color paramter seg*tsgvel.
public class Pen {
private int redValue, greenValue, blueValue;
...
public void getRGBColor(RGBColor aColor) {
aColor.red = redValue;
aColor.green = greenValue;
aColor.blue = blueValue;
}
}
&z *g' visszaadott S7Color obje"tum a getS\7Color metduson "*v+l is megtartja rt(
"t, mivel az aColor eg' obje"tumra hivat"ozi", amel' a metdus hats"$rn "*v+l lte(
zi".
Meg+egyz#s. 8ermszetesen az is eg' X bizon'os rtelemben eg'szer!bb X megolds lehetett volna, hog'
a hrom rt" le"rdezshez hrom le"rdez metdust "sz*t+n". Wg' nem lett volna sz+"sg eg' Qj t*(
pus bevezetsre. - megolds a "$vet"ez pont elolvassa utn el is "sz*thet.
11.Dsztl'o" ltrehozsa 1<=. oldal
,,.B. A met'd4sok visszat#r#si #rt#ke
& metduso" visszatrsi rt"ne" t*pusa a metdus de"lar)ija"or adhat meg. &
metduson bel+l a return utas*tssal lehet a visszaadott rt"et elll*tani. & void("nt
de"larlt metduso" nem adna" vissza rt"et, s nem "ell, hog' tartalmazzana" return
utas*tst. 4inden ol'an metdus, amel' nem void("nt lett de"larlva, "$telezen tar(
talmaz return utas*tst. 7t a #ord*t azt is "i"n'szer*ti, hog' minden lehetsges vgre(
hajtsi g return utas*tssal vgzdj$n.
8e"ints+" a "$vet"ez is&mpty metdust a Stac! osztl'bl.
public boolean isEmpty() {
if (top == 0) {
return true;
} else {
return false;
}
}
& visszaadott rt" adatt*pusa meg "ell, hog' eg'ezzen a metdus de"larlt visszatrsi
rt"vel` ezrt nem lehetsges egsz szmot visszaadni ol'an metdusbl, amine" logi(
"ai a visszatrsi rt"t*pusa. & #enti is&mpty metdus de"larlt visszatrsi rt" t*pu(
sa logi"ai (8oolean), s a metdus megvals*tsa szerint igaz (true), vag' hamis (/alse)
logi"ai rt" "er+l visszaadsra a teszt eredmn'ne" meg#elelen.
Meg+egyz#s. & #enti "d hel'ett ltalban t$m$rebb *rsmdot szo"s al"almazni. -nne" ellenre ebben
a jeg'zetben a jobb rthetsg "edvrt idn"nt a hosszabb #ormt al"almazzu". & "$vet"ez "d az el(
zvel teljesen e"vivalens.
public boolean isEmpty() {
return top == 0;
}
&z is&mpty metdus elemi (vag' primit*v) t*pust ad vissza. -g' metdus re#eren)ia
adatt*pust is visszaadhat. Gldul ha a Stac! osztl' de#inilja a pop metdust, amel' az
C8ject re#eren)ia adatt*pust adja vissza.
public Object pop() {
if (top == 0) {
throw new EmptyStackException();
}
Object obj = items[--top];
items[top] = null;
return obj;
}
&mi"or eg' metdus visszatrsi t*pusa eg' osztl', (mint ahog' a #enti pop esetn), a
visszaadott obje"tum t*pusa meg "ell, hog' eg'ezzen a visszatrsi t*pussal, vag' leszr(
mazottja "ell, hog' leg'en anna". 8eg'+" #el, hog' van eg' ol'an osztl'hierar)hia,
amel'ben .maginary+um8er a java.lang.+um8er leszrmazott osztl'a, ami viszont az
C8ject leszrmazott osztl'a. -zt mutatja az albbi bra.
1<F. oldal Java programozs (1.3. verzi)
-ze" utn teg'+" #el, hog' eg' metdus Qg' "er+l de"larlsra, hog' eg' +um8er(t ad
vissza.
public Number returnANumber() {
...
}
& return,+um8er metdus visszaadhat eg' .maginary+um8er t*pust, de nem adhat
vissza C8ject t*pust. .maginary+um8er eg' +um8er, mivel a +um8er leszrmazott osz(
tl'a. Lg'ana""or az C8ject nem #elttlen+l +um8er is eg'ben, X lehet a"r String, vag'
a"r egsz ms t*pusQ is.
Jnter#sz neve"et is lehet visszatrsi t*pus"nt hasznlni. -bben az esetben a vissza(
adott obje"tumna" a megadott inter#szt (vag' leszrmazottjt) "ell implementlnia.
,,.C. A this k4l.ssz' hasznlata
& plda metduson, vag' a "onstru"toron bel+l a this az a!tu?lis o8je!tumra val hivat(
"ozst (re#eren)it) jelenti X azaz arra az obje"tumra, amel'ne" a metdusa vag' a
"onstru"tora megh*vsra "er+l. &z a"tulis obje"tum brmel'i" tagja hivat"ozhat eg'
pldn' metdusbl, vag' eg' "onstru"torbl a this hasznlatval. & legg'a"oribb hasz(
nlat o"a az, hog' eg' vltoz tag eg' paramter ltal "er+l el#edsre a metdus vag' a
"onstru"tor szmra.
Gldul a "$vet"ez "onstru"tor a 9S7Color osztl' szmra ini)ializlja az obje"tum
tagvltozit a "onstru"torna" tadott paramtere"ne" meg#elelen. & "onstru"tor
mindeg'i" paramtere el#ed eg'(eg' obje"tum tagvltozt, ezrt az obje"tum tagvltoz(
ira a "onstru"torban a this megadssal "ell hivat"ozzon.
public class HSBColor {
private int hue, saturation, brightness;
public HSBColor (int hue, int saturation, int brightness){
this.hue = hue;
this.saturation = saturation;
this.brightness = brightness;
}
}
& "onstru"toron bel+l a this "ul)ssz hasznlhat arra is, hog' eg' ug'anabba az osz(
tl'ba tartoz msi" "onstru"tort megh*vjun". -zt a metdust eQ&li.it konstr4ktor
h(vsna" nevezz+". &z albbi Sectangle osztl' ms"nt "er+l implementlsra, mint
"orbbi megolds.
public class Rectangle {
private int x, y;
private int width, height;
public Rectangle() {
this(0, 0, 0, 0);
}
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
11.Dsztl'o" ltrehozsa 1<?. oldal
public Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
...
}
-z az osztl' "onstru"toro" halmazt tartalmazza. 4indeg'i" "onstru"tor ini)ializlja a
ng'sz$g (Sectangle) tagvltozina" eg' rszt, vag' az $sszeset. & "onstru"toro" "ons(
tans "ezdrt"et adna" minden ol'an tagvltozna", amel'ne" nem ad rt"et valame(
l'i" paramter. Gldul a paramter nl"+li "onstru"tor a ng' paramteres "onstru"(
tort h*vja, s null"at ad "ezdrt"e"ne".
&hog' az eddigie"ben is, a #ord*tprogram a paramtere" szma s t*pusa alapjn hat(
rozza meg, hog' mel'i" "onstru"tort "ell megh*vni.
&menn'iben hasznlju", Qg' az ePpli)it "onstru"torh*vs a "onstru"tor els utas*tsa
"ell, hog' leg'en.
,,.N. -gy osztly tag+ai el#rhets#g#nek "el>gyelete
-g' elrsi szint meghatrozza, hog' lehetsges(e ms osztl'o" szmra hasznlni eg'
adott tagvltozt, illetve megh*vni eg' adott metdust. & Java programozsi n'elv ng'
elrsi szintet biztos*t a tagvltoz" s a metduso" szmra. -ze" a private, protected,
pu8lic, s amenn'iben nin)sen jelezve, a )somag szint! elrhetsg. &z albbi tbla az
eg'es szinte" lthatsgt mutatja.
osztl' )somag leszrmazott $sszes
private J , , ,
nin)s J J , ,
protected J J J ,
pu8lic J J J J
&z els oszlop azt mutatja, hog' maga az osztl' elrheti(e az adott jelzvel megjel$lt ta(
go"at. &hog' az lthat, az osztl' mindig elrheti sajt tagjait. & msodi" oszlop azt
mutatja, hog' az eredeti osztll'al azonos )somagban lv ms osztl'o" X #+ggetlen+l a
sz+li "ap)solato"tl X elrheti"(e a tago"at. -g' )somagban lv )soporto" osztl'o"(
"al s inter#sze""el llna" "ap)solatban, tovbb elrsi vdelmet s trter+let #el+g'e(
letet biztos*tana". (& )somago"rl eg' "sbbi #ejezetben lesz sz.) & harmadi" oszlop
azt jelzi, hog' az osztl' leszrmazottai elrheti"(e a tago"at X #+ggetlen+l attl, hog'
mel'i" )somagban vanna". & neg'edi" oszlop pedig azt jelzi, hog' az $sszes osztl' elr(
heti(e a tago"at.
&z elrsi szinte" "t mdon hatna". &z els md az, ami"or "+ls #orrsbl szrmaz
osztl'o"at (pldul a Java plat#orm osztl'ait) hasznlju", e""or az elrsi szinte" meg(
hatrozz", hog' ezen osztl'o" mel'i" tagjait tudju" elrni. & msi" md az, hog'
11<. oldal Java programozs (1.3. verzi)
amenn'iben sajt osztl'o"at *run", meghatrozhatju" az elrsi szintet minden tagvl(
tozhoz, metdushoz, illetve "onstru"torhoz, amel'e" az osztl'ban szerepelne".
8e"ints+" az osztl'o" eg' halmazt, s nzz+", hog'an m!"$dne" az elrsi szinte". &
"$vet"ez bra az albbi pldban szerepl ng' osztl't s a "$z$tt+" #ennll "ap)so(
lato"at mutatja.
9sztly el#r#si szint
,zz+" az ,lpha osztl' listjt. -nne" tagjait ms osztl'o" is el a"arj" rni. &z ,lpha
elrsi szinten"nt eg' tagvltozt s eg' metdust tartalmaz. &z ,lpha eg' Cne nev!
)somagban van.
pacage One;
public class Alpha {
private int iamprivate = 1;
int iampackage = 2; //csomag elrs
protected int iamprotected = 3;
public int iampublic = 4;
private void privateMethod() {
System.out.println("iamprivate Method");
}
void packageMethod() { // csomag elrs
System.out.println("iampackage Method");
}
protected void protectedMethod() {
System.out.println("iamprotected Method");
}
public void publicMethod() {
System.out.println("iampublic Method");
}
public static void main(String[] args) {
Alpha a = new Alpha();
a.privateMethod(); // megengedett
a.packageMethod(); // megengedett
a.protectedMethod(); // megengedett
a.publicMethod(); // megengedett
System.out.println("iamprivate: "
+ a.iamprivate); // megengedett
System.out.println("iampackage: "
+ a.iampackage); // megengedett
System.out.println("iamprotected: "
+ a.iamprotected"); // megengedett
System.out.println("iampublic: "
+ a.iampublic); // megengedett
}
}
11.Dsztl'o" ltrehozsa 111. oldal
&hog' az lthat, az ,lpha Qg' hivat"ozi" valamenn'i tagvltozjra s valamenn'i me(
tdusra, ahog' az az elz tblzat osztl' oszlopban szerepelt. & program "imenete a
"$vet"ez lesz.
iamprivate Method
iampackage Method
iamprotected Method
iampublic Method
iamprivate: 1
iampackage: 2
iamprotected: 3
iampublic: 4
-g' tag elrsi szintje azt hatrozza meg, hog' mel'i" osztl'o" rheti" el az illet tagot,
s nem azt, hog' mel'i" pldn'o" rheti" el. Gldul eg' osztl' valamenn'i pldn'a
elrheti eg' msi" publi"us tagjait.
&z ,lpha osztl'hoz hozzvehet+n" eg' pldn' metdust, ami $sszehasonl*tja az a"tu(
lis ,lpha obje"tumot (this) eg' msi" obje"tummal az iamprivate vltozi alapjn.
pacage One;
public class Alpha {
...
public boolean isEqualTo(Alpha anotherAlpha) {
if (this.iamprivate == anotherAlpha.iamprivate) {
//megengedett
return true;
} else {
return false;
}
}
}
:somag el#r#si szint
8e"ints+" a "$vet"ez 'eltaCne osztl't, amel' az ,lpha(val azonos )somagba tartozi".
&z elz tblzat )somag oszlopa meghatrozza azo"at a vltoz"at s metduso"at,
amel'e"et ez az osztl' hasznlhat.
pacage One;
public class DeltaOne {
public static void main(String[] args) }
Alpha a = new Alpha();
//a.privateMethod(); // nem megengedett
a.packageMethod(); // megengedett
a.protectedMethod(); // megengedett
a.publicMethod(); // megengedett
112. oldal Java programozs (1.3. verzi)
//System.out.println("iamprivate: "
// + a.iamprivate); // nem megengedett
System.out.println("iampackage: "
+ a.iampackage); // megengedett
System.out.println("iamprotected: "
+ a.iamprotected); // megengedett
System.out.println("iampublic: "
+ a.iampublic); // megengedett
}
}
& 'eltaCne nem hivat"ozhat az iamprivate vltozra, s nem h*vhatja meg a privatB
eMethod metdust, ug'ana""or elrheti az ,lpha t$bbi tagjt. &menn'iben a "ommen(
tezett soro" ell eltvol*tju" a // jel$lst, s *g' prblju" meg le#ord*tani az osztl't, Qg'
a #ord*tprogram hibt #og jelezni. & megjeg'zse""el #uttatva a "$vet"ez eredmn't
"apju".
iampackage Method
iamprotected Method
iampublic Method
iampackage: 2
iamprotected: 3
iampublic: 4
Feszrmazott osztly el#r#si szint
& "$vet"ez, ,lphaT)o nev! osztl' az ,lpha leszrmazott osztl'a, de eg' msi" )so(
magban tallhat. &z elz tblzat leszrmazott oszlopa jelzi, hog' mel'i" tagvltoz(
"at s metduso"at lehet hasznlni.
pacage two;
i%port one.*;
public class AlphaTwo extends Alpha {
public static void main(String[] args) {
Alpha a = new Alpha();
//a.privateMethod(); // nem megengedett
//a.packageMethod(); // nem megengedett
//a.protectedMethod(); // nem megengedett
a.publicMethod() // megengedett
//System.out.println("iamprivate: "
// + a.iamprivate); // nem megengedett
//System.out.println("iampackage: "
// + a.iampackage); // nem megengedett
//System.out.println("iamprotected: "
// + a.iamprotected); // nem megengedett
System.out.println("iampublic "
+ a.iampublic); // megengedett
AlphaTwo a2 = new AlphaTwo();
a2.protectedMethod(); // megengedett
System.out.println("iamprotected: "
+ a2.iamprotected); // megengedett
}
}
Heg'+" szre, hog' ,lphaT)o nem h*vhatja a protectedMethod metdust, s nem rheti
el az iamprotected tagot az ,lpha pldn'ban (ez az sosztl'), de h*vhatja a protectedB
11.Dsztl'o" ltrehozsa 113. oldal
Method metdust s elrheti az iamprotected(et az ,lphaT)o pldn'ban (vag' ,lB
phaT)o leszrmazott osztl' pldn'ban). 4s szval a protected elrsi szint )sa" azt
teszi lehetv eg' leszrmazott osztl' szmra, hog' eg' vdett (protected) tagot )sa"
a""or tudjon elrni, ha az illet tag hivat"ozsa ug'anol'an t*pusQ osztl'ban, vag' le(
szrmazott osztl'ban van. &z ,lphaT)o #utsna" eredmn'e a "$vet"ez lesz.
iampublic Method
iampublic: 4
iamprotected Method
iamprotected: 3
Nyilvnos el#r#si szint
Hg+l a "$vet"ez 'eltaT)o nem "ap)soldi" az osztl' hierar)hiban ,lpha(hoz, s
ms )somagban is van, mint ,lpha. &z elz tblzat utols oszlopa szerint 'eltaT)o
)sa" az ,lpha n'ilvnos (pu8lic) tagjait rheti el.
pacage two;
i%port one.*;
public class DeltaTwo {
public static void main(String[] args) {
Alpha alpha = new Alpha();
//alpha.privateMethod(); // nem megengedett
//alpha.packageMethod(); // nem megengedett
//alpha.protectedMethod(); // nem megengedett
alpha.publicMethod(); // megengedett
//System.out.println("iamprivate: "
// + a.iamprivate); // nem megengedett
//System.out.println("iampackage: "
// + a.iampackage); // nem megengedett
//System.out.println("iamprotected: "
// + a.iamprotected); // nem megengedett
System.out.println("iampublic: "
+ a.iampublic); // megengedett
}
}
& 'eltaT)o outputja a "$vet"ez lesz.
iampublic Method
iampublic: 4
Ba ms programoz" is hasznlna" eg' "sz osztl't, sz+"sges lehet anna" biztos*tsa,
hog' a tves hasznlat ne vezessen hib"hoz. &z elrsi szinte" seg*thetne" ebben. & "$(
vet"ez javaslato" seg*tene" anna" meghatrozsban, hog' eg' adott taghoz mel'i" el(
rsi szint a legmeg#elelbb.
Basznlju" a legin"bb "orltoz, mg szszer! elrsi szintet az eg'es tago"ra. Ba(
)sa" valami "+l$n$sen nem mond ellene, hasznlju" a private szintet.
1er+lj+" a publi"us tagvltoz"at, "ivve a "onstanso" estben. & publi"us tagvlto(
z" hasznlata oda vezethet, hog' valamel'i" spe)ilis implement)ihoz #og "ap(
)soldni a program, s ez hib"at, tvedse"et #og eredmn'ezni. 8ovbb, ha eg'
tagvltozt )sa" a h*v metdus tud megvltoztatni, a""or ezt a vltozst jelezni le(
het a t$bbi osztl' vag' obje"tum #el. Lg'ana""or a vltozs jelzse lehetetlen, ha
11>. oldal Java programozs (1.3. verzi)
eg' tagvltoz publi"us elrs!. & publi"us elrs biztos*tsa ug'ana""or teljes*t(
mn' n'eresget eredmn'ezhet.
Meg+egyz#s. -bben az o"tatsi an'agban so" plda hasznl publi"us tagvltoz"at. & pld" s elvi "d(
rszlete" nem sz+"sgszer!en #elelne" meg azo"na" a szigorQ tervezsi szabl'o"na", ami" eg' &GJ sz(
mra el*rso".
1orltozzu" a vdett (protected) s a )somag (pac!age) elrs! tagvltoz" szmt.
Ba eg' tagvltoz Java7eans tulajdonsg, a""or az "$telezen private elrs!.
,,.P. A &#ldnyok #s az osztly tagok
&z osztl'o"rl s az osztl' tago"rl mr volt sz a n'elvi alapismerete" rszben. -z a
rsz bemutatja, hog' hog'an de"larlhatun" osztl't s osztl'pldn't. & "$vet"ez
osztl' (,Class) de"larl eg' pldn'vltozt, eg' pldn'metdust, eg' osztl'vltozt,
eg' osztl' metdust, s vg+l a main metdust, ami szintn osztl' metdus.
public class AClass {
public int instanceInteger = 0;
public int instanceMethod() {
return instanceInteger;
}
public static int classInteger = 0;
public static int classMethod() {
return classInteger;
}
public static void main(String[] args) {
AClass anInstance = new AClass();
AClass anotherInstance = new Aclass();
anInstance.instanceInteger = 1;
anotherInstance.instanceInteger = 2;
System.out.println(anInstance.instanceMethod());
System.out.println(
anotherInstance.instanceMethod());
//System.out.println(instanceMethod()); //illegal
//System.out.println(instanceInteger); //illegal
AClass.classInteger = 7;
System.out.println(classMethod());
System.out.println(anInstance.classMethod());
anInstance.classInteger = 9;
System.out.println(anInstance.classMethod());
System.out.println(anotherInstance.classMethod());
}
}
Jtt lthat a program "imenete.
1
2
7
7
9
9
11.Dsztl'o" ltrehozsa 110. oldal
Ba nin)s eg'b meghatrozs, a""or eg' osztl'on bel+l de"larlt tag pldn' tag lesz.
Wg' az instance.nteger s az instanceMethod mind"etten pldn' tago". & #uttat rend(
szer a program $sszes pldn'vltozjbl obje"tumon"nt "sz*t eg' pldn't. Wg' az
an.nstance s az another.nstance obje"tumo" tartalmazna" eg'(eg' instance.nteger
tagvltozt.
Bozz tudun" #rni a pldn'o"hoz s megh*vhatun" eg' pldn'metdust eg' hivat"o(
zson "ereszt+l. Ba az illegal #elirattal megjel$lt soro" elejrl "it$r$lj+" a //(t, s meg(
prblju" le#ord*tani a programot, a""or eg' hiba+zenetet "apun".
-g' osztl'tag a static mdos*tval "er+l de"larlsra. & main metduson "*v+l az ,CB
lass de"larl eg' osztl'vltozt s eg' osztl'metdust, mel'e"et class.nteger(ne" s
classMethod(na" h*vna". & #uttat rendszer osztl'on"nt le#oglal eg' osztl'vltozt,
#+ggetlen+l az osztl' ltal le#oglalt pldn'o" szmtl. & rendszer le#oglalja a memri(
t az osztl'vltozna", leg"sbb a""or, ami"or az elsz$r #elhasznlsra "er+l.
&z osztl' minden pldn'ban elrhete" az osztl' osztl'vltozi. Bozz#rhet+n" az
osztl'vltozhoz a pldn'o"on "ereszt+l, valamint az osztl'on "ereszt+l is. Basonl(
"ppen eg' osztl' metdus is elrhet az osztl'ban vag' eg' pldn'on "ereszt+l.
4egjeg'ezz+", hog'ha a program megvltoztatja a class=aria8le rt"t, a""or az meg(
vltozi" az $sszes osztl'pldn'ban is.
,,.P., A &#ldnyok #s az osztly tagok ini.ializlsa
Dsztl' vag' pldn'vltozna" a de"lar)inl adhatun" legeg'szer!bben "ezdrt(
"et.
public class BedAndBreakfast {
public static final int MAX_CAPACITY = 10;
private boolean full = false;
}
-z jl m!"$di" eg'szer! adatt*puso" esetben. &""or is m!"$di", ha t$mb$"et vag' osz(
tl'o"at "sz*t+n". :e vanna" "orltai is.
&z ini)ializls )sa" "i#ejezst tartalmazhat, nem lehet pl. eg' i/Belse utas*ts.
&z ini)ializl "i#ejezs nem h*vhat ol'an #+ggvn't, amel' #utsidej! "ivtelt dob(
hat. Ba ol'an #+ggvn't h*v, amel' #utsidej! "ivtelt dob, mint pl. a +ull-ointer&*B
ception, nem tudju" a "ivtelt el"apni.
Ba eze" a "orlto" gtolna" abban, hog' tagvltozt ini)ializljun" a de"lar)iban, az
ini)ializl "d mshov is elhel'ezhet. -g' osztl'vltoz ini)ializlshoz teg'+" a
"dot a stati"us ini)ializl blo""ba, ahog' a "$vet"ez plda mutatja. -g' pldn' ini(
)ializlshoz teg'+" a "dot a "onstru"torba.
0tatik4s ini.ializl' !lokk hasznlata
Jtt eg' plda a stati"us ini)ializl blo""ra.
i%port java.util.ResourceBundle;
11E. oldal Java programozs (1.3. verzi)
class Errors {
static ResourceBundle errorStrings;
static {
try {
errorStrings =
ResourceBundle.getBundle("ErrorStrings");
} catch (java.util.MissingResourceException e) {
//error recovery code here
}
}
}
& stati"us ini)ializl blo"" a static "ul)sszval "ezddi", s mint ltalban, itt is "ap(
)sos zrjele" "$z tessz+" a "dot. &z errorStrings a stati"us ini)ializl blo""ban "e(
r+l ini)ializlsra, mert a get7undle metdus dobhat "ivtelt.
-g' osztl' tartalmazhat brmenn'i stati"us ini)ializl blo""ot, amel'e" brhol lehet(
ne" az osztl' t$rzsben. & #uttatrendszer garantlja, hog' a #orrs"dban el#oglalt he(
l'+" sorrendjben "er+lne" megh*vsra az ini)ializl blo""o", mg mieltt a legels al(
"alommal hasznln az *g' ini)ializlt osztl'vltoz"at a program.
<#ldnyvltoz'k ini.ializlsa
Gldn'vltoz" ini)ializlsa az osztl' "onstru"torban is t$rtnhet. Ba az elz pl(
dban szerepl errorStrings pldn'vltoz lenne, a""or az ini)ializl "dot az osztl'
"onstru"torba tehetj+", az albbi plda szerint.
i%port java.util.ResourceBundle;
class Errors {
ResourceBundle errorStrings;
Errors() {
try {
errorStrings =
ResourceBundle.getBundle("ErrorStrings");
} catch (java.util.MissingResourceException e) {
//error recovery code here
}
}
}
,,.,?.-llenrz k#rd#sek
4i az in#orm)ielrejts eln'e, s hog'an valsul meg JavbanA
4i az +zenetA Bog'an valsul meg JavbanA
4i az osztl'A Bog'an hozzu" ltre JavbanA
4i az obje"tumA Bog'an hozun" ltre JavbanA
4i a metdus al*rsa (szignatQrja)A
4i a void t*pusA
4i" jtszdna" le eg' metdus h*vs"orA
Bog'an adja vissza a metdus a visszatrsi rt"tA
4i t$rtni" a metdus ltal de"larlt vltoz""alA
11.Dsztl'o" ltrehozsa 11=. oldal
4i az obje"tum, mi az osztl' s mi a "ap)solatu"A
4i a "+l$nbsg a pldn'vltoz s az osztl'vltoz "$z$ttA
4i az obje"tumre#eren)iaA
4it jelent a nullA
Bog'an h*vhatju" meg eg' obje"tum metdusait az obje"tumre#eren)in "ereszt+lA
4i a "onstru"torA
Bog'an h*vju" meg a "onstru"tortA
4i az alaprtelmezett "onstru"torA
4i"or generl alaprtelmezett "onstru"tort a #ord*t magaA
Bog'an hivat"ozhatun" eg' obje"tum pldn'vltozira az obje"tumre#eren)in "e(
reszt+lA
4it jelent az, hog' a Jva rendszerben eg' szemtg'!jt m!"$di"A 4i" enne" a "$(
vet"ezmn'eiA
4i a stati"us vltozA
-lrhet(e a stati"us vltoz nem stati"us metdusblA
4il'en re#eren)ival lehet elrni a stati"us vltoztA
4i a stati"us metdusA
-lrhet(e pldn'vltozt stati"us metdusA
=gaz vagy hamis8 =ndokol+a!
&z obje"tumot ltrehozsa"or ini)ializlni "ell.
&z obje"tum "ezdeti llapott a "onstru"tor ll*tja be.
&z osztl'metdus elvileg elrheti a pldn'vltozt.
& pldn'metdus elvileg elrheti az osztl'vltozt.
& this a megszl*tott obje"tum re#eren)ija.
& "onstru"tor visszatrsi rt"e 8oolean.
& "onstru"tor neve"nt ajnlatos az osztl' nevt adni, de ez nem "$telez.
-g' stati"us metdus megh*vhatja ug'anazon osztl' eg' nem stati"us metdust a
this "ul)ssz seg*tsgvel.
&z osztl' "onstru"torbl megh*vhat az osztl' eg' msi", tQlterhelt "onstru"tora,
anna" nevre val hivat"ozssal.
-g' osztl'na" minden esetben van paramter nl"+li "onstru"tora.
Ba az osztl'na" nin)s ePpli)it "onstru"tora, a""or a rendszer megad eg' alaprtel(
mezs szerinti, paramter nl"+lit.
& "onstru"tor lehet /inal.
& "onstru"tor blo""ja lehet +res.
11F. oldal Java programozs (1.3. verzi)
&z osztl'ini)ializl blo"" bell*tja az obje"tum "ezdeti rt"eit.
&z ini)ializl" "$z+l elsz$r #utna" le az osztl'ini)ializl", s )sa" azutn "er+l(
ne" vgrehajtsra a pldn'ini)ializl".
-g' obje"tum ltrehozhat sajt osztl'bl de )sa" osztl'metdusbl.
A kvetkez osztly eset#n melyik a helyes konstr4ktor de"in(.i'8
public class Test {
....
}
pu8lic void TestDF fhg
pu8lic TestDF fhg
pu8lic static TestDF fhg
pu8lic static void TestDF fhg
A kvetkez met'd4s eset#n milyen t(&4sA ki"e+ez#st (r+4nk a return 4tn8
public void add(int a) {...}
void
int
semmit
,,.,,.Dyakorl' "eladatok
)#sz(tsen Brtn osztlytI amely a trk sz4ltn !rtne a+ta+ainak nyitott
lla&ott k#&es trolni!
& "onstru"tor paramter"nt a b$rt$n mrett "apja meg (pl. 1<<). Bozzon ltre eg' e"(
"ora mret! al"almas t$mb$t, s gondos"odjon a meg#elel "ezdrt"rl (az ajt" "ez(
detben zrva vanna").
& !ulcs1ordGt metdus paramter"nt "apja, hog' hn'as szmQ )ella "ul)st "ell t#or(
d*tani (ha n'itva volt, a""or bezrja, s #ord*tva). ,em meg#elel indeP esetn mag'ar
n'elv! +zenetet tartalmaz "ivtelt dobjon (nem itt "ell a hiba+zenetet a "pern're *r(
ni).
Dldja meg, hog' n'itott )ell" szma jelenjen meg a "onzolon, ha a System.out.println
paramtere"nt eg' 7XrtXn obje"tumot adun" meg (teht *rja #el+l az $r$"l$tt toString
metdust).
1sz*tsen main metdust, amel' az eredeti jt"os #eladat szerint elsz$r minden )ella,
majd minden msodi", minden harmadi" stb., vg+l a szzadi" )ella "ul)st #ord*tja t,
majd "i*rja a szabadul #ogl'o" szmt.
)#sz(tsen Anagramma osztlytI amely sztringek !etinek kever#s#re hasz-
nlhat'.
& stati"us /ordGt metdus paramter"nt "apjon eg' StringBet, visszaad eg' msi"
String obje"tumot, amel' az eredeti sz$veg els s utols bet!jt meg)serlve tartalmaz(
za (a t$bbi vltozatlan).
11.Dsztl'o" ltrehozsa 11?. oldal
& szintn stati"us !ever metdus tn'leges "everst hajtson vgre a vletlenszm(gene(
rtor (lsd java.util.Sandom.ne*t.ntDF metdus) seg*tsgvel. (8ipp. pl. 0<(szer generl(
jun" "t vletlen indePet, s )serlj+" meg a "t indePnl lev "ara"tert. 4g jobb, ha
nem #iP, hanem a String hossztl #+gg ismtlst hajt vgre.)
& main metdus olvasson be a billent'!zetrl szava"at, s *rja "i azo" /ordGt s !ever
metdussal "apott mdos*tsait.
12<. oldal Java programozs (1.3. verzi)
,2.Jrkld#s
& java.lang )somagban de#inilt C8ject osztl' meghatrozza s megvals*tja azo"at a
metduso"at, amel'e" minden osztl' szmra sz+"sgese". & "$vet"ez brn lthat,
hog' so" osztl' ered az C8ject(bl, majd so" tovbbi osztl' szrmazi" az elbbi oszt(
l'o"bl, s *g' tovbb, ltrehozva ezzel az osztl'o" hierar)hijt.
& hierar)hia )sQ)sn ll C8ject az osztl'o" legltalnosabbja. & hierar)hia aljn tall(
hat osztl'o" so""al spe)ializltabb visel"edst eredmn'ezne". -g' leszrmazott osz(
tl' valamel' osztl'bl szrmazi". & superclass "i#ejezs (tovbbia"ban sz+losztl'
vag' sosztl') eg' osztl' "$zvetlen sre/eldjre, vag' anna" brmel' #elmen oszt(
l'ra utal. 4inden osztl'na" )sa" s "izrlag eg'etlen "$zvetlen sz+losztl'a van.
-g' leszrmazott osztl' a vltozit s metdusait a sz+losztl'tl $r$"li. & leszrma(
zott osztl' szmra azonban lehet, hog' nem elrhet eg' $r$"l$tt vltoz vag' #+gg(
vn'. Gldul, eg' leszrmazott osztl' szmra nem rhet el eg' private tag, ami a #el(
sbb osztl'tl $r$"ld$tt. 4ondhatnn" persze, hog' a""or az a tag eg'ltaln nem is
$r$"ld$tt. :e igenis $r$"ld$tt. &""or vli" ez #ontoss, ami"or eg' ol'an bels osz(
tl't hasznlun", amine" van hozz#rse a mell"elt osztl'o" private tagjaihoz. ,e #e(
ledj+", hog' a "onstru"toro" nem metduso", teht az leszrmazott osztl'o" nem $r$(
"$lheti" azo"at.
,2.,. Met'd4sok "el>l(rsa #s elre+t#se
Ba eg' leszrmazott osztl'beli metdus, mel'ne" ug'anaz a szignatQrja s visszatrsi
rt"e, mint a sz+losztl' metdusna", a""or a leszrmazott osztl' #el+l*rja a sz+l(
osztl' metdust. (4egjeg'zend, hog' eg' metdus szignatQrja a nevbl, valamint
paramtereine" szmbl s t*pusbl ll.)
-g' leszrmazott osztl' #el+l*r "pessge lehetv teszi, hog' eg' osztl' $r$"$lj$n eg'
ol'an sz+losztl'tl, mel'ne" visel"edse elg "$zeli, majd sz+"sg szerint vltoztasson
a visel"edsen. Gldul az C8ject osztl' tartalmaz eg' toString nev! metdust, amel'(
ne" a visszaadja az obje"tumpldn' sz$veges reprezent)ijt. 4inden osztl' meg(
$r$"li ezt a metdust. &z C8ject metdusna" vgrehajtsa ltalban nem tQl hasznos a
leszrmazott osztl'o" szmra, ezrt a metdus #el+l*rsa )lszer!, hog' jobb in#orm(
)it n'Qjthasson az obje"tum sajt magrl. -z "+l$n$sen hasznos pldul n'om"$vets
esetn. & "$vet"ez "d eg' plda a toString #el+l*rsra.
public class MyClass {
private int anInt = 4;
public String toString() {
return "Instance of MyClass. anInt = " + anInt;
}
}
12.Mr$"lds 121. oldal
& #el+l*r metdusna" neve, valamint paramtereine" szma s t*pusa, valamint visz(
szatrsi rt"e megeg'ezi" azzal a metdussal, amel'et #el+l*r. (Haljban a leszrma(
zott osztl'beli metdus visszatrsi t*pusa lehet a sz+losztl' visszatr t*pusna" le(
szrmazottja is a Java 0 ta.)
& #el+l*r metdusna" lehet az stl eltr thro)s zrad"a, ha nem ad meg ol'an t*pu(
so"at, mel'e" nin)sene" a #el+l*rt metdus zrad"ban el*rva. 4srszt, a #el+l*r me(
tdus lthatsga lehet bvebb, mint a #el+l*rt metdus, de sz!"ebb nem. Gldul a
sz+l osztl' protected metdusa a leszrmazott osztl'ban publi"uss (pu8lic) tehet,
de privtt (private) nem.
Meg+egyz#s. Irdemes tgondolni e szabl'o" httert. -g' leszrmazott osztl' obje"tuma brhol hasz(
nlhat, ahol eg' sosztl'beli obje"tum is. Ippen ezrt a leszrmazott semel'i" tagjna" lthatsga
nem sz!"+lhet, hiszen a""or az il'en hasznlat lehetetlen lenne. Lg'an*g' eg' #el+l*rt metdus ltal do(
bott Qj#ajta "ivtel "ezelse nem lenne biztos*tott.
-g' leszrmazott osztl' nem tudja #el+l*rni az ol'an metduso"at, mel'e" az sosztl'(
ban vgleges (/inal) mins*ts! (a de#in*)i szerint a vgleges metduso" nem #el+l*rha(
t"). Ba mgis megprblun" #el+l*rni eg' vgleges metdust, a #ord*t hiba+zenetet
"+ld.
-g' leszrmazott osztl'na" #el+l "ell *rnia azon metduso"at, mel'e" a #elsbb osztl'(
ban absztra"tna" (a8stract) n'ilvn*totta", vag' maga a leszrmazott osztl' is abszt(
ra"t "ell, hog' leg'en. -ml"ezz+n" vissza, hog' a Java programn'elv megengedi a me(
tduso" tQlterhelst, ha a metdus paramtereine" a szmt vag' t*pust megvltoztat(
ju". -g' sosztl'ban is megengedhet a metduso" tQlterhelse. &lbbia"ban nzz+n"
eg' pldt a toString metdus tQlterhelsre.
public class MyClass {
private int anInt = 4;
public String toString() {
return "Instance of MyClass. anInt = " + anInt;
}
public String toString(String prefix) {
return prefix + ": " + toString();
}
}
&mint azt a plda illusztrlja, tQlterhelhet+n" eg' sosztl'beli metdust, hog' tovbbi
#un")i""al is szolglhasson. &mi"or eg' ol'an metdus *run", mel' azonos nev! a #el(
sbb osztl'beli metdussal, le "ell ellenrizni a paramtere"et s a "ivtellistt (thro)s
zrad"), hog' biztosa" lehess+n" a#ell, hog' a #el+l*rs ol'an lett, amil'enne" a"artu".
Ba eg' leszrmazott osztl' eg' osztl'metdust ug'anazzal az al*rssal de#inil, mint
a #elsbb osztl'beli metdus, a""or a leszrmazott osztl' metdusa elrejti (ms"nt
#ogalmazva el#edi) a sz+losztl'belit. ,ag' jelentsge van az elrejts s a #el+l*rs
meg"+l$nb$ztetsne". ,zz+" meg eg' pldn "ereszt+l, hog' mirt% - plda "t osz(
tl't tartalmaz. &z els az ,nimal, mel'ben van eg' pldn'metdus s eg' osztl'me(
tdus.
public class Animal {
public static void hide() {
System.out.println("The hide method in Animal.");
}
public void override() {
System.out.println("The override method in Animal.");
}
}
122. oldal Java programozs (1.3. verzi)
& msodi" osztl' neve Cat, ez az ,nimal(na" eg' leszrmazott osztl'a.
public class Cat extends Animal {
public static void hide() {
System.out.println("The hide method in Cat.");
}
public void override() {
System.out.println("The override method in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = (Animal)myCat;
myAnimal.hide();
myAnimal.override();
}
}
& Cat osztl' #el+l*rja az override metdust az ,nimal(ban, s elrejti a hide osztl'met(
dust az ,nimal(ban. -bben az osztl'ban a main metdus ltrehoz eg' Cat pldn't, be(
teszi az ,nimal t*pusQ hivat"ozs al is, majd elh*vja mind az elrejtett, mind a #el+l*rt
metdust. & program eredmn'e a "$vet"ez.
The hide method in Animal.
The override method in Cat.
& sz+losztl'bl h*vju" meg a rejtett metdust, a leszrmazott osztl'bl pedig a #el+l(
*rtat. Dsztl'metdushoz a #uttatrendszer azt a metdust h*vja meg, mel' a hivat"ozs
szer"esztsi idej! t*pusban van de#inilva, amell'el a metdust elnevezt". & pldn"(
ban az my,nimal szer"esztsi idej! t*pusa az ,nimal. -""ppen a #uttatrendszer az
,nimalBban de#inilt rejtett metdust h*vja meg. & pldn'metdusnl a #uttatrend(
szer a hivat"ozs #utsidej! t*pusban meghatrozott metdust h*vja meg. & pldban
az my,nimal #utsidej! t*pusa a Cat. -""ppen a #uttatrendszer a CatBban de#inilt #e(
l+l*r metdust h*vja meg.
-g' pldn'metdus nem tud #el+l*rni eg' osztl'metdust, s eg' osztl'metdus nem
tud elrejteni eg' pldn'metdust. 4ind"t esetben #ord*tsi hibt "apun".
,2.2. *agvltoz'k elre+t#se
-g' osztl' vltozja, ha ug'anazt a nevet viseli, mint a #elsbb osztl' eg' vltozja, a"(
"or elrejti a #elsbb osztl' vltozjt, mg a""or is, ha "+l$nb$z a t*pusu". &z leszr(
mazott osztl'o"on bel+l a #elsbb osztl'beli vltozra nem utalhatun" eg'szer!en a
nevvel. -hel'ett a tagvltozt el tudju" rni az sosztl'on "ereszt+l, amirl majd a "$(
vet"ez #ejezet #og szlni. Oltalnossgban vve nem )lszer! a tagvltoz" elrejtse.
,2.7. A super hasznlata
Ba eg' metdus #el+l*rja az sosztl'a metdusaina" eg'i"t, a""or a super hasznlat(
val seg*tsg+l h*vhat a #el+l*rt metdus. & super arra is hasznlhat, hog' eg' rejtett tag
varinsra utaljun". -z a sz+losztl'.
public class Superclass {
public boolean aVariable;
12.Mr$"lds 123. oldal
public void aMethod() {
aVariable = true;
}
}
4ost "$vet"ezzen a Su8class nev! leszrmazott osztl', mel' #el+l*rja aMethod(ot s
a=aria8le(t.
public class Subclass extends Superclass {
public boolean aVariable; //hides aVariable in Superclass
public void aMethod() { //overrides aMethod in Superclass
aVariable = false;
super.aMethod();
System.out.println(aVariable);
System.out.println(super'aVariable);
}
}
& leszrmazott osztl'on bel+l az a=aria8le nv a Su8Class(ban de"larltra utalt, amel'
a sz+losztl'ban de"larltat elrejti. Basonl"ppen, az aMethod nv a Su8Class(ban
de"larltra utalt, amel' #elsbb osztl'ban de"larltat #el+l*rja. 8eht ha eg' a sz+losz(
tl'bl $r$"$lt a=aria8le(ra s aMethod(ra szeretnn" utalni, a leszrmazott osztl'na"
eg' mins*tett nevet "ell hasznlnia, hasznlva a superBt, mint azt lttu". & Su8class
aMethod metdusa a "$vet"ez"et *rja "i.
false
true
Basznlhatju" a super(t a "onstru"toron bel+l is az sosztl' "onstru"tora megh*vsra.
& "$vet"ez "dplda bemutatja a Thread osztl' eg' rszt X az osztl' ln'egben
t$bbszlQ program#utst tesz lehetv X, amel' vgrehajt eg' anim)it. &z ,nimatB
ionThread osztl' "onstru"tora bell*t nhn' "ezdeti rt"e"et, il'ene" pldul a "e(
retsebessg s a "pe" szma, majd a vgn let$lti a "pe"et.
class AnimationThread extends Thread {
int framesPerSecond;
int numImages;
Image[] images;
AnimationThread(int fps, int num) {
super("AnimationThread");
this.framesPerSecond = fps;
this.numImages = num;
this.images = new Image[numImages];
for (int i = 0; i <= numImages; i++) {
...
// Load all the images.
...
}
}
...
}
& #l"$vrrel szedett sor a "$zvetlen sz+losztl' "onstru"torna" ePpli)it megh*vsa,
mel'et a Thread n'Qjt. -z a Thread "onstru"tor tvesz eg' String(et, s *g' nevezi a
Thread(et. Ba a leszrmazott osztl' "onstru"torban van ePpli)it super "onstru"torh*(
vs, a""or anna" az elsne" "ell lennie. Ba eg' "onstru"tor nem h*v meg ePpli)it mdon
eg' sz+losztl'beli "onstru"tort, a""or a Java #uttatrendszer automati"usan (impli)it)
12>. oldal Java programozs (1.3. verzi)
a sz+losztl' paramter nl"+li "onstru"tort h*vja meg, mg mieltt a "onstru"toron
bel+l brmi utas*tst vgrehajtana.
Meg+egyz#s. ha a sz+l osztl'ban nem ll rendel"ezsre paramter nl"+li "onstru"tor, a""or #ord*tsi
hibt "apun". Jl'en esetben "$telese" vag'un" ePpli)it paramteres "onstru"torh*vst al"almazni.
,2.;. Az Obect osztly met'd4sai
&z C8ject osztl' minden osztl' "$z$s se, az osztl'hierar)hia tetejn ll. 4inden osz(
tl' "$zvetlen vag' "$zvetett mdon utdja az C8ject osztl'na", *g' minden osztl'
rendel"ezi" az C8ject osztl' metdusaival. -z az osztl' de#inilja azt az alapvet m!(
"$dst, mel' minden obje"tumnl rendel"ezsre ll.
&z C8ject osztl' ltal n'Qjtott leg#ontosabb metduso" a "$vet"ez".
clone
eYuals s hashCode
/inali"e
toString
getClass
-ze"et sorra trg'alju" a "$vet"ez"ben.
A clone met'd4s
& clone metdust a""or hasznlju", ha ltre szeretnn" hozni eg' obje"tumot, eg' mr
meglv obje"tumbl (msolatot "sz*teni rla). &z adott osztll'al megeg'ez t*pusQ Qj
pldn't hoz ltre.
aCloneableObject.clone();
& metdus a Clone+otSupported&*ception "ivtelt dobja, ha a "lnozs nem tmoga(
tott az osztl' szmra. & "lnozs a""or tmogatott, ha az osztl' implementlja a
Clonea8le inter#szt. Babr az C8ject tartalmazza a Clone metdust, nin)sen megval(
s*tva az inter#sz. Ba az obje"tum, ahol a clone(ra hivat"oztun", nem implementlja a
clonea8le inter#szt, eg' eredetivel azonos t*pusQ s rt"! obje"tum j$n ltre. 9egeg'(
szer!bb azonban, ha az osztl' de"lar)iban ltrehozun" eg' implements Clonea8le
sort.
@izon'os osztl'o"nl a hel'es m!"$ds #elttele a clone #el+lde#inilsa. 8e"ints+n"
eg' Stac! osztl't, mel' tartalmaz eg' tagvltozt, mel' az C8jectBe! t$mbjre hivat"o(
zi". Ba a Stac! az C8ject osztl' clone metdusra p+l, a""or az eredeti s a msolt
Stac! ug'anazo"at az eleme"et #ogja tartalmazni, mivel az adattag t$mb, s msols"or
)sa" re#eren)ia msols #og t$rtnni.
& Stac! osztl'na" ol'an clone implement)ira van sz+"sge, amel' lemsolja a Stac!
obje"tum adattagjait, ezzel biztos*tva a meg#elel tartalom sztvlasztst.
public class Stack i%ple%ents Cloneable {
private Object[] items;
private int top;
...
12.Mr$"lds 120. oldal
protected Stack clone() {
try {
Stack s = (Stack)super.clone(); //clone the stack
s.items = (Object)items.clone(); //clone the array
return s; // return the clone
} catch (CloneNotSupportedException e) {
//This shouldn't happen because Stack is Cloneable.
throw new InternalError();
}
}
}
&z implement)i viszon'lag eg'szer!. -lsz$r a clone metdus C8ject implement)ija
h*vdi" meg a super.clone seg*tsgvel, mel' ltrehoz s ini)ializl eg' Stac! obje"tu(
mot. Jl'en"or mind"t obje"tum ug'anazo"at az obje"tumo"at tartalmazza. -zutn a
metdus lemsolja az obje"tumo"at, s a metdus Stac!(el tr vissza.
Meg+egyz#s. & clone metdus nem a ne)(t hasznlja a msolat ltrehozsnl s nem h*v !onstru!toroB
!at, hel'ette a super.clone(t hasznlja, mel' ltrehozza az obje"tumot a meg#elel t*pussal, s engedl'ezi
a msolst, mine" eredmn'e"ppen a "*vnt msolatot "apju".
Irdemes mg azt is meg#ig'elni, hog' az adattag msolst sem 5"zzel6 vgezte a metdus, hanem a
t$mb obje"tum clone metdusval. -z a metdus eg' msi" azonos mret! t$mb$t hoz ltre, amine" ele(
meirl is msolat "sz+l. (& t$mbben trolt tago"rl mr nem #og msolat "sz+lni, de ez nem is )lja eg'
verem msolsna".)
Az e!uals #s hashCode met'd4sok
&z eYuals metdus "t obje"tumot hasonl*t $ssze s d$nti el, hog' eg'enl"(e vag' sem
(ha eg'enl", true(val tr vissza). Ba $nmagval hasonl*tun" eg' obje"tumot, true(t ad
vissza.
& "$vet"ez programrszlet $sszehasonl*t "t .nteger(t.
Integer one = new Integer(1);
Integer anotherOne = new Integer(1);
if (one.equals(anotherOne)) {
System.out.println("objects are equal");
}
& program "imenete.
objects are equal
-g'enl", mivel az rt"+" megeg'ezi". Ba "t obje"tum eg'enl az eYuals metdus
szerint, a""or a hashCode metdus ltal szolgltatott rt"e"ne" is meg "ell eg'ezni+".
(2ig'elem, #ord*tva ez nem #elttlen+l igaz%)
Ba az eYuals m!"$dse nem meg#elel az osztl'un" szmra, a""or #el+l "ell *rnun" az
osztl'un"ban.
& hashCode metdus ll*tja el az obje"tumo" hash "djt, ami pldul a""or lehet
sz+"sges, ha az obje"tumot hashtblban trolju". Bash "d"nt (a metdus visszat(
rsi rt"e"nt) mindig eg' int t*pusQ szmot "apun".
Bel'es hash #+ggvn' *rsa eg'szer!, azonban hat"on' #+ggvn' *rsa nehz lehet, "o(
mol'abb mun"t ign'el. -z a tma azonban mr nem #r bele a jeg'zet+n"be.
12E. oldal Java programozs (1.3. verzi)
A finali"e met'd4s
&z C8ject osztl' ug'an)sa" tartalmazza a /inali"e metdust. & szemtg'!jt megh*vja,
ha mr nin)s eg'etlen hivat"ozs sem az obje"tumra. & /inali"e metdus automati"usan
megh*vdi", mel'et a legt$bb osztl' hasznl, ezrt nem is "ell "+l$n megh*vni.
& /inali"e metdussal legt$bbsz$r nem "ell t$rdn+n", az stl $r$"$lt metdus t$bb(
n'ire meg#elelen m!"$di".
A toString met'd4s
&z obje"tumot String("nt brzolja. Basznos minden Qj osztl' de#in*)ija sorn #el+l(
*rni, hog' a meg#elel rt"e"et reprezentlhassa. Basznlhatju" a toString(et a SysB
tem.out.println(nel eg'+tt az obje"tumo" sz$veges megjelen*tsre, pl..
System.out.println(new (ouble(Math.PI).toString());
& #uts eredmn'e.
3,14159
,ag'on hasznos ez a metdus a""or, ha a program tesztelsi #zisban bizon'os obje"(
tumo" tartalmt ellenrizni szeretnn". Jl'en"or )sa" "i "ell *rni a "rdses obje"tumot,
pldul a "onzolra.
System.out.println(anObject);
A getClass met'd4s
Hisszaadja a #utsidej! osztl't az obje"tumna". &z C8ject osztl' nem engedi meg a
getClass metdus #el+lde#inilst (/inal).
& "$vet"ez metdus az obje"tum osztl'nevt jelen*ti meg.
void PrintClassName(Object obj) {
System.out.println("The Object's class is "
+ obj.getClass().getName());
}
& "$vet"ez plda ltrehoz az o8j t*pusval megeg'ez msi" obje"tum pldn't.
Object createNewInstanceOf(Object obj) {
return obj.getClass().newInstance();
}
Ba tudju" az osztl' nevt, "aphatun" eg' Class obje"tumot az osztl'nvbl. & "$vet(
"ez "t sor eg'arnt ug'anazon vgeredmn't produ"lja (a msodi" vltozat hat"o(
n'abb).
String.class
Class.forName("String")
,2.5. E#gleges osztlyok #s met'd4sok
E#gleges osztlyok
& /inal "ul)ssz seg*tsgvel de"larlt vltoz" rt"t az ini)ializls utn nem lehet
megvltoztatni, a leszrmazott osztl' nem mdos*thatja, be#ol'solhatja az eredeti m!(
"$dst. 2ontos szempont a rendszer biztonsgna" n$velse s az obje"tum orientlt
tervezs szempontjbl.
12.Mr$"lds 12=. oldal
$iztonsg. &z eg'i" mdszer, amit a ha)"ere" hasznlna" rendszere" #elt$rsnl, eg'
szrmaztatott osztl' ltrehozsa eg' osztl'bl, majd hel'ettes*tse az eredetivel. &
szrmaztatott osztl' a metdush*vs szempontjbl Qg' nz "i, mint az eredeti, de a vi(
sel"edse teljesen ms is lehet, ami hibs m!"$dst eredmn'ezhet. -nne" el"er+lse
rde"ben de"larlhatju" osztl'un"at vglegess, mel' mega"adl'ozza a szrmazta(
tott osztl'o" ltrehozst. & String osztl' is vgleges. -z az osztl' nl"+l$zhetetlen a
Java Glat#orm m!"$dshez. -z biztos*tja, hog' minden String a meg#elel mdon m!(
"$dj$n.
Ba megprblju" le#ord*ttatni eg' /inal osztl' leszrmazott osztl't, hiba+zenetet #o(
gun" "apni.
*ervez#s. &z obje"tumorientlt tervezsnl rdemes megllap*tani, hog' mel' oszt(
l'o"at szeretnn" vglegess tenni, s teg'+" is az adott osztl'o"at vglegess a /inal
mdos*t seg*tsgvel.
final class ChessAlgorithm {
...
}
4inden leszrmaztatsi prbl"ozs hibs lesz.
E#gleges met'd4sok
& /inal "ul)sszt hasznlju" a de"lar)iban, ha azt a"arju" elrni, hog' ne lehessen a
metdust szrmaztatott osztl'ban #el+lde#inilni. &z C8ject metdusai "$z+l van, ame(
l'i" /inal t*pusQ, s van, amel'i" nem.
& "$vet"ez pldban a Chess,lgorithm osztl'ban a ne*tMove metdus tessz+" vgle(
gess.
class ChessAlgorithm {
...
final void nextMove(ChessPiece pieceMoved,
BoardLocation newLocation) {
...
}
...
}
,2.B. -llenrz k#rd#sek
4it jelent az, hog' eg'i" osztl' leszrmazottja a msi"na"A
9ehet(e eg' osztl're#eren)it a sz+losztl' #el "onvertlniA
9ehet(e eg' osztl're#eren)it a leszrmazott osztl' #el "onvertlniA
9ehet(e Javban "+l$nb$z t*pusQ rt"e" "$z$tt rt"adsA Ba igen, mi"orA
Ba ltrehozun" eg' pldn't, s eg' sz+losztl' t*pusa szerinti re#eren)ival hivat(
"ozun" r, a sz+losztl' vag' a leszrmazott osztl' szerinti metdus h*vdi"(e
megA
4it jelent az osztl'o" Qjra#elhasznlhatsgaA Bog'an valsul meg JavbanA
&z osztl' mel' tagjait $r$"li a leszrmazott osztl'A
4i"or lehet eg' metdust a leszrmazottban el#edni (elrejteni)A
12F. oldal Java programozs (1.3. verzi)
Bog'an lehet hivat"ozni a leszrmazott osztl'ban az s elrejtett adattagjraA
4ire hasznlhat a super "ul)sszA
4il'en esetben sz+"sges az sosztl' "onstru"tort ePpli)it megh*vniA
=gaz vagy hamis8 =ndokol+a!
-g' Java #ord*tsi eg'sgben pontosan eg' osztl' szerepel.
@rmel' .class "iterjeszts! llomn't lehet "$zvetlen+l #uttatni.
9ehet(e eltrs az sben de#inilt metdus s a leszrmazottban #el+l*rt vltozat lt(
hatsgbanA
9ehet ol'an metdus, amel'et eg' leszrmazottban nem lehet #el+l*rniA
Hgleges osztl'na" "ell(e vgleges metdust tartalmazniA
& vgleges metdust tartalmaz osztl' maga is vglegesA
Melyik egy &4!lik4sI a!sztrakt met'd4s helyes deklar.i'+a8
pu8lic a8stract void addDFL
pu8lic a8stract void addDF fg
pu8lic virtual addDFL
A leszrmazott osztly konstr4ktor!an hova kell (rni a sz>losztly konst-
r4ktornak h(vst8
a"rhova
a "onstru"tor els sorba
a "onstru"tor utols sorba
nem "ell megh*vni
,2.C. Dyakorl' "eladatok
)#sz(tsen a!sztrakt #$rm% osztlytI amely ms s&e.ilisa!! +rm oszt-
lyok /&l. A4t'2 kzs se lehet!
& "onstru"torna" lehessen megadni, hog' al"almas(e szraz#$ldi, v*zi s lgi "$zle"eds(
re ("+l$n("+l$n, teht 3 logi"ai paramterrel). 8rolja el eze"et az adato"at, hog' "(
sbb le"rdezhet" leg'ene".
1sz*tsen s"?ra"/Xldi, vG"i s lEgi metduso"at a "onstru"torban bell*tott rt"e" le"r(
dezsre.
1sz*tsen ,ut# osztl't, amel' az shez "pest tudja trolni az utaso" szmt is, s a
"onstru"torn "ereszt+l ezt be lehessen ll*tani. 1sz*tsen ehhez is le"rdez metdust.
13.@eg'azott osztl'o" 12?. oldal
,7.$egyazott osztlyok
4egadhatun" eg' osztl't eg' msi" osztl' tagja"nt. -g' il'en osztl't beg'azott osz(
tl'na" h*vun", s a "$vet"ez"ppen nz "i.
class EnclosingClass {
...
class ANestedClass {
...
}
}
& beg'azott osztl'o"at arra hasznlju", hog' "i#ejezz+" s rvn'es*ts+" "t osztl'
"$z$tt a "ap)solatot. 4egadhatun" eg' osztl't eg' msi" osztl'on bel+l, hog'ha a be(
g'azott osztl'na" a magba #oglal osztl'on bel+li "$rn'ezetben van rtelme. Gl. a
sz$veg"urzorna" )sa" a sz$veg"omponensen bel+li "$rn'ezetben van rtelme.
& beg'az osztl' tagja"nt a beg'azott osztl' "ivltsgos hel'zetben van. 1orltlan
hozz#rssel rendel"ezi" a beg'az osztl'o" tagjaihoz mg a""or is, hog' ha azo" pri(
vt"nt vanna" de"larlva. &zonban ez a spe)ilis "ivltsg nem mindig spe)ilis. &
hozz#rst biztos*t tago" "orltozz" a hozz#rse"et az ol'an osztl'tago"hoz, ame(
l'e" a beg'az osztl'on "*v+l esne". & beg'azott osztl' a beg'az osztl'on bel+l
tallhat, ebbl "i#ol'lag hozz#rhet a beg'az osztl' tagjaihoz.
4int ahog'an ms tago"at is, a beg'azott osztl'o"at is stati"us"nt, avag' nem stati(
"us"nt lehet de"larlni, ezrt eze"et pontosan *g' is h*vj". statik4s !egyazott osz-
tly. & nem stati"us beg'azott osztl'o"at !els osztlyo"na" h*vju".
class EnclosingClass {
...
static class StaticNestedClass {
...
}
class InnerClass {
...
}
}
&hog' a stati"us metduso" s vltoz" esetn, amel'e"et mi osztl'metduso"na" s
vltoz"na" h*vun", a stati"us beg'azott osztl't a beg'az osztl'val "ap)solju"
$ssze. &hog' az osztl'metduso", a stati"us beg'azott osztl'o" sem hivat"ozhatna"
"$zvetlen+l ol'an pldn'vltoz"ra vag' metduso"ra, amel' az beg'az osztl'(
ban van megadva. & pldn'metduso" s vltoz" esetn eg' bels osztl' az beg'a(
z osztl'na" a pldn'val "ap)soldi" $ssze, s "$zvetlen hozz#rse van anna" az
obje"tumna" a pldn'vltozihoz s metdusaihoz. 4ivel eg' bels osztl't eg' pl(
dnn'al trs*tana", ezrt $nmaga nem de#inilhat a"rmil'en stati"us tagot.
Bog' a tovbbia"ban "$nn'ebb leg'en meg"+l$nb$ztetni a beg'azott osztl' s a bels
osztl' #ogalmt, rdemes eze"re a "$vet"ez#le"ppen te"inteni. a beg'azott osztl'
"t osztl' "$z$tti szinta"ti"us "ap)solatot #ejez "i, azaz szinta"ti"ailag az eg'i" osztl'(
ban lev "d megtallhat a msi"on bel+l. -zzel ellenttben a bels osztl' ol'an ob(
je"tumo" "$z$tti "ap)solatot #ejez "i, amel'e" "t osztl'na" a pldn'ai. 8e"ints+" a
"$vet"ez osztl'o"at.
13<. oldal Java programozs (1.3. verzi)
class EnclosingClass {
...
class InnerClass {
...
}
}
&z e "t osztl' "$z$tti "ap)solatnl nem az az rde"es, hog' az .nnerClass szinta"ti"u(
san de#inilva van az &nclosingClass(on bel+l, hanem az, hog' az .nnerClass(na" a pl(
dn'a )sa" az &nclosingClass(na" a pldjn bel+l ltezhet, s "$zvetlen hozz#rse
van a pldn'vltoz" s a beg'az osztl' pldn'metdusaihoz.
& beg'azott osztl'o" mind"t #ajtjval tall"ozhatun" a Java &GJ(n bel+l, s "ell is
hasznlni "et. &zonban a legt$bb beg'azott osztl', amel'e"et hasznlun", valsz*n!(
leg bels osztl' lesz.
,7.,. $els osztlyok
&hhoz, hog' megrts+", mi a bels osztl' s mire j, te"ints+" t Qjra a Stac! osztl't.
8eg'+" #el, hog' ehhez az osztl'hoz hozz szeretnn" adni eg' ol'an tulajdonsgot,
amel' lehetv teszi eg' msi" osztl' szmra, hog' "ilistzza a veremben lv eleme(
"et vag' tago"at java.util..terator inter#sz hasznlatval. -z az inter#sz hrom met(
dus de"lar)it tartalmaz.
public boolean hasNext();
public Object next();
public void remove();
&z .terator de#inilja azt az inter#szt, ami vgigmeg' eg'szer az eleme"en eg' megadott
sorrend szerint, amel'et a "$vet"ez"ppen adun" meg.
while (hasNext()) {
next();
}
& Stac! osztl' $nmaga nem tudja vgrehajtani az .terator inter#szt, mert az .terator
inter#sz &GJ(ja bizon'os "orlto"at szab. "t "+l$nb$z obje"tum nem listzhatja "is
eg'szerre a veremben lv eleme"et. Lg'anis nin)s lehetsg arra, hog' megtudju", "i
h*vja meg a "$vet"ez metdust, s a listzst nem lehet Qjraind*tani, mert az .terator
inter#szne" nin)sen ol'an metdusa, amel' tmogatn ezt. Wg' a "ilistzst )sa" eg'szer
lehet vgrehajtani, mert az .terator inter#szne" nin)s arra metdusa, hog' az elejhez
visszamenjen a bejrs. -hel'ett eg' bels osztl' van, amel' elvgzi a verem szmra
ezt a mun"t. & bels osztl' hozz#rhet a verem elemeihez, s mr )sa" azrt is hozz
"ell, hog' tudjon #rni, mert a veremne" a publi"us inter#sze )sa" 9J2D hozz#rst t(
mogat. Jtt lp be a "pbe a bels osztl'. Jtt lthat eg' verem implement)i, ami de#i(
nil eg' bels osztl't, amel'et Stac!.terator(na" h*vun", s "ilistzza a verem elemeit.
public class Stack {
private Object[] items;
public Iterator iterator() {
return new StackIterator();
}
13.@eg'azott osztl'o" 131. oldal
class StackIterator i%ple%ents Iterator {
int currentItem = items.size() - 1;
public boolean hasNext() {
...
}
public Object next() {
...
}
public void remove() {
...
}
}
}
2ig'elj+" meg, hog' a Stac!.terator osztl' "$zvetlen+l hivat"ozi" a veremben lev ele(
me" pldn'aina" vltozira. & bels osztl'o"at elssorban arra hasznlju", hog' imp(
lementlju" a seg*t osztl'o"at, Qg', mint itt, ebben a pldban is lthatju". Ba 3LJ
esemn'e"et a"arun" hasznlni, a""or ismern+n" "ell a bels osztl'o" hasznlatna" a
szabl'ait, mert az esemn'"ezels me)hanizmusa elg erteljesen hasznlja eze"et.
:e"larlhatun" eg' bels osztl't anl"+l, hog' nevet adnn" ne"i. &z il'en osztl'o"at
nvtelen osztl'o"na" h*vju". Jtt lthat mg eg' vltozata a Stac! osztl'na", ebben az
esetben nvtelen osztl't hasznlun" az .terator szmra.
public class Stack {
private Object[] items;
public Iterator iterator() {
return new Iterator() {
int currentItem = items.size() - 1;
public boolean hasNext() {
...
}
public Object next() {
...
}
public void remove() {
...
}
}
}
}
& nvtelen osztl'o" nehz"ess teheti" a "d olvasst, ezrt )sa" ol'an osztl'o"hoz
rdemes hasznlnun", amel'e" nag'on "i)si" (nem t$bb mint eg'("t metdus), s
amel'e" hasznlata elgg eg'rtelm!, mint pldul az esemn'"ezel osztl'.
,7.2. N#hny tov!!i #rdekess#g
4s osztl'o"hoz hasonlan a beg'azott osztl'o"at is lehet absztra"tna" vag' vgle(
gesne" de"larlni. -nne" a "t mdos*tna" a jelentse a beg'azott osztl' esetn is
ug'anaz, mint ms osztl'o"nl.
Lg'an*g' hasznlhatju" a hozz#rs mdos*t"at X mint pldul a private, pu8lic s
protected X, hog' "orltozzu" a beg'azott osztl'o"hoz val hozz#rst, mint ahog'
minden ms osztl'tag esetn tehetj+" azt. ,em )sa" a nvtelen, hanem brmil'en be(
132. oldal Java programozs (1.3. verzi)
g'azott osztl' de"larlhat brmil'en "dblo""on bel+l. & beg'azott osztl', amel'
eg' metduson vag' eg' msi" "dblo""on bel+l van de"larlva, hozz#rhet brmil'en
hat"$r$n bel+li vgleges vag' lo"lis vltozhoz.
,7.7. -llenrz k#rd#sek
A kvetkez k'd!an melyik nem ker>lhet az RR hely#re8
public class MyClass1 {
public static void main(String argv[]){ }
XX class MyInner {}
}
pu8lic
private
static
/riend
1>.2elsorols t*pus 133. oldal
,;.%elsorols t(&4s
& #elsorols t*pus eg' ol'an t*pus, mel'ne" megengedett rt"ei #iP "onstanso"bl ll(
na". Javban a #elsorols t*pust enum szval de#inilju". Gl. a ht napjait *g' de#inilhat(
ju".
enu% Days {
VASARNAP, HETFO, KEDD, SZERDA, CSUTORTOK, PENTEK, SZOMBAT};
}
Heg'+" szre, hog' "onven)ionlisan a neve" a #elsorols t*pusnl nag' bet!""el *ran(
d", *g' a "d olvassnl "$nn'en #elismerhet" a "onstanso".
@rmi"or hasznlhatun" #elsorols t*pust, ha sz+"sg+n" van "$t$tt "onstans rt"e"re.
-z magban #oglalja a termszetes #elsorols t*puso"at, mint a ,aprendszer bol'gi, a
ht napjai, "rt'apa"li lapjaina" neve/rt"e s minden ol'an esetet, ahol az $sszes le(
hetsges t"et tudju" a #ord*ts"or.
& Java programozsi n'elv #elsorols t*pusa so""al hat"on'abb, mint ms n'elve"ben
szerepl meg#eleli, mel'e" )sa" neves*tett egsz szmo". &z enum de"lar)i eg' osz(
tl't de#inil, Qg'nevezett enum t*pust, mel'ne" leg#ontosabb jellemzi a "$vet"ez".
@eszdesebbe" az eg'szer! literlo"nl
8*pusbiztosa"
7ajt nvter+" van
Irdemes s)itchBcase szer"ezetben #elsorolsi t*pus alapjn szervezni
Han eg' stati"us values metdusu", mel' eg' t$mb$t ad vissza, mel'ben a t*pus rt(
"ei szerepelne" de"larlsi sorrendben. -z a mdszer pl. /orBeach )i"lussal nag'on
hasznos.
8artalmazhat metduso"at, adattago"at, implementlhat inter#sze"et stb.
4inden C8ject metdust implementlna". Msszehasonl*that" s szerializlhat".
& "$vet"ez pldban a -lanet eg' #elsorols t*pus, mel' a ,aprendszer bol'git jelen*ti
meg. & bol'gna" van eg' "onstans t$meg s sugr paramtere. 4inden "onstanst t$(
meggel s sugrral de"larlna", mel'et tadna" a "onstru"torna" a ltrehozs"or. He(
g'+" szre, hog' a #elsorols t*pus "onstru"tora rtelemszer!en privt. Ba megprb(
lun" eg' publi"us "onstru"tort ltrehozni a #elsorols t*pusna", a""or a #ord*t hiba+ze(
netet #og visszaadni.
public enu% Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7),
PLUTO (1.27e+22, 1.137e6);
13>. oldal Java programozs (1.3. verzi)
private final double mass; //in kilograms
private final double radius; //in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double mass() { return mass; }
public double radius() { return radius; }
public static final double G = 6.67300E-11;
public double surfaceGravity() {
return G * mass / (radius * radius);
}
public double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}
& bol'gna" az rt"ei mellett metdusai is vanna", mel'e"en "ereszt+l "in'erhet a
#elsz*ni gravit)i s eg' trg' sQl'a minden bol'gn. & "$vet"ez pldaprogram eg'
ember 2$ld$n mrt sQl'a alapjn "iszmolja, majd "i*rja ug'anenne" az emberne" a sQ(
l't minden bol'gn.
public static void main(String[] args) {
double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/EARTH.surfaceGravity();
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
}
& "imenet.
$ java Planet 175
Your weight on MERCURY is 66.107583
Your weight on VENUS is 158.374842
Your weight on EARTH is 175.000000
Your weight on MARS is 66.279007
Your weight on JUPITER is 442.847567
Your weight on SATURN is 186.552719
Your weight on URANUS is 158.397260
Your weight on NEPTUNE is 199.207413
Your weight on PLUTO is 11.703031
;sa" eg'etlen meg"$tse van a #elsorols t*pusna". habr a #elsorols t*puso" osztl'o",
nem de#inilhat hierar)hia szmu"ra. 4s szava""al. nem lehet leszrmazottja a #elso(
rolsi t*pusna".
Hgezet+l a java.util )somag tartalmaz "t spe)ilis Set s Map implement)it, mel'
tmogatja a #elsorols t*puso"at, az &numSet(et s az &numMap(et.
,;.,. -llenrz k#rd#sek
4i"or rdemes #elsorols t*pust al"almazniA
4il'en "orltozso" vanna" a #elsorols t*pusra ms osztl'o"hoz "pestA
10.Oltalnos programozs 130. oldal
,5.Sltalnos &rogramozs
&z ltalnos (generi"us) programozs t*pusparamtere" seg*tsgvel teszi lehetv,
hog' osztl'o"at, inter#sze"et hozhassun" ltre Qg', hog' bizon'os paramtere" t*pusa(
it a pldn'os*ts"or d$nthess+" el.
,5.,. Sltalnos t(&4s de"inilsa #s hasznlata
&hhoz, hog' ltalnos t*pust de#iniljun", a t*pusde#in*)ina" tartalmaznia "ell eg' vag'
t$bb t*pus paramtert a t*pus neve utn. & t*pus paramtere" vesszvel elvlasztott listi
k^k s k\k "$z$tt szerepelne". 1onven)ionlisan a t*pus paramtere" nag'bet!se". & t*pus
paramtere" aztn megjelenne" a t*pus metdusaiban, vag' a metdus paramterlist(
jban, vag' visszatrsi rt" t*pus"nt. & g'a"orlatban a legt$bb #ejlesztne" nin)s
sz+"sge Qj ltalnos t*puso" de#inilsra, de sz+"sges megjeg'ezni a szintaPist s a
hasznlatt az ltalnos t*pusna".
,zz+" Qjra t a Stac! osztl't, mel'et az osztl'o" ltrehozsnl mutattun" be. & ge(
neri"us verzi (Stac!IZT[), eg' g'!jtemn't hasznl (,rrayListZT[), hog' a veremben
trolja az r"e"et.
public class Stack2<T> {
private ArrayList<T> items;
...
public void push(T item) {...}
public T pop() {...}
public boolean isEmpty() {...}
}
Heg'+" szre, hog' a T t*pus paramter bevezetsre "er+lt az osztl'nv utn, s eze"
utn #elt!ni", mint a push metdus paramter t*pusa, s a pop metdus visszatrsi t*(
pusa.
& g'!jtemn'e" g'a"ran hasznlatosa" arra, hog' bemutassu" az ltalnos t*pus hasz(
nlatt, mivel nag'on jellemze" az inter#sze"ben s osztl'o"ban. & valsgban a
g'!jtemn'e" volta" a # motiv)is er az ltalnos t*puso" bevezetsnl a Java n'elv(
ben, mivel elrhetv teszi" a #ord*ts idej! ellenrzst a g'!jtemn'e"en vgzett m!(
velete" t*pusbiztonsgna". &mi"or spe)i#i"lju" eg' g'!jtemn'ben trolt obje"tum t*(
pust.
a #ord*t tud ellenrizni brmil'en m!veletet, ami eg' obje"tumot ad a g'!jtemn'(
hez
ismert az obje"tum t*pusa, mel' a g'!jtemn'bl lett "in'erve, ezrt nin)s sz+"sg
arra, hog' cast(olju" (tala"*tsu") t*puss. Lg'ana""or nin)s lehetsg arra sem,
hog' tala"*tsun" eg' rossz t*puss, s e""or megtapasztaljun" eg' #uts idej! ClassB
Cast&*ception "ivtelt.
&hog' az elbbie"ben *rtu", ha eg' ltalnos t*pust hasznlun", hel'ettes*tj+" a param(
ter eg' a"tulis t*pus paramtert, nag'jbl ug'anezen mdszerrel hel'ettes*t+n" eg'
metdushoz a paramtereihez tartoz a"tulis rt"e"et. -g' a"tulis t*pus paramter(
ne" re#eren)ia t*pusna" "ell lenni, nem lehet primit*v. Gldul, itt lthat az, hog' ho(
g'an lehet ltrehozni Stac!I(t String t*pus paramterrel` s eze" utn push(olni s pop(
olni a 5hi6 StringBet.
13E. oldal Java programozs (1.3. verzi)
Stack2<String> s = new Stack2<String>();
s.push("hi");
String greeting = s.pop(); //no cast required here
-g' nem generi"us verem "d *g' nzne "i.
Stack s = new Stack();
s.push("hi");
String greeting = (String)s.pop(); //cast required here
Heg'+" szre, hog' ami"or az ltalnos t*pust hasznlju", a""or a #ord*t eg' ol'an te)h(
ni"val #ord*tja le az ltalnos t*pust, amit t*pus t$rlsne" h*vna".
3'a"orlatilag a #ord*t t$rli az $sszes ol'an in#orm)it, mel' a t*pus paramterrel, vag'
a t*pus paramtere""el "ap)solatos. Gldul a Stac!IZstring[ t*pust le#ord*tja Stac!I(
re, mel'et n'ers t*pusna" nevezne". &bbl "$vet"eztethet+n" a t*pus t$rlsre, hog' a t*(
pus paramter nem rhet el #utsidben ahhoz, hog' hasznlju" t*pus"n'szer*tsben,
vag' mint az instanceo/ eljrs paramtere.
,5.2. )a&.solatok az ltalnos t(&4sok kztt
Halsz*n!leg azt vrju", hog' a Stac!IZC8ject[ a sz+l t*pusa a Stac!IZString[(ne",
mert az C8ject sz+lje a StringBne". & valsgban nem ltezi" il'en "ap)solat az ltal(
nos t*puso" pldn'ai "$z$tt. & sz+l(g'erme" "ap)solat hin'a az ltalnos t*pus pl(
dn'ai "$z$tt nehz"ess teheti a t$bbala"Q (polimor#) eljrso" meg*rst.
8eg'+" #el, hog' szeretnn" meg*rni eg' eljrst, ami "i*rja eg' g'!jtemn'ben trolt
obje"tumo"at az obje"tumo" t*pustl #+ggetlen+l a "onzolra.
public void printAll(Collection<Object> c) {
for (Object o : c) {
System.out.println(o);
}
}
Hlaszthatnn", hog' ltrehozun" eg' String listt s ezt a metdust hasznlju" az $sz(
szes String "i*ratsra.
List<String> list = new ArrayList<String>();
...
printall(list); //error
Ba ezt hasznlju", a""or szre #ogju" venni, hog' az utols sor #ord*tsi hibt ad. 4ivel
az ,rrayListZString[ nem leszrmazott t*pusa a CollectionZC8ject[(ne", ezrt nem ad(
hat t, mint paramter a "i*ratsi eljrsna" anna" ellenre, hog' a "t t*pus ug'anan(
na" az ltalnos t*pusna" a leszrmazottai, ro"on $r$"l$tt t*pus paramtere""el. 4s
rszrl az $r$"ls miatt "ap)solatban ll ltalnos t*puso" ug'anazzal a t*pus param(
terrel "ompatibilise".
public void printAll(Collection<Object> c) {
for (Object o : c) {
System.out.println(o);
}
}
List<Object> list = new ArrayList<Object>();
...
printall(list); //this works
10.Oltalnos programozs 13=. oldal
& ListZC8ject[ "ompatibilis a CollectionZC8ject[(el, mert a "t t*pus pldn'a eg' lta(
lnos sz+lt*pusna" s anna" leszrmazott t*pusna", s a pldn'o" ug'anahhoz a t*(
pus paramterhez tartozna", "on"rtan az C8ject(hez.
,5.7. 5elyettes(t t(&4s
&hog' "$rbejrju" a print,ll metdus els vltozata ltal #elvetett "rdst, lesz$gezhet(
j+", hog' a print,ll paramtere eg' g'!jtemn', mel'ne" elemi t*pusa lehet brmi, amit
CollectionZR[ #ormban le*rhatun".
public void printAll(Collection<?> c) {
for (Object o : c) {
System.out.println(o);
}
}
& R(es t*pus hatrozatlan t*pus"nt ismert. & g'!jtemn'bl brmi"or "iolvashat az ob(
je"tum, mert a visszatrsi rt" mindig garantltan C8ject. &zonban nem adhat ob(
je"tum a g'!jtemn'hez, mert a R ismeretlen t*pust jel$l, s nem lehet eg'rtelm!en
tudni, hog' a hozz adni "*vnt obje"tum leszrmazott t*pusa(e az ismeretlen t*pusna".
&z eg'etlen "ivtel a null, amel' eleme minden t*pusna".
1orltozhatju" (vag' "n'szer*thetj+") is a hel'ettes*t t*pust valamel' t*pus seg*tsg(
vel. & "orltozott hel'ettes*t t*pus a""or hasznos, mi"or )sa" rszben ismerj+" a para(
mtere"et. Gldul teg'+" #el, hog' van eg' osztl' hierar)hin" geometriai ala"zato"bl
(Shape), s enne" leszrmazott t*pusaibl (Circle, Sectangle, s *g' tovbb). & rajzol
program, ami eze"re az obje"tumo"ra hivat"ozi", megh*v eg' dra),ll nev! metdust,
hog' eg' g'!jtemn't rajzoljon eze"bl az ala"zato"bl.
public void drawAll(Collection<Shapes> shapes) {
for (Shape s: shapes) {
s.draw();
}
}
4ivel lthattu", hog' nem megengedett a Shape t*pus valamel' leszrmazott t*pusna"
(pldul a Circle) al"almazsa, ezrt ez a metdus )sa" "orltozottan hasznlhat. pl(
dul nem h*vhat meg a CollectionZCircle[ esetn. Bog' lehetv teg'+" a Shape t*pus
valamel' leszrmazott t*pusna" t*pus paramter"nt val al"almazst, "iterjeszthet(
j+" az ala"zato" g'!jtemn' t*pus paramtert hel'ettes*t t*pus"nt. :e mivel tudju",
hog' a t*pus paramter valamil'en ala"zat lesz, a hel'ettes*tst "orltozhatju" a Shape
t*pusra a "$vet"ez"ppen.
void drawAll(Collection<? extends Shapes> shapes) { ... }
-z lehetv teszi a dra),ll szmra, hog' el#ogadjon brmil'en, a Shape t*pus leszr(
mazott t*pusbl ll g'!jtemn't.
Mssze#oglalva, a hel'ettes*t t*pus #els "orltozssal spe)ializlhat a ZR e*tends Type[
mdon, ezltal meg#elelv tve az adott Type minden leszrmazott t*pushoz. & hel'et(
tes*t t*pust alulrl is "orltozhatju". -g' alulrl "orltozott hel'ettes*t a ZR super
Type[ mdon *rhat le, s a Type minden sosztl'ra hasznlhat. 4eg#ig'elhetj+",
hog' tovbbra sem lehetsges ismeretlen t*pusQ g'!jtemn'hez obje"tumot hozzadni,
s ez nem lehetsges "orltozott, ismeretlen t*pusQ g'!jtemn' esetn sem.
13F. oldal Java programozs (1.3. verzi)
,5.;. Sltalnos met'd4sok de"inilsa #s hasznlata
,em )sa" a t*puso"at, a metduso"at is paramterezhetj+". & stati"us s nem stati"us
metduso"na" pp Qg', ahog' a "onstru"toro"na", lehet t*pus paramter+".
& metduso" t*pus paramter de"larlsna" szintaPisa megeg'ezi" az osztl'o"nl
hasznlt szintaPissal. & t*pusparamter listt a "ere" zrjele" "$z "ell hel'ezni, mg a
metdus visszatrsi rt"ne" t*pusa el. Gldul a "$vet"ez g'!jtemn' osztl' met(
dus #elt$lt eg' ZR super T[ t*pusQ listt T t*pusQ obje"tumo""al.
static <T> void fill(List<? super T> list, T obj)
&z ltalnos metduso" lehetv teszi" a t*pus paramtere" hasznlatt, hog' eg'rtel(
m!v tehesse a t*puso" "ap)solatt eg' vag' t$bb paramter esetn, eg' metdus, vag'
anna" visszatrsi rt"e szmra (vag' mind"ettne"). &z ltalnos metduso" t*pus
paramterei ltalban osztl'tl #+ggetlene" vag' inter#sz(szint! t*pus paramtere". &
Collections osztl' algoritmusaina" de#in*)ija so" lehetsget "*nl az ltalnos met(
duso" hasznlatra.
&z eg'etlen "+l$nbsg az ltalnos t*puso" s ltalnos metduso" "$z$tt az, hog' az l(
talnos metduso"at hag'omn'os metdus"nt h*vju" meg. & t*pus paramtere"et a
h*vs #+ggvn'ben llap*tju" meg, ahog' a /ill metdus albbi h*vsnl is.
public static void main(String[] args) {
List<String> list = new ArrayList<String>(10);
for (int i = 0; i < 10; i++) {
list.add("");
}
String filler = args[0];
Collections.fill(list, filler);
...
}
,5.5. Sltalnos t(&4sok hasznlata az rkl#s!en
& #ejezetben mr "orbban trg'alt Cat osztl'na" te"ints+" a getLitter nev! metdu(
st, mel'ne" visszatrsi rt"e eg' Cat obje"tumo"bl ll g'!jtemn'.
public Collection getLitter(int size) {
ArrayList litter = new ArrayList(size);
for (int i = 0; i < size; i++) {
litter.add(i, new Cat());
return litter;
}
}
4eg#ig'elhet, hog' a Collection obje"tum hatrozatlan t*pusQ. a g'!jtemn'ben lv
obje"tumo" t*pusa nem meghatrozott. &zonos hel'zet llt #enn minden tovbbi met(
dusnl is, mel'e" obje"tumot adna" vissza, mg mieltt az ltalnos t*puso" elrhetv
vlta" volna a Java 0.<(s verziban.
8eg'+" #el, hog' *run" eg' programot Cats nven, mel' ezt a visszatrsi rt"et adja t
eg' g'!jtemn'ne", mel'ne" t*pusa "i#ejezetten Cat "ell, hog' leg'en.
10.Oltalnos programozs 13?. oldal
public static void main(String[] args) {
Collection<Cat> litter = myCat.getLitter(3);
for (Cat c : litter) {
System.out.println(c.getColor());
}
4i"or le#ord*tja a Cats.java llomn't, a "$vet"ez #ig'elmeztetst "apja.
A Cats.java ellenrizetlen vagy nem biztonsgos muveleteket
hasznl. Fordtsa le jra a -Xlint:unchecked kapcsolval a
rszletek megtekintshez.
&z `lint:chec!ed "ap)sol hasznlata in#orm)ig'!jtshez.
% javac -Xlint:unchecked Cats.java
Cats.java:5: warning: [unchecked] unchecked conversion
found : java.util.Collection
required: java.util.Collection<Cat>
Collection<Cat> litter = myCat.getLitter(3);
^
Msszegezve, ha a Cat(et ol'an #ord*tval #ord*tju" Qjra, mel' tmogatja a t*pus paramte(
re"et, a "$vet"ez #ig'elmeztetst "apju".
% javac -Xlint:unchecked Cat.java
Cat.java:19: warning: [unchecked] unchecked call to
add(int,E) as a member of the raw type java.util.ArrayList
litter.add(i, new Cat());
^
Babr a "d hibtlan, ez a #ig'elmeztets mutatja, hog' a #ord*t nem tudja biztos*tani a
m!velet pontossgt, mi"or spe)ilis t*pusQ g'!jtemn'e"et hasznlun". &mi"or 5ellen(
rizetlen6 #ig'elmeztetst "ap, ellenriznie "ell, hog' a m!velet, mel' a #ig'elmeztetst
generlta, valban meg#elel(e.
Hg+l te"ints+n" t eg' listt a teljes 7ta)"2 osztl'rl.
public class Stack2<T> i%ple%ents Cloneable {
private ArrayList<T> items;
private int top=0;
public Stack2() {
items = new ArrayList<T>();
}
public void push(T item) {
items.add(item);
top++;
}
public T pop() {
if (items.size() == 0)
throw new EmptyStackException();
T obj = items.get(--top);
return obj;
}
public boolean isEmpty() {
if (items.size() == 0)
return true;
else
return false;
}
1><. oldal Java programozs (1.3. verzi)
protected Stack2<T> clone() {
try {
Stack2<T> s = (Stack2<T>)super.clone();
s.items = (ArrayList<T>)items.clone();
return s; // Return the clone
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
}
4eg#ig'elhetj+", hog' a clone metdus a clone metduso"at az sosztl'bl s a tartal(
mazott listjbl h*vja meg. & clone metduso" $r$"ld metduso", mert mg az lta(
lnos t*puso" elrhetsge eltt de#inilva lette".
4i"or le#ord*tja a Stac!I.java llomn't, a "$vet"ez #ig'elmeztetst "apja.
% javac -Xlint:unchecked Stack2.java
Stack2.java:32: warning: [unchecked] unchecked cast
found : java.lang.Object
required: Stack2<T>
Stack2<T> s = (Stack2<T>)super.clone();
^
Stack2.java:33: warning: [unchecked] unchecked cast
found : java.lang.Object
required: java.util.ArrayList<T>
s.items = (ArrayList<T>)items.clone();
^
2 warnings
-z a #ig'elmeztets mutatja, hog' a #ord*t nem "pes biztos*tani az eljrs "i#ogstalan
m!"$dst. 4s szval, mivel a clone metdust Qg' de#inilt", hog' eg' C8ject osztl'(
beli obje"tumot adjon visszatrsi rt"ne", ezrt a #ord*t nem tudja biztos*tani, hog' a
g'!jtemn' visszatrsi rt"e Stac!IZT[ leg'en. &zonban a clone metdus #eletti meg(
llapods szerint a m!velet engedl'ezett, habr 5ellenrizetlen6 #ig'elmeztetst o"oz.
Kengeteg apr dologra "ell #ig'elni az ltalnos t*puso" hasznlatnl az $r$"lsben.
,5.B. -llenrz k#rd#sek
4i"or rdemes t*pus paramtert al"almazniA
4i az eln'e a t*pus paramter al"almazsna"A
1E.Jnter#sze" 1>1. oldal
,B.=nter"#szek
&z inter#sz ol'an visel"edse"et de#inil, amel'et az osztl'hierar)hia tetszleges oszt(
l'val megvals*thatun". -g' inter#sz metduso" halmazt de#inilja, de nem vals*tja
meg azo"at. -g' "on"rt osztl' megvals*tja az inter#szt, ha az $sszes metdust meg(
vals*tja.
1e"in(.i'. &z inter#sz implement)i nl"+li metduso" nvvel elltott halmaza.
4ivel az inter#sz a megvals*ts nl"+li, vag'is absztra"t metduso" listja, alig "+l$n(
b$zi" az absztra"t osztl'tl. & "+l$nbsge".
&z inter#sz eg'etlen metdust sem implementlhat, az absztra"t osztl' igen.
&z osztl' megvals*that t$bb inter#szt, de )sa" eg' sosztl'a lehet.
&z inter#sz nem rsze az osztl'hierar)hina". -g'mstl q#+ggetlenq osztl'o" is
megvals*thatj" ug'anazt az inter#szt.
-bben a #ejezetben eg' ol'an pldaprogramot #ogju" hasznlni, ami a 8ervezsi mint"
('esign -atterns) "$z$tt szo"s emlegetni meg#ig'el (C8server) nven. -z az osztl'
megengedi ms osztl'o"na", hog' regisztrlj" magu"at bizon'os adatai vltozsna"
#ig'elsre. & Stoc!,pplet osztl' #og megvals*tani eg' ol'an metdust, amivel regiszt(
rlni tud a vltozs #ig'elshez.
public class StockMonitor {
public void watchStock(StockWatcher watcher,
TickerSymbol tickerSymbol,
BigDecimal delta) {
...
}
}
&z els paramter eg' Stoc!:atcher obje"tum. & Stoc!:atcher anna" az inter#szne" a
neve, amel'et hamarosan ltni #ogun". &z inter#sz eg'etlen valueChanged nev! met(
dust de#inil. -g' obje"tum a""or tudja magt meg#ig'el"nt regisztrlni, ha az oszt(
l'a megvals*tja ezt az inter#szt. &mi"or a Stoc!Monitor osztl' rz"eli a vltozst,
megh*vja a #ig'el valueChanged metdust.
,B.,. =nter"#sz de"inilsa
& "$vet"ez bra bemutatja az inter#sz de#in*)i "t $sszetevjt. az inter#sz de"lar)i(
t s a t$rzset.
& Stoc!:atcher inter#sz de"larlja, de nem implementlja a valueChanged metdust.
&z inter#szt megvals*t osztl'o" #ogj" a metdust implementlni.
1>2. oldal Java programozs (1.3. verzi)
=nter"#sz deklar.i'
& "$vet"ez bra az inter#sz de"lar)i minden rszt bemutatja.
&z inter#sz de"lar)iban "t elem "$telez. az inter/ace "ul)ssz s az inter#sz neve.
-z utn szerepelhetne" a sz+linter#sze".
Az inter"#sz trzs
&z inter#sz t$rzs metdus de"lar)i"at tartalmaz j`j(el lezrva. 4inden de"larlt met(
dus rtelemszer!en publi"us s absztra"t (br magu" a "ul)sszava" nem *rhat" "i).
&z inter#sz tartalmazhat "onstans de"lar)it is. 4inden "onstans rtelemszer!en pub(
li"us, stati"us s vgleges. (& "ul)sszava" itt sem *rhat" "i.) ,em hasznlhat" a tranB
sient, volatile, synchroni"ed, private s protected mdos*t" sem.
,B.2. =nter"#szek im&lementlsa
-g' inter#sz visel"edsi #orm"at de#inil. &z inter#szt megvals*t osztl' de"lar)i(
jban szerepel az implements zrad". &z osztl' a"r eg' vag' t$bb inter#szt is megva(
ls*that. (&z inter#sze" "$z$tt megengedett a t$bbsz$r$s $r$"lds.)
)onven.i'. az implements zrad" az e*tends zrad"ot "$veti, ha mind"ett van.
& "$vet"ez plda applet implementlja a Stoc!:atcher inter#szt.
1E.Jnter#sze" 1>3. oldal
public class StockApplet extends Applet
i%ple%ents StockWatcher {
public void valueChanged(TickerSymbol tickerSymbol,
BigDecimal newValue) {
switch (tickerSymbol) {
case SUNW:
...
brea;
case ORCL:
...
brea;
case CSCO:
...
brea;
default:
// handle unknown stocks
...
brea;
}
}
}
&mi"or eg' osztl' megvals*t eg' inter#szt, a""or alapveten al*r eg' szerzdst. &z
osztl'na" implementlni "ell az inter#szben s sz+linter#szeiben de"larlt $sszes
metdust, vag' az osztl't absztra"t"nt "ell de"larlni. (&z il'en absztra"t osztl'o"(
na" )sa" a""or lehet nem absztra"t eg' leszrmazottja, ha az ezen az $r$"lsi szinten
meg nem vals*tott metduso"at mr marad"talanul megvals*tja.)
& Stoc!,pplet megvals*tja a Stoc!:atcher inter#szt, azaz szolgltats"nt n'Qjtja a
valueChanged metdust.
,B.7. Az interface hasznlata t(&4sk#nt
&mi"or Qj inter#szt de#inilun", re#eren)it de#inilun" eg' Qj adatt*pushoz. &z inter(
#sz nevt a"rhol lehet hasznlni, ahol eg'b adatt*pus is el#ordulhat.
public class StockMonitor {
public void watchStock(StockWatcher watcher,
TickerSymbol tickerSymbol,
BigDecimal delta) {
...
}
}
,B.;. -llenrz k#rd#sek
=gaz vagy hamis8 =ndokol+a!
&z inter#sz )sa" metdust tartalmazhat, vltozt nem.
4inden osztl' leg#eljebb eg' inter#szt implementlhat.
&z inter#sz $sszes vltozja impli)it static.
&z inter#szne" nin)s "onstru"tora.
1>>. oldal Java programozs (1.3. verzi)
&z inter#sz $sszes metdusa impli)it pu8lic.
Ba eg' osztl' megvals*t eg' inter#szt, azt a uses "ul)sszval "ell jelezni.
&z inter#sz $sszes metdusa impli)it a8stract.
&z inter#sz $sszes vltozja impli)it pu8lic.
&z inter#szt megvals*t osztl'na" minden, az inter#szben de"larlt metdust
implementlni "ell.
9tre lehet hozni inter#sz(re#eren)it.
4inden inter#szne" van se.
&z inter#sz $sszes vltozja impli)it /inal.
4inden inter#szt legalbb eg' osztl'ban meg "ell vals*tani.
&z inter#sz metdusaina" nin)s t$rzse.
&z inter#sz s az absztra"t osztl' "$z$tt nin)s ln'eges "+l$nbsg.
1=.;somago" 1>0. oldal
,C.:somagok
& t*puso" "$nn'ebb megtallshoz s hasznlathoz, nv+t"$zse" el"er+lshez s az
elrs szabl'ozshoz a programoz" eg'be )somagolhatj" az $sszetartoz t*pusai"at
)somago"".
1e"in(.i'. & )somag $sszetartoz t*puso" g'!jtemn'e.
& Java plat#orm t*pusai #un")i" szerint "+l$nb$z )somago"ba vanna" szervezve. az
alapvet osztl'o" a java.lang )somagban, az J/D osztl'o" a java.io(ban, s *g' tovbb.
-zen "*v+l a sajt t*pusain"at is tehetj+" )somago"ba.
& "$vet"ez osztl'o"at megvizsglva ltszi", hog' "$z$s )somagba rdemes "et sorol(
ni, mivel gra#i"us obje"tumo" )soportjba tartozna" a "$r$", tglalapo", vonala" s
ponto". Ba *run" eg' 'ragga8le inter#szt, az azt megvals*t osztl'o" lehetv teszi"
a vonszolst is.
//in the Graphic.java file
public abstract class Graphic {
. . .
}
//in the Circle.java file
public class Circle extends Graphic i%ple%ents Draggable {
. . .
}
//in the Rectangle.java file
public class Rectangle extends Graphic i%ple%ents Draggable {
. . .
}
//in the Draggable.java file
public interface Draggable {
. . .
}
& "$vet"ez o"o" miatt rdemes az osztl'o"at s inter#sze"et "$z$s )somagba hel'ez(
ni.
4s programoz" szmra is ltszi", hog' "ap)sold t*puso"rl van sz.
4s programoz" is lthatj", hol "ell "eresni a gra#i"hoz "ap)sold osztl'o"at.
& t*pusain" nevei nem "er+lne" $ssze+t"$zsbe ms )somago" neveivel, mert a )so(
mago" $nll nvtere"et hozna" ltre.
& t*pusain" "orltlanul lthatj" eg'mst, de eg'b t*puso" )sa" "orltozottan #r(
hetne" a t*puso"hoz.
,C.,. :somag l#trehozsa
& )somag ltrehozshoz mind$ssze bele "ell tenni eg' t*pust (osztl', inter#sz). & )so(
mag megnevezst a #orrsllomn' elejn, a t*pusde#in*)i" eltt "ell megtenni.
1>E. oldal Java programozs (1.3. verzi)
pacage graphics;
public class Circle extends Graphic i%ple%ents Draggable {
. . .
}
-z utn a graphics )somag $sszes #orrs"dja elejn ug'anezt a )somagmegjel$lst "ell
al"almaznun", hog' "$z$s )somagba "er+ljene".
pacage graphics;
public class Rectangle extends Graphic i%ple%ents Draggable {
. . .
}
Ba nem al"almazun" )somagmegjel$lst, a""or az osztl'(o") eg' Qg'nevezett alapr(
telmezett nv nl"+li )somagba "er+lne".
,C.2. -gy .somag elnevez#se
&z egsz vilgon *rna" a programoz" a Java programn'elvhez osztl'o"at, inter#sze(
"et, "ul)sszava"at s megjeg'zse"et, s valsz*n!leg "t programoz ug'anazt a nevet
"t "+l$nb$z #eladatQ osztl'nl #ogja hasznlni. Haljban, az elz plda esetn, ami(
"or de#inilun" eg' Sectangle osztl't, a""or a Sectangle osztl' mr benne van a jaB
va.a)t )somagban. & #ord*t mgis engedl'ezi "t osztl'na" ug'anazt a nevet. 4irtA
4ert azo" "+l$nb$z )somago"ban vanna", s mindeg'i" osztl'na" a teljes neve mag(
ba #oglalja a )somag nevt. 8eht a graphics )somagban lev Sectangle osztl' teljes
neve graphics.Sectangle, s a java.a)t )somagban lev Sectangle osztl' teljes neve
java.a)t.Sectangle. -z rendszerint )sa" a""or m!"$di" jl, hog'ha "t eg'mstl #+g(
getlen programoz nem ug'anazt a nevet adja a )somago"na". 4ivel hr*that el ez a
problmaA 4egllapodssal.
Meglla&ods. 2ord*tott domain (tartomn') nevet hasznlna" a )somago" nevne",
il'en mdon. com.company.pac!age. ,v+t"$zs el#ordulhat eg'etlen )gen bel+l is,
amit a )gne" le "ell "ezelni eg' bels megllapodssal. 9ehet, hog' emiatt tartalmazni
#og tartomn' vag' proje"t neve"et a trsasg neve utn, mint pldul com.company.B
region.pac!age.
,C.7. :somag tagok hasznlata
;sa" a publi"us )somag tago" rhete" el a )somagon "*v+l. &hhoz hog' hasznljun"
eg' publi"us )somag tagot a )somagjn "*v+lrl, a "$vet"ez" valamel'i"t "ell tenn+n"
(vag' a"r t$bbet).
& teljes (vag' ms nven mins*tett) nevn "ereszt+l "ell hivat"oznun" r
Jmportlju" a )somag tagot
Jmportlju" a tag teljes )somagjt
4indeg'i"et "+l$nb$z szitu)i"ban al"almazhatju", amel'e"et a "$vet"ez rsze"ben
tisztzun".
1=.;somago" 1>=. oldal
N#v szerinti hivatkozs egy .somag tagra
-ddig a pld"ban a t*puso"ra az eg'szer! nev+"$n "ereszt+l hivat"oztun", mint pld(
ul Sectangle. &""or hasznlhatju" eg' )somag tagjna" az eg'szer! nevt, ha az osztl'
ug'anabban a )somagban van, mint a tag, vag' ha a tag importlva van.
Ba megprblun" hasznlni eg' tagot eg' msi" )somagbl, s a )somagot nem impor(
tltu", a""or a tag teljes nevt hasznlnun" "ell. & Sectangle osztl' teljes neve.
graphics.Rectangle
& "$vet"ez"ppen hasznlhatju" a mins*tett nevet, hog' ltrehozzu" a graphics.SecB
tangle osztl' eg' pldn't.
graphics.Rectangle myRect = new graphics.Rectangle();
Ba mins*tett neve"et hasznlun", valsz*n!leg bosszant lesz, hog' Qjra s Qjra be "ell
gpelni a graphics.Sectangle(t. -zen "*v+l rendezetlen s nehezen olvashat programot
"apun". Jl'en esete"ben in"bb importlju" a tagot.
-gy .somag tag im&ortlsa
&hhoz hog' importlhassu" a megadott tagot az a"tulis #jlban, a #jl elejn "i "ell adni
az import utas*tst az osztl' vag' inter#sz de#inilsa eltt, de a pac!age utas*ts utn,
ha van ol'an. gg' tudju" importlni a Circle osztl't a graphics )somagbl, hog'.
i%port graphics.Circle;
4ost mr tudun" hivat"ozni a Circle osztl'ra az eg'szer! nevvel.
Circle myCircle = new Circle();
-z a szemllet a""or m!"$di" jl, ha )sa" nhn' tagot hasznlun" a graphics )somag(
bl. :e ha so" t*pust hasznlju" eg' )somagna", a""or in"bb importlju" az egsz
)somagot.
-gy tel+es .somag im&ortlsa
&hhoz hog' eg' )somagna" az $sszes t*pust importlju", az import utas*tst a )sillag
(U) hel'ettes*t "ara"terrel "ell hasznlnun".
i%port graphics.*;
4ost mr hivat"ozhatun" brmel'i" osztl'ra vag' inter#szre a graphics )somagbl az
eg'szer! r$vid nevvel.
Circle myCircle = new Circle();
Rectangle myRectangle = new Rectangle();
&z import utas*tsban a )sillag "ara"terrel az $sszes osztl't megadju" a )somagna".
,em hasznlhatun" ol'an meg#eleltetst, amel' eg' )somagban eg' osztl' rszhalma(
zra utal. Gldul hel'telen meg#eleltets az, hog' a graphics )somagbl az k,k bet!vel
"ezdd $sszes osztl' importlju".
i%port graphics.A*;
-z az utas*ts #ord*tsi hibt generl. &z import utas*tssal, eg' )somagna" eg'etlen tag(
jt vag' egsz )somagot importlhatun".
Lg'an*g' nem megengedett, hog' eg'szerre t$bb )somagot importljun", pl..
i%port graphics.*.*;
1>F. oldal Java programozs (1.3. verzi)
Meg+egyz#s. Ba "evesebb tagot a"arun" importlni, a""or megengedett, hog' )sa" eg'
osztl't, s anna" a bels osztl'ait importlju". Gldul, ha a graphics.Sectangle osz(
tl'na" a bels osztl'ait a"arju" hasznlni, mint Sectangle.'ou8le:ide s SectangB
le.SYuare, a "$vet"ez "pen importlhatju".
i%port graphics.Rectangle.*;
1$nn'*ts+l a Java #ord*t automati"usan importl hrom teljes )somagot.
& nvtelen )somagot (ha nem hozun" ltre )somagot, vag'is nem hasznlju" a pacB
!age utas*tst)
&z alaprtelmezs szerinti a"tulis )somagot (ha ltrehozun" )somagot)
& java.lang )somagot
Meg+egyz#s. & )somago" nem hierar)hi"usa". Ba pldul importlju" a java.util.A(ot, nem hivat"ozha(
tun" a -attern osztl'ra. 4inden esetben Qg' "ell hivat"oznun", hog' java.util.rege*.-attern@ vag' ha
importlju" a java.util.rege*.A(ot, a""or )sa" eg'szer!en -attern.
N#v>tkz#s megsz>ntet#se
Ba eg' tag ug'anazon a nven megtallhat eg' msi" )somagban, s mind"t )somag
importlva van, a""or a tagra teljes nevvel "ell hivat"oznun". Gldul a Sectangle osz(
tl' de#inilva van a graphics )somagban, s a java.a)t )somagban is. Ba a graphics s
java.a)t is importlva van, a""or a "$vet"ez nem eg'rtelm!.
Rectangle rect;
&z il'en esete"ben a mins*tett nevet "ell hasznlnun", hog' pontosan meg tudju" adni,
mel'i" Sectangle osztl't a"arju" hasznlni.
graphics.Rectangle rect;
,C.;. %orrs #s osztly "+lok menedzsel#se
& Java "$rn'ezet so" megvals*tsnl szm*t a hierar)hi"us #jlrendszer a #orrs s
osztl' llomn'o" menedzselshez, br maga a Java nem ign'li ezt. & stratgia a "$(
vet"ez.
& #orrs"d eg' osztl't, inter#szt vag' #elsorolt t*pust tartalmaz, amel'ne" neve a t*pus
eg'szer! neve s a "iterjesztse. .java. & #orrs#jlt eg' "$n'vtrba tessz+", amel'ne" a
neve "i#ejezi a )somag nevt, amel'i"hez a t*pus tartozi". Gldul, a #orrs"dban lv
Sectangle osztl' adja a #jl nevt, Sectangle.java, s a #jl eg' graphics nev! "$n'vtr(
ban lesz. & graphics "$n'vtr brhol lehet a #jl rendszeren. & lenti bra mutatja, ho(
g'an m!"$di".
& )somag tag teljes neve s a #jl elrsi Qtja hasonl.
Dsztl' nv graphics.Sectangle
2jl elrsi Qt graphics0Sectangle.java
1=.;somago" 1>?. oldal
-ml"ezz+n" vissza, hog' a megllapods rtelmben a )ge" #ord*tott internet domn
nevet hasznlna" a )somago" elnevezsre. & pldban a )g domn neve ho8no8.com,
ezrt mindeg'i" )somagna" a nevt com.ho8no8 #ogja megelzni. & )somag nvne"
mindeg'i" $sszetevje megeg'ezi" eg'(eg' al"$n'vtrral. Wg' ha Bobnob(na" van eg'
graphics )somagja, amel' tartalmazza a Sectangle.java #orrs#jlt, a""or eze" al"$n'v(
tra" sorozatban troldna".
4i"or le#ord*tju" a #orrsllomn't, a #ord*t ltrehoz "+l$nb$z "imeneti llomn't
minden eg'es de#inilt osztl'na" s inter#szne". & "imeneti llomn'na" az alap neve
az osztl' vag' inter#sz neve s a "iterjesztse. .class, ahog'an a "$vet"ez bra is mu(
tatja.
& .class #jlna" ug'anQg', mint eg' .java #jlna" is "ell a )somago"at "i#ejez "$n'vtr(
szer"ezet. &zonban nem lehet ug'anabban a "$n'vtrban, mint a #orrs. 1+l$n("+l$n
"$n'vtrba "ell rendezni a #orrst s az osztl't.

Ba ez alapjn )sinlju", oda tudju" adni az osztl' "$n'vtra"at ms programoz"na"
anl"+l, hog' megmutatnn" a #orrsun"at. -""or hasznlhatju" a Java #ord*tna" a Xd
op)ijt az osztl' #jlo" megadshoz, ehhez hasonlan.
javac -d classes sources\com\hobnob\graphics\Rectangle.java
10<. oldal Java programozs (1.3. verzi)
& #orrs s osztl' llomn'o" "ezelshez erre a mdszerre van sz+"sg+n", *g' a #ord*(
t s a Java virtulis gp (JH4) megtallja az $sszes t*pust, amit a programun" hasznl.
4i"or a #ord*t $sszea"ad eg' Qj osztll'al a program #ord*ts"or, meg #ogja tallni az
osztl't, Qg' hog' #eloldja a neve"et, t*pusvizsglatot hajt vgre s *g' tovbb. Basonl(
an, ami"or a JH4 $sszea"ad eg' Qj osztll'al program #uts"or, meg #ogja tallni az osz(
tl'hoz tartoz metduso"at. & #ord*t s a JH4 az osztl'o"at a class pathXban list(
zott "$n'vtra"ban s J&K #jlo"ban "eresi.
1e"in(.i'. & class path, "$n'vtra" vag' J&K #jlo" eg' rendezett listja, amel'ben
class #jlo"at "ereshet+n". 2izi"ailag ez eg' ;9&77G&8B nev! "$rn'ezeti vltozt je(
lent.
4indeg'i" "$n'vtr listzva van a class path(ban eg' leg#els szinten lv "$n'vtrban,
amel'ben )somag "$n'vtra" lthat". & leg#els szint! "$n'vtrtl a #ord*t s a JH4
$sszell*tja az elrsi Qtna" a marad"t, az alaphoz a )somagot s az osztl' nvnl az
osztl't. & #ord*t s a JH4 is $sszell*tja az elrsi Qt nevet a .class #jlhoz a )somag tel(
jes nevvel.
&laprtelmezs"nt a #ord*t s a JH4 az a"tulis "$n'vtrban s a J&K #jlban "eres,
amel' magba #oglalja a Java "$rn'ezeti class #jlo"at. 4s szval, az a"tulis "$n'vtr
s a Java "$rn'ezeti class #jlo" automati"usan benne vanna" a class path(ban. 9eg(
t$bbsz$r az osztl'o"at megtallj" ezen a "t hel'en. Wg' nem "ell aggdnun" az oszt(
l'ain" elrsi Qtja miatt. ,hn' esetben azonban lehet, hog' meg "ell adni osztl'ain"
elrsi Qtjt.
,C.5. -llenrz k#rd#sek
4i a hasonlsg az al"$n'vtra" s a )somago" "$z$ttA
Bog'an "ell eg' Java osztl't eg' adott )somagba tenniA
4it jelent a pac!age dire"t*va s mi a paramtereA
Bog'an lehet eg' )somagban lev osztl't elrniA
4it eg'szer!s*t az import dire"t*vaA
Bog'an leli #el a virtulis gp a class #jlo"atA
4i a CL,SS-,T9 "$rn'ezeti vltozA
=gaz vagy hamis8 =ndokol+a!
1+l$nb$z )somago"ban lehetne" azonos nev! t*puso".
;somagot ltrehozni a create pac!age utas*tssal lehet.
-g' )somag t*pusait a uses "ul)ssz seg*tsgvel lehet elrhetv tenni.
Ba eg' #orrsllomn'ban nem nevez+n" meg tartalmaz )somagot, a""or a #orrs(
llomn'ban szerepl osztl'o" semel'i" )somagna" nem leszne" rszei.
Ba "t )somagban van azonos nev! t*pus, a""or nem importlhatju" eg'szerre
mind"ettt.
& pac!age utas*ts )sa" a #orrsllomn' legels utas*tsa lehet.
& )somag "izrlag logi"ai szint! )soportos*ts.
1=.;somago" 101. oldal
-g' )somag )sa" publi"us osztl'o"at tartalmazhat.
-g' #ord*tsi eg'sgben )sa" eg' osztl't lehet de"larlni.
-lnevezsi "onven)i szerint a )somag neve nag'bet!vel "ezddi", a t$bbi "i)si.
-g' #ord*tsi eg'sg "$telezen tartalmaz pac!age de"lar)it.
-g' #ord*tsi eg'sg "$telezen tartalmaz import de"lar)it.
Ba az osztl' de"lar)ijnl nem adun" meg lthatsgot, a""or arra a )somag ms
osztl'aibl lehet hivat"ozni.
Melyik a helyes sorrend egy "orrsllomny eset#n8
pac!age@ import@ class
class@ import@ pac!age
import@ pac!age@ class
pac!age@ class@ import
102. oldal Java programozs (1.3. verzi)
,N.)iv#telkezel#s
& !ivEtel a 5"ivteles esemn'6 "i#ejezs r$vid*tse.
1e"in(.i'. & "ivtel eg' ol'an esemn', amel' a program vgrehajtsa"or "elet"ezi",
megsza"*tva az utas*tso" vgrehajtsna" normlis #ol'amatt.
Ba eg' metdusban hiba "elet"ezi", a metdus eg' obje"tumot hoz ltre, mel'et tad a
#uttatsi "$rn'ezetne". &z obje"tum X mel'et "ivtel obje"tumna" nevezne" X tartal(
mazza az in#orm)it a hibrl, anna" t*pusrl s a program llapotrl, ami"or a hiba
ltrej$tt. 1ivtel obje"tum ltrehozst s #uttatsi rendszer ltal t$rtn "ezelst "iv(
teldobsna" h*vj".
4iutn eg' metdus eldob eg' "ivtelt, a #uttat "$rn'ezet megprbl a "ezelsre tall(
ni valamit. & lehetsges dolgo", mel'e" a "ivtelt "ezeli" a megh*vott metduso" rende(
zett listja abban a metdusban, ahol a hiba "elet"ezett. & metduso" listjt h*vsi ve(
remne" nevezz+".
& #uttat rendszer t"utatja a h*vsi vermet ol'an metdus utn, mel' tartalmaz "ivtel
"ezelsre al"almas "dblo""ot. -zt a blo""ot "ivtel"ezelne" nevezz+". & "eress ab(
ban a metdusban "ezddi", ahol a hiba generldott, majd a h*vsi verem metdusai(
na" #ord*tott sorrendjben #ol'tatdi". 4i"or eg' meg#elel "ezelt tall, a #uttat rend(
szer, tadja a "ivtelt a "ezelne". -g' "ivtel"ezel meg#elel, ha az eldobott "ivtel ob(
je"tum t*pusa megeg'ezi" azzal a t*pussal, mel'et a "ezel "ezelni tud. & "ivtel"ezel
"ivlasztst Qg' is nevezi", hog' el"apni a "ivtelt. Ba a #uttat"$rn'ezet a metduso"
t"utatsa utn sem tall meg#elel "ivtel"ezelt, mint ahog' a "$vet"ez bra mutatja,
a #uttat rendszer (s ez ltal a program) lell.
1F.1ivtel"ezels 103. oldal
Bib" "ezelsre hasznlt "ivtele"ne" van nhn' eln'e a hag'omn'os hiba"ezelsi
te)hni"""al szemben. (1sbb visszatr+n" a tmra.)
,N.,. )iv#telek elka&sa vagy tov!!enged#se
& Java #uttat rendszer meg"$veteli, hog' a metdus el"apja, vag' #elsorolja az $sszes
ellenrz$tt "ivtelt, mel'et a metdus eldobhat (ms"nt #ogalmazva a "ivtelt tovbb(
engedi). -lsz$r is te"ints+n" t nhn' "i#ejezst.
-lka&s /.at.h2
& metdus el"aphat eg' "ivtelt, ha rendel"ezi" il'en t*pusQ "ivtele" "ezeljvel.
*ov!!enged#s /throTs zrad#k2
& metdus a de"lar)ija thro)s zrad"ban *rja le, hog' mil'en "ivtele"et dobhat.
-llenrztt kiv#telek
1t#ajta "ivtel ltezi". #utsi idben "elet"ezett "ivtel s nem #utsi idben "elet"ezett
"ivtel. 2utsi idej! "ivtel a Java #uttatrendszerben "elet"ezi". aritmeti"us "ivtele"
(pldul nullval val oszts), re#eren)ival "ap)solatos "ivtele" (mint pldul eg' ob(
je"tum tagjaihoz val hozz#rs null hivat"ozssal) s indePelssel "ap)solatos "ivte(
le" (mint pldul eg' t$mb elemeihez val hozz#rs ol'an indePszel, mel' tQl nag'
vag' tQl "i)si). -g' metdusna" nem "$telez el*rnia #utsi idej! "ivtele"et, de ajn(
lott.
,em #utsi idben "elet"ezett "ivtele" ol'an "ivtele", mel'e" a Java #utsi rendszeren
"*v+l "elet"ezne". Gldul. "ivtele", mel'e" J/D sorn "elet"ezne". & #ord*t biztos*tja,
hog' a nem #utsi idben "elet"ezett "ivtele"et el"apj", vag' tovbbengedj"` ezrt
eze"et ellenrz$tt "ivtele"ne" is nevezz+".
7o" programoz in"bb #utsi idben "elet"ezett "ivtele"et hasznl az ellenrz$tt "iv(
tele""el szemben, hog' ne "eljen el"apniu" vag' tovbbengedni+" "et. -z ltalban
nem ajnlott.
)iv#telekI melyeket a met'd4s eldo!hat
4inden a metdus ltal "$zvetlen+l eldobott "ivtel
4inden "$zvetetten eldobott "ivtel msi" metdus h*vsval, mel' "ivtelt dob.
10>. oldal Java programozs (1.3. verzi)
)iv#telek elka&sa #s kezel#se
-z a #ejezet bemutatja, hog'an "ell hasznlni a "ivtel"ezel hrom "omponenst X a
try, catch, s /inally blo""o"at X eg' "ivtel"ezel meg*rshoz. & #ejezet utols rsze
vgigmeg' eg' pldn, bemutatva, mi t$rtni" "+l$nb$z esete"ben.
& "$vet"ez plda a ListC/+um8ers osztl't de#inilja s implementlja. & ListC/+umB
8ers "onstru"tor eg' =ector obje"tumot hoz ltre, mel' t*z .nteger elemet tartalmaz a
nulltl "ilen)ig terjed indeP rt"e"hez. & ListC/+um8ers osztl' eg' )riteList met(
dust is de#inil, mel' a szmo" listjt "i*rja eg' sz$veg#jlba, mel'ne" neve Cut1ile.t*t.
& plda program a java.io )somagban de#inilt "imeneti osztl'o"at hasznlja, mel'e"(
rl rszletesebben "sbb lesz sz.
i%port java.io.*;
i%port java.util.Vector;
public class ListOfNumbers {
private Vector vector;
private static final int SIZE = 10;
public ListOfNumbers () {
vector = new Vector(SIZE);
for (int i = 0; i < SIZE; i++) {
vector.addElement(new Integer(i));
}
}
public void writeList() {
PrintWriter out = new PrintWriter(
new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " +
vector.elementAt(i));
}
out.close();
}
}
&z els vastag bet!s sor eg' "onstru"tor h*vsa. & "onstru"tor eg' "imeneti #ol'amot
ini)ializl. Ba a #jlt nem lehet megn'itni, a "onstru"tor .C&*ception(t dob. & msodi"
vastag bet!s sor a =ector osztl' element,t metdust h*vja meg, mel' eg' ,rray.nde*B
CutC/7ounds&*ception(t dob, ha az paramtereine" rt"e tQl "i)si ("isebb, mint
nulla), vag' tQl nag' (nag'obb, mint a vltoz" szma, mel'e"et a =ector tartalmaz). Ba
megprblju" le#ord*tani a ListC/+um8ers osztl't, a #ord*t eg' hiba+zenetet *r "i a 1iB
le:riter "onstru"tor ltal dobott "ivtelrl, de nem #og hiba+zenetet megjelen*teni az
element,t ltal dobott hibrl. -nne" o"a, hog' a "onstru"tor ltal dobott "ivtel, .CB
&*ception, ellenrz$tt "ivtel, m*g a msi", ,rray.nde*CutC/7unds&*ception, eg' #ut(
si idben "elet"ezett "ivtel. & Java programozsi n'elv )sa" az ellenrz$tt "ivtele" "e(
zelst "$veteli meg, teht a #elhasznl )sa" eg' hiba+zenetet #og "apni.
4ost, hog' megismer"ed+n" a ListC/+um8ers osztll'al s az abban eldobott "ivtele"(
"el, "szen llun" eg' "ivtel"ezel meg*rsra, mel' eze"et a hib"at el"apja, s "ezelni
tudja.
1F.1ivtel"ezels 100. oldal
A try !lokk
-g' "ivtel"ezel el"sz*tsne" els lpse, hog' elhatrolju" a "dot, ami hibt dobhat
a try blo""ban. & try blo"" ltalban *g' nz "i.
try {
code
}
catch and finally blocks ...
& plda"dban tallhat szegmens tartalmaz eg' vag' t$bb ol'an sort, amel' "ivtelt
dobhat. (& catch s a /inally blo""o"rl rszletes mag'arzatot a "$vet"ez rszben ta(
llhatun".)
&hhoz, hog' eg' "ivtel"ezelt "sz*ts+n" a ListC/+um8ers osztl' )riteList metdus(
hoz, a )riteList metdus "ivtel(dob rszeit el "ell hatrolnun" a try blo""al. -zt t$bb(
#le"ppen tehetj+" meg. & program"d azon sorait, mel'e"rl #elttelezz+", hog' "iv(
telt dobhatna", try blo""ba tessz+", s mindeg'i"nl gondos"odun" a "ivtele" "ezels(
rl. Hag' pedig betehetj+" az $sszes )riteList "dot eg' eg'szer! try blo""ba, s ehhez
hozz"ap)solhatun" t$bb#le "ivtel"ezelt. & "$vet"ez"ben lthatju", hog' az egsz
metdusra hasznlju" a try blo""ot, mivel a szban #org "d nag'on r$vid.
...
private Vector vector;
private static final int SIZE = 10;
...
PrintWriter out = null;
try {
System.out.println("Entered try statement");
out = new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " +
vector.elementAt(i));
}
} /// catch and finally statements ...
&menn'iben a "ivtel be"$vet"ezi" a try blo""on bel+l, a "ivtel le"ezelsre "er+l a "i(
vtel"ezel ltal. &hhoz, hog' a "ivtel"ezelst hozz tudju" "ap)solni a try blo""hoz,
utlag hasznlnun" "ell catch blo""ot is. & "$vet"ez rsz megmutatja, hog'an is "ell
ezt hasznlnun".
Meg+egyz#s. & "ivtel"ezelssel ismer"ed" esetn g'a"ori hiba, hog' )sa" a "ivtelt eldob #+ggvn'h*(
vst teszi" a try blo""ba. Irdemes ezen a pldn tgondolni, hog' ha nem si"er+lne az llomn' megn'i(
tsa, a""or semmi rtelme nem lenne a /or )i"lus le#utsna". & #enti megoldsnl ez nem is #og be"$vet(
"ezni, hiszen a "ivtel ltrej$tte"or a vezrls a teljes try blo""bl "ilp.
A catch !lokk
& try blo""hoz hozzilleszthetj+" a "ivtel"ezelst, amenn'iben eg' vag' t$bb catch
blo""ot hasznlun" "$zvetlen+l a try blo"" utn. 7emmil'en program"d nem lehet a
try blo"" vge s az els catch blo"" "$z$tt%
try {
...
} catch (ExceptionType name) {
...
} catch (ExceptionType name) {
...
} ...
10E. oldal Java programozs (1.3. verzi)
4inden catch blo"" eg' "ivtel"ezel, s azt a t*pusQ "ivtelt "ezeli, amil'et a paramter
tartalmaz. & paramter t*pusa (&*ceptionType) de"larlja a "ivtel t*pust, amit a "eze(
l le"ezel.
& catch blo"" tartalmazza azt a program"dot, amel' vgrehajtsra "er+l, ami"or a "i(
vtel"ezelt megh*vju". & #uttatrendszer megh*vja azt a "ivtel"ezelt, amel'i" esetn
az &*ceptionType meg#elel a dobott "ivtel t*pusna".
Jtt lthat "t "ivtel"ezel a )riteList metdushoz X az ellenrz$tt "ivtele" "t t*pus(
hoz, mel'e"et a try blo"" dobhat.
try {
...
} catch (FileNotFoundException e) {
System.err.println("FileNotFoundException: "+e.getMessage());
throw new SampleException(e);
} catch (IOException e) {
System.err.println("Caught IOException: "+e.getMessage());
}
4ind"t "ezel eg' hiba+zenetet *r "i. & msodi" "ezel semmi mst nem hajt vgre.
@rmil'en .C&*ception (J/D "ivtel) el"apsa esetn (amit az els "ezel nem "apott
el), megengedi a programna", hog' #ol'tassa a #uttatst.
&z els "ezel a "i*rand sz$vege" $sszeillesztse sorn eg' sajt de#inilt "ivtelt dob.
-bben a pldban a 1ile+ot1ound&*ception "ivtel ltrej$tte"or eg' sajt de#inilt "iv(
telt hoz ltre, amine" Sample&*ception a neve, s ezt dobja a program.
& "ivtel"ezel" t$bbet is tudna", mint hog' hiba+zenete"et *rna" "i, vag' pedig megl(
l*tj" a program #utst. Bibajav*tsra is "pese", amint a #elhasznl hoz eg' rossz d$n(
tst, vag' pedig a hib" tQlnne" a legmagasabb szint! "ezeln ln)olt "ivtele"et hasz(
nlva.
A finally !lokk
& "ivtel"ezel bell*tsna" utols lpse, hog' rendet teg'+n" magun" utn, mieltt
tadju" az irn'*tst a program "+l$nb$z rszeine". -zt a ta"ar*t program"dot a /inB
ally blo""ba "ell be*rnun". & /inally blo"" tetszlegesen hasznlhat. Dl'an me)haniz(
must n'Qjt, ami "i"+sz$b$li azo"at a #ig'elmetlensge"et, ami" a try blo""ban t$rtn(
te". & /inally blo""ot pldul arra hasznlhatju", hog' bezrju" a #jlo"at, amel'e"re se
a hiba nl"+li #uts, se a hiba dobsa esetn nem sz+"sgese" mr.
& )riteList metdus try blo""ja (amivel eddig dolgoztun") megn'itja a -rint:riter(t. &
)riteList metdusbl val "ilps eltt programna" be "ellene zrnia ezt a #ol'amatot.
-z #elvet eg' nmi"pp "ompli"lt problmt, mivel )riteList metdus try blo""ja a "$(
vet"ez hrom lehetsg "$z+l )sa" eg'#le"ppen tud "ilpni.
& ne) 1ile:riter hibt jelez s .C&*ception(t dob.
& vector.element,tDiF hibt jelez s ,rray.nde*CutC/7ounds&*ception(t dob.
4inden si"er+l s a try blo"" z$""enmentesen "ilp.
& #uttatrendszer mindig vgrehajtja azo"at az utas*tso"at, amel'e" a /inally blo""ban
vanna", #+ggetlen+l attl, hog' t$rtnt(e "ivtel dobsa, vag' nem. Wg' ez a legmeg#ele(
lbb hel', hog' "ita"ar*tsun" magun" utn.
& "$vet"ez /inally blo"" a )riteList metdust ta"ar*tja "i, s bezrja a -rint:riter(t.
1F.1ivtel"ezels 10=. oldal
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
}
& )riteList pldban, a /inally blo""ba val beavat"ozs nl"+l tudun" gondos"odni a
"ita"ar*tsrl. Gldul, a -rint:riter bezrst vgz program"dot a try blo"" vghez
tudju" illeszteni, tovbb az ,rray.nde*CutC/7ounds&*ception "ivtel("ezelh$z.
try {
...
out.close();
} catch (FileNotFoundException e) {
out.close();
System.err.println(
"Caught: FileNotFoundException: "+e.getMessage());
throw new RuntimeException(e);
} catch (IOException e) {
System.err.println("Caught IOException: " +
e.getMessage());
}
&zonban ez mgis lemsolja a "dot, *g' amenn'iben "sbb mdos*tju" a program"(
dot, nehz lesz olvasni benne, s a hib" "iterjedhetne". Gldul, ha a try blo""hoz eg'
ol'an program"ddal bv*tj+", ami eg' Qj t*pusQ "ivtelt dobhat, eml"ezn+n" "ell arra,
hog' bezrju" a -rint:riter(t az Qj "ivtel("ezelben.
Az sszeilleszt#s
&z elz rsze"ben volt arrl sz, hog'an p*ts+n" #el a ListC/+um8ers osztl'ban try,
catch s /inally blo""o"at a )riteList metdus szmra. & "$vet"ez"ben a #orrs"dot
nzz+" meg, vizsglva a vgeredmn't.
4indent eg'bevve, a )riteList metdus a "$vet"ez"pp nz "i.
public void writeList() {
PrintWriter out = null;
10F. oldal Java programozs (1.3. verzi)
try {
System.out.println("Entering try statement");
out =
new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++)
out.println("Value at: " + i + " = "
+ vector.elementAt(i));
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Caught " +
"ArrayIndexOutOfBoundsException: " +
e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " +
e.getMessage());
} finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
}
}
&hog' azt elze"ben eml*tett+", a metdusban a try szer"ezetne" hrom lehetsges "i(
menete lehet.
& "dun" hibs s "ivtelt dob. -z lehet eg' .C&*ception "ivtel, amit a 1ile:riter
o"oz vag' eg' ,rray.nde*CutC/7ounds&*ception "ivtel eg' rosszul megadott rt"
esetn a /or )i"lusban, esetleg eg' Suntime&*ception "ivtel brmil'en #utsi hiba
esetn.
4inden rendben, a vrt "imenetet "apju".
,zz+" meg, mi t$rtni" a )riteList metdusban ezen esete"ben.
)iv#tel trt#nik
7zmos o"a lehet anna", hog' a 1ile:riter hibs m!"$dst #og eredmn'ezni.
D"ozhatja a "onstru"tor (ha nem tudju" ltrehozni a #jlt, vag' nem tudun" bele*rni).
&mi"or a 1ile:riter az .C&*ception "ivtelt dobja, a program azonnal lell*tja a try
blo"" vgrehajtst. -ze" utn a rendszer a metdus elejtl indul, s megh*vja a meg#e(
lel "ivtel"ezelt. Babr a 1ile:riter "onstru"torna" nin)s meg#elel "ivtel"ezelje, a
rendszer megnzi a )riteList metdust.
& )riteList metdusna" "t "ivtel"ezelje van. eg'i" az .C&*ception, msi", pedig az
,rray.nde*CutC/7ounds&*ception.
& rendszer megnzi a )riteList "ivtel"ezelit, de )sa" a try blo"" utn. &z els "ivtel(
"ezel nem #oglal"ozi" a "on"rt "ivtel t*pussal, ezrt a rendszer automati"usan a m(
sodi" "ivtel"ezelt hasznlja (.C&*ception). -z be tudja azonos*tani a t*pust, enne"
"$sz$nheten a rendszer mr megtallja a meg#elel "ivtel"ezelt, *g' a catch blo""
vgrehajtdi".
4iutn a "ivtel"ezel le#utott, a rendszer a /inally blo""ra ugri", mel'ne" #utsa elin(
dul a "ivtele"et #ig'elmen "*v+l hag'va. 4iutn a /inally blo"" le#utott a rendszer nor(
mlis +temben #ut tovbb.
1F.1ivtel"ezels 10?. oldal
&z .C&*ception ltal dobott "imenet.
Entering try statement
Caught IOException: OutFile.txt
PrintWriter not open
A try !lokk normlis mkd#se
4inden, ami a try blo""on bel+l van, si"eresen le#ut s meg#elel "imenetet ad ered(
mn'"nt. ,em "apun" "ivtelt s a rendszer tovbblp a /inally blo""ra. & si"eressg
eredmn'e"ppen a -rint:riter megn'*li", majd ami"or a rendszer elri a /inally blo"(
"ot, bezrja. 4iutn a /inally blo"" le#utott, a rendszer normlis +temben #ut tovbb.
& "ivtele" nl"+li "imenet.
Entering try statement
Closing PrintWriter
Met'd4sok ltal do!ott kiv#telek
&z elze"ben lthattu", hog'an *rhatun" "ivtel"ezelt a ListC/+um8ers osztl'ban a
)riteList metdusna". Dl'"or ez meg#elel a m!"$dst illeten, de vanna" esete", ami(
"or jobb a verem"ezelt hasznlni. Gldul, ha a ListC/+um8ers osztl't eg' msi" osz(
tl' )somagja"nt hozun" ltre, ebben az esetben jobban tessz+", ha ms mdon "ezel(
j+" a "ivtelt.
@izon'os esete"ben sz+"sg lehet az eredeti )riteList metdus mdos*tsra, mel'ne"
hatsra mr a "*vnt m!"$dst "aphatju". &z eredeti )riteList metdus, ami nem #or(
dul le.
public void writeList() {
PrintWriter out =
new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " +
victor.elementAt(i));
}
out.close();
}
& )riterList metdus de"lar)ijban a thro)s "ul)ssz hozzadsval "t "ivtelt
adun" meg. & thro)s "ul)sszt eg' vesszvel elvlasztott lista "$vet a "ivtelosztl'o"(
"al.
& thro)s a metdus neve s a paramter lista utn ll, utna "$vet"ezi" a "ap)sos zr(
jelben a de#in*)i.
public void writeList() throws IOException,
ArrayIndexOutOfBoundsException {
&z ,rray.nde*CutC/7ounds&*ception #utsidej! "ivtel, nem "$telez le"ezelni, *g'
elegend az albbi #orma hasznlata.
public void writeList() throws )*+xception {
,N.2. )iv#telek do!sa
@rmel'i" #orrs"d tud "ivtelt dobni, leg'en az sajt "dun", eg' )somagbl szrma(
z, ms ltal *rt "d, brmi is anna" a "imenete, a thro)s minden esetben jelen van.
1E<. oldal Java programozs (1.3. verzi)
& Java plat#orm szmos osztl't n'Qjt a "ivtele" "ezelsre, mel'e" eg'tl eg'ig leszr(
mazottjai a Thro)a8le osztl'na". -ze" az osztl'o" lehetv teszi" a programo" sz(
mra, hog' meg"+l$nb$ztess" az eltr t*pusQ "ivtele"et, mel'e" a program #utsa
"$zben "elet"ezne".
7ajt magun" is ltrehozhatun" spe)ilis osztl'o"at a leend problm" reprezent)i(
jval. 2ejleszt"nt sajt magun"na" "ell ltrehoznun" az osztl't s elvgezni a sz+"s(
ges bell*tso"at.
,N.2., A throw hasznlata
& "ivtel dobsnl minden metdus a thro) "ul)sszt hasznlja, mel'ne" a "$vet"ez
#ormai "$vetelmn'ne" "ell, hog' meg#eleljen.
throw someThrowableObject;
&z albbi pop metdus eg' osztl' ltal ltrehozott "$z$s veremobje"tumbl j$n ltre. &
metdus eltvol*tja a verem #els re"eszt s az obje"tummal tr vissza.
public Object pop() throws EmptyStackException {
Object obj;
if (size == 0) {
throw new EmptyStackException();
}
obj = objectAt(SIZE - 1);
setObjectAt(SIZE - 1, null);
size--;
return obj;
}
& pop metdus megnzi, van(e valami a veremben. Ba a verem +res (mrete <), a""or a
pop ltal ltrej$n eg' Qj &mptyStac!&*ception obje"tumot (a java.util tagja) s eldobja
azt. -ze" az obje"tumo" a java.lang.Thro)a8le osztl' leszrmazottjai "ell, hog' leg'e(
ne", a #ejezet "sbbi rsze a "ivtel osztl'o" ltrehozsval #oglal"ozi".
& pop metdus de"lar)ija magban #oglalja a thro)s "ul)sszt. &z &mptyStac!&*B
ception "ivtelt a pop metdus nem "apja el, *g' a metdusna" a thro)s "ul)sszt "ell,
hog' hasznlja a de"lar)ihoz.
,N.7. -ldo!hat' osztlyok #s leszrmazottai
&z bra a Thro)a8le osztl' s anna" legjelentsebb szrmaztatott osztl'ait (osztl'hi(
erar)hijt) reprezentlja. &mint lthatju", a Thro)a8le osztl'na" "ett dire"t mdon
szrmaztatott utdja van. &rror s &*ception.
1F.1ivtel"ezels 1E1. oldal
'rror osztly
Ba a m!velet valamil'en o"bl "i#ol'lag nem hajthat vgre, si"ertelen a vgrehajts, a
Java virtulis gp &rror(t #og dobni. -g'szer! programo" nem "apna" el, illetve nem
dobna" &rror(t.
'(ception osztly
& legt$bb program el"ap s dob obje"tumo"at, mel'e" az &*ception osztl'bl szrmaz(
na". & legt$bb ltalun" meg*rt program el"ap s dob "ivtele"et (jelzi a hibt).
&z &*ception osztl'na" szmos leszrmazottja de#inilt a Java Glat#ormban, eze" a le(
szrmazotta" jelzi" a "+l$nb$z t*pusQ "ivtele"et. Gldul .llegal,ccess&*ception jelzi,
ha eg' "+l$n$s metdus nem tallhat, a +egative,rraySi"e&*ception pedig, ha eg'
t$mb mrett hel'telen+l adtun" meg (negat*v szm).
& Suntime&*ception "ivtele" #uts "$zben generldna" a Java Hirtulis gp ltal. -n(
ne" eg'i" pldja a +ull-ointer&*ception, mel' a""or j$n ltre, ha eg' metdus meg(
prbl hozz#rni null hivat"ozssal valamel' obje"tumhoz.
,N.;. Fn.olt kiv#telek
& "ivtele"ne" so" esetben eg' msi" "ivtel az o"a. Jl'en esetben )lszer! az eredeti
(o"oz) "ivtelt s az Qj "ivtelt eg'+tt "ezelni. -rre a problmra jelent megoldst a
Java 1.> verzi ta rendel"ezsre ll "ivtelln)ols. -nne" ln'ege, hog' eg' "ivtel
ltrehozsa"or be)somagolju" az o"oz "ivtelt az Qj "ivtel obje"tumba.
-nne" rde"ben "t Qj metdus s "t Qj "onstru"tor lett hozzadva a Thro)a8le t*(
pushoz.
& "$vet"ez Qj metduso" s "onstru"toro" tmogatj" a ln)olt "ivtele"et a ThroB
)a8le osztl'ban.
Throwable getCause()
Throwable initCause(Throwable)
Throwable(String, Throwable)
Throwable(Throwable)
&z initCause s a Thro)a8le "onstru"toro" Thro)a8le paramtere eg' "ivtel, ami"
o"ozt" az a"tulis "ivtelt. & getCause visszaad eg' "ivtelt, ami o"ozta az a"tulis "i(
vtelt, az initCause pedig visszaadja az a"tulis "ivtelt.
& "$vet"ez plda megmutatja, hog'an hasznlju" a ln)olt "ivtele"et.
try {
...
} catch (IOException e) {
throw new SampleException("Other IOException", e);
}
-bben a pldban, ami"or az .C&*ception(t "ap el a program, a""or eg' Qj Sample&*B
ception "ivtel j$n ltre az eredeti o""al eg'be"$tve, s a "ivtele" ln)a #eldobdi" eg'
"$vet"ez, magasabb szint! "ivtel"ezelh$z.
5(vsi verem in"orm.i'k kinyer#se
4ost #elttelezz+n", hog' eg' magasabb szint! "ivtel"ezel a"arja a "imenetre *rni a
h*vsi verem tartalmt eg'edi #ormtumban.
1E2. oldal Java programozs (1.3. verzi)
1e"in(.i'. a h*vsi verem in#orm)it szolgltat az a"tulis szl #utsi t$rtnetrl, az
osztl'o" s a metduso" neveirl, ami" a""or h*vdna" meg, ami"or a "ivtel be"$vet(
"ezett. & h*vsi verem eg' nag'on hasznos hiba"eres esz"$z.
& "$vet"ez "d megmutatja, hog'an "ell a getStac!Trace metdust hasznlni a "ivtel
obje"tumon.
catch (Exception cause) {
StackTraceElement elements[] = cause.getStackTrace();
for (int i = 0; n = elements.length; i < n; i++) {
System.err.println(elements[i].getFileName() + ":"
+ elements[i].getLineNumber() + ">> "
+ elements[i].getMethodName() + "()");
}
}
A<= na&l'zs
& "$vet"ez "drszlet catch blo""jban naplzsra ltun" pldt. @rmenn'ire )lsze(
r!ne" t!ni" is az elz plda meg"$zel*tse, rdemes in"bb a naplzs me)hanizmust
al"almazni a java.util.logging seg*tsgvel.
try {
Handler handler = new FileHandler("OutFile.log");
Logger.getLogger("").addHandler(handler);
} catch (IOException e) {
Logger logger = Logger.getLogger("package.name");
StackTraceElement elements[] = e.getStackTrace();
for (int i = 0; n = elements.length; i < n; i++) {
logger.log(Level.WARNING, elements[i].getMethodName());
}
}
,N.5. 0a+t kiv#tel osztlyok l#trehozsa
&mi"or sz+"sgess vli" eg' "ivtel dobsa, az eg'i" lehetsg eg' vala"i ltal mr
meg*rtat hasznlni X a Java Glat#orm rengeteg "ivtel osztll'al van elltva X vag' ma(
gun" is tudun" *rni a )ljain"na" meg#elelt.
7ajt "ivtel osztl't "ell *rnun", ha a "$vet"ez "rdse" brmel'i"re igennel vlaszol(
hatun". 1+l$nben valsz*n!leg eg' vala"i ms ltal meg*rtat "ell hasznlnun".
Dl'an t*pusQ "ivtel osztl'ra van(e sz+"sg, ami nem ll rendel"ezsre a Java Glat(
#ormbanA
2og seg*teni a #elhasznl"na", ha "pese" leszne" meg"+l$nb$ztetni a mi "ivtele(
in"et a mso" ltal meg*rt "ivtelosztl'o"tlA
& "dun" t$bb hel'en #og(e "ivtelt dobniA
Ba vala"i ms "ivteleit hasznlju", a #elhasznl hozz #ogna"(e tudni #rni azo"hoz
a "ivtele"hezA
-g' hasonl "rds. a )somagun"na" #+ggetlenne" s $nllna" "ell(e lennieA
8eg'+" #el, hog' *rtun" eg' ln)olt lista osztl't, amit szeretnn" megosztani n'*lt #orr(
sQ program"nt. & ln)olt lista osztl'un" t$bbe" "$z$tt a "$vet"ez metduso"at t(
mogatja.
1F.1ivtel"ezels 1E3. oldal
o!+e.tAt/int n2
Hisszaadja a lista n(di" poz*)ijban lev obje"tumot. 1ivtelt dob, ha a paramter "i(
sebb, mint <, vag' nag'obb, mint az a"tulis obje"tumo" szma a listban.
"irst9!+e.t/2
Hisszaadja az els obje"tumot a listban. 1ivtelt dob, ha a lista nem tartalmaz obje"tu(
mot.
indeQ9"/9!+e.t o2
Otnzi a listt eg' spe)ilis obje"tumrt s visszaadja a poz*)ijt a listban. 1ivtelt
dob, ha az obje"tum nin)s a listban.
& ln)olt lista osztl' "pes "+l$nb$z "ivtele"et dobni, ug'ana""or lehetsget ad
arra is, hog' a #elhasznl program el tudja "apni a ln)olt lista ltal dobott $sszes "iv(
telt eg' "ivtel"ezelvel. Ba a ln)olt listn"at eg' )somagban tervezz+" megosztani,
minden "ap)sold "dna" eg' "$z$s )somagban "ell lennie.
& "$vet"ez bra illusztrl eg' lehetsges osztl'hierar)hit a ln)olt list" ltal dobhat
"ivtele"rl.
0z>losztly vlasztsa
&z &*ception valamenn'i leszrmazott osztl't lehet a Lin!edList&*ception sz+loszt(
l'na" vlasztani. &zonban "$nn'en lthat, hog' eze" a leszrmazott osztl'o" nem
odaill", mert vag' tQl spe)ializlta", vag' nem #+ggne" $ssze a Lin!edList&*ception(al.
-zrt a Lin!edList&*ception sz+l osztl'na" az &*ception(ne" "ell lennie.
& legt$bb applet s al"almazs, amit *run", &*ception obje"tumo"at dob.
%igyelem. az olvashat "d rde"ben eg' j g'a"orlat, hog' hozz#!zz+" az &*ception
szt minden osztl' nevhez, amel'i" "$zvetlen+l vag' "$zvetve $r$"ldi" az &*ception
osztl'bl.
,N.B. -llenrz k#rd#sek
4i a "ivtelA
Bog'an lehet "ivtele"et ltrehozniA
1ell(e de"larlni a metdusban ltrehozott "ivtele"et, s ha igen, hog'anA
4ire szolgl a tryBcatchA
Bn' catch ga lehet eg' tryBcatch szer"ezetne"A
Bn' /inally ga lehet eg' tryBcatchB/inally szer"ezetne"A
4i a teend, ha metdusun" ol'an msi" metdust h*v meg, ami "ivtelt generlhatA
4i" a nem ellenrz$tt "ivtele", s hog'an lehet el"apni "etA
1E>. oldal Java programozs (1.3. verzi)
)orrekt a kvetkez k'd8
try {

} finally {

}
Milyen t(&4sA kiv#teleket "og elka&ni a kvetkez kezel8
catch (Exception e) {
...
}
=gaz vagy hamis8 =ndokol+a!
& metdusban ltrej$v "ivtelt "$telese" vag'un" a metdusban el"apni.
"ivtelt dobni a thro)s utas*tssal lehet.
1?.Grogramszla" "ezelse 1E0. oldal
,P.<rogramszlak kezel#se
& programo" jelents rsze soros vgrehajtsQ. Han "ezdet+", eg' vgrehajtand rsz s
eg' be#ejezs. & program )sa" bizon'os idsza"aszo"ban #ut, hiszen a pro)esszor mr
programo"at is #uttat.
& szl (thread) hasonl a soros programhoz. & szlna" is van "ezdete, eg' vgrehajtand
rsze s eg' be#ejezse. & szl is )sa" bizon'os idsza"aszo"ban #ut. :e a szl maga nem
eg' program, a szlat nem lehet $nllan #uttatni. Jn"bb Qg' te"inthetj+", hog' a prog(
ram rsze"nt #ut. & "$vet"ez bra megmutatja a "ap)solatot.
1e"in(.i'. & szl eg' eg'ed+lll irn'*t #ol'amat a programon bel+l.
Gersze nem arra hasznlju" a szla"at, hog' )sa" eg'et al"almazun", in"bb t$bb szlat
#uttatva eg' idben "+l$nb$z #eladato"at elvgezve eg'etlen programban. & "$vet"ez
"p ezt illusztrlja.
& b$ngsz programun" is eg' plda a t$bbszlQ al"almazsra. -g' ltalnos b$ngsz(
ben eg' oldalon bel+l eg'szerre t$rtni" eg' "p, applet let$ltse, mozg anim)i vag'
hang lejtszsa, az oldal n'omtatsa a httrben, mi"$zben eg' Qj oldalt t$lt be vag' p(
pen hrom rendez algoritmus versen't te"intheti meg.
,ha a szlat "$nn'!sQl'Q pro)esszne" nevezi", mert eg' teljes programon bel+l #ut, an(
na" le#oglalt er#orrsait s a #uttat "$rn'ezett hasznlja.
4int irn'*t #ol'amat, a szlna" is "ell sajt er#orrso""al rendel"eznie. Kendel"ezni
"ell eg' vgrehajt veremmel s a programszmllval. -bben a "$rn'ezetbe #ut a szl
"dja. ,hol ezt a "$rn'ezetet a szl #ogalom szinonimjna" nevezi".
& szl programozs nem eg'szer!. Ba mgis szla"at "ell hasznlni, a""or rdemes a
magas(szint! szl &GJ("at hasznlni. Glda"ppen, ha a programban eg' #eladatot t$bb(
sz$r "ell elvgezni, rdemes a java.util.Timer osztl't al"almazni. & Timer osztl' idz*(
tses #eladato"nl is hasznos lehet. -rre hamarosan ltun" pldt.
1EE. oldal Java programozs (1.3. verzi)
,P.,. A )imer #s a )imer)ask osztly
-bben a rszben az idz*t" hasznlatt trg'alju". & Timer osztl' a java.util )somag
rsze, a TimerTas! osztl' pldn'ai +temezst vgzi. Seminder.java eg' plda arra,
hog' hasznlju" az idz*t"et a "sleltetett #uttatshoz.
i%port java.util.Timer;
i%port java.util.TimerTask;
public class Reminder {
Timer timer;
public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}
class RemindTask extends TimerTask {
public void run() {
System.out.println("Lejrt az id!");
timer.cancel(); //A timer szl megszuntetse
}
}
public static void main(String args[]) {
new Reminder(5);
System.out.println("Munka utemezve.");
}
}
Jnduls utn ezt ltju".
Munka utemezve.
Mt msodper mQlva ezt ltju".
Lejrt az id!
& program eg' plda arra, hog'an "ell pldn'os*tani s +temezni a szla"at.
TimerTas! leszrmazott osztl' pldn'os*tsa. & run metdus tartalmazza a #utta(
ts sorn vgrehajtand "dot. & pldba ezt az leszrmazott osztl' SemindTas!(
"nt nevezt+" el.
9trehozzu" a Timer osztl' eg' pldn't.
9trehozun" eg' idz*t obje"tumot (ne) SemindTas!DF).
@e+temezz+" az idz*tt. -z a plda a schedule metdust hasznlja, amel'ne" para(
mterei az idz*t s "sleltets ezredmsodper)ben (0<<<).
-g' msi" lehetsg az +temezsre, hog' az ind*tsi idpontot adju" meg. Glda"ppen
a "$vet"ez "d 23.<1(re +temezi a vgrehajtst.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
timer = new Timer();
timer.schedule(new RemindTask(), time);
1?.Grogramszla" "ezelse 1E=. oldal
,P.,., =dz(tett szlak lell(tsa
&lapesetben a program addig #ut, am*g az idz*t szl is #ut. ,g' lell*tsi mdszer "$(
z+l vlaszthatun".
& cancel metdust h*vju" meg. -zt a program brmel'i" pontjn megtehetj+", mint
a plda run metdusban.
&z idz*t szlt dmon szll "ell tenni a "$vet"ez"ppen. ne) TimerDtrueF. Ba a
programban )sa" dmon szla" maradna", a""or a program "ilp.
Ba be#ejezdte" az +temezse", el "ell tvol*tani a Timer obje"tumhoz tartoz muta(
t"at. -zzel a szl is megsz!ni".
& System.e*it metdust h*vju" meg, amel' lell*tja a programot (benne a szla"at is).
& Seminder plda az els mdszert hasznlja, a cancel metdust h*vja meg a run met(
dusbl. & dmon szl"nt val ltrehozs a pldn"ban nem m!"$dne, mert a program(
na" #utni "ell a szl le#utsa utn is.
,P.,.2 =sm#telt "4ttats
-bben a pldba msodper)en"nt ismtli a "d #utst.
public class AnnoyingBeep {
Toolkit toolkit;
Timer timer;
public AnnoyingBeep() {
toolkit = Toolkit.getDefaultToolkit();
timer = new Timer();
timer.schedule(new RemindTask(),
0, //kezdeti ksleltets
1*1000); //ismtlsi rta
}
class RemindTask extends TimerTask {
int numWarningBeeps = 3;
public void run() {
if (numWarningBeeps > 0) {
toolkit.beep();
System.out.println("Sp!");
numWarningBeeps--;
} else {
toolkit.beep();
System.out.println("Id lejrt!");
//timer.cancel(); // Nem szuksges
// mert van System.exit is.
System.exit(0); // Lelltja AWT szlat
// (s minden mst)
}
}
}
...
}
1EF. oldal Java programozs (1.3. verzi)
2uttats "$zben ez lesz a "imenet.
Munka utemezve.
Sp!
Sp!
Sp!
Id lejrt!
&z ,nnoying7eep program hrom paramteres schedule metdust hasznl, hog' meg(
hatrozza a tasz" msodper)en"nti ind*tst. & Timer metdus vltozatai.
scheduleDTimerTas! tas!@ long !EsleltetEs@ long gya!oris?gF
scheduleDTimerTas! tas!@ 'ate id%@ long gya!oris?gF
schedule,t1i*edSateDTimerTas! tas!@ long !EsleltetEs@ long gya!oris?gF
schedule,t1i*edSateDTimerTas! tas!@ 'ate !e"deti.d%@ long gya!oris?gF
& schedule metdust a""or hasznlju", ha a t$bbsz$r$sen #uttatott tasz" ismtlsi ideje
szm*t, a schedule,t1i*edSate metdust, ha az ismtlse" idben "$tdne" eg' pontos
idh$z. & pldban is a schedule metdust al"almaztu", amitl 1 msodper)es interval(
lumo"ban s*pol a gp. Ba valamel'i" s*psz "si", a""or a "$vet"ez" is "sle"edne".
Ba Qg' d$nt+n", hog' a program 3 msodper) mQlva "ilp az els s*psz utn X ami azt
is eredmn'ezheti, hog' a "t s*psz "isebb id"$zzel szlal meg, ha "sle"eds lp #el X
a""or a schedule,t1i*edSate metdust hasznlju".
,P.2. 0zlak &#ldnyos(tsa
Ba a #enti meg"$zel*ts nem al"almas a #eladat elltsra, a""or sajt szl pldn'os*t(
sa lehet a megolds. -z a #ejezet elmag'arzza, hog'an lehet a szl run metdust eg'(
niv ala"*tani.
& run metdusban van, amit a szl tn'legesen )sinl, enne" a "dja hatrozza meg a
#utst. & szl run metdussal mindent meg lehet tenni, amit a Java programn'elvben le
lehet *rni. Gl.. pr*mszmo""al val szmols, rendezs, anim)i megjelen*ts.
& Thread osztl' pldn'os*tsval eg' Qj szl j$n ltre, ami alapbl nem )sinl semmit,
de lehetsg van a leszrmazott osztl'ban tartalommal megt$lteni.
,P.2., )hread leszrmazott #s a run "el>l(rsa
&z els lps a szla" testreszabsnl, hog' Thread osztl' leszrmazottjt ltrehozzu",
s az +res run metdust #el+l*rju", hog' )sinljon is valamit. ,zz+" meg a SimpleThB
read osztl't, amel' ezt teszi.
public class SimpleThread extends Thread {
public SimpleThread(String str) {
super(str);
}
1?.Grogramszla" "ezelse 1E?. oldal
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i + " " + getName());
try {
sleep((long)(Math.random() * 1000));
} catch (InterruptedException e) {}
}
System.out.println("KSZ! " + getName());
}
}
& SimpleThread osztl' els metdusa eg' "onstru"tor, amel' paramter"nt eg'
StringBet #ogad. & "onstru"tor megh*vja az sosztl' "onstru"tort, ami azrt rde"es
szmun"ra, mert az bell*tja a szl nevt. -zt a nevet hasznlju" a "sbbi programban a
szl #elhasznli azonos*tsra. & nevet "sbb a get+ame metdussal tudju" le"rdez(
ni.
& SimpleThread osztl' "$vet"ez metdusa a run. Jtt t$rtni" a Thread rdemi m!"$(
dse. -bben az esetben eg' tizes /or )i"lust tartalmaz. 4inden )i"lusban "i*rja az iter(
)i szmt, a Thread nevt, s utna altatsra "er+l vletlenszer!en 1 msodper)es hat(
ron bel+l. Ba vgzett, a (iSj; #eliratot *rja "i a szl nevvel eg'+tt. -nn'i a SimB
pleThread osztl'. Basznlju" #el ezt a T)oThreadsTest(ben.
& T)oThreadsTest osztl' main metdusba "t SimpleThread szlat hozun" ltre. Ja(
mai)a s 2uji. (Ba vala"i nem tudn eld$nteni hova menjen n'aralni, a""or hasznlja
ezt a programot.)
public class TwoThreadsTest {
public static void main (String[] args) {
new SimpleThread("Jamaica").start();
new SimpleThread("Fiji").start();
}
}
& main metdus azonnal mind"t szlat ltrehozza a start metdus megh*vsval, amel'
a run metdust h*vja meg. 2ord*ts s #uttats utn "ibonta"ozi" az Qti )l. & "imenet
hasonl "ell, hog' leg'en.
1=<. oldal Java programozs (1.3. verzi)
2ig'elj+" meg, hog' a szla" "imenete menn'ire #+ggetlen eg'mstl. -nne" az az o"a,
hog' a SimpleThread szla" eg'idej!leg #utna". 4ind"t run metdus #ut, s mind"et(
tne" van sajt "imenete ug'ana""or. Ba a )i"lus be#ejezdi", a szla" lellna" s meg(
halna".
,P.2.2 Runnable inter"#sz &#ldnyos(tsa
& "$vet"ez Cloc! applet a jelenlegi idt mutatja, s azt msodper)en"nt #riss*ti. & #ris(
s*ts lland, mivel az ra "ijelzse eg' sajt szlon #ut.
&z applet ms mdszert hasznl, mint a SimpleThread. Jtt ug'anis a sz+losztl' )sa" az
,pplet lehet, de *g' az eg'szeres $r$"lds miatt a Thread mr nem lehet sz+l. -zrt a
plda Thread leszrmazott ltrehozsa hel'ett eg' Sunna8le inter#szt implementl,
ezrt a run metdust ebben de#inilja. & Cloc! ltrehoz eg' szlat, amel'ne" a #riss*ts a
)lja.
i%port java.awt.*;
i%port java.util.*;
i%port java.applet.*;
i%port java.text.*;
public class Clock extends java.applet.Applet i%ple%ents
Runnable {
private volatile Thread clockThread = null;
DateFormat formatter; // Formats the date displayed
String lastdate; // String to hold date displayed
Date currentDate; // Used to get date to display
Color numberColor; // Color of numbers
Font clockFaceFont;
Locale locale;
public void init() {
setBackground(Color.white);
numberColor = Color.red;
locale = Locale.getDefault();
formatter =
DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.MEDIUM, locale);
currentDate = new Date();
lastdate = formatter.format(currentDate);
clockFaceFont = new Font("Sans-Serif",
Font.PLAIN, 14);
resize(275,25);
}
public void start() {
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
1?.Grogramszla" "ezelse 1=1. oldal
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e){ }
}
}
public void paint(Graphics g) {
String today;
currentDate = new Date();
formatter =
DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.MEDIUM, locale);
today = formatter.format(currentDate);
g.setFont(clockFaceFont);
// Erase and redraw
g.setColor(getBackground());
g.drawString(lastdate, 0, 12);
g.setColor(numberColor);
g.drawString(today, 0, 12);
lastdate = today;
currentDate=null;
}
public void stop() {
clockThread = null;
}
}
& Cloc! applet run metdusa addig nem lp "i a )i"lusbl, am*g a b$ngsz le nem ll*t(
ja. 4inden )i"lusban az ra "imenete Qjrarajzoldi". & paint metdus le"rdezi az idt,
#ormzza s "ijelzi azt.
)ell-e a Runnable inter"#sz8
1t mdszert ismertett+n" a run metdus elll*tsra.
9eszrmazott Thread osztl' ltrehozsa s a run metdus #el+l*rsa.
-g' ol'an osztl' ltrehozsa, amel'i" megvals*tja a Sunna8le inter#szt s *g' a
run metdust is. -bben az esetbe a Sunna8le obje"tum szolgltatja a run metdust a
szlna". -zt #eljebb lthatju".
Meg+egyz#s. & Thread is megvals*tja a Sunna8le inter#szt.
&hhoz, hog' eg' b$ngszben #uthasson a Cloc! osztl'na" az ,pplet osztl' leszrma(
zottjna" "ell lennie. 8ovbb a Cloc! applet #ol'amatos "ijelzse miatt eg' szlra van
sz+"sge, hog' ne a pro)esszt veg'e t, amiben #ut. (,hn' b$ngsz #ig'elhet arra,
hog' az applete" sajt szlat "apjana", el"er+lend, hog' a hibs applete" elveg'" a
b$ngsz szlt. :e erre nem p*thet+n" eg' applet *rsnl. &z ltalun" *rt appletne"
tudnia "ell a sajt szl ltrehozst, ha ol'an mun"t vgez.) :e mivel a Java n'elv nem
engedl'ezi a t$bb osztl'o"on t val $r$"ldst, a Cloc! nem lehet eg'szerre a Thread
s az ,pplet osztl' leszrmazottja. Wg' a Cloc! osztl'na" eg' Sunna8le inter#szen "e(
reszt+l "ell a szla" visel"edst #elvennie.
1=2. oldal Java programozs (1.3. verzi)
,P.7. <rogramszl #let.ikl4sa
& "$vet"ez bra bemutatja a szl "+l$nb$z llapotait, amibe lete sorn tud "er+lni,
s illusztrlja, hog' mel'i" metduso" megh*vsa o"ozza az tmenetet eg' msi" #zis(
ba. &z bra nem eg' teljes llapotdiagram, in"bb )sa" eg' tte"ints a szl letne"
#ontosabb s eg'szer!bb oldalairl. & tovbbia"ban is a Cloc! pldt hasznlju", hog'
bemutassu" a szl let)i"lust "+l$nb$z sza"aszaiban.
,P.7., <rogramszl l#trehozsa
&z al"almazs, mel'ben eg' szl #ut, megh*vja a szl start metdust, ami"or a #elhasz(
nl a programot elind*tja. & Cloc! osztl' ltrehozza a cloc!Thread szlat a start met(
dusban, ahog' a lenti program"d bemutatja.
public void start() {
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
4iutn a "iemelt utas*ts vgrehajtdi", a cloc!Thread az 5Qj szl6 (+e) Thread) lla(
potban van. -g' szl ebben az llapotban )supn eg' +res szl, semmi#le rendszerer(
#orrs nin)s hozzrendelve. -bben az llapotban )sa" elind*that a szl. & start metdu(
son "*v+l brmil'en metdus megh*vsa rtelmetlen, s .llegalThreadState&*ception
"ivtelt eredmn'ez. (&laprtelmezetten a rendszer mindig ezt a hiba+zenetet dobja, ha
eg' ol'an metdus "er+l megh*vsra, amel'i" a szl pillanatn'i llapotban nem enge(
dl'ezett.)
Irdemes megjeg'ezni, hog' a Cloc! t*pusQ pldn' az els paramter a szl "onstru"(
torban. -z a paramter meg "ell, hog' vals*tsa a Sunna8le inter#szt, )sa" *g' lehet a
"onstru"tor paramtere. & Cloc! szl a run metdust a Sunna8le inter#sztl $r$"li. &
"onstru"tor msodi" paramtere )supn a szl neve.
,P.7.2 <rogramszl elind(tsa
4ost gondolju" t, mit eredmn'ez a program"dban a start metdus.
public void start() {
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
1?.Grogramszla" "ezelse 1=3. oldal
& start metdus ltrehozza a sz+"sges rendszerer#orrso"at a szl #uttatshoz, el"(
sz*ti a szlat a #utshoz, s megh*vja a szl start metdust. & cloc!Thread run metdu(
sa a Cloc! osztl'ban van de#inilva.
4iutn a start metdus visszatr, a szl #ut. 4gis, ennl azrt "i)sit "omplePebb a do(
log. &hog' az elz bra is mutatja, eg' elind*tott szl a #uttathat llapotba "er+l. 7o"
szm*tgp )sa" eg' pro)esszorral rendel"ezi", *g' lehetetlen, hog' minden #utsi lla(
potban lv szl eg'szerre #usson. -zrt a Java #uttatrendszerne" implementlnia "ell
eg' +temezsi smt, ami elosztja a pro)esszor er#orrsait az $sszes #ut szl "$z$tt.
7zval eg' bizon'os idpontban, eg' #ut szl valsz*n!leg vr, hog' "er+lj$n sorra a
;GL +temezsben.
4g eg'szer a Cloc! run metdusa.
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// The VM doesn't want us to sleep anymore,
// so get back to work
}
}
}
& Cloc! run metdusa addig lp"ed a )i"lusban, am*g a cloc!Thread KK myThread #el(
ttel nem lesz igaz.
& )i"luson bel+l a szl Qjra "irajzolja az appletet, majd utas*tja a szlat, hog' "er+lj$n al(
v llapotba 1 msodper)re. & repaint metdus vgs soron megh*vja a paint metdust,
ami az a"tulis #riss*tse"et vgzi a program megjelen*tsi #el+letn. & Cloc! paint met(
dusa eltrolja az a"tulis rendszeridt, #ormzza, majd megjelen*ti.
public void paint(Graphics g) {
//get the time and convert it to a date
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
//format it and display it
DateFormat dateFormatter = DateFormat.getTimeInstance();
g.drawString(dateFormatter.format(date), 5, 10);
}
,P.7.7 <rogramszl nem "4ttathat' lla&ot!a ll(tsa
-g' szl a""or vli" nem #uttathatv, ha a lenti esemn'e" "$z+l brmel'i" is be"$vet(
"ezi".
4egh*vsra "er+l a sleep metdusa.
& szl megh*vja a )ait metdust, hog' az vrjon eg' bizon'os #elttel teljes+lsre.
& szl blo""olt eg' J/D m!velet miatt.
& cloc!Thread a Cloc! szlon bel+l a""or "er+l nem #uttathat llapotba, mi"or a #uts
metdus megh*vja a sleep(et a jelenlegi szlban.
1=>. oldal Java programozs (1.3. verzi)
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// A VM nem akarja, hogy tovbb aludjunk,
// szval irny vissza dolgozni
}
}
}
&z alatt a msodper) alatt, am*g a cloc!Thread alv llapotban van, a szl nem #ut, mg
a""or sem #og, ha a pro)esszor er#orrsai elrhetv vlna". 4iutn leteli" az eg' m(
sodper), a szl Qjra #uttathatv vli"` ha a pro)esszor er#orrsai elrhetv vlna", a
szl Qjra #utni "ezd.
4inden eg'es nem #uttathat llapotba "er+ls"or, eg' spe)i#i"us s meg"+l$nb$ztethe(
t e*it metdus tr*ti vissza a szlat a #uttathat llapotba. -g' e*it h*vs utn )sa" a
meg#elel #elttele" teljes+lse esetn #og ismt #utni. Gldul. miutn eg' szl alv lla(
potba lett hel'ezve, a meghatrozott ezredmsodper)e" lejrta utn Qjbl #uttathat l(
lapotba "er+l. & "$vet"ez #elsorols le*rja a nem #uttathat llapot "ilpsi #eltteleit.
Ba a szl alv llapotba lett hel'ezve, a meghatrozott idne" le "ell telnie.
Ba eg' szl eg' #elttelre vr, a""or eg' msi" obje"tumna" "ell rtes*tenie a vra"o(
z szlat a #elttel teljes+lsrl a noti/y vag' noti/y,ll metdus megh*vsval.
Ba eg' szl blo""olva volt eg' J/D m!velet miatt, az J/D m!veletne" be "ell #ejezd(
nie.
,P.7.; <rogramszl lell(tsa
Babr a Thread osztl'ban rendel"ezsre ll a stop metdus, ezen metdus al"almazsa
nem javallott, mert nem biztonsgos, pl. adatveszts lphet #el. -g' szlna" in"bb sajt
magna" "ell be#ejezni a #utst Qg', hog' a run metdusa termszetesen ll le. Gldul
a )hile )i"lus a run metdusban eg' vges )i"lus 1<<(szor #ut le, majd "ilp.
public void run() {
int i = 0;
while (i < 100) {
i++;
System.out.println("i = " + i);
}
}
& szl a run metdusban termszetesen 5hal meg6 mi"or a )i"lus be#ejezdi" s a run
metdus "ilp.
,zz+" meg, hog'an hajtja vgre a Cloc! szl a sajt hallt. ,zz+" meg Qjra a Cloc!
run metdust.
1?.Grogramszla" "ezelse 1=0. oldal
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//the VM doesn't want us to sleep anymore,
//so get back to work
}
}
}
& "ilpsi #elttel ebben a run metdusban ug'anaz a "ilpsi #elttele, mint a )hile )i"(
lusna", mert a )i"lus utn nin)s "d.
while (clockThread == myThread) {
- #elttel jelzi, hog' a )i"lus "ilp, ha a jelenleg #utsban lv szl nem eg'ezi" a
cloc!Thread(el. 4i"or lesz ez a hel'zetA &""or, ami"or a #elhasznl elhag'ja az oldalt,
az al"almazs, mel'ben a szl #ut, megh*vja a szl stop metdust. -z a metdus ezutn
bell*tja a cloc!Thread(et null rt"re, *g' utas*tva a # )i"lust, hog' sza"*tsa meg a #uts
metdust.
public void stop() { // applets' stop method
clockThread = null;
}
,P.7.5 <rogramszl stt4sz tesztel#se
&z 0.<(s verziban "er+lt bevezetsre a Thread.getState metdus. 4i"or ez "er+l meg(
h*vsra, az albbi Thread.State rt"e" valamel'i"e tr vissza.
+&:
S<++,7L&
7LCC(&'
:,.T.+\
T.M&'5:,.T.+\
T&SM.+,T&'
& Thread osztl'hoz tartoz &GJ tartalmazza az is,live metdust is. &z is,live metdus
igaz visszatrsi rt"et generl, ha a szlat elind*tott", de mg nem lett lell*tva. Ba az
is,live visszatrsi rt"e hamis, a""or tudhatju", hog' a szl vag' Qj szl (+&:), vag'
halott llapotban van (T&SM.+,T&'). Ba a visszatrsi rt" igaz, a""or viszont a szl
vag' #uttathat (S<++,7L&), vag' nem #uttathat llapotban van.
&z 0.<(s verzit megelzen nem lehetett "+l$nbsget tenni az Qj szl vag' a halott sz(
la" "$z$tt. Lg'an)sa" nem lehetett meg"+l$nb$ztetni a #uttathat, vag' nem #uttathat
llapotban lv szltl.
,P.7.B A &ro.esszor hasznlatnak "eladsa
&hog'an el tudju" "pzelni, ;GL(ign'es "do" negat*v hatssal vanna" ms szla"ra,
amel'e" azonos programban #utna". Hag'is prbljun" jl m!"$d szla"at *rni, ame(
1=E. oldal Java programozs (1.3. verzi)
l'e" bizon'os id"$z$n"nt $n"ntesen #elhag'na" a pro)esszor hasznlatval, ezzel
megadva a lehetsget minden szlna" a #utsra.
-g' szl $n"ntesen abbahag'hatja a ;GL hasznlatt a yield metdus megh*vsval.
,P.;. -llenrz k#rd#sek
Melyik az az inter"#szI amelyet megval's(tva t!! szlA &rogram"4ts #rhe-
t el8
Sunna8le
Sun
Threada8le
Thread
&*ecuta8le
Mi annak a met'd4snak a neveI amellyel a k>ln &rogramszl "4tst kez-
dem#nyezni t4d+4k8
init
start
run
resume
sleep
Mi annak a met'd4snak a neveI amellyel a &rogramszl "4tst le t4d+4k l-
l(tani8
(4inden hel'es vlaszt jel$lj$n meg%)
sleep
stop
yield
)ait
noti/y
noti/y,ll
synchroni"ed
1?.Grogramszla" "ezelse 1==. oldal
Mit ta&asztal4nkI ha "ord(tani #s "4ttatni &r'!l+4k a kvetkez &rogramot8
public class Background extends Thread{
public static void main(String argv[]){
Background b = new Background();
b.run();
}
public void start(){
for (int i = 0; i <10; i++){
System.out.println("Value of i = " + i);
}
}
}
2ord*tsi hiba, mert a run metdus nin)s de#inilva a 7ac!ground osztl'ban
2utsi hiba, mert a run metdus nin)s de#inilva a 7ac!ground osztl'ban
& program le#ut, s <(tl ?(ig *r "i szmo"at
& program le#ut, de nin)s "imenete
1=F. oldal Java programozs (1.3. verzi)
2?.%+lkezel#s
& legt$bb programna" sz+"sge van arra, hog' "+ls #orrsbl olvasson adato"at, vag'
"+ls )lba *rja a m!"$dse (rsz)eredmn'eit. & #orrs s a )l so"#le lehet. "onzol,
httrtr, msi" program, vag' eg'b spe)ilis esz"$z$". &z adato" is "+l$nb$z" lehet(
ne". szmo", sz$vege", vag' a"r tetszleges obje"tumo". -z a #ejezet bemutatja, hog'
hog'an lehet Java n'elven "ezelni az adatllomn'ain"at.
2?.,. Adat"olyamok
Jn#orm)i "in'ershez a program megn'it eg' adat#ol'amot az in#orm)i#orrshoz
(#jl, memria, so)"et), s sorban "iolvassa az in#orm)it, amint az brn ltszi".
Basonl"ppen, eg' program "+ls )lba is "+ldheti az in#orm)i"at adat#ol'am meg(
n'itsval, s in#orm)i"at *rhat "i sorban, mint itt.
,em szm*t, me""ora adat j$n be, vag' meg' "i, s nem szm*t a t*pusa, az algoritmus
sorban olvassa s *rja, a "$vet"ez"$z hasonlan.
9lvass
adatfolyam megnyitsa
amg van jabb informci
olvass
adatfolyam bezrsa
Krs
adatfolyam megnyitsa
amg van jabb informci
rs
adatfolyam bezrsa
& java.io )somag tartalmazza azon osztl'o"at, mel'e" lehetv teszi" az *rst s olva(
sst. &z osztl'o" hasznlathoz importlni "ell a java.io )somagot.
&z adat#ol'am osztl'o" "t hierar)hira oszthat" az adatt*pusu" alapjn ("ara"ter
vag' bjt).
2<.2jl"ezels 1=?. oldal
)arakter "olyamok
Seader s :riter a java.io absztra"t sosztl'ai. 1E bites "ara"tere""el val m!velete"et
teszi" lehetv. & Seader s :riter leszrmazott osztl'ai spe)ilis m!velete"et vgez(
ne", s "t "+l$n "ategrira oszthat". az adat olvass s *rs (sz+r"vel jelezve) s #el(
dolgozso" vgrehajtsa (#ehre"). &z utbbia"at sz!r #ol'amo"na" is nevezz+". & SeB
ader s :riter osztl'o" osztl'hierar)hijt mutatja az bra.
& legt$bb programna" sz+"sge van a Seader s :riter osztl'o"ra sz$veges in#orm)i(
" olvasshoz s *rshoz. -ze" brmil'en "ara"tert "pes le"ezelni Lni)ode "ara"ter(
"nt.
$inris "olyamok
& F(bites bjt *rshoz s olvasshoz a programna" hasznlnia "ell a binris #ol'amo(
"at, mel'e" az .nputStream s CutputStream leszrmazottai. -ze" a #ol'amo" jellemz(
en binris adato" olvassra s *rsra al"almasa", mint eg' "p vag' hang. & bjt #o(
l'am "t osztl'a, C8ject.nputStream s C8jectCutputStream hasznlhat obje"tumo"
soros #ol'amon "ereszt+li "ezelshez.
1F<. oldal Java programozs (1.3. verzi)
&z .nputStream s CutputStream osztl'o" a Seader s :riter osztl'o"hoz hasonl(
am "t "ategrira oszthat", a "$vet"ez osztl'hierar)hia alapjn. adat"ezel #ol'a(
mo" (sz+r"e) s #eldolgoz vag' ms nven sz!r #ol'amo" (#ehr).
Az =G9 sz>losztlyok
Seader s .nputStream azonos &GJ("at hatrozna" meg, de "+l$nb$z adatt*pusra. &
Seader metdusai "ara"tere" s "ara"tert$mb$" olvassra al"almasa".
int read()
int read(char cbuf[])
int read(char cbuf[], int offset, int length)
&z .nputStream hasonl metdusai binris adato" s t$mb$" olvassra al"almasa".
int read()
int read(byte cbuf[])
int read(byte cbuf[], int offset, int length)
& Seader s .nputStream is megvals*tja az adat#ol'amon bel+li llapot jel$lst, ugr(
lst, s az a"tulis poz*)i visszall*tst.
& :riter s CutputStream hasonl szolgltatso""al rendel"ezne". & :riter "ara"te(
re", s "ara"tert$mb$" *rst vals*tja meg.
int write(int c)
int write(char cbuf[])
int write(char cbuf[], int offset, int length)
&z CutputStream azonos metdusQ de binris adatra.
int write(int c)
int write(byte cbuf[])
int write(byte cbuf[], int offset, int length)
4ind a ng' osztl' esetn igaz, hog' automati"usan megn'*li" az adat#ol'am, ha ltre
van hozva az obje"tum. 4inden adat#ol'am bezrhat a close megh*vsval. & szemt(
2<.2jl"ezels 1F1. oldal
g'!jt is bezrja, ha mr nin)s r hivat"ozs, de )lszer! in"bb dire"t mdon megh*vni
a close metdust.
Meg+egyez#s. & program 5"$telessge6, hog' minden er#orrst )sa" a tn'legesen sz+"sges ideig #og(
laljon le. Ippen ezrt az llomn' megn'itst ol'an "sn "ell megtenni, ami"or )sa" lehet, s ug'an(
il'en hamar be is "ell zrni.
Az adat"olyam osztlyok hasznlata
& tblzat a java.io adat#ol'amo"at s #eladatu" le*rst tartalmazza.
=G9 t(&4s 9sztlyok Fe(rs
Mem'ria Char,rraySeader
Char,rray:riter
7yte,rray.nputStream
7yte,rrayCutputStream
&z adat#ol'amo" "iolvassra s a me(
mriba *rsra hasznlhat. &z adat(
#ol'amo" ltrehozhat" eg' meglv
t$mbbel, s az olvasst s *rst hasz(
nlva "iolvas s a t$mbbe *r.
StringSeader
String:riter
String7u//er.nputStream
& StringSeader "ara"tere"et olvas a
memribl. & String:riter eg'
String(be *r. & String:riter "i*rand
"ara"tere"et g'!jt eg' String7u//er(
be, ami String(be "onvertl.
String7u//er.nputStream hasonl a
StringSeader(hez, "ivve, hog' eg'
String7u//er(bl "ara"tere"et olvas.
:s -ipedSeader
-iped:riter
-iped.nputStream
-ipedCutputStream
& bemenet s "imenet "$z$tt vals*t
meg eg' $ssze"$t )s$vet. & )s$ve" a
"imenettl a msi" bemenetig tart
#ol'amot vals*tana" meg.
%+l 1ileSeader
1ile:riter
1ile.nputStream
1ileCutputStream
-g'+ttesen #jl #ol'amo"na" h*vj",
mel'e""el #jlbl olvashatun", vag'
#jlba *rhatun".
Fn. SeYuence.nputStream 8$bb bemenet adat#ol'amaina" $sz(
sze#!zse eg' bemeneti adat#ol'amba.
9!+ekt4m
soros(tsa
C8ject.nputStream C8B
jectCutputStream
Dbje"tumo" soros szervezs! trol(
shoz s visszall*tshoz.
Adat
konverzi'
'ata.nputStream
'ataCutputStream
Grimit*v adatt*puso" *rsa s olvassa
gp#+ggetlen #ormtumban.
0zmll' Line+um8erSeader
Line+um8er.nputStream
,'omon "$vethet a soro" szma ol(
vass"or.
-lre olvass -ush8ac!Seader & bemeneti adat#ol'amo" eg' vissza(
1F2. oldal Java programozs (1.3. verzi)
-ush8ac!.nputStream
tehet pu##erbe "er+lne". &z adato"
olvassa"or nha hasznos a "$vet"ez
nhn' bjt vag' "ara"ter ismerete a
"$vet"ez lps eld$ntshez.
)inyomtats -rint:riter
-rintStream
,'omtatsi metduso"at tartalmaz.
&z adat#ol'amo" tartalmna" "i*rat(
sra hasznlhat.
<4""erel#s 7u//eredSeader
7u//ered:riter
7u//ered.nputStream 7u/B
/eredCutputStream
Dlvass"or s *rs"or az adato" pu##e(
reldne", ezltal )s$""entve a #orrs
adat elrseine" szmt. & pu##erelt
adat#ol'amo" hat"on'abba", mint a
nem pu##erelt adat#ol'amo", s g'a"(
ran hasznlhat" ms adat#ol'amo"(
"al is.
0zr#s 1ilterSeader
1ilter:riter
1ilter.nputStream
1ilterCutputStream
-ze" az absztra"t osztl'o" a sz!r
adat#ol'amo" vzt adj" meg, mil'en
sz!rs hasznlhat *rs"or vag' olva(
ss"or.
$+tok #s ka-
rakterek kzti
konverzi'
.nputStreamSeader
CutputStream:riter
&z olvas s *r pros hidat "pez a
bjt s a "ara"ter#ol'amo" "$z$tt.
&z .nputStreamSeader bjto"at olvas
eg' .nputStream(bl s "ara"terbe
"onvertlja, az alaprtelmezett "ara"(
ter"dolst vag' eg' megnevezett "a(
ra"ter"dolst hasznlva.
&z CutputStream:riter "ara"tere"et
"onvertl bjtba, az alaprtelmezett
"ara"ter"dolst vag' eg' megneve(
zett "ara"ter"dolst hasznlva s a
bjto"at eg' CutputStream(be *rja.
2?.,., %+l adat"olyamok hasznlata
& #jl adat#ol'amo" taln a leg"$nn'ebben megrthet adat#ol'amo". & #jl adat#ol'a(
mo" (1ileSeader, 1ile:riter, 1ile.nputStream, s 1ileCutputStream) a nat*v #jlrend(
szer #jljait olvass", vag' *rj". 9trehozhatun" #jl adat#ol'amot #jlnv String(bl,
1ile obje"tummal, vag' 1ile'escriptor obje"tummal.
& "$vet"ez Copy program 1ileSeader s 1ile:riter seg*tsgvel az input.t*t tartalmt
t*rja (tmsolja) az ouput.t*t #jlba.
i%port java.io.*;
public class Copy {
public static void main(String[] args) throws IOException{
File inputFile = new File("input.txt");
File outputFile = new File("output.txt");
2<.2jl"ezels 1F3. oldal
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
}
}
& program nag'on eg'szer!. & 1ileSeader megn'itja a /arrago.t*t #jlt, a 1ile:riter pe(
dig az outagain.t*t #jlt. & program az in obje"tummal beolvas minden "ara"tert a be(
meneten a bemeneti #jlbl, s az out obje"tummal "i*rja a "ara"tere"et. Ba a bemenet
el#og'ott ((1), a program bezrja az olvast s az *rt is.
Meg+egyz#s. Irdemes meg#ig'elni, a read s )rite metduso" nem char, hanem int t*pussal dolgozna".
-nne" mind$ssze az az o"a, hog' eg' spe)ilis, a char megengedett rt"tartomn'n "*v+li visszatrsi
rt"et (a (1(et) is "ell n'Qjtani abban az esetben, ha nin)s t$bb olvashat "ara"ter, *g' a char nem lenne
al"almazhat.
& Copy program ezt a "dot hasznlja a 1ileSeader ltrehozshoz.
File inputFile = new File("input.txt");
FileReader in = new FileReader(inputFile);
& "d ltrehoz eg' 1ile obje"tumot, ami a #jl logi"ai le*rsra szolgl. & 1ile segdosz(
tl't a java.io tartalmazza. & Copy program ezt az obje"tumot hasznlja a 1ileSeader
#elp*tshez. &zonban a program az input1ile(t a""or is hasznlhatja, ha in#orm)it
szeretnn" szerezni a #jl egszrl (pl. olvashat(e, me""ora a mrete stb).
& program #utsa utn ug'ananna" "ell szerepelnie az input.t*t s az output.t*t #jlban
is.
,e #eledj+", hog' a 1ileSeader s a 1ile:riter 1E(bites "ara"tert olvas s *r. &zonban, a
legt$bb nat*v #jlrendszer F(biten alapszi" &z adat#ol'amo" "dolj" a "ara"tere"et, az
alaprtelmezett "ara"ter"dolsi sma alapjn. & "ara"ter"dols meg"aphat a SysB
tem.get-ropertyDO/ile.encodingOF hasznlatval. gj alaprtelmezett "dols megads(
hoz ltre "ell hozni eg' CutputStream:riter vag' eg' 1ileCutputStream obje"tumot, s
megadni a "dolst.
2?.,.2 0zr adat"olyamok
& java.io )somag tartalmazza az absztra"t osztl'o" spe)ilis bell*tsaina" lehetsgt,
mell'el de#inilhatun", s rszlegesen implementlhatun" sz!r"et, olvass, illetve *rs
)ljbl. & hasznlatos #ilter adat#ol'amo" a 1ilter.nputStream, 1ilterCutputStream.
-g' #ilter adat#ol'am eg' msi" alap(adat#ol'amra p+l, mel'be a )rite metdus #og
adato"at menteni, de )sa" a sz!rs utn. Hanna" adat#ol'amo", mel'e" spe)ilis #elada(
to"at ltna" el, mint pldul a "onvertls vag' szmlls #ol'amata.
& legt$bb #ilter adat#ol'amot a java.io )somag ltal szolgltatott szrmaztatott osztl'o"
n'Qjtj", eze" a "$vet"ez".
'ata.nputStream s 'ataCutputStream
7u//ered.nputStream s 7u//eredCutputStream
Line+um8er.nputStream
-ush8ac!.nputStream
1F>. oldal Java programozs (1.3. verzi)
-rintStream
& java.io )somag )sa" eg' szrmaztatott osztl't tartalmazza a 1ilterSeader(ne", ez
nem ms, mint a -ush8ac!Seader. & "$vet"ez #ejezet bemutatja eg' pldn szemlltet(
ve, hog'an hasznlju" a sz!r adat#ol'amo"at a 'ata.nputStream s a 'ataCutStream
hasznlatval. Lg'an)sa" trg'alja, hog'an hozhatun" ltre szrmaztatott osztl'o"at a
1ilter.nputStream s 1ilterCutputStream(bl, mel'e" seg*tsgvel sajt sz!r adat#o(
l'amun"at vals*thatju" meg.
0zr adat"olyamok hasznlata
& sz!r obje"tumo"at )satolni "ell eg' msi" J/D adat#ol'amhoz, plda"nt )satolha(
tun" sz!r adat#ol'amot a standard input adat#ol'amra.
BufferedReader d = new BufferedReader(new
DataInputStream(System.in));
String input;
while ((input = d.readLine()) != null) {
... //do something interesting here
}
Meg+egyz#s. & readLine metdus nem hasznlhat a 'ata.nputStream(ben, ezrt hoztu" ltre a
7u//eredSeader t*pusQ d sz!r obje"tumot.
& "$vet"ez"ben eg' pldn szemlltetj+" a 'ata.nputStream s 'ataCutputStream
hasznlatt. -ze" ol'an sz!r" mel'e" "pese" *rni/olvasni elemi adatt*puso"at.
-l#ordul, hog' a #eldolgozs #+ggetlen a "ezelt adat #ormtumtl, de nha szorosan
$ssze#+gg az illet adato""al vag' anna" #ormtumaival, Qg'mint adato" *rsa, olvassa
soro"bl vag' )ell"bl.
*ata+nputStream #s *ataOutputStream hasznlata
-z a #ejezet a 'ata.nutStream s 'ataCutputStream osztl'o" hasznlatt mutatja be
eg' 'ata.C'emo pldaprogramon "ereszt+l, mel' olvas s *r tblzatba ()ell"ba) #og(
lalt adato"at. & )ell" tartalmazz" az eladsi rat, a rendelt ru menn'isgt, s a le(
*rst. -lmletileg az adat a "$vet"ez"ppen nz "i, habr a gp ezt binris adat"nt "e(
zeli.
19.99 12 Java T-shirt
9.99 8 Java Mug
'ataCutputStream(et, mint ahog'an ms "imeneti adat#ol'amo"at, )satolni "ell eg'
msi" Dutput7tream(hez. -bben az esetben a 1ileCutputStream(hez )satoltu". Glda.
DataOutputStream out = new DataOutputStream(
new FileOutputStream("invoice1.txt"));
& 'ata.C'emo a 'ataCutputStream spe)ilis )rite metdusait hasznlja *rsra,
amenn'iben az meg#elel t*pusQ.
2<.2jl"ezels 1F0. oldal
for (int i = 0; i < prices.length; i ++) {
out.writeDouble(prices[i]);
out.writeChar('\t');
out.writeInt(units[i]);
out.writeChar('\t');
out.writeChars(descs[i]);
out.writeChar('\n');
}
out.close();
& 'ata.C'emo program beolvassa az adato"at a 'ata.nputStream spe)ilis metdusai
seg*tsgvel.
try {
while (true) {
price = in.readDouble();
in.readChar(); //throws out the tab
unit = in.readInt();
in.readChar(); //throws out the tab
char chr;
desc = new StringBuffer(20);
char lineSep =
System.getProperty("line.separator").charAt(0);
while ((chr = in.readChar() != lineSep) {
desc.append(chr);
}
System.out.println("You've ordered " + unit
+ " units of "
+ desc + " at $" + price);
total = total + unit * price;
}
} catch (EOFException e) { }
System.out.println("For a TOTAL of: $" + total);
in.close();
4ihel'st beolvasta az adato"at, a 'ata.C'emo megjelen*ti az $sszegzst, a rendelt s az
$sszes menn'isget, majd bezrul.
Meg+egyz#s. a 'ata.C'emo ltal hasznlt )i"lus a 'ata.nputStream(bl olvassa az adato"at.
while ((input = in.read()) != null) {
. . .
}
& read metdus null rt""el tr vissza, mel' a #jl vgt jelenti.
7zmos al"alommal azonban ezt nem tehetj+" meg, a szabl'talanul megadott rt"e"
esetn hibajelzst "apun". 8eg'+" #el, hog' (1 rt"et szeretnn" ug'anerre a )lra #el(
hasznlni. -zt nem tehetj+" meg, ug'anis a (1 nem szabl'os rt", "iolvassa a readB
'ou8le vag' read.nt hasznlatval t$rtni". 8eht 'ata.nputStream(e" esetn nem "a(
pun" &C1&*ception "ivtelt.
& program #utsa a "$vet"ez "imenetet eredmn'ezi.
You've ordered 12 units of Java T-shirt at $19.99
You've ordered 8 units of Java Mug at $9.99
You've ordered 13 units of Duke Juggling Dolls at $15.99
You've ordered 29 units of Java Pin at $3.99
You've ordered 50 units of Java Key Chain at $4.99
,or a TOTAL of: $892.8800000000001
1FE. oldal Java programozs (1.3. verzi)
2?.2.9!+ekt4m szerializ.i'
& java.io "t adat#ol'ama (az C8ject.nputStream s az C8jectCutputStream( abban
ms az tlagos bjt#ol'amo"tl, hog' obje"tumo"at tudna" *rni s olvasni.
&z obje"tumo" *rsna" az alap #elttele, hog' eg' ol'an szerializlt #ormra hozzu" az
obje"tumot, ami elegend adatot tartalmaz a "sbbi visszaala"*tshoz. -zrt h*vju" az
obje"tumo" *rst s olvasst obje"tum szerializ)ina".
Dbje"tumo"at a "$vet"ez "t mdon lehet szerializlni.
8voli eljrsh*vs (Semote Method .nvocation, K4J)
1liens s szerver "$z$tti obje"tumtvitel esetn
1$nn'!sQl'Q perziszten)ia (Light)eight persistence)
-g' obje"tum ar)hivlsa "sbbi hasznlatra
2?.2., 9!+ekt4mok szerializlsa
Az ObectOutputStream (rsa
& "$vet"ez "drszlet meg"apja a pontos idt a 'ate obje"tum "onstru"torna" a
megh*vsval, s aztn szerializlja az obje"tumot.
FileOutputStream out = new FileOutputStream("theTime");
ObjectOutputStream s = new ObjectOutputStream(out);
s.writeObject("Today");
s.writeObject(new Date());
s.flush();
&z C8jectCutputStream "onstru"tort eg' msi" adat#ol'amra "ell megh*vni. &z elz
pldban az C8jectCutputStream "onstru"tora eg' 1ileCutputStream(re h*vdi", *g'
eg' jthe8imej nev! #jlba szerializlja az obje"tumot. -ze" utn eg' String (5Today6) s
eg' 'ate obje"tum *rdi" az adat#ol'amra az C8jectCutputStream )riteC8ject nev!
metdusval.
& )riteC8ject metdus szerializlja az adott obje"tumot, re"urz*van tmenti a ms ob(
je"tumo"ra val hivat"ozsait, *g' megtartja az obje"tumo" "$z$tti "ap)solatot.
&z C8jectCutputStream implementlja a 'ataCutput inter#szt, ami primit*v adatt*pu(
so" *rsra val metduso"at tartalmaz ()rite.nt, )rite1loat, )rite<T1V). -ze"et a
metduso"at hasznlju" primit*v adatt*puso" C8jectCutputStream(re val *rshoz.
& )riteC8ject metdus +otSeriali"a8le&*ception(t dob, ha a megadott obje"tum nem
szerializlhat. -g' obje"tum )sa" a""or szerializlhat, ha implementlja a Seriali"a8B
le inter#szt.
Az Obect+nputStream olvassa
& "$vet"ez pldaprogram "iolvassa a theTime #jlba elzleg "i*rt String s 'ate obje"(
tumo"at.
FileInputStream in = new FileInputStream("theTime");
ObjectInputStream s = new ObjectInputStream(in);
String today = (String)s.readObject();
Date date = (Date)s.readObject();
2<.2jl"ezels 1F=. oldal
&z C8jectCutputStream(hez hasonlan az C8ject.nputStream "onstru"tort is eg' m(
si" adat#ol'amra "ell h*vni. 4ivel eg' #jlba *rtu" az obje"tumo"at, itt is eg' 1ile.nputB
Stream(re "ell h*vni az C8ject.nputStream(et. &z olvasst az C8ject.nputStream
readC8ject metdusa vgzi. &z obje"tumo"at minden"ppen abban a sorrendben "ell
"iolvasni, ahog' az adat#ol'amra lette" *rva.
& readC8ject metdus deszerializlja a soron "$vet"ez obje"tumot. Ke"urz*van vizs(
glja a hivat"ozso"at, hog' az $sszes hivat"ozott obje"tumot is deszerializlja, *g' meg(
tartva az obje"tumo" "$z$tti "ap)solatot.
&z C8ject.nputStream adat#ol'am implementlja a 'ata.nput inter#szt, ami primit*v
adatt*puso"at olvas metduso"at tartalmaz. & 'ata.nput metdusai a 'ataCutput me(
tdusaina" olvas meg#eleli (read.nt, read1loat, read<T1...).
2?.2.2 9!+ekt4m szerializ.i' a gyakorlat!an
-g' obje"tum )sa" a""or szerializlhat, ha az osztl'a implementlja a Seriali"a8le in(
ter#szt. -zt "$nn'en megtehetj+".
public class MySerializableClass i%ple%ents Serializable {
...
}
& Seriali"a8le eg' +res inter#sz (vag'is nin)s eg'etlen tagja sem), )sa" a szerializlhat
osztl'o" el"+l$n*tsre val. &z osztl' pldn'aina" a szerializlst az C8jectCutputB
Stream osztl' de/ault:riteC8ject nev! metdusa vgzi. & deszerializ)i az C8ject.nB
putStream osztl' de/aultSeadC8ject metdusval vgezhet el. & legt$bb obje"tumhoz
ez a mdszer elg is. ,hn' esetben viszont lassQ lehet, s az osztl'na" is sz+"sge le(
het a szerializ)i #eletti hatrozottabb vezrlsre.
A szerializ.i' testresza!sa
&z obje"tum szerializ)i testreszabshoz "t metdus #el+l*rsra van sz+"sg+n". a
)riteC8ject metdus (*rsra) s a readC8ject (olvassra vag' adat#riss*tsre).
& )riteC8ject de"larlsa.
private void writeObject(ObjectOutputStream s) throws
IOException {
s.defaultWriteObject();
// testreszabott szerializl kd
}
& readC8ject metdust de"larlsa.
private void readObject(ObjectInputStream s) throws IOException
{
s.defaultReadObject();
// testreszabott deszerializl kd
...
// objektumokat frisst kd (ha szuksges)
}
4ind"t metdust pontosan a bemutatott mdon "ell de"larlni.
& )riteC8ject s a readC8ject metduso" )sa" az adott osztl' szerializlsrt #elel(
se", a sz+l osztl'o" esetleges szerializlsa automati"us. Ba eg' osztl'na" a sz+losz(
tl'aival teljesen $sszhangban "ell lennie a szerializ)ihoz, a""or az &*ternali"a8le in(
ter#szt "ell implementlni.
1FF. oldal Java programozs (1.3. verzi)
2?.2.7 Az '(ternali"able inter"#sz im&lementlsa
Bog' eg' osztl' teljes mrt"ben "ontrolllni tudja a szerializ)is #ol'amatot, imple(
mentlnia "ell az &*ternali"a8le inter#szt. &*ternali"a8le obje"tumo"nl )sa" az obje"(
tum eg' jreprezent)ijaj "er+l az adat#ol'amra. &z obje"tum maga #elels a tartalom
*rsrt, olvassrt s a sz+lobje"tumo""al val eg'+ttm!"$dsrt.
&z &*ternali"a8le inter#sz de#in*)ija.
pacage java.io;
public interface Externalizable extends Serializable {
public void writeExternal(ObjectOutput out)
throws IOException;
public void readExternal(ObjectInput in)
throws IOException, java.lang.ClassNotFoundException;
}
-g' &*ternali"a8le osztl'nl a "$vet"ez"et "ell szem eltt tartani.
implementlnia "ell a java.io.&*ternali"a8le inter#szt.
implementlnia "ell a )rite&*ternal metdust az obje"tum llapotna" az elment(
shez.
implementlnia "ell a read&*ternal metdust a )rite&*ternal ltal az adat#ol'amra
*rt tartalom visszall*tshoz.
"+ls adat#ormtum *rsrt s olvassrt "izrlag a )rite&*ternal s a read&*B
ternal metduso" #elelse".
& )rite&*ternal s a read&*ternal metduso" publi"usa", *g' lehetsget n'Qjtana"
arra, hog' eg' "liens az obje"tum metdusai nl"+l is tudja olvasni/*rni az obje"tum
adatait, ezrt )sa" "evsb biztonsg(ign'es esete"ben al"almazhata".
2?.2.; Az #rz#keny in"orm.i' megv#d#se
Ba eg' osztl'un" elrst biztos*t bizon'os #orrso"hoz, gondos"odnun" "ell a "n'es
in#orm)i" s #+ggvn'e" vdelmrl. & deszerializ)i alatt az obje"tum private lla(
pota is hel'rell. Gldul eg' #jlle*r eljrs hozz#rst biztos*t eg' oper)is rendszer(
#orrshoz. Ba ez eg' adat#ol'amon "ereszt+l ll hel're, a sebezhetsge miatt visszal(
se"re ad lehetsget. -zrt a vals idben t$rtn szerializ)i esetben nem szabad #el(
ttlen+l megb*zni az obje"tum(reprezent)i" valdisgban. 1t mdon oldhatju" meg
a problmt. vag' nem szabad az obje"tum rz"en' tulajdonsgait az adat#ol'amrl
visszall*tani, vag' ellenrizni "ell azo"at.
& vdelem legeg'szer!bb mdja az rz"en' adato" private transient("nt val #elt+n(
tetse. & transistent s a static adattago" nem "er+lne" szerializlsra, *g' nem is jelen(
ne" meg az adat#ol'amon. 4ivel a private adattago" olvasst s *rst nem lehet az
osztl'on "*v+lrl hel'ettes*teni, az osztl' transient tagjai *g' biztonsgban vanna".
& "+l$n$sen rz"en' osztl'o"at eg'ltaln nem szabad szerializlni. -z esetben eg'(
szer!en nem szabad implementlni sem a Seriali"a8le, sem az &*ternali"a8le inter#szt.
,hn' osztl'nl "+l$n$sen eln'$s az *rs s az olvass arra val hasznlata, hog' a
deszerializls "$zben "ezelni s ellenrizni tudju" az rz"en' adatot. & )riteC8ject s
a readC8ject metduso" itt )sa" a hel'es adatot mentheti", vag' ll*thatj" hel're. Ba a
2<.2jl"ezels 1F?. oldal
hozz#rs tiltsra van sz+"sg, eg' +otSeriali"a8le&*ception dobsa elg, hog' megta(
gadju" a hozz#rst.
2?.7.)zvetlen el#r#s llomnyok
&z "i s bemen adat#ol'amo" eddig a le)"ig soros hozz#rs!e" volta", mel'e" *rsa
s olvassa az elejtl a vgig sorban t$rtni". @r az il'en adat#ol'amo" hihetetlen+l
hasznosa", de eze" )sa" a soros hozz#rs! mdiumo" (pap*r s mgnesszalag) "$vet(
"eztben j$tte" ltre. 4srszrl a "$zvetlen hozz#rs! #jlo", nem(soros, hanem v(
letlenszer! ("$zvetlen) hozz#rst biztos*tana" a #jl tartalmhoz.
8eht mirt van sz+"sg "$zvetlen elrs! #jlo"raA 3ondoljun" )sa" a t$m$r*tett SJG
#ormtumra. & SJG llomn'o" #jlo"at tartalmazna", t$m$r*tve a hel'ta"ar"ossg mi(
att. & SJG llomn'o" tartalmazna" eg' az llomn' vgn elhel'ezett dir bejeg'zst,
mel' megmutatja, hog' a "+l$nb$z #jlo" hol tallhat" a SJG belsejben.
2eltve, hog' eg' meghatrozott #jlt a"arun" "i)somagolni a SJG(bl, soros hozz#rs
esetn a "$vet"ez"et "ell tenn+n".
4egn'itju" a SJG #jlt
Hgig"eress+" a SJG #jlt a "eresett llomn'rt
1i)somagolju" az llomn't
@ezrju" a SJG(et
-zt az algoritmust hasznlva, tlagban legalbb a SJG llomn' #elt vgig "ell olvasni a
"eresett llomn'rt. 1it$m$r*thetj+" ug'anezt a #jlt a SJG(bl so""al hat"on'abban,
ha a "$zvetlen elrs! #jl see!, azaz "eressi #un")ijt hasznlju" a "$vet"ez lpse"
szerint.
4egn'itju" a SJG #jlt
4eg"eress+" a dir bejeg'zst s azon bel+l a "it$m$r*tend #jl hel't
4eg"eress+" (vissza#el) a #jl poz*)ijt a SJG(en bel+l
1i)somagolju" az llomn't
@ezrju" a SJG(et
-z a mdszer so""al hat"on'abb, mert )sa" a dir bejeg'zst s "i)somagoland #jlt
"ell beolvasni. & java.io )somagban tallhat Sandom,ccess1ile osztl' implementlja
"$zvetlen elrs! #jlo"at.
1?<. oldal Java programozs (1.3. verzi)
2?.7., A kzvetlen el#r#s llomnyok hasznlata
& Sandom,ccess1ile osztl' mind *rsra, mind olvassra al"almas, ellenttben a java.io
)somag ltal tartalmazott "i(, s bemeneti adat#ol'amo""al. -g' Sandom,ccess1ile ob(
je"tumot a szerint hozun" ltre "+l$nb$z paramtere""el, hog' *rni vag' olvasni a"a(
run" vele. & Sandom,ccess1ile nin)s "ap)solatban a java.io )somag "i(, s bemeneti
adat#ol'amaival, s ez az, amirt nem az .nputStream s CutputStream leszrmazottja.
-nne" az a htrn'a, hog' a Sandom,ccess1ile(ra nem al"almazhat" azo" a sz!r",
amel'e" az adat#ol'amo"ra igen. Babr a Sandom,ccess1ile implementlja a 'ata.nB
put s 'ataCutput inter#szt, teht ha "sz*t+n" eg' ol'an #iltert, mel' vag' az 'ata.nB
puttal vag' a 'ataCutputtal eg'+ttm!"$di", ez m!"$dni #og nhn' soros elrs! llo(
mnn'al valamint az $sszes "$zvetlen elrs!vel.
Ba meg a"arju" n'itni olvassra az input.t*t llomn't, a""or a "$vet"ez "ddal tehet(
j+" meg.
new RandomAccessFile("input.txt", "r");
Ba olvasni s *rni is a"arju".
new RandomAccessFile("input.txt", "rw");
-ze" utn a read s )rite metduso" a szo"sos mdon llna" rendel"ezsre.
2ontos tovbbi szolgltats, hog' ezen "*v+l az a"tulis llomn' poz*)i "$zvetlen+l is
manipullhat a "$vet"ez metduso""al.
int s!ip7ytesDintF elre mozgatja az a"tulis poz*)it
void see!DlongF a megadott poz*)ira mozgatja az a"tulis poz*)it
long get1ile-ointerDF le"rdezi a pillanatn'i poz*)it
2?.;.*ov!!i osztlyok #s inter"#szek
&z elze"ben bemutatott osztl'o"on s inter#sze"en "*v+l a java.io )somag t$bbe"
"$z$tt a "$vet"ez osztl'o"at s inter#sze"et tartalmazza.
,ile
-g' #jlt "pvisel a nat*v #jlrendszerben. 9trehozhatun" a 1ile obje"tumot eg' llo(
mn'hoz a nat*v #jlrendszerben, s adato"at "rdezhet+n" le az llomn'rl. Gldul a
teljes elrsi Qtjt.
,ile*escriptor
-g' #jl"ezelt vals*t meg n'itott llomn'o" s porto" esetn. ,em so"szor hasznlt.
2<.2jl"ezels 1?1. oldal
Stream)okeni"er
&dat#ol'am tartalmt t$rdeli rsze"re (to"ene"re). & to"ene" a leg"isebb eg'sge" (sza(
va", szimblumo"), mel'e"et a sz$veg#elismer algoritmuso" "pese" #elismerni. &
StreamTo!eni"er obje"tumo" brmel' sz$veges #jl elemzsre hasznlhat". Gldul
hasznlhat a #orrsllomn'o"tl a vltozneve", opertoro", illetve B849 #jlo"bl
B849 tago" "ig'!jtsre. (& StringTo!eni"er(hez hasonl #eladatot lt el.)
,ilename,ilter
& 1ile osztl' list metdusa hasznlja, hog' mel' llomn'o" vanna" eg' listzand
"$n'vtrban. & 1ilename1ilter hasznlhat az eg'szer! "i#ejezs st*lusQ llomn' "ere(
s mint" implementlsra, mint pldul A.doc, vag' a"r so""al bon'olultabb sz!r(
se"re is.
8allhata" mg eg'b input osztl'o" a java.util."ip )somagban.
Checked+nputStream #s CheckedOutputStream
-g' "i( s bementi adat#ol'am pr, mel' eg' ellenrz $sszeget szm*t az adato" *rsa(
"or s olvassa"or.
*eflaterOutputStream #s +nflater+nputStream
@et$m$r*ti s "it$m$r*ti az adato"at *rs"or s olvass"or.
-.+P+nputStream #s -.+POutputStream
3SJG #ormban t$m$r*tett adato"at *r s olvas.
.ip+nputStream #s .ipOutputStream
SJG #ormban t$m$r*tett adato"at *r s olvas.
2?.5.-llenrz k#rd#sek
4i az *r "ara"ter)satorn" absztra"t seA
4i az olvas "ara"ter)satorn" absztra"t seA
4i az *r bjt)satorn" absztra"t seA
4i az olvas bjt)satorn" absztra"t seA
4el'i" metdus hasznlhat az $sszes olvas )satorna esetnA
4el'i" metdus hasznlhat az $sszes *r )satorna esetnA
4ondjon pldt memria()satornra%
Wrjon pldt a 1ile osztl' szolgltatsaira%
4i" a sz!r #ol'amo"A
=gaz vagy hamis8 =ndokol+a!
& Sandom,ccess1ile eg' sz!r #ol'am.
1?2. oldal Java programozs (1.3. verzi)
& vletlen elrs! llomn' mutatjt lehet ll*tani.
& vletlen elrs! llomn' seg*tsgvel eg' #jlna" brmel'i" bjtja mdos*that.
&z obje"tum#ol'amra *rhat primit*v adat is.
&z obje"tum#ol'amra *rt obje"tumna" implementlnia "ell a Seriali"a8le inter#szt.
& pu##erez #ol'amhoz mindig )satolni "ell eg' msi" #ol'amatot.
A kvetkezk kz>l melyik hoz l#tre +nputStreamReader o!+ekt4mot8
(4inden hel'es vlaszt jel$lj$n meg%)
ne) .nputStreamSeaderDne) 1ile.nputStreamDOdataOFFL
ne) .nputStreamSeaderDne) 1ileSeaderDOdataOFFL
ne) .nputStreamSeaderDne) 7u//eredSeaderDOdataOFFL
ne) .nputStreamSeaderDOdataOFL
ne) .nputStreamSeaderDSystem.inFL
A kvetkezk kz>l melyik korrekt8
Sandom,ccess1ileDOdataO@ OrOFL
Sandom,ccess1ileDOrO@ OdataOFL
Sandom,ccess1ileDOdataO@ OreadOFL
Sandom,ccess1ileDOreadO@ OdataOFL
Melyikre nem k#&es a ,ile osztly8
&"tulis "$n'vtr bell*tsa
7z+l "$n'vtr nevne" elll*tsa
Ollomn' t$rlse
Ollomn'(o") "eresse
21.3'!jtemn'e" 1?3. oldal
2,.Dy+tem#nyek
& g'!jtemn'e" (vag' ms nven trol", "ontnere", "olle")i") ol'an t*pus"onstru"(
)is esz"$z$", mel'ne" )lja eg' vag' t$bb t*pusba tartoz obje"tumo" memriban t$r(
tn $ssze#oglal jelleg! trolsa, manipullsa s le"rdezse.
2,.,. A gy+tem#ny keretrendszer
& g'!jtemn' "eretrendszer (Java Collections 1rame)or!@ J;2) eg' eg'sges ar)hite"(
tQra, ami a g'!jtemn'e" hasznlatra s manipullsra szolgl. & g'!jtemn' "eret(
rendszer tartalmazza.
inter"#szek. absztra"t adatt*puso" reprezent)ija. &z inter#sze" lehetv teszi" a
g'!jtemn'e" szolgltatsaina" (publi"us inter#szne") megvals*ts(#+ggetlen b(
rzolst.
im&lement.i'k. a g'!jtemn' inter#sze" "on"rt implement)ii. 2"nt eze"
az Qjra#elhasznlhat adatstru"tQr".
algorit4sok. azo" a metduso", amel'e" hasznos m!velete"et vals*tana" meg,
mint pldul a "eress vag' a rendezs eg' obje"tumon, ami implementlhat "+l$n(
b$z g'!jtemn' inter#sze"en. -ze"et az algoritmuso"at t$bbala"Qna" h*vju". azo(
nos metdus hasznlhat "+l$nb$z implement)i" esetn is. -lssorban az algo(
ritmuso" Qjra#elhasznlhat #un")ionalitsa.
& J;2(hez hasonl legismertebb megolds a ;ZZ n'elv! szabvn'os minta("$n'vtr
(Standard Template Li8rary, 789).
2,.,., A Dy+tem#ny keretrendszer hasznlatnak elnyei
& Java 3'!jtemn' "eretrendszer az albbi eln'$""el rendel"ezi".
:skkenti a "e+leszt#si idt
4ivel "sz adatstru"tQr" s algoritmuso" llna" rendel"ezs+n"re, a 3'!jtemn' "e(
retrendszer lehetv teszi, hog' a program #ontosabb rszvel #oglal"ozzun", ahel'ett,
hog' ala)son'szint! programozssal "elljen #oglal"oznun".
Nveli a &rogramozs se!ess#g#t #s mins#g#t
& J;2 g'ors s j minsg! algoritmus(, s adatstru"tQra(implement)i""al rendel"e(
zi". & "+l$nb$z implement)i" minden eg'es inter#sznl #el)serlhet", *g' a progra(
mo"at "$nn'en $ssze lehet hangolni a g'!jtemn' implement)i""al. 8$bb idt tud
arra #ord*tani, hog' n$velje a programo" minsgt s sebessgt, mivel megszabad*tja
attl a rabszolgamun"tl, hog' sajt adatstru"tQr"at "elljen *rnia.
Megengedi az egy>ttmkd#st a nem ka&.sol'd' A<=-k kztt
Ba "t "+l$nb$z #+ggvn'"$n'vtr nem illeszthet eg'mshoz "$zvetlen+l, a""or lehet
a"r a "eretrendszer a "$z$s nevez az illeszts megteremtse rde"ben.
1?>. oldal Java programozs (1.3. verzi)
:skkenti az A+ A<=-k hasznlatnak #s tan4lsnak neh#zs#g#t
Kgen minden eg'es &GJ(nl eg' "is segd &GJ(t "sz*tette" arra, hog' manipullja az
eg'es g'!jtemn'e"et. 1evs $ssze#+ggs volt az erre a )lra "sz+lt g'!jtemn'e" segd
&GJ(jai "$z$tt, *g' "+l$n("+l$n meg "ell tanulni azo"at, *g' "$nn'en hibt ejthet+n"
eze" hasznlatval. &z ltalnos g'!jtemn' inter#sze" megjelenstl ez a problma
mr a mQlt.
Megknny(ti az A+ A<=-k tervez#s#t
& tervez"ne" s a "ivitelez"ne" nem "ell Qjra "idolgozni az &GJ(t, valahn'szor "sz*(
tene" eg' g'!jtemn'e"re alapozott &GJ(t, hanem az ltalnos g'!jtemn' inter#szt
hasznlhatj".
-lseg(ti a szo"tver A+ra"elhasznlhat'sgt
&z g'!jtemn' inter#sze""el $sszhangba hozott Qj adatstru"tQr" termszetesen Qjra
#elhasznlhat". Basonlan, Qj algoritmus #ejlesztse"or "$nn'en hozz"ap)solhat lesz
az $sszes ltez eddigi megvals*tshoz.
2,.2. =nter"#szek
& g'!jtemn' inter#sze" "+l$nb$z t*pusQ g'!jtemn'e" le*rst teszi" lehetv, amint
az albbi bra mutatja. -ze" az inter#sze" lehetv teszi" a "+l$nb$z g'!jtemn'(rep(
rezent)i" eg'sges "ezelst. & g'!jtemn' inter#sze" a 3'!jtemn' "eretrendszer
alapjaina" te"inthet".
&hog' az brn lthat, a g'!jtemn' inter#sze" hierar)hit al"otna". a Set eg' spe)ia(
lizlt #ajtja a Collection(ne", a SortedSet spe)ializlt #ajtja a Set(ne", s *g' tovbb. &
hierar)hia "t eg'mstl #+ggetlen #bl ll. a Map nem Collection leszrmazott.
Heg'+" #ig'elembe, hog' a g'!jtemn' inter#sze" (ltalnos, generi"us) t*pus param(
tere""el dolgozna". Gldul a Collection inter#sz de"lar)ija.
public interface Collection<E> ...
&z Z&[ szintaPis azt jelenti, hog' az inter#sz ltalnos (generi"us) t*pussal m!"$di".
&mi"or de"larlun" eg' Collection(t, meg tudju" hatrozni, hog' mil'en t*pusQ obje"tu(
mot tartalmaz a g'!jtemn'. & t*pus paramter a #ord*tprogram szmra lehetv te(
szi, hog' )sa" az adott t*pusQ obje"tumot engedje belera"ni a g'!jtemn'be, *g' )s$"(
"enti a #utsidej! hib" szmt.
4i"or megrtj+", hog'an hasznlju" eze"et az inter#sze"et, a""or megrtett+" a 3'!j(
temn' "eretrendszer ln'egt. -z a #ejezet be #ogja mutatni az ltalnos irn'elve"et,
hog' hog'an lehet hat"on'an hasznlni eze"et az inter#sze"et. 8ovbb irn't ad,
hog' mi"or mel'i" inter#szt hasznlju". 4inden eg'es inter#szhez tanulni #ogun"
programozsi tr+""$"et, hog' seg*tsen megoldani a legt$bb "sbbi problmt.
21.3'!jtemn'e" 1?0. oldal
Bog' megrizze a g'!jtemn' inter#sze" "ezelhetsgt, a Java plat#orm nem "+l$n*ti
el az inter#sze"et a tartalom mdos*thatsga szempontjbl. (@izon'os esete"ben a
g'!jtemn'e" lehetne" lland", #iP mret!e" vag' ppen )sa" bv*thet".) & mdos*t(
si lehetsge" az eg'es inter#sze"ben szabadon vlaszthat". az adott implement)i
vlaszthatja azt is, hog' nem tmogatja az $sszes m!veletet. Ba eg' nem tmogatott m!(
velet "er+l megh*vsra, az adott g'!jtemn' implement)i az <nsupportedCperationB
&*ception "ivtelt dobja. & Java plat#orm minden ltalnos )lQ implement)ija tmo(
gatja az $sszes op)ionlis m!veletet is.
2,.2., A gy+tem#ny inter"#szek
Collection
& g'!jtemn' hierar)hia g'$"ere. & Collection obje"tumo" )soportjt reprezentlja,
ami"et eleme"ne" h*vju". & g'!jtemn' inter#sz a leg"isebb "$z$s nevez a g'!jtemn'
implement)i" "$z$tt, s a""or rdemes ezt vlasztani, ha a lehet legnag'obb rugal(
massgra van sz+"sg. & g'!jtemn'e" nhn' t*pusa engedl'ezi az eleme" dupli"l(
st, a t$bbi pedig nem. & g'!jtemn'e" nhn' t*pusa rendezett, a t$bbi nem rendezett.
& Java plat#orm nem biztos*t "$zvetlen implement)it ehhez az inter#szhez, ehel'ett a
so""al spe)i#i"usabb al(inter#sze"et implementlja.
Set
-z a g'!jtemn' nem tartalmazhat dupli"lt eleme"et. -zt az inter#szt halmazo" tro(
lsra szo"t" hasznlni, mint pldul a #ut pro)essze" halmaza.
/ist
& List rendezettsget biztos*t g'!jtemn', nha sze"ven)ina" is h*vj". & list" tartal(
mazhatna" dupli"lt eleme"et. & lista #elhasznlja egsz indeP seg*tsgvel hozz tud
#rni az eleme"hez (hasonlan a t$mb$" indePelshez), valamint lehetsget "ap a lista
eg'szer! bejrshoz.
0ueue
8ipi"usan ez a g'!jtemn' szo"ta trolni a #eldolgozsra vr eleme"et. & Collection
alapm!veletein #el+l lehetsget ad tovbbi beszQrsi, "ivteli, s megte"intsi m!vele(
te"re.
9egt$bbsz$r, de nem sz+"sg"ppen az eleme"et 2J2D (/irstBinB/irstBout) elv szerint
rendezi. & "ivtele" "$z$tt van a prioritsi sor, amel'i" rendezi az eleme"et valamil'en
szempont alapjn. @rmil'en rendezst hasznlun", a sor elejn van az az elem, amit
legelsz$r el szeretnn" tvol*tani a remove vag' a poll metdus megh*vsval. & 2J2D
sor minden Qj elemet a sor vgre illeszt be. 4s #ajta soro" hasznlhatna" ms elhel'e(
zsi szabl'o"at.
Meg+egyz#s. & kueue g'!jtemn'e""el terjedelmi o"o"bl a tovbbia"ban nem #oglal"ozun".
1ap
& "ul)so"at rt"e"" "pezi le. & le"pezse" nem tartalmazhatna" dupli"lt "ul)so(
"at. 4inden eg'es "ul)s leg#eljebb eg' rt"et tud le"pezni. 4s"nt #ogalmazva a Map
"ul)s(rt" pro"at trol.
1?E. oldal Java programozs (1.3. verzi)
&z utols "t g'!jtemn' inter#sz )supn rendezett verzija a Set(ne" s a Map(ne".
SortedSet
&z eleme" n$ve"v sorrendben trolst teszi lehetv. 7zmos "iegsz*t m!velettel
biztos*tja, hog' "ihasznlhassu" a rendezettsget. -zt az inter#szt szo"t" hasznlni
ol'an rendezett halmaz"nt, mint pldul eg' szlista vag' tagsgi lista.
Sorted1ap
& le"pezse" "ul)s szerinti n$ve"v sorrendbe trolst teszi lehetv. & rendezett le(
"pezst hasznlju" a rendezett g'!jtemn'e" "ul)s/rt" prjainl. Jl'en pldul a sz(
tr vag' a tele#on"$n'v.
2,.2.2 A Collection inter"#sz
& Collection az obje"tumo" (eleme") )soportjt trolja.
public interface Collection<E> extends Iterable<E> {
// Basic Operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element); // Optional
boolean remove(Object element); // Optional
Iterator iterator();
// Bulk Operations
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c); // Optional
boolean removeAll(Collection<?> c); // Optional
boolean retainAll(Collection<?> c); // Optional
void clear(); // Optional
// Array Operations
Object[] toArray();
<T> T[] toArray(T[] a);
}
&z inter#szne" van metdusa, ami megmondja hn' elem van a g'!jtemn'ben (si"e,
is&mpty), leellenrzi, hog' az adott obje"tum benne van(e a g'!jtemn'ben (contains),
hog' hozzadjon elemet g'!jtemn'hez vag' elveg'e belle (add, remove), bejrt (ms
nven itertort) szolgltat a bejrshoz (iterator).
&z add metdus 8oolean visszatrsi rt"e azt jelzi, hog' t$rtnt(e a g'!jtemn'ben
vltozs. Lg'anis ol'an implement)i esetn, ahol az eleme" t$bbsz$r$s trolsa nem
megengedett, nem t$rtni" vltozs, ha az elemet mr eleve tartalmazta a g'!jtemn'.
Basonlan, a remove metdus esetn )sa" a""or vltozi" a g'!jtemn' llapota, ha ben(
ne volt az adott elem, s *g' si"eres volt a "ivtel.
A gy+tem#nyek !e+rsa
1t mdja van hog' bejrju" a g'!jtemn'e"et. &z eg'i" a /orBeach )i"lussal, a msi" az
itertoro" hasznlatval.
21.3'!jtemn'e" 1?=. oldal
,or-each .ikl4s
& /orBeach )i"lus megengedi, hog' bejrju" a g'!jtemn't vag' t$mb$t a /or )i"lus hasz(
nlatval. & "$vet"ez "d a /orBeach )i"lust hasznlja, s minden elemet "+l$n sorban
jelen*t meg.
for (Object o : collection)
System.out.println(o);
=tertorok
&z itertor eg' ol'an obje"tum, ami megengedi, hog' bejrju" a g'!jtemn't s eltvo(
l*tsu" az eleme"et a g'!jtemn'bl, ha a"arju".
&z .terator inter#sz.
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); // Optional
}
& has+e*t metdus visszatrsi rt"e true, ha az iter)ina" van mg be nem jrt ele(
me. & remove metdus eltvol*tja a g'!jtemn'bl az utols elemet, amit a ne*t h*vs(
ra "aptun". & remove metdus "ivtelt dob, ha mg nem volt "iolvasott elem.
&z .terator.remove az eg'etlen biztonsgos Qt, hog' mdos*tsu" a g'!jtemn't az iter(
)i #ol'amn. & visel"eds meghatrozatlan, ha a g'!jtemn' ms eg'b Qton mdos*tva
lett, am*g az iter)i #ol'amatban volt.
Jtertor hasznlata )lszer! a /orBeach )i"lus hel'ett a "$vet"ez esete"ben.
8$r$lni szeretnn" a bejrs "$zben.
1i szeretnn" )serlni az eleme"et.
-g'szerre t$bb#le bejrsra is sz+"sg van.
& "$vet"ez metdus mutatja, hog'an hasznlju" az itertort sz!rne" eg' tetszleges
g'!jtemn'ben (ezzel tte"intj+", hog' a g'!jtemn' hog'an tvol*tja el a spe)i#i"us ele(
me"et).
static void filter(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); )
if (!cond(i.next()))
i.remove();
}
-z az eg'szer! "is "drszlet so"oldalQ, ami azt jelenti, hog' m!"$di" brmel' g'!jte(
mn'ben, "ivtel nl"+l minden implement)iban. -z a plda bemutatja, mil'en "$n'(
n'! so"oldalQ algoritmust *rni a 3'!jtemn' "eretrendszer seg*tsgvel.
A Collection inter"#sz tmeges met'd4sai
& t$meges metduso" nem eg' elemmel, hanem egsz g'!jtemnn'el hajtana" vgre
m!velete"et. Jmplementlni lehet eze"et a metduso"at az alap metduso"at hasznlva,
br a legt$bb esetben az il'en implement)i" "evsb hat"on'a".
& t$meges metduso"
1?F. oldal Java programozs (1.3. verzi)
contains,ll
true a visszatrsi rt"e, ha a )l g'!jtemn' tartalmaz minden elemet a meghat(
rozott g'!jtemn'ben (rszhalmaz)
add,ll
4inden elemet hozzad a meghatrozott g'!jtemn'hez (uni)
remove,ll
-ltvol*tja a )lg'!jtemn'bl az $sszes ol'an elemet, amit a meghatrozott g'!jte(
mn' tartalmazott ("+l$nbsg)
retain,ll
-ltvol*tja a )lg'!jtemn'bl az $sszes ol'an elemet, amit a meghatrozott g'!jte(
mn' nem tartalmazott. &zaz, )sa" azo"at tartja meg a )lg'!jtemn'ben, ami"et a
meghatrozott g'!jtemn' is tartalmazott. (metszet)
clear
-ltvol*tja az $sszes elemet a g'!jtemn'bl.
&z add,ll, remove,ll, s a retain,ll metdus mindig true(val tr vissza, ha a )lg'!jte(
mn' mdos*tva volt a m!velet vgrehajtsa alatt.
-g' eg'szer! plda t$meges metduso" erejrl. a "$vet"ez "i#ejezs eltvol*tja az e
elem minden pldn't a c g'!jtemn'bl.
c.removeAll(Collections.singleton(e));
1+l$n$sen pra"ti"us, ha le a"arju" t$r$lni az $sszes null elemet a g'!jtemn'bl.
c.removeAll(Collections.singleton(null));
& "i#ejezs hasznlja a Collections.singleton metdust, amel'i" eg' stati"us g'rt me(
tdus, ami visszaad eg' ol'an g'!jtemn't, amel' )sa" eg' meghatrozott elemet tartal(
maz.
A Collection inter"#sz tm! met'd4sai
& to,rray metduso" ol'ano", mint eg' h*d a g'!jtemn'e" s a rgebbi &GJ(" "$z$tt,
ami" t$mb$"et vrna" a bementen. & t$mb metduso" lehetv teszi", hog' a g'!jte(
mn' tartalmt t$mb"nt is elrhetv teg'". & paramtere" nl"+li vltozat "sz*ti el
eg' Qj C8ject t$mb$t. & bon'olultabb #ormja lehetv teszi, hog' a h*v paramter"nt
eg' t$mb$t adjon, s az eredmn' is il'en t*pusQ t$mb lesz.
Gldul, #elttelezz+", hog' c eg' g'!jtemn'. -""or a "$vet"ez metdus ltrehoz eg'
t$mb$t, amel'ne" mtere megeg'ezi" a g'!jtemn' mretvel, elemei pedig a g'!jte(
mn' elemei.
Object[] a = c.toArray();
8eg'+" #el, hog' c ismert s )sa" sztringet tartalmaz (c t*pusa CollectionZString[). -"(
"or hasznlhat a "$vet"ez vltozat is.
String[] a = c.toArray(new String[0]);
2,.2.7 A Set inter"#sz
& Set eg' spe)ilis Collection, amel' nem tartalmaz dupli"lt eleme"et. & Set nem tartal(
maz Qj metdust a Collection(tl $r$"$lte"hez "pest. & Set a tartalmazott obje"tumo"
21.3'!jtemn'e" 1??. oldal
eYuals s a hashcode metdust hasznlja arra, hog' a t$bbsz$r$s trolst "isz!rje. 1t
Set obje"tum a""or eg'enl, ha ug'anazon eleme"et tartalmazz". & Set inter#sz.
public interface Set<E> extends Collection<E> {
// Basic Operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element); // Optional
boolean remove(Object element); // Optional
Iterator iterator();
// Bulk Operations
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c); // Optional
boolean removeAll(Collection<?> c); // Optional
boolean retainAll(Collection<?> c); // Optional
void clear(); // Optional
// Array Operations
Object[] toArray();
<T> T[] toArray(T[] a);
}
& Java plat#orm hrom ltalnos Set implement)it tartalmaz. a 9ashSet, TreeSet, s
Lin!ed9ashSet. 9ashSet esetn az eleme"et eg' hash tblban trolja, ez a legjobb v(
laszts, ha az eleme" bejrsa nem #ontos. & TreeSet az eleme"et eg' piros(#e"ete #ban
trolja, ami az eleme" bejrst hat"on'an meg tudja vals*tani, de eg' elem elrse,
beszQrsa lassabb, mint a 9ashSet esetn. & Lin!ed9ashSet $tv$zi a ln)olt list"at a
hash tblval.
,zz+n" eg' eg'szer! pldt. 2elttelezz+", hog' van eg' c nev! Collection(+n", s sze(
retnn" mg eg' Collection(t ltrehozni, amel' ug'anazo"at az eleme"et tartalmazza, de
minden elemet )sa" eg'szeresen.
Collection<Type> noDups = new HashSet<Type>(c);
9trej$n eg' Set@ amel' nem tartalmaz dupli"lt eleme"et, de a c $sszes eleme benne
van. &z alaprtelmezett "onverzis "onstru"tort hasznlju" a tn'leges ltrehozsra.
A Set inter"#sz ala&vet mveletei
& si"e metdus visszatr az eleme" szmval. &z add metdus a Set(hez adja a megadott
elemet, ha nem tudja, a""or /alse rt""el tr vissza. & remove metdus eltvol*tja a
megadott elemet a listbl, ha ez si"er+lt, a""or /alse rt""el tr vissza. &z iterator me(
tdus visszaad eg' .terator obje"tumot.
& "$vet"ez plda a paran)ssori paramter"nt "apott szava"at eltrolja az s obje"tum(
ban, "i*rja a dupli"lt szava"at, vg+l az eltr szava" szmt, s a szava"at.
i%port java.util.*;
public class FindDups {
public static void main(String args[]) {
Set<String> s = new HashSet<String>();
for (String a : args)
if (!s.add(a))
System.out.println("Duplicate: " + a);
System.out.println(s.size()+" distinct words: "+s);
}
}
2<<. oldal Java programozs (1.3. verzi)
2uttassu" a programot.
java FindDups i came i saw i left
& "imenet a "$vet"ez lesz.
Duplicate: i
Duplicate: i
4 distinct words: [i, left, saw, came]
4egjeg'ezz+", hog' a re#eren)ia t*pust szo"s inter#sz t*pussal (Set) le*rni, m*g az ob(
je"tum t*pusa eg' implement)is osztl' lesz (9ashSet). -z eg' nag'on ajnlott prog(
ramozsi g'a"orlat, amivel "$nn'ebb rugalmas "dot "sz*teni. Ba "sbb esetleg ab)
sorrendben a"arju" a szava"at "i*rni, )supn le "ell )serlni 9ashSet(et TreeSet(re. -z
az eg'szer!, eg'soros vltoztats il'en eredmn't produ"l.
Duplicate word: i
Duplicate word: i
4 distinct words: [came, i, left, saw]
A Set inter"#sz tmeges met'd4sai
& t$meges metduso" "+l$n$sen j szolglatot teszne" a Set esetn, hiszen *g' eg'szer!(
en megvals*that" az algebrbl ismert halmazm!velete".
s2.contains,llDsIF:
Jgaz logi"ai rt""el tr vissza, ha s2 rszhalmaza s2(ne" (sI rszhalmaza s2(ne", ha
s2 tartalmazza az sI $sszes elemt).
s2.add,llDsIF:
&z s2(be s2 s sI unija "er+l.
s2.retain,llDsIF.
&z s2(be s2 s sI metszete "er+l.
s2.remove,llDsIF.
&z s2(be s2 s sI "+l$nbsge (s20sI) "er+l.
Ba azt szeretnn", hog' az uni, metszet vag' "+l$nbsg "pzs sorn eg'i" halmaz se
mdosuljon (ahog' az matemati"ailag is vrhat), a""or a "$vet"ez mdon "ell al"al(
mazni a metduso"at.
Set<Type> union = new HashSet<Type>(s1);
union.addAll(s2);
Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
Set<Type> difference = new HashSet<Type>(s1);
difference.removeAll(s2);
,zz+" meg Qjra a 1ind'ups programot. &zt a"arju" tudni, hog' mel'i" szava" #ordul(
na" el eg'szer a vitatott listban, s mel' szava" #ordulna" el t$bbsz$r, de nem a"a(
run" dupln "i*rt szava"at ltni. -zt Qg' tudju" elrni, hog' "t halmazt hozun" ltre. az
eg'i" minden elemet tartalmaz, a msi" )sa" a dupli"lta"at. ,zz+" a programot.
i%port java.util.*;
public class FindDups2 {
public static void main(String args[]) {
Set<String> uniques = new HashSet<String>();
Set<String> dups = new HashSet<String>();
21.3'!jtemn'e" 2<1. oldal
for (String a : args)
if (!uniques.add(a))
dups.add(a);
// Destructive set-difference
uniques.removeAll(dups);
System.out.println("Unique words: " + uniques);
System.out.println("Duplicate words: " + dups);
}
}
Ba le#uttatju" az elz paran)ssori paramterlistval (i came i sa) i le/t), a""or a "$vet(
"ez eredmn't "apju".
Unique words: [left, saw, came]
Duplicate words: [i]
& halmazelmleti szimmetri"us di##eren)ia a "$vet"ez"ppen ll*that el.
Set<Type> symmetricDiff = new HashSet<Type>(s1);
symmetricDiff.addAll(s2);
Set<Type> tmp = new HashSet<Type>(s1);
tmp.retainAll(s2));
symmetricDiff.removeAll(tmp);
& symmetric'i//(ben elsz$r a "t halmaz unijt ll*tju" el az add,ll metdussal,
majd a temp(ben elll*tott metszetet "ivonju" belle a remove,ll metdussal.
A Set inter"#sz tm! met'd4sai
-ze" a metduso" semmiben nem trne" el a Collection(nl le*rta"tl.
2,.2.; A /ist inter"#sz
& List eg' rendezett Collection. & List dupli"ltan is tartalmazhat eleme"et. & CollectiB
on(bl $r$"$lt metduso"on "*v+l a List inter#sz a "$vet"ez lehetsge"et tartalmaz(
za.
Goz*)i szerinti elrs. &z eleme" a listban bet$lt$tt hel'+" alapjn is elrhet".
1eress. & megadott elemet "i"eresi a listbl, s visszaadja a poz*)ijt.
@ejrs. &z .terator alapQ szolgltatso" bv+lte".
Kszlista. 9ehetv tesz rszlista m!velete"et.
& List inter#sz.
public interface List<E> extends Collection<E> {
// Positional Access
E get(int index);
E set(int index, E element); // Optional
boolean add(E element); // Optional
void add(int index, E element); // Optional
E remove(int index); // Optional
abstract boolean addAll(int index,
Collection<? extends E> c); //Optional
int indexOf(Object o);
int lastIndexOf(Object o);
2<2. oldal Java programozs (1.3. verzi)
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
List<E> subList(int from, int to);
}
& Java plat#orm "t alapvet List megvals*tst tartalmaz. ,rraylist s Lin!edList.
Collection met'd4sok
& metduso" $r$"ldne" a Collection(bl, s mindent az elvrsain"na" meg#elelen
hasznlhatun".
& remove metdus mindig az els el#ordul elemet t$rli a listbl. &z add s add,ll
metdusnl az elem a lista vgre "er+l. Gldul a list2 vgre msolja a listI elemeit.
list1.addAll(list2);
& "$vet"ez "d el"sz*ti a listH nev! listt, amel'ne" eredmn'e ug'anaz, mint az el(
zne", de nem rontja el list2(et.
List<Type> list3 = new ArrayList<Type>(list1);
list3.addAll(list2);
1t List obje"tum a""or eg'enl, ha ug'anazo" az eleme" ug'anol'an sorrendben #or(
dulna" el benne.
A &oz(.i' szerinti el#r#s #s keres#s met'd4sai
& set s remove metduso" eg' adott elemhez poz*)ionlna" s #el+l*rj", vag' eltvol*t(
j" azt. & "eressi metduso" (inde*C/ s last.nde*C/) visel"edse t$"letesen meg(
eg'ezi" String osztl'nl megismerte""el.
&z add,ll metdus az adott Collection elemeit elhel'ezi az adott poz*)itl "ezdden.
&z eleme"et sorrendben hel'ezi el eg' .terator seg*tsgvel.
& "$vet"ez metdus meg)serli a "t rt"et a listban.
static <E> void swap(List<E> a, int i, int j) {
E tmp = a.get(i);
a.set(i, a.get(j));
a.set(j, tmp);
}
& "$vet"ez metdus arra hasznlja a s)ap(et, hog' vletlenszer!en "everje az eleme(
"et.
static void shuffle(List<?> list, Random rnd) {
for (int i = list.size(); i > 1; i--)
swap(list, i - 1, rnd.nextInt(i));
}
&z algoritmus tallomra #el)serli az adott list elemeit -z eg' eg'szer! mdszer a "eve(
rsre. 4srszt az $sszes "evers valsz*n!sge megeg'ezi", #eltve, hog' a #orrs is v(
letlenszer!, valamint g'ors ()sal list.si"eDFB2 )sere t$rtnt). & "$vet"ez program bemu(
tat eg' plda #elhasznlst.
21.3'!jtemn'e" 2<3. oldal
i%port java.util.*;
public class Shuffle {
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
for (String a : args)
list.add(a);
Collections.shuffle(list, new Random());
System.out.println(list);
}
}
& programot mg r$videbb s g'orsabb tudju" tenni. &z ,rray osztl'na" van eg' asB
List nev! stati"us metdusa, ami eg' t$mb elemeit List("nt is elrhetv teszi. -z a me(
tdus nem msolja t a t$mb elemeit, )supn re#eren)i""al dolgozi", s ug'anazo" az
eleme" a listbl s a t$mbbl is elrhet".
& visszaadott List obje"tum nem tartalmazza az op)ionlis add s remove metduso"at,
hiszen a t$mb mrete nem vltozhat. ,zz+" meg a "$vet"ez "dot.
i%port java.util.*;
public class Shuffle {
public static void main(String args[]) {
List<String> list = Arrays.asList(args);
Collections.shuffle(list);
System.out.println(list);
}
}
=tertorok
& List inter#sz esetn termszetesen hasznlhat az stl $r$"$lt mdszer a bejrsra,
de van eg' ennl t$bb lehetsget n'Qjt megolds is. a List.erator. -z az inter#sz meg(
engedi a lista "tirn'Q bejrst s az ehhez "ap)sold tovbbi m!velete"et. & List.tB
erator inter#sz.
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous ();
int nextIndex();
int previousIndex();
void remove(); // Optional
void set(E o); // Optional
void add(E o); // Optional
}
Brom metdust (has+e*t, ne*t s remove) az .terator(tl $r$"$lte, a has-revious s
previous a vissza#el t$rtn bejrst tmogatja.
& "$vet"ez plda vissza#el jrja be a listt.
for (ListIterator<Type> i = list.listIterator(list.size());
i.hasPrevious(); ) {
Type t = i.previous();
...
}
2<>. oldal Java programozs (1.3. verzi)
& List inter#sz "t#le paramterezssel tud List.terator(t g'rtani. Garamter nl"+l a
lista elejre poz*)ionl, m*g az int paramtert vr verzi esetn a paramter alapjn po(
z*)ionl List.terator tr vissza a list.terator metdus.
&z indeP vag' "urzor poz*)i a "$vet"ez alapjn rtend. n hosszQsgQ lista esetn n+2
rvn'es rt"e van az indePne", <(tl n(ig minden egsz. &z indeP mindig "t elem "$(
z$tt van a "$vet"ez bra szerint.
,zz+" meg az inde*C/ m!"$dst.
public int indexOf(E o) {
for (ListIterator<E> i = listIterator(); i.hasNext(); )
if (o==null ? i.next()==null : o.equals(i.next()))
return i.previousIndex();
return -1; // Object not found
}
Ba az inde*C/ metdus visszatrsi rt"e i.previos.nde*DF, a""or megtallta a "eresett
obje"tumot.
&z .terator inter#sz szolgltatsa a remove metdus, mel' a g'!jtemn'bl eltvol*tja
az adott elemet. & List.terator inter#sz tovbbi "t metdust n'Qjt, amel' mdos*tja a
listt. set s add. & set metdus #el+l*rja az a"tulis elemet. & "$vet"ez metdus hasz(
nlja set metdust az adott elem $sszes el#ordulsna" )serlse sorn.
public static <E> void replace(List<E> s, E val, E newVal) {
for (ListIterator<E> i = s.listIterator(); i.hasNext(); )
if (val==null ? i.next()==null : val.equals(i.next()))
i.set(newVal);
}
-g' "is tr+"" van ebben a pldban a val s az i.ne*tDF eg'enlsg vizsglatban. Ba a
val rt"e null, a""or a +ull-ointer&*ception "ivtel nem vltdi" "i, hiszen ha val rt(
"e null lenne, a""or a #eltteles opertor msi" ga rt"eldi" "i.
&z add metdussal Qj eleme"et adhatun" a List(hez az a"tulis "urzorpoz*)i el. & "$(
vet"ez plda bemutatja, hog' hog'an lehet a val minden el#ordulst "i)serlni a
ne)=als listval.
public static <E> void replace(List<E> s, E val,
List<E> newVals) {
for (ListIterator<E> i = s.listIterator(); i.hasNext(); ){
if (val==null ? i.next()==null : val.equals(i.next())) {
i.remove();
for (E e : newVals)
i.add(e);
}
}
}
3#szlista mvelet
& su8ListDint /rom.nde*@ int to.nde*F rszlista metdus visszaadja a lista eg' szelett, a
paramter"nt megadott indePe" #ig'elembevtelvel. /rom.nde* rsze, de to.nde* nem
21.3'!jtemn'e" 2<0. oldal
rsze a visszaadott szeletne". (-ml"eztet+l. a String osztl' su8string metdusa is *g'
m!"$di".) -zrt g'a"ori plda a "$vet"ez.
for (int i = fromIndex; i < toIndex; i++) {
...
}
& visszaadott lista "ap)solatban marad az eredeti listval. Wg' brmil'en mdos*ts t$r(
tni" a rszlistn, az hatssal lesz az eredetire is, st ez #ord*tva is igaz. -zrt nin)s sz+"(
sg tovbbi rszlista metduso"ra. ,zz+n" erre eg' ol'an pldt, ami"or a lista eg' r(
szt a"arju" t$r$lni.
list.subList(fromIndex, toIndex).clear();
& "$vet"ez pld" )sa" eg' rszlistban "eresne".
int i = list.subList(fromIndex, toIndex).indexOf(o);
int j = list.subList(fromIndex, toIndex).lastIndexOf(o);
&rra rdemes #ig'elni, hog' itt a visszaadott indePe" a tallt eleme" rszlistabeli indePeit
jelenti", nem az eredeti list(belie"et.
& "$vet"ez metdus is a su8List(et hasznlja, hog' "$nn'*tse a mun"t. & #eladata az,
hog' a lista eg' adott mret! vgt levgja, s eg'ben vissza is adja azt. 4s"nt #ogal(
mazva eg' indeP mentn t$rtn sztvgsrl van sz.
public static <E> List<E> dealHand(List<E> deck, int n) {
int deckSize = deck.size();
List<E> handView = deck.subList(deckSize - n, deckSize);
List<E> hand = new ArrayList<E>(handView);
handView.clear();
return hand;
}
& "$vet"ez program az elz deal9and metdust hasznlja a Collection.suh//le(val
eg'+tt, hog' 02 lapbl osszon le. & program 2 paran)ssori paramtert hasznl. a "eze"
szmt s az eg' "zbe osztand lapo" szmt.
i%port java.util.*;
class Deal {
public static void main(String[] args) {
int numHands = Integer.parseInt(args[0]);
int cardsPerHand = Integer.parseInt(args[1]);
// Make a normal 52-card deck
String[] suit = new String[]
{"spades", "hearts", "diamonds", "clubs"};
String[] rank = new String[]
{"ace","2","3","4","5","6","7","8",
"9","10","jack","queen","king"};
List<String> deck = new ArrayList<String>();
for (int i = 0; i <suit.length; i++)
for (int j = 0; j <rank.length; j++)
deck.add(rank[j] + " of " + suit[i]);
Collections.shuffle(deck);
for (int i=0; i<numHands; i++)
System.out.println(dealHand(deck, cardsPerHand));
}
}
2<E. oldal Java programozs (1.3. verzi)
& #ut program eze"et az adato"at jelen*ti meg.
% java Deal 4 5
[8 of hearts, jack of spades, 3 of spades, 4 of spades,
king of diamonds]
[4 of diamonds, ace of clubs, 6 of clubs, jack of hearts,
queen of hearts]
[7 of spades, 5 of spades, 2 of diamonds, queen of diamonds,
9 of clubs]
[8 of spades, 6 of diamonds, ace of spades, 3 of hearts,
ace of hearts]
/ist algoritm4sok
& Collections osztl' nag'on hat"on'an hasznlhat algoritmuso"at n'Qjt list" "ezel(
sre. & "$vet"ez lista )sa" #elsorolja a #ontosabba"at.
sort. Kendezi a listt.
shu//le. Hletlenszer!en #el)serl eleme"et a listban. (Germutl.)
reverse. 4eg#ord*tja az eleme" sorrendjt a listban.
rotate. 4eg#orgatja az eleme"et.
s)ap. 2el)serl "t meghatrozott poz*)iban lev elemet.
replace,ll. &z $sszes el#ordul elemet "i)serli eg' msi"ra.
/ill. 2el+l*rja az $sszes elemet eg' meghatrozott elemre.
copy. Otmsolja a #orrslistt eg' )llistba.
8inarySearch. -g' eleme"et "eres a binris "eressi algoritmust hasznlva.
inde*C/Su8List. Hisszatr az els ol'an indePszel, amel'nl "ezdd rszlista eg'en(
l a msi" listval.
last.nde*C/Su8List. Hisszatr az utols ol'an indePszel, amel'nl "ezdd rszlista
eg'enl a msi" listval.
2,.2.5 1ap inter"#sz
& Map ol'an trol, ami "ul)s(rt" pro"at tartalmaz. & Map nem tud trolni dupli"lt
"ul)so"at, eg' "ul)shoz )sa" eg' rt" rendelhet. & Map inter#sz.
public interface Map {
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
void putAll(Map<? extends K,? extends V> t);
void clear();
21.3'!jtemn'e" 2<=. oldal
public Set<K> keySet();
public Collection<V> values();
public Set<Map.Entry<K,V>> entrySet();
public interface Entry {
K getKey();
V getValue();
V setValue(V value);
}
}
& Java plat#orm hrom "+l$nb$z Map implement)it tartalmaz. 9ashMap, TreeMap,
Lin!ed9ashMap.
A 1ap inter"#sz "!! met'd4sai
& metduso" (put, get, contains(ey, contains=alue, si"e, s is&mpty) hasonl"ppen
m!"$dne", mint a Collection(nl. & "$vet"ez program "ilistzza a sz$vegben szerepl
szava"at s azo" g'a"orisgt.
i%port java.util.*;
public class Freq {
public static void main(String args[]) {
Map<String, Integer> m =
new HashMap<String, Integer>();
// Initialize frequency table from command line
for (String a : args) {
Integer freq = m.get(a);
m.put(a, (freq == null ? 1 : freq + 1));
}
System.out.println(m.size() + " distinct words:");
System.out.println(m);
}
}
& program a "$vet"ez"ppen #uttathat.
java Freq if it is to be it is up to me to delegate
& program "imenete.
8 distinct words:
{to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}
Ba bet!rendi sorrendbe a"arju" rendezni, a""or a 9ashMap(et TreeMap(re "ell )serl(
ni, s a "$vet"ez"et *rja "i a "pern're.
8 distinct words:
{be=1, delegate=1, if=1, is=2, it=2, me=1, to=3, up=1}
Ba a #elbu""ans sorrendjre vag'un" "*vn)sia", a""or ez a Lin!ed9ashMap(el te(
g'+", s a "imenet a "$vet"ez lesz.
8 distinct words:
{if=1, it=2, is=2, to=3, be=1, up=1, me=1, delegate=1}
1t Map obje"tum "$nn'edn $sszehasonl*that. &""or eg'enle", ha a "ul)s(rt" pr(
jai" megeg'ezne". (& sorrend nem szm*t.))
& Map "onstru"tora eg' Qj Map obje"tumot hoz ltre eg' mr meglv Map obje"tum
tartalmval.
2<F. oldal Java programozs (1.3. verzi)
Map<K, V> copy = new HashMap<K, V>(m);
A 1ap inter"#sz tmeges mveletei
& clear metdus t$rli a Map teljes tartalmt. & put,ll metdussal tmsolhat eg' m(
si" obje"tum tartalma. & "$vet"ez pldban a paramter"nt "apott "t Map unijt
ll*tju" el.
static <K, V> Map<K, V> new AttributeMap(
Map<K, V>defaults, Map<K, V> overrides) {
Map<K, V> result = new HashMap<K, V>(defaults);
result.putAll(overrides);
return result;
}
Collection n#zetek
& Map tartalmt hrom#le szempont alapjn nzhetj+" vissza.
!eySet. "ul)so" halmaza (Set)
values. rt"e" g'!jtemn'e (Collection)
entrySet. "ul)s(rt" pro" halmaza (Set)
& "$vet"ez plda a "ul)so" halmazna" "i*ratsa.
for (KeyType key : m.keySet())
System.out.println(key);
Lg'anez itertorral.
for (Iterator<Type> i=m.keySet().iterator(); i.hasNext(); )
if (i.next().isBogus())
i.remove();
1ul)s(rt" pro" "i*rsa.
for (Map.Entry<KeyType, ValType> e : m.entrySet())
System.out.println(e.getKey() + ": " + e.getValue());
2,.2.B 9!+ekt4mok rendez#se
Kendezz+n" eg' tetszleges tartalmQ l listt.
Collections.sort(l);
Ba a lista String(e"et tartalmaz, a""or azt (Lni)ode(beli) ab) sorrendbe rendezhetj+".
Ba pedig :tum ('ate) tago"at tartalmaz, a""or idrendi sorrendbe. Bog'an t$rtni"
ezA & String s a 'ate is megvals*tj" a Compara8le inter#szt. -z az inter#sz tartal(
mazza a legltalnosabb rendezsi eljrso"at, amel' megengedi az osztl'na", hog' au(
tomati"usan rendezve leg'en valamel' szempont szerint. & "$vet"ez tblzat $ssze#og(
lalja a leg#ontosabb osztl'o"at, amel'e" az inter#szt megvals*tj".
21.3'!jtemn'e" 2<?. oldal
9sztly Ala&#rtelmezett sorrend
7yte eljeles szm
Character eljelnl"+li szm
Long eljeles szm
.nteger eljeles szm
Short eljeles szm
'ou8le eljeles szm
1loat eljeles szm
7ig.nteger eljeles szm
7ig'ecimal eljeles szm
7oolean /alse ^ true
1ile rendszer#+gg ab) szerinti a teljes nv alapjn
String ab) szerinti
'ate idrendi
Collation(ey ab) szerinti a hel'i jellemz" alapjn
Ba a listn" ol'an obje"tumo"at tartalmaz, amel'e" nem vals*tj" meg a Compara8le
inter#szt, a""or a Collections.sortDlistF h*vs ClassCast&*ception "ivtelt #og dobni.
0a+t sszehasonl(that' osztly l#trehozsa
& Compara8le inter#sz eg'etlen metdust tartalmaz.
public interface Comparable<T> {
public int compareTo(T o);
}
& comprateTo metdus $sszehasonl*tja az obje"tumot az tvett obje"tummal, s vissza(
trsi rt"e negat*v egsz, nulla, vag' pozit*v egsz, ha az tvev obje"tum "isebb,
eg'enl vag' nag'obb, mint az tvett obje"tum. Ba a metdus nem tudja $sszehasonl*(
tani a "t obje"tumot, a""or ClassCast&*ception(t dob.
& "$vet"ez osztl' embere" nevt tartalmazza $sszehasonl*t esz"$z$""el "iegsz*tve.
i%port java.util.*;
public final class Name i%ple%ents Comparable<Name> {
private final String firstName, lastName;
21<. oldal Java programozs (1.3. verzi)
public Name(String firstName, String lastName) {
if (firstName == null || lastName == null)
throw new NullPointerException();
this.firstName = firstName;
this.lastName = lastName;
}
public String firstName() { return firstName; }
public String lastName() { return lastName; }
public boolean equals(Object o) {
if (!(o instanceof Name))
return false;
Name n = (Name) o;
return n.firstName.equals(firstName) &&
n.lastName.equals(lastName);
}
public int hashCode() {
return 31*firstName.hashCode() + lastName.hashCode();
}
public String toString() {
return firstName + " " + lastName;
}
public int compareTo(Name n) {
int lastCmp = lastName.compareTo(n.lastName);
return (lastCmp != 0 ? lastCmp :
firstName.compareTo(n.firstName));
}
}
-bben a r$vid pldban az osztl' nmileg "orltozott. nem tmogatja a "$zps nevet,
"$telez megadni a vezet"( s "eresztnevet, s nem veszi #ig'elembe a n'elvi sajtoss(
go"at. &zonban *g' is illusztrl nhn' #ontos pontot.
& "onstru"tor ellenrzi, hog' az paramterei null rt"!e"(e. -z minden ltrej$v
+ame obje"tum szmra biztos*tja, hog' jl #ormzott leg'en, *g' semel'i" ms me(
tdus nem dob +ull-ointer&*ception(t.
& hashCode metdus Qjrade#inilt. (&zonos obje"tumo"na" azonos hash "dju"na"
"ell lennie)
&z eYuals metdus /alse rt""el tr vissza, ha a paramter"nt "apott msi" obje"(
tum null, vag' hel'telen t*pus. Jl'en esetben a compareTo metdus #utsidej! "iv(
telt dob.
& toString metdus Qjrade#inilsval a +ame olvashat #ormban jelen*thet meg.
-z mindig j $tlet, "+l$n$sen ol'an obje"tumo" esetn, ami"et g'!jtemn'be hel'e(
z+n". & "+l$nb$z t*pusQ g'!jtemn'e" toString metdusai jl olvashat #ormban
jelen*ti" meg a g'!jtemn'e" tartalmt.
& comparateTo metdus $sszehasonl*tja az obje"tumo" leg#ontosabb rszt (lastB
+ame). (4int ahog' itt is, ms"or is g'a"ran tudju" hasznlni a rsze" t*pusa szerin(
ti alaprtelmezett rendezst.) & last+ame adattag String t*pusQ, *g' az alaprtelme(
zett rendezs pontosan meg#elel lesz. Ba az $sszehasonl*tsi eredmn'e" nulltl
"+l$nb$ze", amel' eg'enlsget jelent, "sz vag'un". )sa" vissza "ell adni az ered(
mn't. Ba a leg#ontosabb rsze" eg'enl", $sszehasonl*tju" a "$vet"ez"et (itt /irstB
+ame). Ba ez alapjn sem d$nthet el a sorrend, tovbblp+n".
21.3'!jtemn'e" 211. oldal
& "$vet"ez plda #lp*ti a neve" listjt.
i%port java.util.*;
public static void main(String[] args) {
Name nameArray[] = {
new Name("John", "Lennon"),
new Name("Karl", "Marx"),
new Name("Groucho", "Marx"),
new Name("Oscar", "Grouch")
};
List<Name> names = Arrays.asList(nameArray);
Collections.sort(names);
System.out.println(names);
}
}
& program #utsa utn a "$vet"ezt *rja "i.
[Oscar Grouch, John Lennon, Groucho Marx, Karl Marx]
A Comparator-ok
Bog'an tudju" az obje"tumo"at az alaprtelmezett rendezstl eltr ms sorrendbe
rendezniA Jl'en esetben j$n jl a Comparator inter#sz, amel' eg'etlen eg'szer! met(
dust tartalmaz.
public interface Comparator<T> {
int compare(T o1, T o2);
}
& compare metdus $sszehasonl*tja a "t paramtert, visszatrsi rt"e negat*v egsz,
nulla, vag' pozit*v egsz, ha az els paramter "isebb, eg'el vag' nag'obb, mint a m(
sodi". Ba valamel'i" paramter hel'telen t*pusQ a Comparator szmra, a compare
metdus ClassCast&*ception(t dob.
8eg'+" #el, hog' van eg' &mployee nev! osztl'un".
public class Employee i%ple%ents Comparable<Employee> {
public Name name() { ... }
public int number() { ... }
public Date hireDate() { ... }
...
}
Ba az &mployee obje"tumo" alaprtelmezett rendezse a +ame tag szerinti, a""or nem
eg'szer! a legmagasabb rangQ dolgoz"at "i"eresni a listbl. & "$vet"ez program el(
"sz*ti a listt.
i%port java.util.*;
class EmpSort {
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
// Employee Database
static final Collection<Employee> employees = ... ;
212. oldal Java programozs (1.3. verzi)
public static void main(String[] args) {
List<Employee>e = new ArrayList<Employee>(employees);
Collections.sort(e, SENIORITY_ORDER);
System.out.println(e);
}
}
2,.7. =m&lement.i'k
&z implement)i" az elz #ejezetben le*rt inter#sze"et vals*tj" meg (implementl(
j"). &z albbia"ban az implement)i" #ajtit lthatju".
Sltalnos .#lA implement)i". a legg'a"rabban hasznlt implement)i", min(
dennapos hasznlatra tervezt"
0&e.ilis .#lA implement)i". arra tervezt", hog' spe)ilis hel'zete"ben eset(
ben hasznlju". ,em szabvn'os teljes*tmn' "ara"teriszti"" megjelen*tsre,
hasznlati s visel"edsi "orltozso"ra.
)onk4rens implement)i". ers "on"uren)ia tmogatsra tervezt", t$bbn'ire
az eg'szlQ teljes*tmn' rovsra. -ze" az implement)i" a java.util.concurrent
)somag rszt "pzi".
:somagol' implement)i". a t$bbi implement)ival $ssze"ombinlva hasznl(
hat" (g'a"ran az ltalnos )lQval), hog' ePtra #un")ionalitst biztos*tsana", vag'
bizon'os #un")i"at "orltozzana"
)#nyelmi implement)i". mini implement)i", tipi"usan a g'rt metduso"on
"ereszt+l rhet" el. 1n'elmes s hat"on' alternat*vt biztos*tana" az ltalnos )(
lQ implement)i" szmra spe)ilis esete"ben.
A!sztrakt implement)i". vzlatos implement)i", ami" meg"$nn'*ti" az eg'ni
implement)i" ltrehozst.
&z ltalnos()lQ implement)i"at az albbi tblzat #oglalja $ssze.
5ash
t!la
Stm#retezhet
tm!
%a Fn.olt
lista
5as(t' t!la U
Fn.olt lista
Set 9ashSet TreeSet Lin!ed9ashSet
List ,rrayList Lin!edList
Map 9ashMap TreeMap Lin!ed9ashMap
& tblzatban lthat hog' a Set, a List s a Map inter#sze" t$bb#ajta ltalnos )lQ im(
plement)ija hasznlhat. & SortedSet s a SortedMad inter#sze"ne" nin)s sajt sora
a tblzatban, eze"ne" az inter#sze"ne" eg' implement)ija van (TreeSet s TreeB
Map).
&z ltalnos )lQ implement)i" mind biztos*tj" az $sszes op)ionlis m!veletet, amit
az inter#sze" tartalmazna". 4indeg'i" megengedi a null elemet mind a "ul)so", mind
az rt"e" esetn. -g'i" sem szin"ronizlt. 4indeg'i" szerializlhat (Seriali"a8le), s
biztos*t eg' publi"us clone metdust.
& "orbbival ellenttes el"pzelst jelent az a tn', hog' eze" az implement)i" nem
szin"ronizlta". & rgebbi =ector s 9ashta8le g'!jtemn'e" szin"ronizlta". & jelenle(
21.3'!jtemn'e" 213. oldal
gi meg"$zel*ts azrt ala"ult "i, mert a g'!jtemn'e"et s!r!n hasznlj" ol'an hel'e(
"en, ahol a szin"ronizlhatsg nem jelent eln't. Jl'ene" pldul az eg'szlQ hasznlat,
)sa" olvassi hasznlat, s ha eg' ol'an nag'obb adat obje"tum rszt "pzi", amel'
meg)sinlja a sajt szin"roniz)ijt. Oltalnos &GJ tervezsi tapasztalat az, hog' ne "$(
telezz+" a #elhasznlt ol'an szolgltats hasznlatra, amit nem so"szor hasznl. K(
adsul a sz+"sgtelen szin"roniz)i adott "$r+lmn'e" "$z$tt a"r holtpontot is ered(
mn'ezhet.
Oltalnos szabl', hog' program*rs"or az inter#sze"en, s nem az implement)i"on
"ell gondol"odni. -z az o"a anna", hog' ebben a #ejezetben nin)sene" plda programo".
9egt$bb esetben az implement)i megvlasztsa )sa" a teljes*tmn't be#ol'solja.
&hog' azt a "orbbia"ban eml*tett+", eg' eln'ben rszes*tett programozi st*lus az, ha
vlasszun" eg' implement)it a Collection ltrehozsa"or, s r$gt$n hozz rendelj+" az
Qj Collection(t eg' ol'an vltozhoz, ami adott inter#sz t*pusQ (vag' eg' ol'an eljrs(
na" adju" t a Collection(t, ami eg' adott inter#sz t*pusQ paramtert vr). Wg' a prog(
ram nem #+gg majd eg' adott implement)i esetn az ahhoz hozzadott Qj metduso"(
tl, ezltal a programoz brmi"or szabadon vltoztathatja az implement)it, mi"or
jobb teljes*tmn't szeretne elrni, vag' a m!"$dsi rszlete"et mdos*tani.
2,.7., Sltalnos .#lA Set im&lement.i'k
Brom ltalnos )lQ Set implement)i ltezi". 9ashSet, TreeSet, s Lin!ed9ashSet.
Oltalban eg'szer! eld$nteni azt, hog' mel'i"et "ell hasznlni. & 9ashSet so""al g'or(
sabb, mint a TreeSet ("onstans vgrehajtsi id szemben a logaritmi"us idvel a legt$bb
m!velet esetn), de nem biztos*t rendezhetsget. Ba a SortedSet inter#sz m!veleteire,
vag' eg' rt" szerint rendezett iter)ira van sz+"sg, a""or a TreeSet hasznlata java(
solt, eg'b esetben a 9ashSet.
& Lin!ed9ashSet bizon'os rtelemben eg' tmenetet "pez a 9ashSet s a TreeSet "$(
z$tt. 4egvals*tst te"intve ez eg' ol'an hash(tbla, amine" elemei eg' ln)olt lista se(
g*tsgvel vanna" $ssze"$tve, *g' rendezett(beszQrsos iter)it biztos*t (a legrit"bban
hasznlt elemet szQrja be a legs!r!bben hasznltba), s majdnem ol'an g'orsan #ut,
mint a 9ashSet. & Lin!ed9ashSet implement)ija meg"*mli a hasznljt az ol'an
nem spe)i#i"lt, ltalban "aoti"us rendezstl, mint a 9ashSet esetben, valamint a
TreeSet esetben #elmer+l t$bblet "$ltsge"tl is.
2ig'elemre mlt, hog' 9ashSet hasznlata esetn az iter)i" szma linerisan arn'os
a benne trolt bejeg'zse" szmval, valamint a beszQrso" szmval (a "apa)itssal).
-miatt eg' tQl magas "ezdeti "apa)its vlasztsa esetn #eleslegesen pazarolju" az idt
s a memrit. 4srszt a tQl ala)son' "ezdeti "apa)its vlaszts esetn szintn idt
veszt+n" azzal, hog' az adatstru"tQrt mindig t "ell msolnun", mi"or a "apa)itst n$(
velj+". Ba nem spe)i#i"lun" "ezdeti "apa)itst, a""or az alapbell*ts lp rvn'be,
ami 1E. & "apa)itst mindig #el#ele "ere"*ti" a leg"$zelebbi "ett hatvn'ra. & "ezdeti
"apa)itst a "onstru"tor int paramtere"nt adhatju" meg. & "$vet"ez "dsor eg'
ol'an 9ashSet pldn' ltrehozst mutatja be, ahol a "ezdeti "apa)its E>.
Set<String> s= new HashSet<String>(64);
& Lin!ed9ashSet(ne" hasonl bell*tsi paramterei vanna", mint a 9ashSet(ne", de az
iter)i idejt nem be#ol'solja a "apa)its. & TreeSet nem rendel"ezi" bell*tsi para(
mtere""el.
21>. oldal Java programozs (1.3. verzi)
2,.7.2 Sltalnos .#lA /ist im&lement.i'k
1t ltalnos )lQ List implement)i ltezi". ,rrayList s Lin!edList. 9egg'a"rabban
valsz*n!leg az ,rrayListXet #ogju" hasznlni. 1onstans elrsi idt biztos*t a lista ele(
meine" poz*)ionlt elrse"or, eg'szer! s g'ors. ,em sz+"sges )sompont obje"tumot
#oglalni minden lista elemhez, s "pes "ihasznlni a System.arraycopy n'Qjtotta el(
n'$"et, ami"or eg'szerre t$bb listaelemet "ell mozgatun".
&bban az esetben, ha g'a"ran "ell eleme"et hozzadni eg' lista elejhez, vag' iterlni a
listn, hog' valamel'i" bels elemt "it$r$lj+", a""or rdemes Lin!edList(t hasznlni.
-ze" a m!velete" "onstans id alatt vgrehajtdna" eg' Lin!edListBben, m*g eg' ,rrayB
List(ben lineris idej!e", de ezrt )serbe nag' rat "ell #izetni a teljes*tmn' tern. &
poz*)ionlt elrs lineris idej! Lin!edList esetn, m*g ug'anez "onstans ,rryList(nl,
tovbb ez a "onstans(#a"tor a Lin!edList esetben so""al rosszabb.
&z ,rrayListBne" eg' ll*that paramtere a "ezdeti "apa)itsa. -z azt hatrozza meg,
hog' hn' eleme leg'en az ,rryaList(ne", mieltt n$velni "ne az eleme" szmt. &
Lin!edList(ne" nin)s ll*that paramtere.
2,.7.7 Sltalnos .#lA 1ap im&lement.i'k
& hrom ltalnos )lQ Map Jmplement)i a 9ashMap, a TreeMap s a Lin!ed9ashB
Map. Ba sz+"sg van $sszeg'!jt$tt in#orm)ira, a TreeMap(et hasznlju", ha a legjobb
sebessg "ell, s nem sz+"sgese" az iter)i", hasznlhatju" a 9ashMap(et, ha az utb(
bihoz hasonl sebessg "ell s iter)i is, a""or hasznljun" Lin!ed9ashMap(et. Ba(
sonl"pp, a Set implement)i blo""ban minden ug'anQg' m!"$di", mint a Map imp(
lement)iban.
2,.;. Algoritm4sok
-bben a #ejezetben a Java plat#orm ltal "*nlt Qjra #elhasznlhat, so"ala"Q algoritmu(
so" eg' rszvel #oglal"ozun". 4indeg'i"+" a Collections osztl' stati"us metdusa. &z
algoritmuso" szles s"lja a List(e"nl m!"$di". :e eg' pr tetszleges "olle")i" ese(
tben is m!"$di".
2,.;., 3endez#s
& sort algoritmus Qjrarendezi a listt. & m!velet "t #ormja adott. &z eg'szer!bb #orma
veszi a listt, s rendezi azt az eleme" termszetes (alaprtelmezett) sorrendjben.
Jtt eg' eg'szer! program, ami "i*rja bet!rendben a paran)ssori paramtere"et.
i%port java.util.*;
public class Sort {
public static void main(String args[]) {
List<String> l = Arrays.asList(args);
Collections.sort(l);
System.out.println(l);
}
}
2uttassu" a programot.
java Sort i walk the line
21.3'!jtemn'e" 210. oldal
& "$vet"ez "imenetet "apju".
[i, line, the, walk]
& program megmutatta, hog' ezt az algoritmust nag'on "$nn'! hasznlni.
8eg'+" #el, hog' vanna" anagramm"at tartalmaz szlistin". 7zeretnn" "i*ratni azo(
"at a list" hossza szerinti )s$""en sorrendben, de )sa" az adott mretnl (pl. F) nem
"evesebb elem! list"at. & "$vet"ez plda megmutatja, hog' hog'an rhetj+" el ezt a
sort metdus msodi" #ormjna" seg*tsgvel.
4agu" a szlist" eg' m obje"tumban vanna" trolva. -rrl levlogatju" a meg#elel
hosszQsgQa"at. -zutn a "d rendezi a listt, $sszehasonl*tst vgez, s vgrehajtja a
#ord*tott mret szerinti rendezst. Hg+l a "d ismt vgig#ut a listn s "i*rja az eleme(
"et (a szava" )soportjt).
List<List<String>> winners = new ArrayList<List<String>>();
for (List<String> l : m.values())
if (l.size() >= minGroupSize)
winners.add(l);
Collections.sort(winners, new Comparator<List<String>>() {
public int compare(List<String> o1, List<String> o2) {
return o2.size() - o1.size();
}
});
// Szcsoportok kirsa
for (List<String> l : winners)
System.out.println(l.size() + ": " + l);
2uttassu" a programot, a minimum anagramma )soport mretvel (F) eg'+tt a "$vet"e(
z "imenetet "apju".
12: [apers, apres, asper, pares, parse, pears, prase, presa,
rapes, reaps, spare, spear]
11: [alerts, alters, artels, estral, laster, ratels, salter,
slater, staler, stelar, talers]
10: [least, setal, slate, stale, steal, stela, taels, tales,
teals, tesla]
9: [estrin, inerts, insert, inters, niters, nitres, sinter,
triens, trines]
9: [capers, crapes, escarp, pacers, parsec, recaps, scrape,
secpar, spacer]
9: [palest, palets, pastel, petals, plates, pleats, septal,
staple, tepals]
9: [anestri, antsier, nastier, ratines, retains, retinas,
retsina, stainer, stearin]
8: [lapse, leaps, pales, peals, pleas, salep, sepal, spale]
8: [aspers, parses, passer, prases, repass, spares, sparse,
spears]
8: [enters, nester, renest, rentes, resent, tenser, ternes,
treens]
8: [arles, earls, lares, laser, lears, rales, reals, seral]
8: [earings, erasing, gainers, reagins, regains, reginas,
searing, seringa]
8: [peris, piers, pries, prise, ripes, speir, spier, spire]
8: [ates, east, eats, etas, sate, seat, seta, teas]
8: [carets, cartes, caster, caters, crates, reacts, recast,
traces]
21E. oldal Java programozs (1.3. verzi)
2,.;.2 )ever#s
& "evers algoritmusa bizon'os rtelemben az ellen"ezjt teszi, mint amit a rendezs
tesz. 9erombol brmil'en rendezst, ami esetleg tallhat a listban. -z az jelenti, hog'
ez az algoritmus Qjrarendezi a listt Qg', hog' a vletlenszer!sget hasznlja az $sszes
azonos valsz*n!sggel be"$vet"ez permut)ihoz, #elttelezve a tn'legesesen rend(
szertelen #orrst. Gldul tudju" hasznlni a "everst eg' pa"li "rt'a meg"evershez a
"rt'a obje"tumaina" listjban. -zen"*v+l hasznos tesztesete", hel'zete" generls(
hoz is.
2,.;.7 )eres#s
& binris "eress algoritmus (8inarySearch metdus) eleme"et "eres a rendezett list(
ban. -nne" az algoritmusna" "t #ormja van. &z els vesz eg' listt s eg' elemet, amit
"eres (eg' "eres "ul)sot). -z a #orma #elttelezi, hog' a lista elemei rendezve vanna" a
termszetes rendezs szerint a trolban. & msodi" #orma nem az alaprtelmezett ren(
dezst al"almazza, hanem mg eg' Comparator paramtert is vr.
& visszatrsi rt" azonos mind"t #ormban. Ba a lista tartalmazza "eresett elemet,
visszatr az indePvel. Ba nem, a visszatrsi rt" negat*v, s eg'ben utal arra is, hog'
hol "ellene lennie az elemne", ha szerepelne a listban.
& "$vet"ez plda "eresi eg' adott elem megltt, s beilleszti a hel're, ha mg nem
szerepel.
int pos = Collections.binarySearch(list, key);
if (pos < 0)
l.add(-pos-1);
2,.5. -llenrz k#rd#sek
4i" a g'!jtemn'e"A
4il'en rszei vanna" a g'!jtemn' "eretrendszerne"A 4ire szolglna"A
Wrjon pldt ol'an g'!jtemn' inter#szre, amel' engedl'ezi a t$bbsz$r$s trolst%
Wrjon pldt ol'an g'!jtemn' inter#szre, amel' nem engedl'ezi a t$bbsz$r$s tro(
lst%
4i a Set inter#sz spe)ialitsa ms g'!jtemn'e"hez "pestA
4i a List inter#sz spe)ialitsa ms g'!jtemn'e"hez "pestA
4i a Map inter#sz spe)ialitsa ms g'!jtemn'e"hez "pestA
4i az itertorA 4ire hasznlhatju"A Bog'an j$n ltreA
=gaz vagy hamis8 =ndokol+a!
& Set elemei indePelhet".
-g' .terator obje"tum seg*tsgvel a "olle")i elemei t$bbsz$r is bejrhat".
& Comparator seg*tsgvel eg' TreeSet rendezettsge "*v+lrl is megadhat.
& Set implement)ii minden esetben rendezette".
21.3'!jtemn'e" 21=. oldal
& TreeSet osztl' implementlja a Set inter#szt.
4inden "olle")i implementlja az .terator inter#szt.
& "olle")iban lehet primit*v adato"at is trolni.
Melyik inter"#szt #rdemes alkalmazni8
Dl'an trol obje"tumra van sz+"sg+n", amel'i"be eg'edi eleme"et a"arun" trolni. &
sorrend nem ln'eges, de a t$bbsz$r$s trols semmi"ppen sem megengedett.
Set
List
Map
Mit tesz egy Set o!+ekt4m annak #rdek#!enI hogy ne legyenek d4&liklt ele-
mei8
&z add metdus "ivtelt dob, ha dupli"lt elemet a"arun" beszQrni.
&z add metdus /alse rt"et ad vissza, ha dupli"lt elemet a"arun" beszQrni.
& dupli"lt rt"e"et a #ord*t "isz!ri.
21F. oldal Java programozs (1.3. verzi)
22.5l'zatkezel#s
22.,. 5l'zati ala&ok
&z Jnternetre "$t$tt szm*tgpe" vag' a 8;G (Transmission Controll -rotocol) vag' az
L:G (<ser 'atagram -rotocol) proto"ollt hasznlj", amint azt az albbi brn is ltni
lehet.
Ba eg' Java programot *run", ami hasznlja a hlzatot, a #elhasznli rteget progra(
mozzu". Oltalban nin)s sz+"sg a 8;G vag' az L:G proto"ollo" "$zvetlen hasznlat(
ra, ehel'ett hasznlhatju" az osztl'o"at a java.net )somagbl. -ze" az osztl'o" rend(
szer#+ggetlen hlzati "ommuni")it biztos*tana". Ba szeretnn" tudni, hog' a progra(
mun" pontosan mel'i" osztl'o"at "ell, hog' hasznlja, meg "ell rteni az alapvet "+(
l$nbsge"et a 8;G s az L:G proto"ollo" "$z$tt.
22.,., *:<
Ba "t program megb*zhatan a"ar eg'mssal "ommuni"lni, ltrehozna" eg' "ap)so(
latot, s ezen "ereszt+l "+ldi" az adato"at, hasonlan a tele#on m!"$dshez. & 8;G X
a"r eg' tele#ontrsasg X garantlja, hog' az adat, amit "+ld+n", hel'es sorrendben (%)
megr"ezi" a vevh$z. Ba ez nem si"er+l, hibajelzst "+ld vissza.
& 8;G eg' megb*zhat pont(pont )satornt ad azo"na" az al"almazso"na", amel'e"
megb*zhat "ap)solatot "*vnna" meg. Jl'en al"almazso" pldul. 9yper Te*t TransB
/er -roto!oll (B88G), 1ile Trans/er -roto!oll (28G) s a Telnet. & hlzaton t"+ld$tt s
#ogadott adato" sorrendje elengedhetetlen az al"almazso" hel'es m!"$dshez. 4i"or
a B88G(t eg' LK9(bl val olvasshoz hasznlju", az adato"at ol'an sorrendben "ell "i(
olvasnun", ahog' azt "+ldt", "+l$nben "$nn'en lehetne az eredmn' eg' $ssze"uszlt
B849 #jl, hibs SJG #jl, vag' valami ms rvn'telen in#orm)i.
:e#in*)i. a *:< (Transmission Controll -rotocol) eg' "ap)solat alapQ proto"oll, ami az
adato" megb*zhat #ol'amt adja "t szm*tgp "$z$tt.
22.,.2 61<
&z L:G nem ad megb*zhat "ap)solatot eg' hlzaton lev "t szm*tgp "$z$tt, mivel
ez nem "ap)solat alapQ, mint a 8;G, in"bb az adato" #+ggetlen )somagjait "+ldi az al(
"almazso" "$z$tt. -ze"et a )somago"at adat)somago"na" is h*vju". & adat)somago"
"+ldse legin"bb a levele" postn t val "+ldshez hasonl*t. a szll*ts nem garantlt,
a sorrend nem #ontos, s mindeg'i" +zenet "+l$nb$zi" a msi"tl.
22.Blzat"ezels 21?. oldal
:e#in*)i. az 61< (<ser 'atagram -rotocol) eg' ol'an proto"oll, ami az adato" ol'an
#+ggetlen )somagjait tovbb*tja eg'i" szm*tgprl a msi"ra, ami"et adat)somago"(
na" h*vun", s nin)s garan)ia a megr"ezs+"re. &z L:G nem "ap)solat alapQ, mit a
8;G.
7zmos al"almazsnl a megb*zhatsg garantlsa "riti"us, hog' az in#orm)i eljus(
son a hlzat eg'i" vgrl a msi"ra. 4indemellett a "ommuni")i eg'b #ormi nem
"*vnna" meg ol'an szigorQ norm"at.
,zz+n" pldul eg' raszervert, ami a pontos idt "+ldi el a "liense"ne", ha azo"
ign'li". Ba a "liens hin'ol eg' )somagot, nem sz+"sges Qjra"+ldeni azt, mert az id
pontatlan lesz, ha msodi" prbl"ozsra "apja meg. 4i"or a "liens "t "rst irn'*t a
szerver #el, s a )somago"at rossz sorrendben "apja, a "liens szreveszi ezt, s Qjabb "(
rst "+ld. & megb*zhat 8;G proto"oll ebben az esetben nem sz+"sges, mivel az a telje(
s*tmn' rovsra mehet, s esetleg )sa" a"adl'ozza a szolgltatst.
& ping paran)s eg' msi" "it!n plda ol'an szolgltatsra, ami nem ign'el megb*zha(
t )satornt. & paran)s teszteli eg' hlzaton lev "t szm*tgp "$z$tti "ap)solatot. &
paran)sna" tudnia "ell, hog' a )somag megr"ezett(e, hog' megllap*tsa, m!"$di"(e a
"ap)solat. -g' megb*zhat )satornn ez a szolgltats se m!"$di" meg#elelen.
Meg+egyz#s. 7o" t!z#al s router Qg' van "on#igurlva, hog' ne engedje t az L:G )so(
mago"at. Ba problmn" van eg', a t!z#alon "*v+l lev szolgltatshoz val "ap)sol(
dssal, vag' a "liens nem tud hozzd )satla"ozni, engedl'ezz+" az L:G "ap)solato"at.
22.,.7 A &ortokr'l ltalnossg!an
Ba nag'vonala"ban a"arun" beszlni, azt mondju", a szm*tgp eg' eg'szer! #izi"ai
"ap)solaton "ereszt+l "ap)soldi" a hlzatra. 4inden adat ezen a "ap)solaton "eresz(
t+l r"ezi", br az adato" a szm*tgp "+l$nb$z programjait hasznlj". Bonnan tudja
a szm*tgp, hog' mel'i" al"almazsna" mel'i" adatot "ell tovbb*taniA & porto" hasz(
nlata ltal.
&z adat, amit az interneten "ereszt+l "+ldene", el van ltva )*mzsi in#orm)ival, ami
azonos*tja a )lszm*tgpet s a portjt. & szm*tgp a 32 bites JG )*mmel van azono(
s*tva, mel'et arra hasznlun", hog' az adat a meg#elel szm*tgpre r"ezzen meg. &
portot eg' 1E bites szmmal azonos*tju", amit a 8;G vag' L:G arra hasznl, hog' az
adat a meg#elel programhoz jusson.
& "ap)solat alapQ "ommuni")inl, mint amil'en a 8;G, a szerver program le"$t eg'
#oglalatot eg' jellemz portna". -nne" eredmn'e"ppen a szerver meg"ap minden
adatot, ami ezen a porton "ereszt+l r"ezi". & "liens ezutn "ommuni"lhat a szerverrel
a megadott porton "ereszt+l, amit az albbi bra illusztrl.
1e"in(.i'. a 8;G s az L:G proto"ollo" porto"at hasznlna", hog' a bej$v adato"at a
szm*tgp meg#elel programjai #el irn'*ts".
&z adat)somag alapQ "ommuni")inl, mit amil'en az L:G, az adat)somag )somago"
tartalmazz" a )llloms portszmt, s az L:G irn'*tja a meg#elel hel're a )soma(
got.
22<. oldal Java programozs (1.3. verzi)
& porto" a < ( E0030 intervallumba "ell, hog' essene", mivel 1E bites szm"nt vanna"
brzolva. & < s 1<23 "$z$tti porto" #ent vanna" tartva ol'an ismert szolgltatso"na",
mit pldul a B88G vag' az 28G vag' ms rendszerszolgltats. -ze"et a porto"at jl is(
mert porto"na" h*vju". & sajt programjain"na" nem szabad le"$tni "et.
22.,.; 5l'zati osztlyok a J1)-!an
& java programo" hasznlhatj" a java.net osztl'ain "ereszt+l a 8;G vag' L:G proto(
"ollo"at, hog' "ommuni"ljana" az Jnterneten. &z <SL, <SLConnection, Soc!et s SerB
verSoc!et osztl'o" mindeg'i"e a 8;G(n "ereszt+l "ommuni"l, m*g a 'atagram-acB
!et, 'atagramSoc!et s MulticastSoc!et osztl'o" az L:G proto"ollt hasznlj".
22.2. 63F-ek kezel#se
Ba mr sz$r#$z$tt a Neben, "tsgtelen+l hallott mr az LK9(rl, s hasznlta is a
B849 oldala"hoz val hozz#rse"hez. & legeg'szer!bb arra gondolni, hog' az LK9
eg' #jlra mutat a Neben, azonban ez nem teljesen hel'es megllap*ts. &z LK9 ms er(
#orrso"ra is tud mutatni, pldul adatbzis le"rdezse"re s paran)s "imenete"re.
:e#in*)i. az 63F (<ni/orm Sesource Locator) az interneten tallhat er#orrso"ra
tud hivat"ozni.
& "$vet"ez bra eg' ol'an LK9(t mutat, ami a Java Neboldalra mutat, amit a 7un
4i)ros'stems +zemeltet.
&hog' ltszi" is, az LK9 "t # "omponensbl tevdi" $ssze.
Groto"ollazonos*t (-rotocol identi/ier)
-r#orrs neve (Sesource name)
Jeg'ezz+" meg, hog' a proto"oll azonos*t s az er#orrs neve "ettsponttal s "t per(
jellel van elvlasztva. & proto"oll azonos*t azt a proto"ollt jelzi, ami elri a "*vnt er(
#orrst. & #enti plda a 9yperte*t Trans/er -rotocol(t (B88G) hasznlja, amit Nebolda(
la" elrshez hasznlun". & B88G )sa" eg' a so" "+l$nb$z proto"oll "$z+l. Basznl(
ju" mg a 1ile Trans/er -rotocol(t (28G), a \opher, 1ile, +e)s proto"ollo"at.
&z er#orrs neve tartalmazza az er#orrs pontos )*mt. & #ormja #+gg a hasznlt pro(
to"olltl, de a legt$bb proto"oll esetben az er#orrs nevben benne van az albbi "om(
ponense" "$z+l legalbb eg'.
22.Blzat"ezels 221. oldal
Bosztnv & gp neve, amel'en az er#orrs van
2jlnv &z elrsi Qt neve a hoszton
Gortszm &z a portszm, amel'i"re )satla"ozni a"arun"
Bivat"ozs (horgon') Ba a #jlon bel+l a"arun" elrni valamit
& legt$bb proto"ollnl a hosztnv s a #jlnv "$telez, m*g a portszm s a hivat"ozs
)sa" op)ionlis. Gldul az er#orrs nv eg' B88G t*pusQ LK9(ben megad eg' szervert
a hlzaton (hosztnv) s a do"umentum elrsi Qtjt a gpen (#jlnv), esetleg megad
eg' portszmot s eg' hivat"ozst (horgon't). & Java Neboldal LK9(ben a java.sun.com
a hosztnv.
22.2., 2R/ o!+ekt4m l#trehozsa
LK9 obje"tumot legeg'szer!bben eg' ol'an sztringbl tudun" elll*tani, ami ember
szmra olvashat #ormban tartalmazza az LK9 )*met. -z ltalban ol'an ala", hog'
ms is #elhasznlhatja az LK9(t. Gldul a 3amelan oldal LK9(e, ami Java #orrso"at
hasznl, a "$vet"ez"ppen nz "i.
http://www.gamelan.com/
& Java programban a "$vet"ezt "ell hasznlni, hog' LK9 obje"tumot hozzun" ltre.
URL gamelan = new URL("http://www.gamelan.com/");
& #enti LK9 obje"tum eg' abszolQt LK9. &z abszolQt LK9 minden in#orm)it tartal(
maz, ami sz+"sges lehet, hog' elrj+" a #orrst. -zen "*v!l ltre lehet hozni obje"tumo(
"at relat*v LK9 )*mmel is.
3elat(v 63F l#trehozsa
& relat*v LK9(e"et g'a"ran a B849 #jlo"on bel+l hasznlju". Gldul teg'+" #el, hog'
*rtun" eg' B849 #jlt, amine" a neve Joes9ome-age.html. &z oldalon bel+l vanna" lin(
"e" ms oldala"ra, pl. -icturesC/me.html s My(ids.html, ami" ug'anazon a gpen s
ug'anabban a "$n'vtrban vanna", mint a Joes9ome-age.html #jl. & lin"e" meghat(
rozhata" #jlnv"nt, amit a "$vet"ez programrszlet mutat be.
<a href="PicturesOfMe.html">Pictures of Me</a>
<a href="MyKids.html">Pictures of My Kids</a>
-ze" relat*v LK9 )*me", ahol az LK9 arra a szerverre hivat"ozi", ahol a Joes9ome-age
oldal is tallhat.
& Java programo"ban ltrehozhatun" LK9 obje"tumo"at relat*v LK9(bl is. Gldul te(
g'+" #el, hog' ismer+n" "t LK9(t a 3amelan oldalrl.
http://www.gamelan.com/pages/Gamelan.game.html
http://www.gamelan.com/pages/Gamelan.net.html
Bozzun" ltre <SL obje"tumot eze"bl az oldala"bl, hivat"ozva a "$z$s "$n'vtru"ra
(http://))).gamelan.com/pages/), mit itt.
URL gamelan = new URL("http://www.gamelan.com/pages/");
URL gamelanGames = new URL(gamelan, "Gamelan.game.html");
URL gamelanNetwork = new URL(gamelan, "Gamelan.net.html");
222. oldal Java programozs (1.3. verzi)
-z a "drszlet az <SL azon "onstru"tort hasznlja, amivel ltrehozhatun" eg' <SL
obje"tumot eg' msi" alapjn. & "onstru"tor ltalnos ala"ja a "$vet"ez.
URL(URL baseURL, String relativeURL)
&z els paramter eg' <SL obje"tum, ami az Qj <SL bzist jelzi. & msodi" paramter
eg' sztring, ami spe)i#i"lja a bzisra hivat"oz #orrs nevt. Ba a 8ase<SL nin)s meg(
adva, a "onstru"tor abszolQt LK9("nt "ezeli a relative<SL sztringet. Hiszont, ha a reB
lative<SL sztring eg' abszolQt LK9, a "onstru"tor #ig'elmen "*v+l hag'ja a 8ase<SL(t.
-z a "onstru"tor a""or is hasznos lehet, ha ol'an LK9 obje"tumot a"arun" ltrehozni,
amiben van horgon' (anchor). 8eg'+" #el, hog' a \amelan.net)or!.html #jl tartalmaz
eg' horgon't, amit 7CTTCM(na" h*vna", s a #jl aljra mutat. & "$vet"ez "d a rela(
t*v LK9 "onstru"tort hasznlja az obje"tum ltrehozsra.
URL gamelanNetworkBottom = new URL(gamelanNetwork, "#BOTTOM");
Ms 63F konstr4ktorok
&z <SL osztl' tartalmaz "t msi" "onstru"tort is az <SL obje"tumo" ltrehozshoz.
-ze" a "onstru"toro" a""or hasznosa", ha ol'an LK9(e""el dolgozun", mit pldul a
B88G, ami tartalmaz hosztnevet, #jlnevet, portszmot s hivat"ozst (horgon't) is. -z a
"t "onstru"tor a""or is hasznos lehet, ha nin)s eg' ol'an sztring+n", ami tartalmazza a
"omplett LK9(t, de ismerj+" nhn' $sszetevjt.
Gldul #elttelezz+", hog' eg' hlzat(tallz panelt #ejleszt+n" ppen, ami hasonlan
m!"$di", mint eg' #jltallz, vag'is a #elhasznl vlaszthat proto"ollt, hosztnevet,
portot s #jlnevet. 9trehozhatun" LK9(t a panel "omponenseibl. &z els "onstru"tor
az LK9(t a proto"ollbl, a hosztnvbl, s a #jlnvbl ll*tja el. &z albbi plda a \aB
melan.net.html #jlbl (ami a gamelan oldalon tallhat meg) )sinl LK9(t.
new URL("http", "www.gamelan.com", "/pages/Gamelan.net.html");
-z e"vivalens a "$vet"ezvel.
new URL("http://www.gamelan.com/pages/Gamelan.net.html");
&z els paramter a proto"oll, a msodi" a hosztnv s az utols a #jl elrsi Qtja. & #jl(
nvne" perjellel "ell "ezddnie. -z jelzi, hog' a #jl g'$"ere a hosztnvben van megadva.
& "$vet"ez "onstru"tor eg' portszmmal t$bb paramtert tartalmaz az elzh$z "(
pest.
URL gamelan = new URL("http", "www.gamelan.com", 80,
"pages/Gamelan.network.html");
-z eg' LK9 obje"tumot )sinl a "$vet"ez LK9(ne".
http://www.gamelan.com:80/pages/Gamelan.network.html
Ba a #enti "onstru"toro" eg'i"vel hozun" ltre LK9 obje"tumot, a toString vag' to&*B
ternal1orm paran))sal ltrehozhatun" eg' sztringet, amel' tartalmazza a teljes LK9 )*(
met.
1alformed2R/'(ception
& "onstru"toro" mindeg'i"e Mal/ormed<SL&*ception "ivtelt ad vissza, ha valamel'i"
paramter null, vag' ismeretlen a proto"oll. -zt Qg' tudju" le"ezelni, ha a "onstru"tort
try/catch blo""ba ra"ju", mit a "$vet"ez "dban.
22.Blzat"ezels 223. oldal
try {
URL myURL = new URL(. . .)
} catch (MalformedURLException e) {
. . .
// Kivtelkezel kd
. . .
}
Meg+egyz#s. &z LK9 obje"tumo" eg'szer *rhata". 4iutn ltrehoztun" eg'et, nem lehet megvltoztatni
az attribQtumait (proto"oll, hosztnv, #jlnv vag' portszm). Irdemes azt is megeml*teni, hog' az <SL
obje"tumo" X hasonlan a "orbbi 1ile obje"tumo"hoz X a ltrej$tt+""or nem ellenrzi" az LK9 elrhe(
tsgt, rvn'essgt stb., mivel az LK9(ne" eg'enlre )sa" eg' logi"ai reprezent)ija.
22.2.2 63F elemz#s
&z LK9 osztl' t$bb metdussal szolgl, amell'el "rdse"et tehet+n" #el az <SL obje"(
tumo"na". -g' <SL(tl meg"aphatja a proto"ollt, a hoszt nevt, a port szmt s a #jl(
nevet az albbi metduso"at hasznlva.
get-rotocol. Hisszaadja az LK9 proto"oll azonos*t "omponenst.
get9ost. Hisszaadja az LK9 hoszt nv "omponenst.
get-ort. Hisszaadja az LK9 port szm "omponenst. & get-ort metdus eg' egszet
ad vissza, ez a port szm. Ba a port nin)s bell*tva, a""or (1(et ad.
get1ile. Hisszaadja az LK9 #jlnv "omponenst.
getSe/. Hisszaadja az LK9 hivat"ozs "omponenst.
Meg+egyz#s. ,e #elejtse el, hog' eg'es LK9 )*me" nem tartalmazz" eze"et a "omponense"et. &z <SL
osztl' azrt n'Qjtja eze"et a metduso"at, mert a B88G LK9(e" s a legg'a"rabban hasznlt LK9(e" tar(
talmazni szo"t". &z <SL osztl' nmi"pp B88G()entri"us.
-ze"et a get``` metduso"at arra hasznlhatja, hog' in#orm)it "apjon a LK9(rl,
te"intet nl"+l a "onstru"torra, amit az LK9 obje"tum el"sz*tsre hasznlt.
&z <SL osztl' a metduso""al eg'+tt megszabad*t az LK9(e" lland Qjraelemzstl.
Ba adott eg' tetszs szerinti LK9 String, )sa" "sz*ten+n" "ell eg' <SL obje"tumot, s
megh*vni valamel'i" metdust a sz+"sges in#orm)i"rt. -z a "is pldaprogram "(
sz*t eg' <SL(t eg' sztringbl, s ezutn az <SL obje"tum metdusait hasznlva elemzi
az LK9(t.
i%port java.net.*;
i%port java.io.*;
public class ParseURL {
public static void main(String[] args) throws Exception {
URL aURL = new URL("http://java.sun.com:80/docs/books/"
+ "tutorial/index.html#DOWNLOADING");
System.out.println("protocol = " + aURL.getProtocol());
System.out.println("host = " + aURL.getHost());
System.out.println("filename = " + aURL.getFile());
System.out.println("port = " + aURL.getPort());
System.out.println("ref = " + aURL.getRef());
}
}
-z a program "imenete.
22>. oldal Java programozs (1.3. verzi)
protocol = http
host = java.sun.com
filename = /docs/books/tutorial/index.html
port = 80
ref = DOWNLOADING
22.2.7 )zvetlen olvass 2R/-!l
4iutn si"eresen "sz*tett+n" eg' <SL(t, az <SL openStream metdust megh*vva "ap
eg' adat#ol'amot, amibl "iolvashatja az <SL tartalmt. &z openStream metdus visz(
szatrsi rt"e eg' java.io..nputStream obje"tum, *g' ol'an "$nn'! az <SL(bl olvas(
ni, mint eg' tetszleges llomn'bl.
& "$vet"ez "is program az openStream hasznlatval "ap eg' bemen #ol'amot a
http.//NNN.'ahoo.)om/ LK9(re. -zutn n'it eg' 7u//eredSeader(t, ahonnan az LK9
tartalmt olvassa. 4inden beolvasott sort tmsol a szabvn'os "imenetre.
i%port java.net.*;
i%port java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(
yahoo.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
&mi"or #uttatju" a programot, lthatju" a paran)s abla"ban g$rgetve a B849 eleme(
"et s a sz$veges tartalmat a http://))).yahoo.com/ )*men tallhat B849 #jlbl.
-setleg a program lellhat "ivtellel. Ba a utbbi esemn' be"$vet"ezi", a programun"(
ban be "ell ll*tanun" a proP't, hog' a program megtallhassa a rahoo szervert.
22.2.; :satlakozs egy 63F-hez
4iutn si"eresen "sz*tett+n" eg' <SL obje"tumot, megh*vhatju" az <SL obje"tum
openConnection metdust, hog' )satla"oztassu". &mi"or "ap)soldun" eg' LK9(hez,
a hlzaton "ereszt+l ini)ializlun" eg' "ommuni")is "ap)solatot a Java programja s
az LK9 "$z$tt. Gldul, n'ithatun" eg' "ap)solatot a rahoo oldalra az albbi "ddal.
try {
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yahooConnection = yahoo.openConnection();
} catch (MalformedURLException e) { // new URL() failed
. . .
} catch (IOException e) { // openConnection() failed
. . .
}
Ba lehetsges, az openConnection metdus "sz*t eg' Qj <SLConnection(t, ini)ializlja,
)satla"ozi" az LK9(hez, s visszatr az <SLConnection obje"tummal. Ba valami nem
22.Blzat"ezels 220. oldal
meg#elel X pldul, a rahoo szerver nem +zemel X, a""or az openConnection metdus
eg' .C&*ception(t dob.
4iutn si"eresen )satla"oztun" az LK9(hez, *rhatun" a )satla"ozshoz vag' olvasha(
tun" rla az <SLConnection obje"tum hasznlatval.
Ba si"eresen hasznltu" az openConnection(t, hog' "ommuni")it "ezdemn'ezzen
eg' LK9(lel, a""or van eg' <SLConnection obje"tumhivat"ozsun". &z <SLConnectiB
on eg' B88G()entri"us osztl'` enne" so" metdusa )sa" a""or hasznos, ha B88G LK9(
e""el dolgozi". &zonban a legt$bb LK9 proto"oll megengedi, hog' olvasson s *rjon a
"ap)solatra.
9lvass egy 2R/Connection-r'l
&z albbi program azonos #un")it hajt vgre, mint az <SLSeader program. :e ahe(
l'ett, hog' eg' bemen #ol'amot "apna "$zvetlen+l az LK9(bl, ez a program hatrozot(
tan n'it eg' "ap)solatot eg' LK9(hez, s eg' bemen #ol'amot "ap a "ap)solatbl. -"(
"or, mint az <SLSeader, ez a program "sz*t eg' 7u//eredSeader(t a bemen #ol'amon,
s onnan olvas. & #l"$vr sza"aszo" eltre" az elz s a mostani pld"ban.
i%port java.net.*;
i%port java.io.*;
public class -./$onnection.eader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
-./$onnection yc ! yahoo'open$onnection01&
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc'get)nputStrea%01));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
& program "imenete megeg'ezi" az elz "imenettel. Basznlhatja mind a "t mdszer
az LK9(bl olvassra. &zonban az <SLConnection(bl olvass so""al hasznlhatbb le(
het, mert az <SLConnection obje"tumot hasznlhatja ms #eladato"ra is (pldul az
LK9(be *rs) eg' idben.
4g eg'szer, ha a program lell, vag' hiba+zenetet lt, be "ell ll*tani a proP't, hog' a
program megtallhassa a rahoo szervert.
2R/Connection-!a (rs
7o" B849 lap tartalmaz !rlapo"at X sz$veg mez"et s ms 3LJ obje"tumo"at X, hog'
be"+ldje a "it$lt$tt adato"at a szerverre. 4iutn begpelte a sz+"sges in#orm)i"at s
el"+ldi a "rst eg' gomb len'omsval, a b$ngszn" adato"at *r az LK9(re a hlza(
ton "ereszt+l. & szerver #ogadja az adato"at, #eldolgozza s vissza"+ld eg' vlaszt, ltal(
ban eg' Qj B849 oldal #ormjban.
7o" sz"ript hasznlja a GD78 metdust a "liens adataina" tovbb*tsra. & szerver(olda(
li sz"ripte" a GD78 metdust a bemenet+" olvassra hasznlj".
22E. oldal Java programozs (1.3. verzi)
-g' Java program szintn "ommuni"lhat a szerver oldalon #ut sz"ripte""el. -g'szer!(
en lehet *rni eg' <SL(be, *g' "+ldve adato"at a szerverre. -zt a "$vet"ez lpse""el
tudju" megtenni.
1sz*t+n" eg' <SL(t.
,'itun" eg' "ap)solatot az <SL(hez.
@ell*tju" a "imen "pessget az <SLConnection(on.
1apun" eg' "imen #ol'amot. -z a "imen #ol'am $ssze"ap)solt a sz"ript bemen
#ol'amval a szerveren.
Wrun" a "imen #ol'amba.
@ezrju" a "imen #ol'amot.
22.7. 0o.ketek kezel#se
& "orbbi pld" a "liens s szerver "$z$tti magas szint! "ommuni")i lehetsgeit
mutatt" be. 3'a"ran van ol'an szitu)i, ami"or a magas szint! meg"$zel*ts nem
meg#elel. -""or ala)son'abb szint!, Qg'nevezett so)"et alapQ "ommuni")ira van
sz+"sg.
22.7., Mi az a so.ket8
,ormlis esetben a szerver eg' spe)ilis szm*tgpen #ut s van eg' so)"et(je, ami eg'
spe)ilis port szmra van "$tve. & szerver vra"ozi", #ig'eli a so)"et(et hog' van(e #el"(
rs eg' "lienstl a "ap)soldsra.
& "liens oldalon. & "liens ismeri anna" a szm*tgpne" a hosztnevt, amel'i"en a szer(
ver #ut, s anna" a portna" a szmt, amel'i"en "ereszt+l a szerver "ap)soldva van. &
"ap)solatra val #el"rshez a "liensne" rint"eznie "ell a szerverrel a szerver gpn s
port(jn.
Ba minden jl meg', a szerver el#ogadja a "ap)solatot. &z el#ogads sorn, a szerver eg'
Qj so)"et porthoz "ap)soldi". 1ell eg' Qj so)"et (s termszetesen eg' "+l$nb$z port
szm is), ezrt #ol'tatdi" a #ig'els az eredeti so)"et(en a "ap)solat"rsre, am*g a "li(
ensne" "ap)soldnia "ell.
& "liens oldalon, ha a "ap)solat el#ogadsra "er+lt, a so)"et si"eresen ltrej$tt, s a "li(
ens hasznlni tudja a so)"et(et a szerverrel val "ommuni"lsra.
Meg+egyz#s. a "liens oldali so)"et nin)s $ssze"$tve azzal a port szmmal, amit a szerverrel val "ap)so(
lattartsra hasznl. & "liens a hel'i "ijel$lt port szmmal azonos*that azon a gpen, amin #ut.
& "liens s a szerver "ap)solatot tud ltrehozni a so)"et(jei" ltal *rsra, vag' olvassra.
22.Blzat"ezels 22=. oldal
1e"in(.i'. & soc!et eg' vgpontja eg' "tvg! "ommuni")is hlzatna", amin "t
program #ut. & so)"et eg' port szmhoz van "$tve, ezrt a 8;G rteg azonos*tani tudja a
"rst, amit ahhoz "rte", hog' el"+ldhess" az adatot.
& java.net )somag a tartalmaz eg' Soc!et osztl't, ami al"almas eg' "tirn'Q "ap)solat
eg'i" oldalna" vezrlsre eg', a hlzaton lv msi" program #el. -zen "*v+l a java.B
net tartalmazza a ServerSoc!et osztl't, amel' #ig'el s el#ogadja a "ap)solatot a "lien(
se"tl.
Ba a Nebhez a"arun" "ap)soldni, az <SL osztl' s a "ap)sold osztl'o" (<SLConB
nection, <SL&ncoder) taln al"almasabba", mint a Soc!et osztl'. Haljban az <SL vi(
szon'lag magas szint! "ap)solatot teremt a Nebbel, s hasznlja a so)"et(e"et.
22.7.2 9lvass #s (rs a so.ket-rl
,zz+n" eg' eg'szer! pldt arra, hog' hog'an lehet "ip*teni eg' "ap)solatot a szerver
programmal a Soc!et osztl't hasznlva, azutn megnzz+", hog' hog'an tud a "liens
adatot "+ldeni s #ogadni a szervertl a so)"et(en "ereszt+l.
& pldaprogram rsze az &choClient, ami $ssze van "$tve az e)ho szerverrel. &z e)ho
szerver elg eg'szer!en tud adatot #ogadni a "lienstl s vlaszt "+ldeni r. &z e)ho szer(
ver eg' jl ismert "iszolgl, amit a "liens a =(es port(on "ereszt+l tud elrni.
&z &choClient ltrehoz eg' so)"et(et azzal, hog' "ap)soldi" az e)ho szerverhez. -z be(
olvas a #elhasznltl eg' sort, el"+ldi az e)ho szerverne" a so)"et(en "ereszt+l. & szer(
ver ezen "ereszt+l vlaszol a "liensne". & "liens program olvassa ezt, s "i*rja az adatot,
amit vissza"+ld$tt ne"i a szerver.
i%port java.io.*;
i%port java.net.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("taranis", 7);
out = new PrintWriter(echoSocket.getOutputStream(),
true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println(
"Az albbi host nem ismert: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "Kapcsolds ehhez: taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
22F. oldal Java programozs (1.3. verzi)
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
&z &choClient olvasni s *rni is tud a so)"et(rl azltal, hog' t"+ld s tvesz adatot az
e)ho szervertl.
,zz+" a program rde"esebb rszeit. & main metdus try blo""jban szerepl soro"
"ip*ti" a "ap)solatot a so)"et(en "ereszt+l a "liens s a szerver "$z$tt, s megn'itj" a
-rint:riter(t s a 7u//eredSeader(t a so)"et(en.
echoSocket = new Socket("taranis", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
7orrendben az els rsz ltrehozza az Qj Soc!et obje"tumot, s nevet ad ne"i. echoSoc!B
et. & Soc!et "onstru"tor hasznlata ign'li anna" a gpne" a nevt s a port(jna" a sz(
mt, amel'i""el a "ap)solatot ltre a"arju" hozni. & plda program a taranis host nevet
hasznlja. -z a hel'i hlzatun" virtulis gpne" a neve. 4i"or #uttatju" a programun(
"at, a""or sajt szerver gp+n" host neve "er+lj$n ide. & =(es porton #ig'el az e)ho szer(
ver.
& msodi" sor $ssze"ap)solja a Soc!et "imenett s a -rint:riter(t. & harmadi" sor ha(
sonl ehhez, $ssze"ap)solja a Soc!et bemenett s a 7u//eredSeader(t. & plda Lni)ode
"ara"tere"et tud *rni a so)"et(en t.
&z &choClient(ne" az adato" so)"et(en val el"+ldshez eg'szer!en a -rint:riter(hez
"ell *rnia. &hhoz, hog' meg"apja a szerver vlaszt, olvasnia "ell a 7u//eredSeader(rl.
& program htralev rszt ez teszi "i.
& )hile )i"lus a program "$vet"ez rde"es rsze. & )i"lus beolvas eg' sort eg' bizon'os
id alatt a szabvn'os bementrl, s azonnal el"+ldi azt a szerverne" a -rint:riter(be
val *rssal, ami a so)"ethez "ap)soldi".
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
& )hile ci!lus utols sorban beolvas eg' sor sz$veget a 7u//eredSeader(rl, ami a so(
)"et(hez "ap)soldi". & readLine metdus addig vr, am*g a szerver vlaszol az in#or(
m)ira az &choClient(ne". 4i"or a readLine vlaszol, az &choClient "i*rja a sz$veget a
szabvn'os "imenetre.
& )hile )i"lus addig tart, am*g a #elhasznl be nem gpeli az utols "ara"tert. Hag'is az
&choClient olvas a #elhasznl bemenetrl, majd el"+ldi ezt az e)ho szerverne", "ap
eg' vlaszt a szervertl, s utna "i*rja azt, am*g az elr az utols "ara"terig. & )hile )i"(
lus e""or bezrul, s a program #ol'tatdi", #uttatja a "d "$vet"ez ng' sort.
22.Blzat"ezels 22?. oldal
out.close();
in.close();
stdIn.close();
echoSocket.close();
& "d e sorai a ta"ar*tst vgzi". & j program mindig "ita"ar*t maga utn, s ez a prog(
ram is il'en. -ze" a rsze" bezrj" az olvast s az *rt, ami a so)"et(hez "ap)soldi" s
a szabvn'os "imenetet s bemenetet is, ami a szerverhez "ap)soldi". & sorrend itt na(
g'on #ontos. @e "ell zrnun" minden #ol'amatot, ami a so)"et(hez "ap)soldi", mieltt
"i"ap)solju" magt a so)"et(et.
7o)"et megn'itsa.
1imeneti s bementi #ol'am megn'itsa a so)"et(en.
Dlvass s *rs a szerver proto"ollja szerint.
& #ol'amato" bezrsa.
7o)"et bezrsa.
23<. oldal Java programozs (1.3. verzi)
27.J1$: adat!zis-kezel#s
& Java 'ata8ase Connectivity (J:@;) ol'an programozi #el+letet (&GJ(t) ad a progra(
moz "ezbe, amell'el a "on"rt adatbzis("ezeltl #+ggetlen+l m!"$d, adatbzis ala(
pQ al"almazso" "sz*thet".
)ezd l#&#sek
-ls lps"nt meg "ell g'zdni, hog' minden hel'es van(e bell*tva. -z a "$vet"ez l(
pse"et tartalmazza.
*ele&(ts>k a megha+t't a szm(t'g#&#re
& meghajt tartalmazza a telep*tsre vonat"oz utas*tso"at. & spe)ilis :@47(hez
(adatbzis("ezelh$z) *rott J:@; meghajt" telep*tse eg'szer!en ann'ibl ll, hog'
tmsolju" a meghajtt a szm*tgpre` semmil'en "+l$nleges bell*tsra nin)s
sz+"sg.
& J:@;(D:@; h*d (J'7CBC'7C 7ridge) telep*tse mr nem enn'ire eg'szer!. &"r
a 7olaris, a"r a CindoNs verzijt hasznlju", automati"us meg"apju" a J:@;(
D:@; hidat is, amel' $nmagban nem ign'el semmil'en spe)ilis bell*ts. &zon(
ban az D:@; igen.
*ele&(ts> a 1$M0-tI amennyi!en sz>ks#ges
&menn'iben mg nin)s a :@47 #eltelep*tve, "$vesse a #orgalmaz utas*tsait a tele(
p*tsre vonat"ozan. & legt$bb esetben a :@47 telep*tve van s m!"$di" az ltal(
nosan el#ogadott adatbziso" brmel'i"vel.
27.,. Adat!zis !ell(tsa
8telezz+" #el, hog' a Co//e8rea! nev! adatbzis mr ltezi". (-g' adatbzis ltrehozsa
nem ol'an bon'olult, de "+l$nleges jogo"at ign'el s ltalban az adatbzis adminiszt(
rtor vgzi el). & jeg'zet pldiban hasznlt tbl" az alaprtelmezett adatbzisban lesz(
ne" ltrehozva. & "$nn'ebb "ezelhetsg rde"ben sznd"osan tartottu" ala)son'an a
tbl" szmossgt s mrett.
8telezz+" #el, hog' a mintaadatbzist eg' :o""ee $reak nev! "vhz tulajdonosa
hasznlja, ahol szemes "vt rulna" #ontban mrve, s #z$tt "vt mrne" )sszbe. &z
eg'szer!sg "edvrt ttelezz+" #el azt is, hog' a tulajdonosna" )sa" "t tblra van
sz+"sge, az eg'i" a "v t*puso" n'ilvntartsra, a msi" a "v "iegsz*t" adataina"
trolsra.
-lsz$r azt mutatju" meg, hog'an "ell a :@47(sel ltrehozni eg' "ap)solatot, majd mi(
utn a J:@; "+ldi el az 7R9 "dot a :@47(ne", bemutatun" nhn' 7R9 "dot. -z(
utn megmutatju", mil'en eg'szer! a J:@;(vel el"+ldeni ezt az 7R9 mondatot a
:@47(ne", s #eldolgozni a vissza"apott eredmn't.
-z a "d a legt$bb ismertebb :@47(n tesztelve lett, azonban el#ordulhat nhn' "om(
patibilitsi problma a rgebbi D:@; meghajt" s a J:@;(D:@; B*d hasznlata"or.
)a&.solat l#tes(t#se
-ls lps"nt a "ap)solatot "ell ltrehozni azzal a :@47(sel, amit hasznlni a"arun".
-z "t lpst tartalmaz. a meghajt bet$ltst s a "ap)solat megteremtst.
23.J:@; adatbzis("ezels 231. oldal
Megha+t' !etlt#se
& hasznland meghajt vag' meghajt" bet$ltse nag'on eg'szer!, s )sa" eg' "dsort
tartalmaz. Gldul a J:@;(D:@; B*d meghajtt a "$vet"ez "d t$lti be.
$lass.forName("sun.jdbc.odbc.JdbcOdbcDriver");
& driver do"ument)ija megadja, hog' mel'i" osztl't "ell hasznlni. &menn'iben az
osztl' neve jd8c.'river`aj, a "$vet"ez "ddal tudju" bet$lteni.
$lass.forName("jdbc.DriverXYZ");
,em sz+"sges a meghajtt pldn'os*tani s regisztrlni a 'riverManager(rel, mert a
Class./or+ame h*vs automati"usan megteszi azt. &menn'iben sajt pldn't hoznn"
ltre, eg' sz+"sgtelen dupli")i t$rtnne, igaz, ez nem o"ozna hibt.
&mi"or a "d bet$ltd$tt, "szen llun" a "ap)solat ltrehozsra a :@47(sel.
)a&.solat l#trehozsa
& msodi" lps a "ap)solat ltrej$tthez, hog' a meg#elel meghajt hozz leg'en "ap(
)solva a :@47(hez. & "$vet"ez "d bemutatja az ltalnos eljrst.
Connection con = DriverManager.getConnection(url,
"myLogin", "myPassword");
-z a lps is nag'on eg'szer!, a legnehezebb dolog, hog' mit adjun" meg LK9(ne".
&menn'iben a J:@;(D:@; h*d meghajtt hasznlju", a J:@; LK9 *g' "ezddi".
jd8c:od8c:. &z LK9 t$bbi rsze ltalban az adatbzis vag' az adatbzis sma neve. Gl(
dul, ha D:@;(t hasznlun" eg' 1red nev! D:@; adat#orrs elrshez, a J:@; LK9 a
"$vet"ez lesz. jd8c:od8c:1red. & mylogin hel're a :@47(ben hasznlt #elhasznli
nevet, am*g a my-ass)ord hel're a jelszt "ell behel'ettes*teni. &zaz, ha a :@47(hez a
bejelent"ezsi nv 1ernanda@ s a jelsz Jb, )sa" erre a "t sorra van sz+"sg, hog' a
"ap)solat ltrej$jj$n.
String url = "jdbc:odbc:Fred";
Connection con =
DriverManager.getConnection(url, "Fernanda", "J8");
&menn'iben eg' "+ls )g ltal #ejlesztett J:@;(t hasznlun", a do"ument)i meg(
mondja, mil'en proto"ollt hasznljun", mit "ell a jd8c: utn *rnun" a J:@; LK9(ben.
Gldul, ha a meghajt #ejlesztje az acme nevet regisztrlta, az els s a msodi" rsze
az LK9(ne" a jd8c:acme:. & do"ument)i Qtmutatt tartalmaz a J:@; LK9 tovbbi
rszhez is. & J:@; LK9 utols rsze tartalmazza az adatbzis azonos*tsra szolgl
in#orm)i"at.
&menn'iben valamel'i" bet$lt$tt meghajt azt rz"eli, hog' a J:@; LK9 a 'riverMaB
nager.getConnection metdussal lett bet$ltve, a meghajt #ogja ltrehozni a "ap)solatot
a :@47(sel a J:@; LK9(ben megadott mdon. & 'riverManager osztl' (h!en a nev(
hez) a httrben le"ezeli a "ap)solds $sszes rszlett. Ba nem *run" sajt meghajtt,
taln soha nem is #ogju" a 'river inter#sz ms metdust hasznlni, s az eg'etlen 'riB
verManager metdus, amit igazn sz+"sges ismern+n", a 'riverManager.getConnecB
tion.
& 'riverManager.getConnection metdus ltal visszaadott "ap)solat eg' n'itott "ap(
)solat, amel'ne" J:@; mondato"at adhatun" meg, amel' eljuttatja az 7R9 mondatot a
:@47(ne". &z elz pldban con eg' n'itott "ap)solat, s a "$vet"ez pldhoz #ogju"
hasznlni.
232. oldal Java programozs (1.3. verzi)
27.2. *!lk hasznlata
27.2., *!la l#trehozsa
-lsz$r ltrehozzu" az eg'i" tblt a plda adatbzisban. -z a tbla a Co//ees, mel' tar(
talmazza az alapvet in#orm)i"at a :o""ee $reak ltal eladott "v"rl, idertve a
"v nevt, anna" rt, a"tulis hten eladott menn'isget s a napi eladott menn'is(
get. & Co//ee tbla lthat itt, mel'et "sbb rszletesebben le*run".
:9%VNAM- 06<V=1 <3=:- 0AF-0 *9*AF
;olombian 1<1 =.?? < <
2ren)hYKoast >? F.?? < <
-spresso 10< ?.?? < <
;olombianY:e)a# 1<1 F.?? < <
2ren)hYKoastY:e)a# >? ?.?? < <
& ;D2Y+,M& mez, amel' a "v nevt trolja, maPimum 32 "ara"ter hosszQ =,SB
C9,S t*pusQ. 4iutn minden eg'es "vt*pust "+l$nb$z nvvel ltun" el, a nv eg'r(
telm!en meghatrozza az eg'es "v"at, *g' ez lehet a tbla elsdleges "ul)sa. &
S<-5.' a "v("iegsz*t eg'edi azonos*tjt tartalmazza, 7R9 t*pusa .+T&\&S. & har(
madi" mez neve -S.C&, t*pusa 1LC,T, mert tizedes szm trolsra van sz+"sg.
Meg+egyz#s. & pnz adat ltalban 7R9 '&C.M,L vag' +<M&S.C t*pusQ mezben troldi", de a
:@47(" "$z$tti "+l$nbsg miatt, s hog' el"er+lj+" az in"ompatibilitst valamel'i" rgebbi J:@;(vel,
most az ltalnosabb 29D&8 t*pust hasznlju".
& S,L&S mez .+T&\&S t*pusQ adato"at trol, s megmutatja, hog' menn'i "v lett
eladva az adott hten. &z utols mez a TCT,L, amel' .+T&\&S t*pusQ, s megadja,
hog' menn'i "vt adta" el $sszesen az adott napig.
&z adatbzis 7LGG9J-K7 nev! tblja, amel' in#orm)it trol az eg'es "v("iegsz*(
t"rl.
06<V=1 06<VNAM- 0*3--* :=*W 0*A*- X=<
242 ,cme@ .nc. ]] Mar!et Street \roundsvill
e
C, ]N2]]
M] Superior Co//ee 2 -arty -lace Mendocino C, ]NM34
2N4 The 9igh \round 244 Co//ee Lane Meado)s C, ]H]33
, CC11&&S Es a S<--L.&SS t?8la is tartalma""a a S<-5.' me"%t@ e"Ert e" a me"%
has"n?lhat# a S&L&CT utasGt?so!n?l@ hogy a !Et t?8l?t Xss"e tudju! !apcsolni. ,
S<-5.' os"lop a" egyedi a"onosGt#ja a S<--L.&SS t?8l?na!. , CC11&&S t?8l?8an
pedig idegen !ulcs!Ent s"erepel. D,"Ert idegen !ulcs@ mert e" egy m?si! t?8l?8#l lett
import?lva.F Minden egyes S<-5.' csa! egys"er s"erepel a S<--L.&S t?8l?8an@
his"en e" a" els%dleges !ulcsn?l !XvetelmEny. , CC1&& t?8l?8an@ ahol idegen !ulcB
s!Ent s"erepel@ teljesen termEs"etes@ hogy tX88s"XrXsen megjeleni!@ his"en egy
23.J:@; adatbzis("ezels 233. oldal
!iegEs"Gt% eladhat# tX88 tGpusl !?vEho" is. , /eje"et !Es%88i rEs"E8en 8emutatun!
nEh?ny pEld?t a" els%dleges Es a" idegen !ulcs has"n?lat?ra a S&L&CT le!Erde"Ese!B
8en.
& "$vet"ez 7R9 utas*ts ltrehozza a CC11&&S nev! tblt. & "t "+ls zrjel tartal(
mazza az eg'es oszlopo" nevt s 7R9 t*pust vesszvel elvlasztva. & =,SC9,S t*pus(
nl zrjele" "$z$tt megadhat anna" maPimlis hossza. & plda"d megadja, hog' a
CC1Y+,M& oszlop maPimum 32 "ara"ter hosszQ lehet.
CREATE TABLE COFFEES (
COF_NAME VARCHAR(32),
SUP_ID INTEGER,
PRICE FLOAT,
SALES INTEGER,
TOTAL INTEGER )
&z utas*ts vgn nem szerepel :@47 zr jel, mert ez az eg'es :@47(e"nl "+l$nb$z.
Gldul az Dra)le pontosvesszt (`) hasznl a mondato" lezrsra, a 7'base pedig a go
szt. -zrt a Java "dban nem sz+"sges megadni, a driver automati"usan a mondat v(
gre teszi a meg#elel jelet.
4si" dolog, ami meg "ell eml*ten+n" az 7R9 utas*tso"rl, azo" #ormja. & CS&,T&
T,7L& mondatban a "ul)sszava" nag'bet!vel s minden rsz "+l$n sorban van *rva. &z
7R9 nem "$veteli ezt meg, ez a "onven)i )sa" az olvashatsgot teszi "$nn'ebb. &lap(
vet az 7R9(ben, hog' a "ul)sszava"ban nem "is(nag'bet! rz"en' ()ase sensitive), *g'
pldul a S&L&CT szt brmil'en mdon le lehetett volna *rni. Gldna" o"rt a "t
verzival "orbbi teljesen megeg'ezi" az 7R9 illeten.
&z eg'es :@47(" "+l$nb$ze" lehetne" a nvazonos*tsban. Gldul nhn' :@47
meg"$veteli, hog' az oszlop s a tbla neve" pontosan meg#eleljene" a CS&,T& T,7L&
utas*tsban megadotta"na", m*g mso" nem. & biztonsg "edvrt nag'bet!t haszn(
lun" az azonos*t"nl, mint pldul CC11&&S s S<--L.&SS, mert *g' de#iniltu" "et.
-ddig "sz vag'un" az 7R9 utas*ts meg*rsval, amel' ltrehozza a CC11&&S nev!
tblt. 4ost teg'+" idzjele" "$z ("sz*ts+n" StringXet), s nevezz+" el ezt a String(et
createTa8leCo//ees(ne", *g' ezt a vltozt #el tudju" hasznlni a Java "dban.
&mint lttu", a :@47 nem #oglal"ozi" a sort$rse""el, de a Java programozsi n'elvben
az a String obje"tum, ami meghaladja az eg' sort, nem #og le#ordulni. 1$vet"ezs"p(
pen, ami"or String(et adun" meg, minden eg'es sort idzjele" "$z "ell tenni, s plusz(
jelet (Z) hasznlni az $ssze#!zshez.
String createTableCoffees = "CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)";
4ieltt #uttatun" eg' al"almazst, menj+" vgig a J:@; alapjain.
27.2.2 J1$: Statement l#trehozsa
& Statement obje"tum "+ldi el az 7R9 utas*tsun"at az adatbzis("ezelne". -g'szer!(
en ltrehozun" eg' Statement obje"tumot, majd vgrehajtju" az e*ecute metdust al"al(
mazva. & S&L&CT utas*tso" vgrehajtsra az e*ecutekuery metdus szolgl. &zo"nl
az utas*tso"nl, amel'e" tblt hozna" ltre, vag' mdos*tana", az e*ecute<pdate me(
tdus hasznlatos.
23>. oldal Java programozs (1.3. verzi)
-g' mr l adatbzis "ap)solatra (Connection obje"tum) p+l a Statement obje"tum
ltrehozsra. & "$vet"ez plda a mr meglv con Connections obje"tumot hasznlja
az stmt Statement obje"tum ltrehozsra.
Statement stmt = con.createStatement();
-bben a pillanatban stmt ltrej$tt, de mg nin)s megadva az el"+ldend 7R9 utas*ts.
&z stmt e*ecute metdusban "ell ezt megadnun". Gldul, a "$vet"ez "drszletben
mi az e*ecute<pdate metdusna" adju" t a 7R9 utas*tst.
stmt.executeUpdate("CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)");
4iutn ltrehoztun" eg' createTa8leCo//ees nev! String t*pusQ vltozt, megadhatju"
ebben a #ormban is.
stmt.executeUpdate(createTableCoffees);
27.2.7 0YF &aran.s v#greha+tsa
&z e*ecute<pdate metdust hasznltu", mert az createTa8leCo//ees nev! 7R9 utas*ts
eg' ::9 (data de/initon language) utas*ts. &zo" a paran)so", amel'e" ltrehozna",
mdos*tana", t$r$lne" tblt, mind :99 utas*tso" s az e*ecute<pdate metdussal
hajthat" vgre. &mint az a nevbl "it!ni", az e*ecute<pdate metdus re"ordo" rt(
"eine" mdos*tsra is szolgl. -z so""al g'a"oribb, mivel re"ord mdos*tsa t$bbsz$r
is t$rtnhet, am*g eg' tbla ltrehozsa )sa" eg'szer.
& legg'a"rabban hasznlt 7R9 utas*tst vgrehajt paran)s az e*ecutekuery. -z a met(
dus hasznland eg' S&L&CT le"rdezs vgrehajtshoz, ami a legg'a"oribb 7R9 uta(
s*ts.
Adat!evitel egy t!l!a
4egmutattu", hog'an "ell ltrehozni a CC11&&S nev! tblt, megadva a mez" nevt
s t*pust, de ez )sa" a tbla szer"ezett ll*tja be. & tbla mg nem tartalmaz eg'etlen
adatot sem. 7oron"nt vissz+" be az adato"at a tblba, megadva az eg'es mez" rt(
"t.
Meg+egyez#s. & beillesztend rt"e"et ug'anabban a sorrendben "ell megadni, mint ahog' azt de"la(
rltu" a tbla ltrehozsa"or.
& "$vet"ez "d eg' re"ordot illeszt be. Colom8ian a CC15+,M& oszlopba, 242 a
S<-5.' oszlopba, P.]] a -S.C&, 4 a S,L&S s 4 a TCT,L oszlopba. (&mita a Co//ee
7rea! m!"$di", a heti eladsi menn'isg s az eddigi $sszmenn'isg az $sszes "v#aj(
tnl <(val indul.) ;sa"Qg' mint a CC11&&S tbla ltrehozsnl tett+", eg' Statement
obje"tumot hozun" ltre, majd az e*ecute<pdate metdust hasznlju".
4ivel az 7R9 utas*ts nem #r el eg' sorba, "t String(et #ogun" pluszjellel $ssze#!zni.
Irdemes #ig'elni a sz+"sges sz"$z$"re a CC11&&S s a =,L<&S sz "$z$tt. & sz"$z(
ne" az aposztr#o" "$z$tt "ell lennie vag' a CC11&&S sz m$g$tt, vag' a =,L<&S sz
eltt` a sz"$z nl"+l az 7R9 utas*ts hibsan .+S&ST .+TC CC11&&S=,L<&S...Xne"
#ogja olvasni, s a :@47 a CC11&&S=,L<&S nev! tblt #ogja "eresni. 7zintn oda "ell
#ig'elni, hog' eg'szeres idzjelet hasznlun" a "v nevne" megadsa"or, mert az "t
dupla aposztr# "$z van beg'azva. & legt$bb adatbzis("ezelnl ltalnos szabl',
hog' szabadon vlaszthat, mel'i" aposztr#ot hasznlju".
23.J:@; adatbzis("ezels 230. oldal
Statement stmt = con.createStatement();
stmt.executeUpdate(
"INSERT INTO COFFEES " +
"VALUES ('Colombian', 101, 7.99, 0, 0)");
&z .+S&ST utas*ts msodi" sora #ogja beilleszteni a re"ordot a CC11&&S tblba.
Basznlju" #el in"bb Qjra az stmt nev! Statement obje"tumot, mint Qjat pldn'os*t(
sun" minden vgrehajtsnl.
stmt.executeUpdate("INSERT INTO COFFEES " +
"VALUES ('French_Roast', 49, 8.99, 0, 0)");
& tovbbi soro"at az albbia" szerint illesztj+" be.
stmt.executeUpdate("INSERT INTO COFFEES " +
"VALUES ('Espresso', 150, 9.99, 0, 0)");
stmt.executeUpdate("INSERT INTO COFFEES " +
"VALUES ('Colombian_Decaf', 101, 8.99, 0, 0)");
stmt.executeUpdate("INSERT INTO COFFEES " +
"VALUES ('French_Roast_Decaf', 49, 9.99, 0, 0)");
Adatok kinyer#se a t!l!'l
4ost, hog' a CC11&&S tblban mr adato" is vanna", meg*rhatju" a S&L&CT utas*tst
az adato" "in'ershez. & "$vet"ez "dban a )sillag (U) mondja meg, hog' az $sszes
oszlopot a"arju" "ivlasztani. 4iutn nin)s :9&S& #elttellel meghatrozva, hog' mel'
re"ordo"at adja vissza, a "$vet"ez 7R9 utas*ts az $sszes sort vissza #ogja adni.
SELECT * FROM COFFEES
&z eredmn' megeg'ezi" azzal, amit az a "imenet ad, ami"or az 7R9 le"rdezst dire"t
az adatbzis("ezelne" adju" meg. &mi"or eg' Java al"almazson "ereszt+l rj+" el az
adatbzist, vissza "ell, hog' n'erj+" az adato"at, hog' #elhasznlhassu". & "$vet"ez
rszben ezt mutatju" be.
-g' msi" plda a 7-9-;8 utas*tsra, amel'i" visszaadja a "v" listjt s az rat.
SELECT COF_NAME, PRICE FROM COFFEES
& le"rdezs eredmn'e a "$vet"ez.
& #enti 7-9-;8 utas*ts visszaadta az $sszes re"ordot, a "$vet"ez pedig )sa" azo"at,
amel'e" "evesebbe "er+lne", mint n?.<<
SELECT COF_NAME, PRICE
FROM COFFEES
WHERE PRICE < 9.00
27.2.; Fek#rdez#sek eredm#ny#nek "eldolgozsa
,zz+" meg, hog' az elz 7R9 paran)sot hog'an lehet Javban #uttatni, s hog'an le(
het az eredmn't "in'erni belle.
& le"rdezst #uttat e*ecutekuery metdus eg' SesultSet obje"tumot ad, amibl az
adato"at "in'erhetj+".
ResultSet rs = stmt.executeQuery(
"SELECT COF_NAME, PRICE FROM COFFEES");
23E. oldal Java programozs (1.3. verzi)
A ne(t met'd4s
&z eredmn'halmaz elrhetv tev rs obje"tummal minden re"ordon vgig #ogun"
menni, hog' az eg'es re"ordo" adatait meg tudju" jelen*teni a "pern'n. & ne*t met(
dus az Qg'nevezett a "urzort mindig a "$vet"ez sorra mozgatja (ezt a"tulis sorna" h*v(
ju"). 4ivel a "urzor "ezdetben mg nem mutat eg'etlen sorra sem (mintha a tblzat
eltt lennn"), az els megh*vsa utn rhet el az eredmn' els sora. -g'mst "$vet
metdush*vso""al a "urzort a "$vet"ez re"ordo"ra lptetj+", *g' jrju" be a teljes hal(
mazt.
A get333 met'd4sok
& get "ezdet! metduso" seg*tsgvel tudju" az a"tulis re"ord eg'es mezit le"rdezni.
Gldul az 7R9 =,SC9,S t*pusQ CC15+,M& mezjt a getString(el olvashatju" "i. &z
7R9 1LC,T t*pusQ -S.C& mezje logi"usan a get1loat metdussal "rdezhet le.
,zz+" a teljes "dot.
String query = "SELECT COF_NAME, PRICE FROM COFFEES";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String s = rs.getString("COF_NAME");
float n = rs.getFloat("PRICE");
System.out.println(s + " " + n);
}
& "imeneten ehhez hasonl #og megjelenni.
Colombian 7.99
French_Roast 8.99
Espresso 9.99
Colombian_Decaf 8.99
French_Roast_Decaf 9.99
Garamter"nt nem )sa" a mez nevt, hanem oszlopindePt is hasznlhatju".
String s = rs.getString(1);
float n = rs.getFloat(2);
2>.1dolsi "onven)i" 23=. oldal
2;.)'dolsi konven.i'k
& "dolsi "onven)i" a "$vet"ez" miatt sz+"sgese".
& szo#tver let)i"lus "$ltsgne" F<[(a mehet el a "arbantartsra
& szo#tvere"ne" )sa" "is rsztt tartja "arban az eredeti #ejleszt
& "dolsi "onven)i" jav*tj" az olvashatsgot, seg*tve a "sbbi megrtst
& "onven)i"hoz minden"ine" al"almaz"odni "ell a programozs #ol'amn. 4inden"i(
ne".
2;.,. %+lok szervez#se
4inden java #orrsllomn' eg'etlen publi"us osztl't vag' inter#szt tartalmaz, de ezen
tQl tartalmazhat mg privt, a #orrsllomn'on "*v+l "ap)solattal nem rendel"ez to(
vbbi osztl'o"at s inter#sze"et. & publi"us t*pust javasolt elsz$r le*rni. & publi"us t*(
pus neve s a #orrs#jl neve meg "ell, hog' eg'ezzen, belertve a "isbet!(nag'bet! "+(
l$nbsgt is.
& Java #orrsllomn' a "$vet"ez eleme"et tartalmazza.
1ezd megjeg'zs
;somag s import "i#ejezse"
Dsztl' s inter#sz de"lar)i"
)ezd meg+egyz#s
4inden #orrsllomn'na" "ellene tartalmaznia eg' ; st*lusQ megjeg'zst a (publi"us)
osztl' nevvel, verzi in#orm)iival, dtummal s szerzi jogo""al.
/*
* Osztlynv
*
* Verzi informcik
*
* Dtum
*
* Copyright
*/
Javasolt a hag'omn'os megjeg'zs hel'ett/mellett do"ument)is megjeg'zse"et is
al"almazni.
:somag #s im&ort ki"e+ez#sek
& megjeg'zs utni els nem +res sor a )somag "i#ejezs "ell, hog' leg'en. &zutn "$vet(
"ezhetne" az import "i#ejezse".
pacage java.awt;
i%port java.awt.peer.CanvasPeer;
Meg+egyz#s. &z eg'edi )somagnv els rsze )supa angol "isbet!bl ll, #ord*tott domnnv.
23F. oldal Java programozs (1.3. verzi)
9sztly #s inter"#sz deklar.i'
& "$vet"ez tblzat $ssze#oglalja az osztl' s inter#sz de"lar)i szabl'ait.
osztl' vag' inter#sz do"ument)is
megjeg'zs D/AA...A/F
osztl' vag' inter#sz "i#ejezs
osztl' vag' inter#sz megvals*tsi meg(
jeg'zs D/A...A/F, ha sz+"sges
-z a megjeg'zs ol'an in#orm)i"at tar(
talmaz, ami" )sa" a megvals*ts rszle(
teirl szlna", az osztl' "sbbi #elhasz(
nlsa sorn nem lesz sz+"sg eze"re az
in#orm)i"ra. Jl'en mdon a do"umen(
t)is megjeg'zsbe nem "er+l bele.
osztl' (stati"us) vltoz" -lsz$r a publi"us, majd vdett, )somag
szint!, s vg+l privt vltoz" szerepel(
jene".
pldn'vltoz" Lg'anol'an lthatsgi sorrendben, mint
az osztl'vltoz"
"onstru"toro"
metduso" & metduso" #eladat szerint s lthatsg
szerint )soportos*tva.
2;.2. $ehAzs
Meg+egyz#s. -bben a jeg'zetben a n'omtats spe)ilis t$rdelse miatt nhol eltrt+n" a "$vet"ez sza(
bl'o"tl.
2 vag' > sz"$z, vag' a tabultor "ara"ter hasznlata )lszer!.
& soro" hossza ne leg'en t$bb F< "ara"ternl. @izon'os esete"ben rdemes =< "ara"ter(
ben maPimlni a sor hosszt.
5osszA sorok trdel#se
Ba eg' "i#ejezs nem #r el eg' sorban, a "$vet"ez" alapjn t$rdelj+n".
8$rj+n" vessz (,) utn
8$rj+n" eg' opertor eltt
Kszes*ts+" eln'ben a magasabb szint! m!velet eltt val t$rst
Jgaz*tsu" az Qj sor "ezdett az elz sor ug'anol'an szint! "i#ejezshez
Ba az elze" alapjn zavaros lesz az eredmn', vag' *g' is tQl hosszQ a sor, a""or a
szo"sos behQzs "tszerest (F "ara"ter) is al"almazhatju"
2>.1dolsi "onven)i" 23?. oldal
,zz+n" eg' pldt illusztr)i"nt.
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
& "$vet"ez "t plda aritmeti"ai "i#ejezse" t$rsrl szl. &z els plda el#ogadhat, a
t$rs al"almaz"odi" a logi"ai szer"ezethez, de a msodi" nem javasolt.
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6;
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6;
& "$vet"ez "t "d metdusde"lar)i bemutatsra szolgl. &z els a szo"sos esetet
mutatja, de a msodi"nl ez nem m!"$dne. -zrt ott a #iP "tszeres behQzst al"almaz(
zu".
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
private static synchroni2ed horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
&z i/ utas*ts t$rse esetn is a dupla behQzs javasolhat, az eg'szeres behQzs nehe(
zebben #elismerhetv teszi a t$rzset. &z els teht nem )lszer!, hel'ette a msodi"
vag' harmadi" javasolhat.
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
Hg+l hrom j plda a #eltteles opertor al"almazsra.
alpha = (aLong3ooleanExpression) ? beta : gamma;
alpha = (aLong3ooleanExpression) ? beta
: gamma;
alpha = (aLong3ooleanExpression)
? beta
: gamma;
2><. oldal Java programozs (1.3. verzi)
2;.7. Meg+egyz#sek
& Java programo" "t#le megjeg'zst al"almazna". do"ument)is s implement)is
megjeg'zst. &z utbbi a ;ZZ n'elvhez hasonl, m*g az elbbi a Java spe)ialitsa. (4eg(
jeg'zs. -zt a bevlt $tletet a GBG is tvette.) & do"ument)is megjeg'zs /UU s U/ "$(
z$tti "ara"tersorozat. & javadoc segdprogram "pes ez alapjn automati"usan generl(
ni B849 alapQ, teljesen hipertePt #elp*ts! do"ument)it.
& do"ument)is megjeg'zs a #orrs"dot do"umentlja ol'an meg"$zel*tsben, hog'
az alapjn a "sbbi megrts, az osztl' #elhasznlsa marad"talanul megoldhat le(
g'en a "d "zzel t$rtn vgignzse nl"+l is.
2;.7., =m&lement.i's meg+egyz#sek
& programo" ng'#le implement)is megjeg'zst tartalmazhatna". blo"", eg'soros,
n'om"$vetsi s sorvgi.
$lokk meg+egyz#sek
& blo"" megjeg'zse" le*rst tartalmazna" a #jlhoz, metdushoz, adatszer"ezethez vag'
algoritmushoz. 2jl esetn a #jl elejn, a t$bbi esetben a metdus belsejben szo"s el(
hel'ezni, al"almaz"odva a megjeg'zssel elltott eg'sg behQzshoz.
& blo"" megjeg'zs eg' +res sorral "ezddi" s #ejezdi" is be.
/*
* Blokk megjegyzs.
*/
-gysoros meg+egyz#sek
& r$vid megjeg'zse"et eg'etlen sorba *rva, a be"ezdsi szintet #ig'elembe vve lehet el(
hel'ezni. Ba nem lehet eg' sorba *rni, a""or blo"" megjeg'zst rdemes al"almazni. -g'
+res sor utn rdemes *rni a megjeg'zst, hog' vizulisan lthat" leg'ene" az $ssze#+g(
gse".
if (felttel) {
/* Eset lersa. */
...
}
Nyomkvet#si meg+egyz#sek
,ag'on r$vid megjeg'zse"et az adott "dsor vgre is lehet *rni, meg#elel "$zzel elv(
lasztva a "dtl. ;lszer! az eg'ms utni n'om"$vetsi megjeg'zse"et azonos poz*)i(
ban "ezdeni. & "$vet"ez plda mutatja a hasznlat mdjt.
if (a % 2 == 0) {
return TRUE; /* pros szm esetn ksz */
} else {
return isPrime(a); /* kulnben vizsgljuk */
}
2>.1dolsi "onven)i" 2>1. oldal
8ermszetesen al"almazhat a // is, de )sa" "$vet"ezetesen, nem "everve a "t mdot.
,em rdemes ol'an megjeg'zse"et al"almazni, ami" a "sbbi megrtst nem seg*ti"
el jelentsen.
Meg+egyz#s. & jeg'zet pldi o"tatsi )lbl "sz+lte", so"szor tQl rszletesen "ommentezve. Haldi #ej(
leszts"or )sa" a tn'legesen sz+"sges megjeg'zse"et rdemes elhel'ezni.
2;.7.2 1ok4ment.i's meg+egyz#sek
& "$vet"ez plda eg' j tte"intst ad az alapo"rl.
/*
* @(#)Blah.java 1.82 99/03/18
*
* Copyright (c) 1994-1999 Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* This software is the confidential and proprietary
* information of Sun Microsystems, Inc. ("Confidential
* Information"). You shall not disclose such Confidential
* Information and shall use it only in
* accordance with the terms of the license agreement
* you entered into with Sun.
*/
pacage java.blah;
i%port java.blah.blahdy.BlahBlah;
/**
* $lass description goes here.
*
* @version 1.82 18 Mar 1999
* @author Firstname Lastname
*/
public class Blah extends SomeClass {
/* A class implementation comment can go here. */
/** classVar1 documentation comment */
public static int classVar1;
/**
* classVar2 documentation comment that happens to be
* more than one line long
*/
private static Object classVar2;
/** instanceVar1 documentation comment */
public Object instanceVar1;
/** instanceVar2 documentation comment */
protected int instanceVar2;
/** instanceVar3 documentation comment */
private Object[] instanceVar3;
2>2. oldal Java programozs (1.3. verzi)
/**
* ...constructor Blah documentation comment...
*/
public Blah() {
// ...implementation goes here...
}
/**
* ...method doSomething documentation comment...
*/
public void doSomething() {
// ...implementation goes here...
}
/**
* ...method doSomethingElse documentation comment...
* @param someParam description
*/
public void doSomethingElse(Object someParam) {
// ...implementation goes here...
}
}
& leg#els szint! osztl'o" s inter#sze" a sor elejn "ezddne", m*g a tago" behQzva.
&z osztl'o" s inter#sze" do"ument)is megjeg'zsne" els sora nem behQzott, a to(
vbbi soro" eg' sz"$zzel bentebb "ezddne". 4inden tag (osztl', inter#sz, adattag,
metdus, "onstru"tor) do"ument)is megjeg'zsne" els sora > sz"$zzel, a tovbbi(
a" 0 sz"$zzel bentebb "ezddne". & tovbbi szinte" ug'an*g', rtelemszer!en.
2;.;.1eklar.i'k
& "$nn'! "ommentezhetsg (s a jobb tlthatsg) rde"ben minden sor )sa" eg'
de"lar)it tartalmaz.
int level; // indentation level
int size; // size of table
1evsb javasolhat.
int level, size;
7emmi"ppen ne "er+ljene" eg' sorba "+l$nb$z t*pusQ de"lar)i".
int foo, fooarray[]; //WRONG!
& "d mg "$nn'ebben olvashat lesz, ha a t*puso", azonos*t" s megjeg'zse" tbl(
zatszer!en tabullta".
int level; // indentation level
int size; // size of table
Object currentEntry; // currently selected table entry
& lo"lis vltoz"at lehetleg mr a de"lar)inl ini)ializlju". &z eg'etlen sszer! "i(
vtel, ha a "ezdrt" bon'olult szm*tso""al #og elllni.
2>.1dolsi "onven)i" 2>3. oldal
2;.;., A deklar.i' helye
& de"lar)i" a blo"" legelejn leg'ene". @r vanna" rve" mellette, mgsem rdemes
"sbb, az els hasznlat hel'n de"larlni az azonos*t"at. -nne" az lenne a htrn'a,
hog' a"adl'ozn az rvn'essgi tartomn'on bel+li hordozhatsgot.
void myMethod() {
int int1 = 0; // beginning of method block
if (condition) {
int int2 = 0; // beginning of "if" block
...
}
}
&z eg'etlen logi"us "ivtel, ami"or a /or )i"lusban hozzu" ltre a )i"lusvltozt.
for (int i = 0; i < maxLoops; i++) { ... }
Irdemes el"er+lni, hog' eg' lo"lis de"lar)i el#edjen eg' magasabb szint! de"lar)i(
t.
int count;
...
myMethod() {
if (condition) {
int count = 0; // AVOID!
...
}
...
}
2;.;.2 9sztly #s inter"#sz deklar.i'
&mi"or osztl't vag' inter#szt de"larlun", rdemes meg#ogadni a "$vet"ez"et.
& metdus neve s a k(k "$z$tt ne leg'en elvlaszt.
& blo"" "ezd khk az adott sor vgn leg'en
& blo""zr jij behQzsa megeg'ezi" a blo"" "ezdetne" behQzsval. Ba +res a
blo"", a "t zrjelet ne vlassza el "$z.
class Sample extends Object {
int ivar1;
int ivar2;
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
...
}
& metduso"at vlasszu" el eg' +res sorral.
2>>. oldal Java programozs (1.3. verzi)
2;.5. 6tas(tsok
-gyszer 4tas(tsok
7oron"nt )sa" eg' utas*ts szerepel.
argv++; // Correct
argc--; // Correct
argv++; argc--; // AVOID!
Jsszetett 4tas(tsok
&z $sszetett utas*ts khk s kik "$z$tt utas*tso" sorozatt tartalmazza. & tartalmazott uta(
s*tso" eg' "$zzel (> sz"$zzel) bentebb "ezddne", mint az $sszetett utas*ts blo"".
%elt#teles 4tas(tsok
&z i/, i/Belse, i/ elseBi/ else utas*tso".
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
4indig al"almazzu" a blo""ot jelz h s i "ara"tere"et. - nl"+l t$bb a hibalehetsg.
if (condition) //A4*)(! 56)S OMITS THE BRACES {}!
statement;
& s)itch szo"sos #ormja.
2>.1dolsi "onven)i" 2>0. oldal
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
brea;
case XYZ:
statements;
brea;
default:
statements;
brea;
}
4indig *rju" "i a 8rea! utas*tst. Ba nem "ell "ilpni a case vgn, a""or megjeg'zs"n
szerepeljen.
:ikl4s4tas(tsok
& /or utas*ts #ormja a "$vet"ez.
for (initialization; condition; update) {
statements;
}
& t$rzs nl"+li utas*ts blo"" nl"+l, k`k(el *rhat.
for (initialization; condition; update);
&mi"or hasznlju" a k,k opertort az ini)ializl vag' a n$ve"mn' rszben, a""or a "d
nehezebben tte"inthet lesz. Irdemes meg#ontolni, hog' il'en esetben nem jobb(e az
ini)ializ)it a )i"lus el *rni.
& szo"sos s az +res t$rzs! )hile utas*ts #ormja.
while (condition) {
statements;
}
while (condition);
& do()hile #ormja.
do {
statements;
} while (condition);
try-catch 4tas(ts
try {
statements;
} catch (ExceptionClass e) {
statements;
}
2>E. oldal Java programozs (1.3. verzi)
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
2;.B.-lvlaszt'k
&z +res soro" logi"ailag tagolj", s *g' olvashatbb teszi" a "dot.
1t +res sort al"almazzun" osztl'o" elvlasztsra. -g' sor elegend a "$vet"ez ese(
te"ben.
4etduso" "$z$tt
Hltoz de"lar)i" s a blo"" els utas*tsa "$z$tt
@lo"" vag' eg'soros megjeg'zs eltt
& metdus logi"ai eg'sgei "$z$tt (jellemzen 3(1< soron"nt)
lres sz"$z$"et al"almazun" a "$vet"ez esete"ben.
& "ul)ssz s a k(k "$z$tt.
while (true) {
...
}
& paramterlistban vessz" utn
&k.k "ivtelvel minden binris opertor eltt s utn, unris opertoro" esetn azon(
ban nem al"almazzu".
a += c + d;
a = (a + b) / (c * d);
while (d++ = s++) {
n++;
}
printSize("size is " + foo + "\n");
& /or utas*tsban a s`k(" utn.
for (expr1; expr2; expr3)
-Ppli)it "onverzi esetn.
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);
2;.C. -lnevez#si konven.i'k
&z elnevezsi "onven)i" seg*tsgvel jobban olvashat program"dot "apun". 4r a
nv #ormja alapjn lehet tudni, hog' "onstans, )somagnv, osztl' vag' vltoz.
2>.1dolsi "onven)i" 2>=. oldal
&zonos*t t*pusa 7zabl' Gld"
;somag &z eg'edi )somagnv mindig )supa "is(
bet!"bl ll. &z internet domn nv leg(
#els szint! eleme (pl. )om, hu) utn a
vllalat neve, majd sz+"sg szerint to(
vbbi al)somag(neve" "$vet"ezne"
ponttal elvlasztva. ;sa" az angol ab)
bet!i hasznlhat".
com.sun.eng
com.apple.Yuic!time.vI
edu.cmu.cs.8ovi!.cheeB
se
Dsztl'
Jnter#sz
&z osztl'nv t$bbn'ire #nv, a "ezd(
bet! s a "$ztes sz"ezd bet!" nag'be(
t!", a t$bbi "isbet!. &z alhQzs "ara"(
ter nem al"almazhat. ,e leg'en r$vid*(
ts, mindig a teljes szava"at tartalmaz(
za.
9ehet "ezetes "ara"tere"et is al"al(
mazni, br ezt bizon'os #ejleszt"$rn'e(
zete" (teht nem a Java%) nem engedi".
-miatt ltalban rdemes "er+lni az
"ezete" hasznlatt.
class SasterL
class .mageSpriteL
inter/ace Saster'eleB
gateL
inter/ace StoringL
4etdus & metdus neve t$bbn'ire ige, a "$ztes
szava" "ezdbet!i "ivtelvel minden
"isbet!s, a legels bet! is.
runDFL
run1astDFL
get7ac!groundDFL
Hltoz & vltozneve" r$vide", de beszdese"
leg'ene". &z adott rvn'essgi tarto(
mn' brmel'i" pontjn eg'rtelm! le(
g'en a szerepe. 9ehetleg "er+lj+" az
eg' "ara"teres neve"et, "ivve a )i"lus(
vltoz" szo"sos nevei (i, j, stb.).
& "$ztes szava" "ezdbet!i "ivtelvel
minden "isbet!s, a legels bet! is.
int iL
/loat my:idthL
1onstans & "onstans vltoz" neve )supa nag'be(
t!s, a t$bbszavas $sszettele"et az kYk
"ara"terrel "ell elvlasztani.
static /inal int
M.+5:.'T9 K ML
static /inal int
M,`5:.'T9 K ]]]L
static /inal int
\&T5T9&5C-< K 2L
2>F. oldal Java programozs (1.3. verzi)
25.*ervez#si mintk
-bben a #ejezetben alapos elmleti bevezetst nem tudun" adni, )supn nhn' eg'sze(
r! pldt tte"inteni van lehetsg+n". & tma so""al alaposabb megrtshez &rich
\amma@ Salph Johnson@ Sichard 9elm@ John =lissides: -rogramterve"Esi mint?! )*(
m! "$n'vt rdemes elvenni. (9etenni az DDG irnt rde"ld" Qg'sem tudj" .)
Mi a tervez#si minta8
Ba eg' #eladat Qjra el"er+l a #ejleszts #ol'amn, a""or valsz*n!leg a megolds hason(
l lesz a "orbbihoz. & tervezsi mint" ol'an obje"tum"$zpontQ megoldso"at jelente(
ne", amel'e" mr bizon'*totta" a g'a"orlatban. -ze" #elhasznlsa rugalmasabban m(
dos*that s "$nn'ebben, jobban Qjrahasznos*that al"almazso"at "sz*thet+n".
& mint" le*rsra eg'sges mdszere"et szo"s al"almazni. -z ln'egt te"intve a "$(
vet"ez"et tartalmazza.
4otiv)i. mi volt az az eredeti problma, ami miatt a tma el"er+lt.
& rsztvev" s a stru"tQra le*rsa.
& hasznlat #elttelei. meddig terjed a minta al"almazhatsga.
8ovbbi al"almazsi pld".
- jeg'zetben X terjedelmi o"o"bl X )supn eg' "evsb #ormlis, az rde"lds #el"elt(
sre szolgl bevezett tudun" n'Qjtani.
@evezets"nt mg "$vet"ezzen eg' tte"int tblzat.
:#l
F#trehozsi 0zerkezeti Eiselked#si
5
a
t
'
k

r
9
s
z
t

l
y
3'rt#+ggvn' (Dsztl')illeszt Irtelmez
7ablon#+ggvn'
9
!
+
e
k
t
4
m
-lvont g'r
Ip*t
Grotot*pus
-g'"e
(Dbje"tum)illeszt
B*d
Msszettel
:*sz*t
Bomlo"zat
Gehel'sQl'Q
Bel'ettes
2elelssgln)
Garan)s
@ejr
1$zvet*t
-ml"eztet
4eg#ig'el
Ollapot
7tratgia
9togat
20.8ervezsi mint" 2>?. oldal
25.,. F#trehozsi mintk
& ltrehozsi mint"na" az a )lju", hog' az eg'es obje"tumpldn'o" ltrehozsa"or
spe)ilis ign'e"ne" is eleget tudjun" tenni.
&z -g'"e (Singleton) minta pldul lehetv teszi, hog' eg' osztl'bl )sa" eg'etlen pl(
dn't lehessen ltrehozni.
&z -lvont g'r (,8stract 1actory), Ip*t (7uilder) s 3'rt#+ggvn' (1actory Method)
mint" szintn a pldn'os*tst tmogatj", ami"or nem a"arju", vag' nem tudju", mi(
l'en t*pusQ is leg'en az adott pldn'.
25.,., -gyke /Singleton2
&z -g'"e minta a""or hasznos, ha eg' osztl'bl )sa" eg'etlen pldn' ltrehozst sze(
retnn" engedl'ezni. & mdszer ln'ege, hog' "ontrolllju" a pldn'os*tst eg' privt
"onstru"tor ltrehozsval. &z osztl'bl )sa" eg'etlen pldn't hozun" ltre, azt is )sa"
sz+"sg (az els "rs) esetn. & pldn' elrse eg' stati"us g'rt metduson "eresz(
t+l t$rtni".
,zz+n" elsz$r eg' ltalnos pldt.
class Singleton {
private static Singleton instance = null;
private Singleton() { }
static public Singleton instance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
public void finalize() {
instance = null;
}
}
Gldn't ltrehozni a "$vet"ez mdon tudun".
Singleton one = Singleton.instance();
Ba eg' Qjabb pldn't "r+n", a""or is ug'anazt az obje"tumot "apju". Bibs lenne vi(
szont, ha "$zvetlen+l prblnn" pldn'os*tani.
Singleton one = new Singleton(); // hibs
-g' "i)sit ms megoldst lthatun" eg' tvoli "ap)solat "ip*tst megvals*t osztl'(
nl. Jtt a "ap)solat mindig sz+"sges, a dupli"ls el"er+lse a # )lun".
Meg+egyz#s. Irdemes belegondolni, mil'en zavaro""al jrna, ha a programoz #ig'elmetlensge miatt
eg'szerre "t vag' t$bb tvoli "ap)solatot prblnn" "ip*teni s hasznlni ug'anazon er#orrs #el.
final class RemoteConnection {
private Connect con;
private static RemoteConnection rc =
new RemoteConnection(connection);
20<. oldal Java programozs (1.3. verzi)
private RemoteConnection(Connect c) {
con = c;
....
}
public static RemoteConnection getRemoteConnection() {
return rc;
}
public void setConnection(Connect c) {
this(c);
}
}
0zerzi meg+egyz#s. 8ovbbi mint" bemutatsa tervben van.
25.,.2 Dyrt'">ggv#ny /%a.tory Method2 minta
& g'rt#+ggvn' minta az eg'i" legt$bbet al"almazott tervezsi minta. & minta )lja
eg' obje"tum ltrehozsa "+l$nb$z in#orm)i" alapjn.
& "$vet"ez brn a bemeneti in#orm)it az a8c jel"pezi. -z alapjn a g'rt#+ggvn'
az * sosztl' valamel'i" leszrmazottjt (*y vag' *") #ogja pldn'os*tani. & getClass
h*vsra ltrej$v obje"tum tn'leges t*pusrl t$bbn'ire nem is "ell tudnia a #elhasz(
nlna".
,zz+n" eg' "on"rt pldt. & #eladatun" az, hog' a neve" "ezelse "$r+li "$vet"ez
problmt megoldju". &z angol n'elvben "t#le mdon is megadhatju" ug'anazt a ne(
vet.
Ja)" 9ondon
9ondon, Ja)"
Ba eg' beviteli mezben a #elhasznl megadja a nevt, a""or brmel'i"et hasznlja.
,e"+n" az a #eladatun", hog' a nv alapjn eg' ol'an obje"tumot hozzu" ltre, amel'i"(
bl brmi"or elrhet" a sz+"sges szolgltatso".
-lsz$r nzz+" meg azt az sosztl't, amel'ne" a szolgltatsaira vgs soron sz+"s(
g+n" lesz.
abstract class Namer {
protected String last;
protected String first;
public String getFirst() {
return first;
}
20.8ervezsi mint" 201. oldal
public String getLast() {
return last;
}
}
,zz+" meg a "t igen eg'szer! leszrmazott osztl't is.
&z els leszrmazottun" a nv megadsnl az els ( sz"$z$s) megadst #elttelezi.
class FirstFirst extends Namer {
public FirstFirst(String s) {
int i = s.lastIndexOf(" ");
if (i > 0) {
first = s.substring(0, i).trim();
last =s.substring(i+1).trim();
} else {
first = "";
last = s;
}
}
}
& msi" leszrmazott a vessz "ara"tert "eresi elvlaszt"nt.
class LastFirst extends Namer {
public LastFirst(String s) {
int i = s.indexOf(",");
if (i > 0) {
last = s.substring(0, i).trim();
first = s.substring(i + 1).trim();
} else {
last = s;
first = "";
}
}
}
& tn'leges pldn'os*tst (g'rtst) a "$vet"ez osztl' vgzi.
class NameFactory {
public Namer getNamer(String entry) {
int i = entry.indexOf(",");
if (i>0)
return new LastFirst(entry);
else
return new FirstFirst(entry);
}
}
-legend a get+amer metdust a nevet tartalmaz String paramterrel megh*vni, ered(
mn'+l pedig eg' +amer (leszrmazott) obje"tumot "apun".
Meg+egyez#s. & plda lttn #elmer+lhet az a "i#ogs, hog' elegend lett volna a +amer osztl' "onst(
ru"torban ezt a "t#le inputot meg"+l$nb$zteti. -nnl a pldnl tn'leg jrhat lenne ez az Qt is.
& plda eg'szer!sge abban rejli", hog' a leszrmazotta" )sa" a "onstru"torun"ban trne" el eg'mstl.
4s $sszetettebb szitu)i esetn a leszrmazotta" rdemi m!"$dse is jelentsen eltrhet eg'mstl.
9egersebb rv"nt pedig azt rdemes meggondolni, hog' ha a bemutatott stru"tQrt "ell bv*ten+n" eg'
Qj#ajta visel"edssel, a""or elegend eg' Qj leszrmazott osztl' ltrehozsa s a get+amer metdus bv*(
tse, a t$bbi osztl'hoz eg'ltaln nem "ell hozzn'Qlni. -z eg' nag'obb al"almazs esetn nag'on ertel(
jes rv lehet.
202. oldal Java programozs (1.3. verzi)
25.2. 0zerkezeti mintk
& szer"ezeti mint" seg*tsgvel el*rhatju", hog' az eg'es osztl'o"bl vag' obje"tu(
mo"bl hog'an lljon el eg' "omplePebb stru"tQra.
&z osztl' mint" )lja, hog' ol'an $r$"lsi hierar)hit ala"*tsun" "i, amel'i" jl hasz(
nlhat program#el+letet n'Qjt. -zzel szemben az obje"tum mint" az obje"tumo" $sz(
szeillesztsne" )lszer! mdjait al"almazz".
&z Jlleszt (,dapter) mintra a""or van sz+"sg, ha "+l$nb$z #el+let! osztl'o"na"
"ell "ap)solatba hozni. Wg' tulajdon"ppen a "t #lne" nem is "ell eg'msrl "on"rtan
tudni, elg, ha a "$zt+" lv illeszti mind"t #elet.
& B*d (7ridge) minta ezzel szemben nem "n'szerhel'zet, hanem tudatos tervezs miatt
ad valami ms #el+letet. & szolgltats #el+lett (inter#szt) s megvals*tst (imple(
ment)ijt) tudatosan vlasztja szt.
& Bomlo"zat (1acade) mintval eg' nag'obb "omponensne" eg'sges #el+letet (inter(
#szt) tudun" n'Qjtani.
& Gehel'sQl'Q (1ly)eight) minta lehetsget ad arra, hog' elrejts+n" eg' obje"tumot, s
azt )sa" a""or hozzu" el, ha arra tn'leg sz+"sg lesz.
25.7. Eiselked#si mintk
& visel"edsi mint" (a szer"ezeti mint""al szemben) nem az lland "ap)solatra, ha(
nem az obje"tumo" "$z$tti "ommuni")ira adna" hat"on' megoldst.
& 4eg#ig'el (C8server) minta )lja, hog' eg' obje"tum llapotvltozsaina" #ig'elst
lehetv teg'e tetszleges ms obje"tumo" szmra. & #ig'el poz*)iba #elirat"ozssal
juthatun", de a leirat"ozs is brmi"or megejthet.
& 1$zvet*t (4ediator) minta )lja, hog' "t X eg'mssal "ommuni"lni "ptelen osz(
tl' "$z$tt "$zvet*t szerepet t$lts$n be. Irde"essg, hog' a "t "$zvetve "ommuni"l
osztl'na" semmit sem "ell eg'msrl tudnia.
& 2elelssgln) (Chain o/ Sesponsi8ility) minta az obje"tumo" "$z+l meg"eresi a #ele(
lst. -g'szer! plda"nt el lehet "pzelni eg' b$ngsz al"almazs abla"t, ahol a #el+let
tulajdon"ppen t$bbsz$r$sen eg'msba g'azott "omponense" seg*tsgvel p+l #el.
-g' egr"attints esetn a #abla"(obje"tumbl "iindulva (a vizulis tartalmazs men(
tn) eg're pontosabban meg tudju" hatrozni, hog' a "attints mel'i" doboz, mel'i" be(
"ezds, mel'i" !rlap, mel'i" !rlap(elem stb. ter+letn t$rtnt.
& 7tratgia (Strategy) minta eg' algoritmust eg' osztl'ba zr. Wg' az algoritmus "sb(
bi levltsa )sa" az s eg' msi" leszrmazottjt #ogja ign'elni.
Hg+l a @ejr (.terator) minta mr ismers lehet a Java .terator inter#sze miatt. #el(
adata a bejrs biztos*tsa pl. trol obje"tumo"on.
2E.Java #ejlesztesz"$z$" 203. oldal
2B.Java "e+leszteszkzk
@rmel'i" #ejlesztesz"$zt is vlasztju", telep*ts+" elsz$r a #ejleszt"$rn'ezetet s a do(
"ument)it az 1.1 #ejezetben le*rt mdon.
2B.,. J:reator
& J;reator Java programozsra al"almas editor. & program let$lthet a http://))).jcB
reator.com/do)nload.htm )*mrl. & -ro vltozat 3< napig m!"$d dem, de let$lthet
a "orltlan ideig hasznlhat (/ree)are), br nmileg "evesebb tudsQ Lite &dition vl(
tozat is.
2B.2. Net!eans
& ,etbeans a 7un sajt #ejleszt"$rn'ezete a Java plat#ormo"hoz.
& J27- vltozattal "$z$s )somagban is let$lthetj+", *g' a telep*ts is nag'on eg'szer!
lesz. (& "$z$s )somag a 7un honlapjrl t$lthet le.)
& http://))).net8eans.org/ )*mrl nem )sa" az alap)somagot, hanem "+l$nb$z $sz(
szell*tso"at s "iegsz*t"et is let$lthet+n". Ba nem a J27-(vel "$z$s )somagot tele(
p*tj+", a""or (a J;reatorhoz hasonlan) a ,etbeanst rdemes "sbb telep*teni.
20>. oldal Java programozs (1.3. verzi)
2B.2., Ala&vet hasznlat
-bben a rszben eg' eg'szer! al"almazs "sz*tsne" lpseivel ismer"ed+n" meg.
<ro+ekt l#trehozsa
& ,etbeans ind*tsa utn 1ile [ +e) -roject.
-g' alapvet Java proje"thez a \eneral )soport Java ,pplication eleme al"almas.
1$vet"ez lps"nt a proje"t nevt s elrsi Qtjt "ell megadnun".
(& proje"t al"almas arra, hog' eg' t$bb osztl'bl ll al"almazs #orrsllomn'it eg'
eg'sg"nt "ezelj+".)
@ell*thatju" proje"t+n"et elsdlegesne" (4ain proje)t), s megadhatju" a # osztl'un"
nevt is.
2E.Java #ejlesztesz"$z$" 200. oldal
& varzsl #utsna" eredmn'e jl lthat a "$vet"ez "pen.
20E. oldal Java programozs (1.3. verzi)
2B.7. -.li&se
&z -)lipse eg' t$bb plat#ormon (CindoNs mellett 9inuP, 7olaris, &Jt, BG(Lt, 4a) D7(
t) rendel"ezsre ll, t$bb programozsi n'elvet (Java, GBG, ;/;ZZ, stb.) tmogat s
t$bb#ajta #ejleszti "$rn'ezetben (asztali al"almazs#ejleszts, Neb#ejleszts, mobil al(
"almazs#ejleszts, L492 szer"eszts, vizulis szer"eszts stb.) al"almazhat n'*lt #or(
rsQ szo#tver#ejleszt proje"t.
-bben a #ejezetben a Java #ejlesztshez sz+"sges minimlis alapismerete"rl lesz sz.
Meg+egyz#s. &z -)lipse ign'li a Java 7:1 telep*tst, teht az 1. #ejezetben ismertetett mdon elsz$r a
#ejleszt"$rn'ezetet "ell let$lteni s telep*teni%
2B.7., Ala& t4la+donsgok
&z -)lipse eg' teljesen a #elhasznl ign'e szerint "iala"*that #el+lettel rendel"ezi"
(mel'et perspe"t*vna" h*vna"), eg'szer! (#ogd s vidd) #el+leten tpa"olhatju" a meg(
n'itott abla"o"at (nzete"et). 8$bb #el+letet is "iala"*thatun" magun"na" az ppen a"(
tulis mun"tl #+ggen (programozs, B849 szer"eszts, stb.), mel'e" "$z$tt a rend(
szer automati"usan is tud vltani, illetve mi is vltogathatun".
7zmos nzet ll rendel"ezs+n"re alap"ip*tsben, illetve eze" listja bep+l modu(
lo""al tovbb bv*thet. Jl'en a szer"esztmez s a proje"t #jlo" listja (navigator)
mellett a problm", tennival" listja, a "ivonat doboz (az a"tulis llomn' vza.
t49 szer"ezet, vag' a #+ggvn'e" listja, stb.).
& bep*tett szer"eszt #leg Java s "ap)sold "dsz*nezse"et tmogat, de ezt a ;ol(
orer plugin
2
seg*tsgvel "iegsz*thetj+". *g' rengeteg n'elv ll rendel"ezs+n"re, illetve
ha nem tallun" eg'et, t49 le*r" seg*tsgvel "ibv*thetj+" a rendszert.
2
http.//)olorer.sour)e#orge.net/
2E.Java #ejlesztesz"$z$" 20=. oldal
2B.7.2 Az -.li&se !eszerz#se #s >zem!e helyez#se
Java #ejlesztshez mindene"eltt a http://))).eclipse.org/do)nloads/ oldalrl le "ell
t$lteni az &clipse S'( nev! term" leg#rissebb stabil verzijt. 4ivel a let$lt$tt llo(
mn' eg' SJG #ormtumQ t$m$r*tett llomn', "zzel "ell "i)somagolnun", pl. a C:0ecB
lipse "$n'vtrba.
8ovbbi telep*tsre nin)s sz+"sg, )supn az ind*ts utn nhn' alapbell*tst ("on#i(
gurlst) "ell megtenni. Wzls szerint paran)si"ont is lehet ltrehozni az &*clipse.e*e sz(
mra.
&z els #uttats al"almval be "ell ll*tanun" a mun"ater+let+n"et, vag'is "i "ell jel$l(
n+n" azt a "$n'vtrat, ahol a #ejlesztshez "ap)sold llomn'ain"at trolni szeret(
nn". & "sbbie"ben itt hozhatun" ltre proje"te"et, amel'e" ms(ms al"$n'vtrban
j$nne" ltre.
& "on#igurls els lpse"nt a Java #ejleszt"$rn'ezet "ell bell*tanun". :indo) [
-re/erences@ majd Java [ .nstalled JS&s. Jtt j esetben a telep*tett #uttat"$rn'ezetet
#el is ajnlja. 7z+"sg esetn lehet mdos*tani is a bell*tso"at.
20F. oldal Java programozs (1.3. verzi)
Irdemes mg tnzni a \eneral [ :o!space s az eg'b \eneral bell*tso"at is.

You might also like