You are on page 1of 41

Cc khi nim OOP Mt i tng l g?

Java c bit n nh mt ngn ng hng i tng (OO - object-oriented), bn c th s dng ngn ng ny lp trnh hng i tng. iu ny rt khc so vi lp trnh th tc, v c th hi l lng i vi hu ht cc lp trnh vin khng hng i tng. Bc u tin bn phi hiu i tng l g, v l khi nim c s ca OOP. Mt i tng l mt b m lnh t thn trn vn (self-contained), t hiu chnh mnh v c th ni cho cc i tng khc v chnh mnh nu chng a ra cc yu cu m n hiu c. Mt i tng c cc thnh phn d liu (cc bin) v cc phng thc, chnh l nhng yu cu m n bit cch tr li (d chng khng c din t bng li nh cc cu hi). Tp cc phng thc m mt i tng bit cch tr li c gi l giao din ca i tng. Mt vi phng thc l m cng cng, ngha l cc i tng khc c th gi n chng. Tp cc phng thc ny c gi l giao din cng cng ca i tng. Khi mt i tng gi phng thc ca mt i tng khc, th c gi l gi mt thng ip (sending a message hoc message send). Cm t ny l thut ng ca OO nhng hu ht trong gii Java mi ngi hay ni, gi phng thc ny hn l gi thng ip ny. Trong phn tip theo, chng ta s xem xt mt v d minh ha khi nim gip bn hiu vn ny r rng hn. V d minh ha khi nim i tng Gi s chng ta c i tng Person. Mi Person c tn, tui, chng tc v gii tnh. Mi Person cng bit ni v bit i. Mt Person c th hi tui ca mt Person khc, hoc yu cu mt Person khc bt u i (hay dng). Din t theo thut ng lp trnh, bn c th to mt i tng Person v khai bo mt s bin (nh tn v tui). Nu bn to mt i tng Person th hai, i tng ny c th hi tui ca i tng th nht hoc yu cu i tng th nht bt u i. N c th thc hin nhng iu y bng cch gi n cc phng thc ca i tng Person u tin. Khi chng ta bt u vit m lnh bng ngn ng Java, bn s hiu ngn ng ny trin khai thc hin khi nim i tng ra sao. Ni chung, khi nim i tng l nh nhau trong ngn ng Java v cc ngn ng hng i tng khc, mc d vic trin khai thc hin l khc nhau gia cc ngn ng. Cc khi nim l ph qut. V s tht ny, lp trnh vin hng i tng, bt chp h lp trnh bng ngn ng no, c xu hng pht biu khc so vi nhng lp trnh vin th tc. Cc lp trnh vin th tc thng ni v cc hm v cc m un. Lp trnh vin hng i tng li ni v cc i tng v h thng ni v cc i tng ny bng cch s dng cc i t nhn xng. Chng h bt thng khi bn nghe mt lp trnh vin hng i tng ni vi ng nghip, i tng Supervisor ni vi i tng Employee, cho ti ID ca cu, v anh ta cn nhng th ny gn nhim v cho Employee. Lp trnh vin hng th tc c th ngh cch ni chuyn ny tht l lng, nhng n li hon ton bnh thng i vi lp trnh vin hng i tng. Trong th gii lp trnh ca h, mi th u l i tng (cng c mt vi ngoi l ng ch trong ngn ng Java) v cc chng trnh l ch l s tng tc (hay ni chuyn) gia cc i tng vi nhau. V u trang Cc nguyn tc hng i tng c bn Khi nim i tng l trng yu i vi lp trnh hng i tng, v d nhin, tng cc i tng giao tip vi nhau bng cc thng ip cng vy. Nhng c 3 nguyn tc c bn m bn cn hiu. Bn c th nh 3 nguyn tc hng i tng c bn bng cm vit tt PIE: a hnh ( Polymorphism) Tha k ( Inheritance) Bao gi ( Encapsulation) l nhng t tru tng nhng nhng khi nim ny thc s khng qu kh hiu. Trong cc phn tip theo, chng ta s bn v tng khi nim ny mc chi tit hn, theo th t ngc li. V u trang Bao gi Hy nh rng, mt i tng l t thn trn vn, cha ng cc thnh phn d liu v hnh ng m n c th thc hin trn cc thnh phn d liu y. y l vic trin khai thc hin nguyn l gi l n giu thng tin. tng ca n l mt i tng t n hiu mnh. Nu mt i tng khc mun iu g t i tng ny th n phi hi. Theo thut ng lp trnh hng i tng, phi gi mt thng ip n mt i tng khc hi v tui. Theo thut ng Java, phi gi mt phng thc ca i tng khc n tr li kt qu l tui.

S bao gi m bo rng mi i tng l khc nhau v chng trnh l mt cuc chuyn tr gia cc i tng. Ngn ng Java cho php cc lp trnh vin vi phm nguyn l ny nhng hu nh lun l mt tng ti nu lm nh th. V u trang Tha k Khi bn c sinh ra, ni v kha cnh sinh hc, bn l t hp DNA ca cha m mnh. Bn khng hon ton ging ai trong s h, m bn ging c hai ngi. OO cng c nguyn tc tng t i vi cc i tng. Quay li vi i tng Person. Ta nh li rng mi ngi c mt chng tc. Khng phi tt c cc Person u cng chng tc, nhng d sao th h cng c im tng t nh nhau ch? Chc chn vy! H chng phi nga, tinh tinh hay c voi m l ngi. Mi con ngi u c nhng im chung nht nh v iu ny gip phn bit con ngi vi cc loi ng vt khc. Nhng gia mi ngi cng c khc bit vi nhau. Mt a tr c ging ht mt ngi trng thnh khng? Khng. i li v ni l khc nhau ri. Nhng mt a tr th vn chc chn l mt con ngi. Theo ngn ng hng i tng, Person v Baby l cc lp s vt hin tng thuc cng mt h thng phn bc, v Baby tha kcc c tnh v hnh vi t lp cha ca n. Chng ta c th ni rng mt Baby c th l mt kiu Person hay Baby tha k t Person. Nhng khng c chiu ngc li mt Person khng nht thit phi l mt Baby. Mi i tng Baby l mt c th ca lp Baby v khi chng ta to mt i tng Baby, chng ta c th ha lp ny. Hy coi lp nh l khun mu chung cho cc c th ca lp . Ni chung, i tng c th lm nhng g ty thuc vo kiu ca i tng l g hoc ni theo cch khc, i tng l c th ca lp no. C Baby v Adult u thuc kiu Person, nhng mt i tng (Adult) c th c mt vic lm (job) cn i tng kia (Baby) th khng. Theo thut ng Java, Person l mt lp bc trn (superclass) ca Baby v Adult, v cc lp ny l lp con ca Person. Mt khi nim c lin quan khc l tng v tru tng ha. Person c mc tru tng ha cao hn Baby hay Adult. C hai u l kiu Person nhng c nhng khc bit nho nh. Tt c cc i tng Person u c nhng im chung (nh tn v tui). Bn c th c th ha mt Person? Thc s l khng! Bn hoc c mt Baby hoc c mt Adult. Trong Java, Person c gi l lp tru tng. Bn khng th trc tip c mt c th ca lp Person. Bn s c Baby hoc Adult, c hai u l kiu Person, nhng l Person c thc t ha. Cc lp tru tng nm ngoi phm vi ca ti liu ny, chng ti s khng ni thm v chng na. By gi, ta hy suy ngh xem vi mt Baby, ni (speak) c ngha l g. Chng ta s xt n cc h qu trong phn tho lun tip theo. V u trang a hnh Baby c ni nh Adult khng? D nhin l khng ri. Mt Baby c th a, nhng khng nht thit ni ra nhng li hiu c nh Adult. Do , nu ti c th ha mt i tng Baby (hay l c th ha mt Baby cng c cng nghha t i tng c ngm hiu) v cho n ni, th n ch c ngha l nhng ting a. Ta hy vng rng Adult ni th mch lc hn. Trong h thng phn bc con ngi, chng ta c Person nm nh vi Baby v Adult nm pha di n, l cc lp con. Tt c mi ngi u c th ni, Baby v Adult cng vy, nhng s ni khc nhau. Baby ch a v pht nhng m thanh n gin. Adult ni thnh li. chnh l s a hnh: cc i tng lm vic theo cch ring ca chng. V u trang Ngn ng Java l (v khng l) OO ch no? Nh chng ta s thy, ngn ng Java cho php bn to cc i tng hng nht (first -class), nhng khng phi bt c ci g trong ngn ng ny u l i tng. Mt s ngn ng OO nh Smalltalk li hon ton khc. Smalltalk hon ton l OO, c ngha l mi th trong ngn ng ny u l i tng. Java l ngn ng lai tp gia i tng v phi i tng. N cho php mt i tng bit r cc i tng khc, nu vi t cch l mt lp trnh vin bn cho php iu xy ra. iu ny vi phm nguyn l bao gi. Tuy nhin, ngn ng Java cng cung cp cho tt c cc lp trnh vin OO nhng cng c cn thit tun theo mi quy tc OO v vit m lnh OO rt chun. Nhng lm c nh vy cn phi t c k lut. Ngn ng khng p bn lm vic ng n c. Trong khi nhng ngi thun ty ch ngha hng i tng tranh lun xem liu Java l hng i tng hay khng, thc s y khng phi l mt l l mang li ch li. Nn tng Java s gi vng v tr ca n. Hy hc cch lp trnh hng i tng tt nht c th vi m lnh Java v c nhng l l thun ty ch ngha cho nhng ngi khc. Ngn ng Java gip bn vit chng trnh r rng, kh ngn gn, d bo tr, iu ny l kh trong cun sch ca ti i vi hu ht cc tnh hung ngh nghip. Ngn ng Java bn di ci v ngoi

Nn tng Java hot ng nh th no Khi bn vit m lnh bng ngn ng Java, ging nh nhiu ngn ng khc, bn vit m ngun, sau bn bin dch n; trnh bin dch kim tra m lnh ca bn v i chiu vi cc quy tc c php ca ngn ng. Nhng nn tng Java b sung thm mt bc khc na ngoi cc bc trn. Khi bn bin dch m Java, bn s nhn c kt qu l m byte (bytecodes). Sau , my o Java (JVM) s thng dch cc m byte ny lc chy thi hnh l khi bn yu cu Java chy chng trnh. Theo thut ng h thng tp, khi bn vit m, bn sinh ra mt tp .java. Khi bn bin dch tp ny, trnh bin dch ca Java sinh ra mt tp .class, cha cc m byte. JVM c v thng dch tp .class ny lc chy thi hnh v n hot ng nh th no l ty thuc vo nn h thng m bn ang chy. chy trn cc nn h thng khc nhau, bn phi bin dch m ngun ca mnh i vi cc th vin dnh ring cho nn h thng . Bn c th hnh dung, li ha hn vit mt ln, chy mi ni s tr thnh vit mt ln, kim th mi ni. l c nhng s khc bit mong manh (hay khng mong manh cho lm) gia cc nn h thng, c th khin cho m lnh ca bn hnh x khc nhau trn nhng nn tng khc nhau. Thu dn rc Khi bn to cc i tng Java, JRE s t ng cp pht khng gian b nh cho cc i tng ny t heap, y l vng b nh ln c sn cp trong my tnh ca bn. Qu trnh chy thi hnh s theo vt ca nhng i tng ny gim bn. Khi chng trnh ca bn khng s dng cc i tng na th JRE s vt b chng. Bn khng phi tm n chng na. Nu bn tng vit bt c phn mm no bng ngn ng C++, cng l mt ngn ng hng i tng (ngi ta cho rng th), vi t cch l lp trnh vin, bn phi cp pht v ly li b nh dnh cho i tng mnh to ra mt cch tng minh bng cch s dng cc hm malloc() v free(). iu i vi cc lp trnh vin tht l phin h. N cng nguy him na, v n m ng cho vic tht thot b nh len li vo trong chng trnh ca bn. Tht thot b nh gy ra vic chng trnh ca bn ngn b nh vi tc pht hong, iu ny gy sc p ln b vi x l ca my tnh ang chy chng trnh. Nn tng Java gip bn loi b ni lo v tt c nhng vn v n c thnh phn thu dn rc. B thu dn rc ca Java l mt tin trnh nn pha sau loi cc i tng khng cn c dng ti na, ch khng buc bn phi tng minh lm iu . My tnh rt thch hp trong vic lu gi vt ca hng ngn th v cp pht ti nguyn. Nn tng Java gip cho php my tnh ca bn thc hin iu . N duy tr s m cc tham chiu ang dng n mi i tng trong b nh. Khi con s ny chm mc 0, b thu dn rc s ly li vng b nh m i tng y s dng. Bn c th trc tip gi b thu dn rc, nhng ti khng bao gi phi lm iu . N thng t x l v tt nhin l cng s t x l trong mi m v d trong ti liu ny. V u trang IDE so vi cc cng c dng lnh Nh chng ta lu trc y, nn tng Java i km vi cc cng c dng lnh cho php bn bin dch ( javac) v chy ( java) cc chng trnh Java. Vy ti sao ta li s dng mt IDE nh Eclipse? n gin ch v vic s dng cc cng c dng lnh c th rt phin phc, bt k chng trnh c phc tp nh th no. Cc cng c dng lnh c sn nu bn cn n chng, nhng s dng mt IDE thng l la chn khn ngoan hn. L do chnh ca khng nh ny l IDE qun l tp v ng dn gip bn, v c cc trnh hng dn tng tc h tr bn khi bn mun thay i mi trng chy thi hnh ca mnh. Khi ti mun bin dch mt chng trnh Java bng cng d dng lnh javac, ti phi lo vic thit t bin mi trng CLASSPATH t lc u JRE c th bit ni t cc lp ca ti, hoc ti phi thit t gi tr cho bin ny lc bin dch. Trong mt IDE nh Eclipse, tt c nhng g ti phi lm l cho Eclipse bit tm JRE u. Nu m lnh ca ti dng cc lp khng do ti vit ra, tt c nhng g ti phi lm l cho Eclipse bit nhng th vin m d n ca ti tham chiu n l g v tm chng u. iu ny n gin hn nhiu so vi vic dng dng lnh g nhng cu lnh di n pht khip ch r ng dn n lp. Lp trnh hng i tng vi cng ngh Java Gii thiu Cng ngh Java bao trm nhiu th, nhng bn thn ngn ng Java li khng ln lm. Tuy nhin, trnh by n bng ngn ng thng thung, li khng phi l nhim v n gin. Phn ny s khng bn k v ngn ng ny. Thay vo , s nu nhng g bn cn bit khi u v nhng g bn hu nh chc chn s gp vi t cch l lp trnh vin mi vo ngh. Cc ti liu hng dn khc (xem Cc ti nguyn nhn c nhng gi v mt s ti liu ny) s trnh by cc kha cnh khc nhau ca ngn ng ny, cc th vin hu ch b tr do Sun cung cp, cc ti nguyn khc v thm ch c cc IDE.

Chng ti s trnh by y y c li dn gii v cc v d m lnh bn c th bt u vit cc chng trnh Java v hc cch lp trnh hng i tng ng n trong mi trng Java. T , vn ch cn l vic thc hnh v hc tp. Hu ht cc ti liu hng dn nhp mn c ln ging nh nhng cun sch tham kho c t ngn ng. u tin bn thy tt c cc quy tc c php, sau bn xem cc v d p dng, tip l ni v nhng ch nng cao hn, nh cc i tng chng hn. y chng ti s khng i theo con ng . l v nguyn nhn chnh dn n cc m lnh hng i tng ti t vit bng ngn ng Java l nhng lp trnh vin mi vo ngh khng t mnh vo mi trng hng i tng ngay t u. Cc i tng c khuynh hng b i x nh mt ch ph thm (add-on) hay l thuc. Thay vo , chng ti s an xen vic hc c php Java thng qua qu trnh hc Java hng i tng. Bng cch ny, bn s c c mt bc tranh mch lc v vic s dng ngn ng ra sao trong bi cnh hng i tng. Cu trc ca mt i tng Java Hy nh rng, i tng l mt th c bao gi kn, t bit mi iu v mnh v c th lm mt s vic khi c yu cu thch hp. Mi ngn ng u c quy tc nh ngha mt i tng nh th no. Trong ngn ng Java, i tng ni chung nom ging nh lit k di y, mc d chng c th thiu ht mt s thnh phn: package packageName;

import packageNameToImport;

accessSpecifier class ClassName { accessSpecifier dataType variableName [= initialValue ]; ... accessSpecifier ClassName( arguments ) { constructor statement(s) } accessSpecifier returnValueDataType methodName ( arguments ) { statement(s) } }

y c mt s khi nim mi m chng ta s tho lun trong vi phn tip sau. V u trang Cc gi Khai bo gi phi xut hin u tin khi bn nh ngha mt lp: package packageName;

Mi i tng Java u nm trong mt package. Nu bn khng ni r rng n thuc gi no, Java s t n vo trong gi mc nh. Mt package ch n gin l mt tp cc i tng, tt c (thng l th) lin quan vi nhau theo mt cch no . Cc packagequy chiu theo ng dn n tp tin trong h thng tp ca bn. Tn ca cc gi dng k php du chm (.) dch ng dn tp tin ny thnh mt th m nn tng Java hiu c. Mi mu trong tn package gi l mt nt (node). V d, trong gi c tn l java.util.ArrayList, java l mt nt, util l mt nt v ArrayList l mt nt. Nt cui cng tr n tp ArrayList.java. V u trang Cc cu lnh nhp khu Tip theo l cc cu lnh nhp khu, khi bn nh ngha mt lp: import packageNameToImport;

...

S Khi i tng ca bn s dng cc i tng trong cc gi khc, trnh bin dch ca Java cn bit tm chng u. Mt lnh nhp khu (import) s cho trnh bin dch bit ni tm nhng lp bn cn dng. V d, nu bn mun dng lp ArrayList t gijava.util, bn cn nhp khu theo cch sau: import java.util.ArrayList;

Mi lnh import kt thc bng mt du chm phy (;), ging nh hu ht cc cu lnh trong ngn ng Java. Bn c th vit bao nhiu cu lnh nhp khu cng c khi bn cn cho Java bit tm tt c cc lp m bn dng u. V d, nu ti mun dng lp ArrayList t gi java.util, lp BigInteger t gi java.math, ti s nhp khu chng nh sau: import java.util.ArrayList; import java.math.BigInteger;

Nu bn nhp khu nhiu hn mt lp t cng mt gi, bn c th dng cch vit tt cho bit bn mun np tt c cc lp trong gi ny. V d, nu ti mun dng c ArrayList v HashMap, c hai u t gi java.util, ti s nhp khu chng nh sau: import java.util.*;

Bn mun nhp khu gi no th phi c lnh nhp khu ring cho gi . V u trang Khai bo mt lp Tip theo l khai bo lp, khi bn nh ngha mt lp: accessSpecifier class ClassName { accessSpecifier dataType variableName [= initialValue ]; ... accessSpecifier ClassName( arguments ) { constructor statement(s) } accessSpecifier returnValueDataType methodName ( arguments ) { statement(s) } }

Bn nh ngha mt i tng Java nh mt lp. Hy ngh rng lp l khun mu ca i tng, mt th g ging nh my ct bnh quy vy. Lp nh ngha kiu ca i tng bn c th to ra t lp. Bn c th dp khun ra bao nhiu i tng thuc cng kiu nh bn mun. Khi bn lm th, bn to ra mt c th ca lp hoc ni theo cch khc l bn c th ha mt i tng. (Ch : t i tng c dng hon i ln ln ch mt lp ln mt c th ca lp.) nh t truy cp (access specifier) ca mt lp c th c nhiu gi tr, nhng hu ht u l public (cng cng), v cng l tt c nhng g chng ta s ni ti trong ti liu hng dn ny. Bn c th t mt ci tn bt k no bn thch cho mt lp, nhng tn ca lp theo quy c bt u bng bng mt ch ci vit hoa, v mi t tip theo trong tn cng bt u bng mt ch ci vit hoa.

Lp c hai kiu thnh phn: cc bin (hay thnh phn d liu) v cc phng thc. Tt c cc thnh phn ca lp u c nh ngha trong thn lp, nm gia cp ngoc nhn ca lp. V u trang Cc bin Gi tr ca cc bin trong mt lp l ci phn bit tng c th ca lp, l l do v sao chng thng c gi l cc bin c th. Mt bin c mt nh t truy cp ch r nhng i tng no c php truy cp n, mt kiu d liu, mt tn v (ty chn) mt gi tr khi to. y l danh sch cc nh t truy cp v ngha ca chng: public (cng cng): Bt k i tng no trong bt k gi no u c th thy bin ny.

protected (c bo v): Bt k mt c th no ca lp, lp con trong cng mt gi v bt k lp no khng phi l lp con nhng nm trong cng mt gi c th thy bin ny. Lp con trong cc gi khc khng th thy n. private (ring t): Khng mt i tng no ngoi c th c th ca lp c th thy c bin, thm ch c lp con.

Khng c nh t, (hoc package protected (c bo v theo gi)): Ch c cc lp trong cng mt gi vi lp cha bin l c th thy bin m thi. Nu bn c truy cp mt bin khng th truy cp c, trnh bin dch s thng bo bin l khng nhn thy i vi bn. Bn s dng nh t truy cp g trong nhng hon cnh no l nh vo c suy xt, v chng ta s quay tr li vn ny sau. V u trang Cc phng thc Cc phng thc ca mt lp nh ngha lp c th lm nhng g. C hai loi phng thc trong ngn ng Java: Hm to Cc phng thc khc C hai u c nh t truy cp ( ch ra nhng i tng no c th s dng chng) v phn thn (gia cp ngoc nhn), c cha mt hay nhiu cu lnh. Ngoi iu ny ra, khun dng v chc nng ca chng rt khc nhau. Chng ta s cp n tng loi phng thc ny hai phn tip sau. V u trang Hm to Cc hm to cho php bn ch r cch c th ha mt lp. Bn khai bo mt hm to nh sau: accessSpecifier ClassName( arguments ) { constructor statement(s) }

Bn nhn c sn mt hm to mc nh (khng c tham s truyn vo) cho mi lp m bn to ra m khng phi lm g. Thm ch bn khng phi nh ngha n. Cc hm to trng khc vi cc phng thc khc ch chng khng c kiu d liu ca gi tr tr v. l v kiu d liu gi tr tr li ca n chnh l lp . Bn vit m lnh gi mt hm to nh sau: ClassName variableHoldingAnInstanceOfClassName = new ClassName( arguments );

Khi bn gi mt hm to, bn dng t kha new. Cc hm to c th nhn tham s truyn vo hoc khng (hm to mc nh khng c tham s vo). Nghim tc m ni, cc hm to khng phi l phng thc hay thnh vin ca lp. Chng l mt sinh th c bit trong ngn ng Java. Tuy vy, trong thc t, v b ngoi v hot ng ca chng nhiu lc cng ging cc phng thc khc, v nhiu ngi gp c hai vo vi nhau. Hy ghi nh rng chng l c bit. V u trang Cc phng thc khng l hm to Cc phng thc khng l hm to trong ngn ng Java l th m bn thng s dng nht. Bn khai bo chng nh sau: accessSpecifier returnValueDataType methodName ( arguments ) { statement(s) }

Tt c cc phng thc u c kiu tr v, nhng khng phi mi phng thc u tr li th g . Nu phng thc khng tr li g, bn dng t kha void ch kiu tr v. Bn c th t bt c tn g m bn thch cho phng thc min l ci tn hp l (khng c khi u bng du chm, v d th), nhng theo quy c th tn phng thc l: L xu k t cc ch ci Bt u bng mt k t vit thng Bt u cc t tip theo bng k t vit hoa. Bn gi mt phng thc nh sau: returnType variableForReturnValue = instanceOfSomeClass.methodName(parameter1, parameter2, ...);

Nh vy, bn ang gi phng thc methodName() ca i tng instanceOfSomeClass, v truyn cho phng thc ny mt vi i s. S khc bit gia tham s v i s l khng nhiu, nhng chng khc nhau. Phng thc nhn cc tham s. Khi bn truyn gi tr c th vo phng thc lc bn gi th nhng gi tr ny c gi l i s ca li gi. i tng Java u tin ca bn To mt gi Nu bn cn cha , hy di chuyn n phi cnh Duyt Java (Java Browsing) trong Eclipse. Chng ta s thit t to lp Java u tin ca bn. Bc th nht l to mt ni cho l p ny tn ti. Thay v dng gi mc nh, tt hn l ta hy to mt gi ring cho d n Intro ca mnh. Nhn chut chn File>New>Package. Thao tc ny s m Trnh hng dn tng tc Package (xem hnh 3) Hnh 3. Trnh th thut to gi

G nhp intro.core l tn t cho gi v nhn Finish. Bn c th thy gi sau y trong khung nhn Packages trong vng lm vic: intro.core

Lu rng biu tng bn tri gi trng m m -- nhn ging nh mt dng m xm i ca biu tng gi. l quy c chung ca giao din ngi dng trong Eclipse i vi nhng hng mc trng rng. Gi ca bn cha c bt c lp Java no bn trong nn biu tng ca n b m i. V u trang Khai bo mt lp

Bn c th to mt lp Java trong Eclipse bng cch chn File>New,, nhng chng ta s dng cng c thay th. Nhn ln pha trn khung nhn Packages thy thanh cng c to cc d n, gi v lp. Nhn chut chn cng c New Java Class (ch C mu xanh lc) m trnh hng dn tng tc New Java Class. t tn lp l Adult v chp nhn cc mc nh bng cch nhp Finish. Bn s thy c mt vi thay i: Lp Adult xut hin trn khung nhn Classes, pha bn phi ca khung nhn Packages (xem hnh 4). Hnh 4. Vng lm vic

biu tng gi intro.core khng cn b m na. Trnh son tho ca Adult.java hin th bn di. Ti thi im ny, lp trng nh sau: package intro.core;

public class Adult { }

Eclipse sinh ra mt ci v hay mt khung mu cho lp ca bn, v bao gm lun cu lnh package nm ngay u. Thn ca lp hin gi l rng. n gin l chng ta phi thm da tht vo. Bn c th cu hnh khung mu cho cc lp mi, phng thc mi, vn vn trong trnh hng dn tng tc Preferences m bn tng dng trc y ( Window>Preferences ). Bn c th cu hnh khun mu cho m lnh trong ng dn n cc la chn u tin Java>Code Style>Code Templates. Thc t, n gin mi th trong vic hin th m lnh, t y tr i ti loi b tt c cc ch thch khi cc khun mu ny ngha l bt k dng no c du // trc hoc bt k dng no nm trong cp /* */ hoc cp /** **/. T by gi tr i, bn s khng nhn thy bt k dng ch thch no trong m lnh na, tr khi chng ta c bit tho lun v cch dng chng phn sau. Tuy nhin, trc khi chng ta tip tc, ta hy minh ha cch thc m IDE Eclipse lm cho cng vic ca bn d dng hn. Trong trnh son tho, hy sa i t class thnh clas v ch vi giy. Bn nhn thy l Eclipse s gch chn ch ny bng mt ng ln sng mu . Nu bn di chut qua mt mc c gch chn, Eclipse s bt mt ca s thng tin bo cho bn bit bn ang mc li c php. Eclipse gip bn bng cch lin tc bin dch m lnh ca bn v kn o cnh bo bn nu c vn xy ra. Nu bn dng cng c dng lnh javac, bn s phi bin dch m lnh v ch xem li. iu c th lm chm vic pht trin chng trnh ca bn. Eclipse loi b rc ri . V u trang Cc ch thch

Ging nh hu ht cc ngn ng khc, ngn ng Java h tr cc ch thch, m n gin l cc cu lnh m trnh bin dch s b qua khi n kim tra c php xem c ng khng. Java c nhiu kiu ch thch: // Ch thch mt dng. Trnh bin dch b qua on vn bn i sau cp du gch xin. /* Ch thch nhiu dng. Trnh bin dch b qua on vn bn nm gia hai du sao. */ /** Ch thch javadoc. Trnh bin dch b qua on vn bn nm gia hai du sao, v cng c javadoc s s dng chng. */

Kiu cui cng l ng ch nht. Ni rt ngn gn, cng c javadoc i km vi bn phn phi SDK Java m bn ci t c th gip bn sinh ra ti liu HTML cho m lnh ca bn. Bn c th sinh ra ti liu cho cc lp ring ca mnh v chng s trng tng t nh nhng g bn thy trong ti liu API Java m bn c trong The Java API online. Mt khi bn ch thch hp l cho m lnh ca mnh, bn c th chy lnh javadoc t dng lnh. Bn c th tm thy ch dn thc hin vic ny, v tt c thng tin c sn v javadoc trong trang web v cng ngh Java (xem Cc ti nguyn). V u trang Cc t dnh ring Cn mt mc na cn cp trc khi chng ta bt u vit m lnh b bin dch kim tra. Java c mt s t m bn khng c dng t tn cho cc bin. Sau y l danh sch cc t ny: abstract case const default extends float implements interface new protected static synchronized throw transient while null Danh sch ny khng di, nhng Eclipse s t m cc t ny khi bn g, bi vy bn khng phi ghi nh chng. Tt c, tr ba t cui, trong danh sch l t kha Java. Ba t ny l cc t dnh ring. S khc bit khng quan trng i vi nhng mc tiu ca chng ta; bn khng th s dng c hai loi. Gi ta hy xem mt s m lnh thc s. V u trang Thm cc bin boolean catch continue do false for import long null public strictfp short throws return assert break char char double final goto int int package package super super true void true byte class class else finally if instanceof native private private switch this try volatile false

Nh ti trc y ni, Adult bit tn, tui, chng tc v gii tnh ca n. Chng ta c th b sung thm cc mu d liu y cho lp Adult ca chng ta bng cch khai bo chng di dng cc bin. Sau th mi c th ca lp Adult s c cc bin ny. MiAdult s c gi tr khc nhau cho cc bin ny. l l do ti sao cc bin ca mi i tng li thng c gi l bin c th - chng l ci phn bit mi c th ca lp. Ta hy thm bin, dng nh t truy nhp protected cho mi bin: package intro.core; public class Adult { protected int age; protected String name; protected String race; protected String gender; }

By gi th mi c th ca Adult u s cha nhng mu d liu ny. Lu y mi dng m lnh kt thc bng du chm phy (;). Ngn ng Java yu cu iu . Cng lu thm l mi bin c mt kiu d liu. Ta c mt bin kiu s nguyn v ba bin kiu xu. Kiu d liu ca cc bin c hai dng: Cc kiu d liu nguyn thy Cc i tng (hoc do ngi dng nh ngha hoc l c sn trong ngn ng Java), cn gi l bin tham chiu. V u trang Kiu d liu nguyn thy C chn kiu d liu nguyn thy nh bn thng thy: Type boolean byte char short int long float double Size N/A 8 bits 16 bits 16 bits 32 bits 64 bits 32 bits with a decimal point 64 bits with a decimal point Default value false 0 'u/0000' 0 0 0 0.0 0.0 Example true 2 'a' 12 123 9999999 123.45 999999999.99999999

Chng ta dng kiu int cho d liu age v chng ta khng cn gi tr thp phn v mt s nguyn l ln m t tui thc ca con ngi. Ta dng kiu String cho ba bin khc v chng khng phi l s. String l mt lp trong gi java.lang, bn c th truy nhp vo m lnh ca lp ny mt cch t ng bt c lc no bn mun (chng ta s cp v n trong phn Strings). Bn cng c th khai bo cc bin l kiu do ngi dng nh ngha, v d nh Adult. Chng ta nh ngha mi bin trn mt dng ring bit, nhng thc t khng cn phi lm nh vy. Khi bn c hai hoc nhiu hn cc bin c cng kiu, bn c th nh ngha chng trn cng mt dng, ch cn ngn cch chng bng du phy, nh th ny: accessSpecifier dataType variableName1, variableName2, variableName3,...

Nu chng ta mun khi to cc bin ny khi khai bo chng, ta ch cn thm gi tr khi to sau tn tng bin:

accessSpecifier dataType variableName1 = initialValue, variableName2 = initialValue, ...

By gi lp ca chng ta t hiu chnh n, chng ta c th minh chng iu ny nh sau y. V u trang Phng thc main() C mt phng thc c bit m bn c th a vo trong bt k lp no JRE c th thi hnh m lnh. Tn phng thc ny l main(). Mi lp ch c mt phng thc main(). D nhin, khng phi mi lp u c phng thc ny nhng v Adult l lp duy nht m hin thi ta ang c, chng ta s b sung phng thc main() vo c th to mt c th Adult v kim tra cc bin c th ca n: package intro.core; public class Adult { protected int age; protected String name; protected String race; protected String gender; public static void main(String[] args) { Adult myAdult = new Adult(); System.out.println("Name: " + myAdult.name); System.out.println("Age: " + myAdult.age); System.out.println("Race: " + myAdult.race); System.out.println("Gender: " + myAdult.gender); } }

Trong thn ca phng thc main(), chng ta to mt c th Adult, sau in ra gi tr ca cc bin c th. Hy nhn vo dng u tin. y l ch m nhng ngi thun ty ch ngha hng i tng kh chu vi ngn ng Java. H cho rng new nn l mt phng thc ca Adult v bn phi gi n theo kiu: Adult.new(). D nhin ti hiu quan im ca h, nhng ngn ng Java khng lm theo cch y, v l l do nhng ngi thun ty ch ngha c th ku ca hon ton ng rng Java khng thun l hng i tng. Hy xem li dng u tin mt ln na. Nh rng tt c lp Java u c hm to mc nh, l th m ta ang dng y. Sau khi chng ta to mt c th Adult, chng ta lu n trong mt bin cc b gi l myAdult. Sau ta in ra cc gi tr ca cc bin c th ca n. Trong hu ht cc ngn ng, bn c th in mi th ra mn hnh. Ngn ng Java cng khng ngoi l. Cch bn lm vic ny trong m lnh Java l gi phng thc println() ca lung out ca i tng System. ng lo lng v chuyn bn phi hiu tt c chi tit ca qu trnh y vo lc ny. Ch bit rng chng ta ang s dng mt li gi phng thc hu ch in ra mt th g . Vi mi li gi, ta chuyn giao mt xu trc kin (string literal) v ni thm gi tr ca bin c th ca myAdult. Chng ta s quay li xem chi tit phng thc ny v sau. V u trang Thi hnh m lnh trong Eclipse thi hnh m lnh ny, bn phi thc hin mt t thao tc trong Eclipse. Nhn chn lp Adult trong khung nhn Types v nhn chn biu tng ngi ang chy trn thanh cng c. Bn s thy hp thoi Run, ni cho php bn to ra cu hnh khi chy cho chng trnh ca mnh. Chn kiu cu hnh mun to ra l Java Application ri chn New. Eclipse s ch r tn mc nh t cho cu hnh ny l Adult, v th l n. Nhn Run thy kt qu. Eclipse s hin th khung nhn Console bn di b son tho m lnh ging nh hnh 5.

Hnh 5. Kt qu chy chng trnh

Lu rng cc bin u mang gi tr mc nh ca chng. Theo mc nh, bt k bin c th no d l do ngi dng nh ngha hay c sn trong ngn ng u mang gi tr null. Khi to tng minh cc bin, c bit l cc i tng lun lun l mt tng hay, nh bn c th chc chn v gi tr ca cc bin m chng c bn trong. Ta hy quay li v khi to cho cc bin nhng gi tr nh sau: Variable name age race gender Value "Bob" 25 "inuit" "male"

Chy li m lnh bng cch nhn chn mt ln na vo biu tng ngi ang chy. Bn s thy gi tr mi hin ln trn console. By gi th hy lm sao Adult ca chng ta c kh nng ni cho nhng i tng khc bit v d liu ca n. Thm hnh vi Cc phng thc truy cp Xem xt bn trong i tng Adult ca chng ta ch bng cch tham chiu trc tip n cc bin th cng thun tin nhng thng th khng phi l mt tng hay khi mt i tng li moi mc vo bn trong mt i tng khc theo cch . iu vi phm nguyn l bao gi m chng ta ni trc , v n cng cho php mt i tng chc ngoy vo trng thi ni ti ca i tng khc. La chn khn ngoan hn l cho mt i tng c kh nng ni cho i tng khc bit gi tr cc bin c th ca n khi c hi ti. Bn dng cc phng thc truy cp lm iu ny. Cc phng thc truy cp l cc phng thc ging nh nhng phng thc khc nhng chng thng tun th theo mt quy c t tn ring. cung cp gi tr mt bin c th cho i tng khc, hy to ra mt phng thc c tn l getVariableName(). Tng t nh th, cho php cc i tng khc thit t cc bin c th ca i tng ca bn, hy to ra phng thcsetVariableName(). Trong cng ng Java, cc phng thc truy cp ny thng c gi l cc getter v cc setter v tn chng bt u bng get vset. Chng l nhng phng thc n gin nht m

bn tng thy, v th chng l nhng v d tt minh ha cho nhng khi nim phng thc n gin. Bn nn bit rng phng thc truy cp l thut ng khi qut ch nhng phng thc nhn thng tin v mt i tng no . Khng phi tt c cc phng thc truy cp u tun theo quy tc t tn dnh cho getter v setter nh chng ta s thy sau ny. y l mt s c tnh chung ca cc getter v setter: nh t truy cp ca cc getter v setter in hnh l public.

Cc getter in hnh l khng nhn tham s no. Cc setter in hnh l nhn ch mt tham s, l gi tr mi cho bin c th m chng thit t. Kiu tr v ca getter in hnh l cng kiu vi bin c th m n bo li gi tr.

Kiu tr li ca setter in hnh l void, ngha l chng khng tr li g ht (chng ch t gi tr cho bin c th). V u trang Khai bo cc phng thc truy cp Chng ta c th thm cc phng thc truy cp cho bin c th age ca Adult nh sau: public int getAge() { return age; } public void setAge(int anAge) { age = anAge; }

Phng thc getAge() tr li gi tr ca bin age bng cch dng t kha return. Cc phng thc khng tr li gi tr g th ngm hiu c cu lnh return void; cui cng. Trong phng thc ly gi tr ny, chng ta tham chiu n bin age bng cch dng tn ca bin. Chng ta cng c th vit return this.age;;. Bin this quy v i tng hin ti. N c ngm hiu khi bn tham chiu trc tip n mt bin c th. Mt s lp trnh vin hng i tng Smalltalk thch dng this bt c khi no h ni n mt bin c th, cng ging nh h lun dng t kha self khi vit m lnh bng Smalltalk. Bn thn ti cng thch nh th nhng Java khng yu cu nh vy v lm th s ch thm cht ch trn mn hnh, v vy cc v d trong ti liu ny s khng dng this tr trng hp m lnh s khng tng minh nu thiu n. V u trang Gi cc phng thc Gi ta c cc phng thc truy cp, chng ta s thay vic truy cp trc tip n bin age trong phng thc main() bng li gi phng thc. By gi main() s nh sau: public static void main(String[] args) { Adult myAdult = new Adult(); System.out.println("Name: " + myAdult.name); System.out.println("Age: " + myAdult.getAge()); System.out.println("Race: " + myAdult.race); System.out.println("Gender: " + myAdult.gender); }

Nu bn chy li m lnh, s cho ra kt qu nh c. Lu rng gi phng thc ca mt i tng rt d dng. Hy s dng khun dng sau: instanceName.methodName()

Nu phng thc ny khng cn tham s (v d nh getter), bn vn phi vit cp ngoc n sau tn phng thc khi gi. Nu phng thc cn tham s (nh setter), th t chng trong cp ngoc n, phn cch bi du phy nu c hn mt tham s. Mt lu na v setter trc khi ta chuyn sang ch khc: n nhn mt tham s kiu int c tn l anAge. Sau n gn gi tr ca tham s ny cho bin c th age. Chng ta c th t cho

tham s ny ci tn bt k m ta mun. Tn khng quan trng nhng khi bn tham chiu n n trong phng thc th phi gi chnh xc ci tn mnh t. Trc khi chuyn sang phn khc, hy th dng qua setter. Thm dng sau vo main() ngay sau khi chng ta khi to mt i tng Adult: myAdult.setAge(35);

By gi th chy li m lnh. Kt qu cho thy tui l 35. Nhng g din ra pha sau khung cnh ny l: Chng tra truyn mt gi tr s nguyn cho phng thc thng qua tham s. JRE cp b nh cho tham s ny v t tn cho n l anAge. V u trang Cc phng thc khng l phng thc truy cp Cc phng thc truy cp tht hu ch, nhng ta mun cc i tng Adult ca ta c th lm iu g hn l ch chia s d liu ca chng, bi vy chng ta cn b sung thm cc phng thc khc. Chng ta mun Adult c th ni, vy hy bt u t y. Phng thc speak() s nh sau: public String speak() { return "hello"; }

By gi th c php ny quen thuc vi bn. Phng thc ny tr li mt xu trc kin. Hy dng phng thc ny v lm sng sa phng thc main(). Thay i li gi u tin n println() thnh: System.out.println(myAdult.speak());

Chy li m lnh bn s nhn thy dng ch hello trn mn hnh. V u trang Cc xu k t Cho n nay chng ta s dng mt vi bin kiu String (xu k t) nhng chng ta vn cha tho lun v chng. X l xu trong C tn rt nhiu cng sc v chng l cc mng cc k t 8 bt kt thc bng null m bn phi t thao tc. Trong ngn ng Java, xu l i tng thuc hng nht, c kiu String, km theo l cc phng thc cho php bn thao tc vi n. M lnh Java gn nht gn vi ngn ng C v vn xu l kiu d liu nguyn thy char, cha ch mt k t Unicode n l, v d nh 'a'. Chng ta bit cch khi to mt i tng String v thit t gi tr cho n, nhng c nhiu cch khc thc hin vic ny. Sau y l vi cch khi to mt c th String c gi tr l "hello": String greeting = "hello"; String greeting = new String("hello");

V xu trong ngn ng Java l i tng hng nht, bn c th dng new khi to mt i tng thuc kiu xu. t mt bin kiuString cho ta kt qu tng t, v Java to ra mt i tng String cha xu trc kin, sau gn i tng ny cho bin c th. Chng ta c th lm nhiu th vi cc String v lp ny c rt nhiu phng thc hu ch. Thm ch khng cn dng mt phong thc, ta c th lm vi vic l th vi cc xu bng cch ni mt cp xu, ngha l kt hp chng xu ny tip sau xu kia: System.out.println("Name: " + myAdult.getName());

Thay v dng du +, chng ta c th gi phng thc concat() ca i tng String ni n vi mt i tng String khc: System.out.println("Name: ".concat(myAdult.getName()));

M lnh ny trng hi l, ta hy duyt qua mt cht, t tri sang phi:

System l i tng c sn cho php bn tng tc vi nhiu th trong mi trng h thng (bao gm c mt vi kh nng ca chnh nn tng Java) out l bin lp ca System, ngha l n c th truy cp c m khng cn phi c mt c th ca System. N i din cho mn hnh. println() l phng thc ca out nhn tham s kiu String, in n ra mn hnh, v tip ngay sau l mt k t xung dng bt u mt dng mi. "Name: " l mt xu trc kin. Nn tng Java coi xu trc kin ny l mt c th String, bi vy chng ta c th gi phng thc trc tip trn n. concat() l mt phng thc ca c th String, nhn tham s kiu String v ni n vi chnh c th String m bn gi phng thc ca n. myAdult l mt c th Adult ca ta.

getName() l phng thc truy cp bin c th name. Nh th, JRE s ly tn ca Adult, gi concat(), v thm Bob vo sau Name: ". Trong Eclipse, bn c th thy cc phng thc c sn trn bt k i tng no bng cch t con chy du chn vo sau du chm sau tn bin cha c th, sau nhn Ctrl-thanh phm khong trng. Thao tc ny lm hin ra bn tri du chm mt danh sch cc phng thc ca i tng. Bn c th cun ln cun xung danh sch ny bng cc phm mi tn trn bn phm, im sng mt phng thc bn mun ri sau nhn phm Enter chn n. V d, xem tt c cc phng thc c sn ca i tngString, t con chy du chn vo sau du chm sau ch Name: ri nhn Ctrl-thanh phm khong trng. V u trang S dng xu By gi ta hy dng php ni xu trong lp Adult. n lc ny, ta c mt bin c th l name. Mt tng hay l c mt binfirstname v mt bin lastname, sau ni chng vo vi nhau khi ai hi tn ca Adult. Khng vn g! Hy thm phng thc sau y: public String getName() { return firstname + " " + lastname; }

Eclipse s hin th nhng ng ln sng mu ti phng thc ny v cc bin c th y cn cha c, nh vy c ngha l m lnh s khng bin dch c. By gi ta thay bin c th name bng 2 bin sau y (vi gi tr mc nh lm r ngha hn): protected String firstname = "firstname"; protected String lastname = "lastname";

Tip , thay i li gi println() u tin nh sau: System.out.println("Name: " + myAdult.getName());

By gi ta c mt getter c trang tr hn ly ra cc bin tn. N s ni cc xu tt p to ra mt ci tn y cho Adult. Chng ta c th vit phng thc getName() nh sau: public String getName() { return firstname.concat(" ").concat(lastname); }

M lnh ny cng lm cng cng vic , nhng n minh ha vic s dng tng minh mt phng thc ca String, n cng minh ha vic mc xch cc li gi phng thc. Khi ta gi concat() ca firstname vi mt xu trc kin (du cch), n s tr li mt i tng String mi l ghp ca hai xu. Ngay sau ta li tip tc gi concat() ca xu ghp ny ni tn (firstname) v mt du cch vi lastname. Kt qu ta c tn y theo khun dng. V u trang Cc ton t s hc v ton t gn

Adult ca chng ta c th ni, nhng khng th di chuyn. Hy thm mt vi hnh vi n c th i li. u tin, hy thm mt bin c th lu li s bc chn m mi i tng Adult s bc: public int progress = 0;

By gi b sung thm phng thc c tn l walk(): public String walk(int steps) { progress = progress + steps; return "Just took " + steps + " steps"; }

Phng thc ca chng ta nhn mt tham s l s nguyn ch s bc cn bc, cp nht progress ghi nhn s bc chn, sau bo kt qu. Cng l sng sut nu ta b sung thm mt getter cho progress nhng khng thm setter. Ti sao? V cho php i tng khc bc thng ta tin ln pha trc mt s bc chn no th chng khn ngoan cht no. Nu i tng khc mun ngh ta bc i, n c th gi walk(). l theo ting ni ca c suy xt v y l mt v d kh tm thng. cc d n thc s, cc quyt nh thit k loi ny lun phi c a ra v thng khng th quyt nh sm t trc, bt k cc i cao th (gurus) thit k hng i tng ni g. Trong phng thc ca chng ta, chng ta cp nht progress bng cch thm steps vo. Chng ta li lu kt qu trongprogress. Ta dng ton t gn c bn nht, =, lu kt qu. Ta dng ton t s hc + cng hai s hng. C mt cch khc t c cng mc ch. M lnh s lm cng mt vic y: public String walk(int steps) { progress += steps; return "Just took " + steps + " steps"; }

S dng ton t gn += s t di dng hn cch u tin ta dng. N trnh cho ta khi phi tham chiu n bin progress hai ln. Nhng n thc hin cng mt vic: n cng steps vo progress v lu kt qu trong progress. Bng di y l danh sch v m t ngn gn ca cc ton t s hc v ton t gn thng gp nht trong Java (lu rng mt s ton t s hc l nh nguyn), c hai ton hng, v mt s khc l n nguyn, c mt ton hng). Ton t + + * / % Cch dng a+b +a a-b -a a*b a/b a%b M t Cng a v b Nng a ln thnh kiu int nu a l kiu byte, short, hoc char Ly a tr i b m a Nhn a vi b Chia a cho b Tr li phn d ca php chia a cho b (ni cch khc, y l ton t modulus) Tng a thm 1 n v; tnh gi tr ca a trc khi tng Tng a thm 1 n v; tnh gi tr ca a sau khi tng Gim a i 1 n v; tnh gi tr ca a trc khi tng

++ ++ --

a++ ++a a--

-+= -= *= %=

--a a += b a -= b a *= b a %= b

Gim a i 1 n v; tnh gi tr ca a sau khi tng Ging nh a = a + b Ging nh a = a - b Ging nh a = a * b Ging nh a = a % b

Chng ta cng bit mt s th khc c gi l ton t trong ngn ng Java. V d, du chm . phn nh tn ca cc gi v li gi phng thc; cp ngoc n ( params ) phn nh danh sch cc tham s phn cch bng du phy ca mt phng thc; v new, khi theo sau n l tn ca hm to, khi to mt c th. Chng ta s xem xt thm mt s ci trong phn tip theo. Thc thi iu kin Gii thiu v thc thi iu kin M lnh n gin chy t cu lnh u tin n cu lnh cui cng m khng i hng thc s khng th lm c g nhiu. tr nn hu ch, chng trnh ca bn cn a ra cc quyt nh, v c th hnh ng khc i trong nhng tnh hung khc nhau. Ging nh bt c mt ngn ng hu dng no, Java cung cp cho bn nhng cng c lm iu , di dng cc cu lnh v ton t. Phn ny s cp n cc yu t sn c y khi bn vit m lnh Java. Cc ton t quan h v ton t iu kin Java cung cp cho bn mt vi ton t v cu lnh iu khin lung cho php bn ra quyt nh trong m lnh ca mnh. Rt thng thng, mt quyt nh la chn trong m lnh bt u bng mt biu thc logic (l biu thc c nh gi bng hai gi tr ng hoc sai true/false). Nhng biu thc s dng cc ton t quan h, chng so snh mt ton hng hoc mt biu thc vi mt vi mt ton hng hay biu thc khc, v cc ton t iu kin na. y l danh sch: Ton t > >= < <= == != && Cch s dng a>b a >= b a<b a <= b a == b a != b a && b Tr v true nu... a ln hn b a ln hn hay bng b a nh hn b a nh hn hay bng b a bng b a khng bng b a v b c hai u true, tnh b c iu kin (nu a l true th khng cn tnh b na) a hoc b l true, tnh b c iu kin (nu a l true th khng cn tnh b na) a l false a v b c hai l true, lun lun tnh b a hoc b l true, lun lun tnh b a v b l khc nhau (true nu a l true v b l false, hoc ngc li, nhng khng c ng thi l true hoc false) V u trang

||

a || b

! & | ^

!a a&b a|b a^b

Thc thi iu kin vi lnh if Gi ta phi dng nhng ton t . Hy thm mt vi biu thc logic n gin vo phng thc walk() ca chng ta: public String walk(int steps) { if (steps > 100) return "I can't walk that far at once"; progress = progress + steps; return "Just took " + steps + " steps."; }

By gi logic hnh ng trong phng thc ny s kim tra xem s lng steps ln nh th no. Nu qu ln, phng thc s ngay lp tc tr v v thng bo rng th l qu xa. Mi phng thc c th tr v ch mt ln. Nhng khng phi c hai gi tr tr v y sao? ng, nhng ch mt ln tr v c thc thi. iu kin if ca Java c khun dng nh sau: if ( boolean expression ) { statements to execute if true... } [else { statements to execute if false... }]

Cp ngoc nhn khng bt buc nu ch c mt lnh n sau t kha if hay sau t kha else, l l do v sao m lnh ca chng ta khng dng n cp ngoc ny. Bn khng buc phi c mnh else, v trong m lnh ca ta cng khng c. Chng ta c th t cc m lnh cn li ca phng thc trong mnh else nhng hiu lc cng s tng ng v nhng th thm vo mt cch khng cn thit nh th c gi l gia v c php v ch, n lm gim tnh d c ca m lnh. V u trang Phm vi ca bin Tt c cc bin trong ng dng Java u c mt phm vi (scope), hay l cc c trng xc nh ni bn c th truy cp bin ch bng tn ca n. Nu bin nm trong vng phm vi, bn c th tng tc vi n bng tn. Nu bin nm ngoi vng phm vi th iu ny l khng th. C nhiu mc phm vi trong ngn ng Java, c xc nh bi v tr khai bo ca bin u (Lu : khng phi tt c u l chnh thc, theo nh ti bit, nhng chng thng l nhng ci tn m ngi lp trnh vn dng). public class SomeClass { member variable scope public void someMethod( parameters ) { method parameter scope local variable declaration(s) local scope someStatementWithACodeBlock { block scope } } }

Phm vi ca mt bin tri rng cho n cui on (hoc cui khi) m lnh m n c khai bo trong . V d, trong phng thcwalk(), chng ta tham chiu n tham s steps bng ci tn n gin ca n, v n nm trong phm vi. ngoi phng thc ny, khi ni n steps th trnh bin dch s bo li. M lnh cng c th gi n cc bin c khai bo trong phm vi rng hn m . V d, chng ta c php tham chiu n bin c th progress bn trong phng thc walk(). V u trang

Cc dng khc ca lnh if Chng ta c th to ra mt cu lnh kim tra iu kin p hn bng cch vit lnh if di dng khc: if ( boolean expression ) { statements to execute if true... } else if ( boolean expression ) { statements to execute if false... } else if ( boolean expression ) { statements to execute if false... } else { default statements to execute... }

Phng thc ca chng ta c th ging nh sau: if (steps > 100) return "I can't walk that far at once"; else if (steps > 50) return "That's almost too far"; else { progress = progress + steps; return "Just took " + steps + " steps."; }

C mt dng vit tt ca lnh if trng hi xu, nhng cng t c mc ch, mc d dng vit tt ny khng cho php c nhiu cu lnh c trong phn if ln trong phn else. D l dng ton t tam nguyn ?:. (Ton t tam nguyn l ton t c ba ton hng). Chng ta c th vit li cu lnh if n gin theo cch sau: return (steps > 100) ? "I can't walk that far at once" : "Just took " + steps + " steps.";

Tuy nhin, cu lnh ny khng t c mc ch v khi steps nh hn 100, chng ta mun tr v mt thng ip v ng thi mun cp nht bin progress. Bi vy trong trng hp ny, s dng ton t tt ?: khng phi l mt la chn v chng ta khng th thc thi nhiu cu lnh vi dng vit tt ny. V u trang Lnh switch Lnh if l ch l mt trong s cc cu lnh cho php bn kim tra iu kin trong m lnh. Mt cu lnh khc bn rt c th gp l lnh switch. N nh gi mt biu thc s nguyn, sau thc thi mt hay nhiu cu lnh da trn gi tr ca biu thc ny. C php ca lnh nh sau: switch ( integer expression ) { case 1: statement(s) [break;] case 2: statement(s) [break;] case n: statement(s) [break;] [default: statement(s) break;] }

JRE nh gi biu thc s nguyn, chn ra trng hp p dng, sau thc thi cu lnh ca trng hp ny. Cu lnh cui cng ca mi trng hp ngoi tr trng hp cui l break;. N l li thot ra ca cu lnh switch, v iu khin s tip tc x l dng tip theo trong m lnh

sau cu lnh switch. V mt k thut, khng cn c lnh break;. Cu lnh break cui cng li cng c bit khng cn thit v d g th iu khin cng t thot khi cu lnh. Nhng cch lm tt l c thm chng vo. Nu bn khng thm lnh break; cui mi trng hp, vic thc thi chng trnh s ri vo trng hp k tip v tip tc chy, cho n khi gp mt cu lnh break; hoc n ht cu lnh switch. Trng hp default s c thc hin nu gi tr s nguyn khng kch hot bt c trng hp no khc. N l khng bt buc. V bn cht, cu lnh switch thc s l cu lnh if-else if vi iu kin ca lnh if l s nguyn; nu iu kin ca bn da trn mt gi tr s nguyn n l, bn c th dng hoc l lnh switch hoc l lnh if-else. Vy chng ta c th vit li iu kin if ca chng ta trong phng thc walk di dng cu lnh switch c khng? Cu tr li l khng v chng ta kim tra mt biu thc logic ( steps > 100). Cu lnh switch khng cho php kim tra nh th. V u trang V d v cu lnh switch y l mt v d tm thng v vic s dng cu lnh switch (n l mt v d kh c in): int month = 3; switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("That's not a valid month number."); break; }

month l mt bin nguyn biu th s hiu ca thng. V l s nguyn nn cu lnh switch y l hp l. Vi mi trng hp hp l, chng ta in ra tn thng, sau thot khi cu lnh. Trng hp mc nh qun l cc s nm ngoi phm vi hp l ca cc thng. Sau rt, y l mt v d v vic dng nhiu trng hp thng nhau c th l mt mo nh th v: int month = 3; switch (month) { case 2: case 3: case 9: System.out.println( "My family has someone with a birthday in this month."); break; case 1: case 4: case 5: case 6: case 7: case 8: case 10: case 11: case 12: System.out.println("Nobody in my family has a birthday in this month."); break; default: System.out.println("That's not a valid month number."); break; }

y ta thy trng hp 2, 3 v 9 c x l ging nhau; cc trng hp cn li c mt kiu x l khc. Lu rng cc trng hp ny khng phi xp lin theo th t v c nhiu trng hp thng nhau l nhng g chng ta cn trong tnh hung ny. V u trang Chy li nhiu ln

ngay u ti liu ny, chng ta lm mi th v iu kin, tm thi cng n, nhng n c nhng hn ch. Tng t th, thnh thong chng ta mun m lnh thi hnh i thi hnh li cng mt vic cho n khi cng vic hon tt. V d, gi s ta mun i tng Adult ca chng ta ni hn mt ln cu hello. iu ny kh d thc hin trong m lnh Java (mc d khng d thc hin trong cc ngn ng kch bn lnh nh Groovy chng hn). Java cung cp cho bn cc cch sau lp i lp li m lnh, hoc thc hin m lnh hn mt ln: cu lnh for cu lnh do cu lnh while Chng thng c gi chung l cc vng lp (v d, vng lp for), v chng lp i lp li c khi m lnh cho n khi bn ra lnh cho chng dng li. Trong cc phn tip sau, chng ta s ni ngn gn v tng lnh mt v dng chng trong phng thc speak() tr chuyn cht t. V u trang Vng lp for Cu trc lp c bn nht trong ngn ng Java l cu lnh for, cu lnh ny cho php bn lp tng bc trn mt phm vi gi tr cho php xc nh s ln thc thi vng lp. C php thng s dng nht ca vng lp for nh sau: for ( initialization; termination; increment ) { statement(s) }

Biu thc khi to (initialization) xc nh vng lp bt u u. Biu thc dng (termination) xc nh vng lp kt thc u. Biu thc tng (increment) xc nh bin khi to s tng bao nhiu mi ln i qua vng lp. Mi ln lp, vng lp s thc hin cc cu lnh trong khi lnh, l tp hp cc cu lnh nm gia du ngoc nhn (hy nh rng bt k khi no trong m lnh Java cng c t gia hai du ngoc nhn, ch khng phi ch m lnh ca vng lp for). C php v kh nng ca vng lp for c khc trong Java phin bn 5.0, do vy hy c bi vit ca John Zukowski v cc c tnh mi, th v trong n bn mi ra gn y ca ngn ng ny. (xem Cc ti nguyn). V u trang S dng vng lp for Ta hy bin i phng thc speak() sao cho n ni t hello ba ln, dng vng lp for. Khi lm vic ny, chng ta s tm hiu v mt lp c sn ca Java, lm vic lp ghp cc xu mt cch ngon lnh: public String speak() { StringBuffer speech = new StringBuffer(); for (int i = 0; i < 3; i++) { speech.append("hello"); } return speech.toString(); }

Lp StringBuffer trong gi java.lang cho php bn thao tc cc xu d dng v rt tuyt vi trong vic ni cc xu li vi nhau (ging nh ta mc chng li vi nhau). n gin l chng ta khi to mt xu, sau gi phng thc append() mi ln mun thm mt iu g vo li ni ca tng Adult. Vng lp for l ni mi vic thc s din ra. Trong cp ngoc n ca vng lp, chng ta khai bo mt bin nguyn i lm s m cho vng lp (cc k t i, j v k thng c dng lm bin m vng lp, nhng bn c th t bt k tn no m bn mun cho bin ny). Biu thc tip theo cho bit chng ta s tip tc lp cho n khi bin ny t n mt gi tr nh hn ba. Biu thc sau cho bit chng ta s tng bin m ln mt sau mi ln lp (hy nh ton t ++). Mi ln i qua vng lp, chng ta s gi phng thc append() ca speech v dn mt t hello khc vo cui. By gi, thay phng thc speak() c bng phng thc speak() mi, loi b mi lnh println trong main() v thm mt lnh gi phng thc speak() ca Adult. Khi bn thc hin, lp c th ging nh sau: package intro.core;

public class Adult { protected int age = 25; protected String firstname = "firstname"; protected String lastname = "lastname"; protected String race = "inuit"; protected String gender = "male"; protected int progress = 0; public static void main(String[] args) { Adult myAdult = new Adult(); System.out.println(myAdult.speak()); } public int getAge() { return age; } public void setAge(int anAge) { age = anAge; } public String getName() { return firstname.concat(" ").concat(lastname); } public String speak() { StringBuffer speech = new StringBuffer(); for (int i = 0; i < 3; i++) { speech.append("hello"); } return speech.toString(); } public String walk(int steps) { if (steps > 100) return "I can't walk that far at once"; else if (steps > 50) return "That's almost too far"; else { progress = progress + steps; return "Just took " + steps + " steps."; } } }

Khi bn chy on m lnh ny, bn s nhn c kt qu l dng hellohellohello trn mn hnh. Nhng dng vng lp for ch l mt cch lm vic ny. Java cn cho bn hai cu trc thay th khc m bn s thy tip theo y. V u trang Vng lp while u tin hy th vng lp while. Phin bn sau y ca phng thc speak() cho ra cng mt kt qu nh cch lm m bn thy phn trn: public String speak() { StringBuffer speech = new StringBuffer(); int i = 0; while (i < 3) { speech.append("hello"); i++; } return speech.toString(); }

C php c bn ca vng lp while nh sau:

while ( boolean expression ) { statement(s) }

Vng lp while thc hin m lnh trong khi cho n khi biu thc ca n tr li gi tr l false. Vy bn iu khin vng lp nh th no? Bn phi m bo l biu thc s tr thnh false ti thi im no , nu khng, bn s c mt vng lp v hn. Trong trng hp ca chng ta, ta khai bo mt bin a phng l i bn ngoi vng lp, khi to cho n gi tr l 0, sau kim tra gi tr ca n trong biu thc lp. Mi ln i qua vng lp, chng ta li tng i ln. Khi n khng cn nh hn 3 na, vng lp s kt thc v chng ta s tr li xu k t lu trong b m. y ta thy vng for thun tin hn. Khi dng vng for, chng ta khai bo v khi to bin iu khin, kim tra gi tr ca n v tng gi tr ca n ch bng mt dng m lnh. Dng vng while i hi nhiu vic hn. Nu chng ta qun tng bin m, chng ta s c mt vng lp v hn. Nu ta khng khi to bin m, trnh bin dch s nhc nh. Nhng vng while li rt tin li nu bn phi kim tra mt biu thc logic phc tp (ng hp tt c vo vng lp for th v y s lm cho n rt kh c). By gi ta thy vng lp for v while, nhng phn tip theo s minh ha cho ta thy cn mt cch th ba na. V u trang Vng lp do on m lnh sau y s thc thi chnh xc nhng iu m ta thy hai vng lp trn: public String speak() { StringBuffer speech = new StringBuffer(); int i = 0; do { speech.append("hello"); i++; } while (i < 3) ; return speech.toString(); }

C php c bn ca vng lp do nh sau: do { statement(s) } while ( boolean expression ) ;

Vng lp do gn nh ging ht vng lp while, ngoi tr vic n kim tra biu thc logic sau khi thc thi khi lnh lp. Vi vng lp while, chuyn g s xy ra nu biu thc cho gi tr false ngay ln u tin kim tra? Vng lp s khng thc hin d ch mt ln. Cn vi vng lp do, bn s c m bo l vng lp s thc hin t nht 1 ln. S khc bit ny c th c ch vo nhiu lc. Trc khi tm bit cc vng lp, hy xem li hai cu lnh r nhnh. Chng ta thy lnh break khi ta ni n cu lnh switch. N cng c hiu qu tng t trong vng lp: n dng vng lp. Mt khc, lnh continue gip dng ngay ln lp hin ti v chuyn ti ln lp tip theo. y l mt v d thng thy: for (int i = 0; i < 3; i++) { if (i < 2) { System.out.println("Haven't hit 2 yet..."); continue; } if (i == 2) { System.out.println("Hit 2..."); break;

} }

Nu bn a on m ny vo trong phng thc main() v chy, bn s nhn c kt qu nh sau: Haven't hit 2 yet... Haven't hit 2 yet... Hit 2...

Hai ln u i qua vng lp, i u nh hn 2, do vy chng ta in ra dng ch Haven't hit 2 yet..., sau thc hin lnh continue, lnh ny chuyn lun n ln lp tip theo. Khi i bng 2, khi m lnh trong phn lnh if u tin khng c thi hnh. Chng ta nhy n lnh if th hai, in ra dng ch "Hit 2...", sau lnh break thot khi vng lp. Trong phn tip theo, chng ta s tng thm s phong ph ca cc hnh vi c th b sung thm thng qua vic trnh by v vic x lcc su tp. Cc su tp Gii thiu v cc su tp Hu ht cc ng dng phn mm ca th gii thc u c lin quan n cc su tp s vt no (cc tp, cc bin, cc dng ca tp, ). Thng thng, cc chng trnh hng i tng u c lin quan n su tp cc i tng. Ngn ng Java c mt Khung cng tc cc su tp (Collections Framework) kh tinh vi cho php bn to v qun l cc su tp i tng thuc cc kiu khc nhau. Bn thn khung cng tc ny c th vit ring nguyn c mt cun sch hng dn, do chng ti s khng bn tt c trong ti liu ny. Thay vo , chng ti s cp n su tp thng dng nht v mt vi k thut s dng n. Nhng k thut p dng cho hu ht cc su tp c trong ngn ng Java. Mng Hu ht cc ngn ng lp trnh u c khi nim mng cha mt su tp cc s vt v Java cng khng ngoi l. Mng thc cht l mt su tp cc phn t c cng kiu. C hai cch khai bo mt mng: To mt mng c kch thc c nh v kch thc ny khng bao gi thay i. To mt mng vi mt tp cc gi tr ban u. Kch thc ca tp gi tr ny s quyt nh kch c ca mng n s va ln cha ton b cc gi tr . Sau th kch c ny s c nh mi. Ni chung, bn khai bo mt mng nh sau: new elementType [ arraySize ]

to mt mng s nguyn gm c 5 phn t, bn phi thc hin theo mt trong hai cch sau: int[] integers = new int[5]; int[] integers = new int[] { 1, 2, 3, 4, 5 };

Cu lnh u tin to mt mng rng gm c 5 phn t. Cu lnh th hai l cch tt khi to mt mng. Cu lnh ny cho php bn xc nh mt danh sch cc gi tr khi to, phn tch nhau bng du phy (,), nm trong cp ngoc nhn. Ch l chng ta khng khai bo kch c trong cp ngoc vung s cc mc trong khi khi to quyt nh kch c ca mng l 5 phn t. Cch lm ny d hn l to mt mng ri sau vit m lnh cho mt vng lp t cc gi tr vo, ging nh sau: int[] integers = new int[5]; for (int i = 1; i <= integers.length; i++) { integers[i] = i; System.out.print(integers[i] + " "); }

on m lnh ny cng khai bo mt mng s nguyn c 5 phn t. Nu ta th xp nhiu hn 5 phn t vo mng ny, ta s gp ngay vn khi chy on m lnh ny. np mng, chng ta

phi lp i qua cc s nguyn t 1 cho n s bng chiu di ca mng, chiu di ca mng ta c th bit c nh truy cp phng thc length() ca i tng mng. Mi ln lp qua mng, chng ta t mt s nguyn vo mng. Khi gp s 5 th dng li. Khi mng np xong, chng ta c th truy nhp vo cc phn t trong mng nh vng lp tng t: for (int i = 0; i < integers.length; i++) { System.out.print(integers[i] + " "); }

Bn hy coi mng nh mt dy cc thng. Mi phn t trong mng nm trong mt thng, mi thng c gn mt ch s khi bn to mng. Bn truy nhp vo cc phn t nm trong thng c th no bng cch vit: arrayName [ elementIndex ]

Ch s ca mng bt u t 0, c ngha l phn t u tin v tr s 0. iu lm cho vng lp thm ngha. Chng ta bt u vng lp bng s 0 v mng c nh ch s bt u t 0 v chng ta lp qua tng phn t trong mng, in ra gi tr ca tng ch s phn t. V u trang Su tp l g? Mng cng tt, nhng lm vic vi chng cng c i cht bt tin. Np gi tr cho mng cng mt cng, v mt khi khai bo mng, bn ch c th np vo mng nhng phn t ng kiu khai bo v vi s lng phn t ng bng s lng m mng c th cha. Mng chc chn l khng c v hng i tng lm. Thc t, l do chnh Java c mng l v n c gi li dng nh di sn t nhng ngy tin lp trnh hng i tng. Mng c trong mi phn mm, bi vy khng c mng s khin cho ngn ng kh m tn ti trong th gii thc, c bit khi bn phi tng tc vi cc h thng khc c dng mng. Nhng Java cung cp cho bn nhiu cng c qun l su tp hn. Nhng cng c ny thc s rt hng i tng. Khi nim su tp khng kh c th hiu c. Khi bn cn mt s lng c nh cc phn t c cng kiu, bn c th dng mng. Khi bn cn cc phn t c kiu khc nhau hoc s lng cc phn t c th thay i linh hot, bn dng su tp ca Java. V u trang Danh sch mng Trong ti liu ny, chng ti s cp n ch mt dng ca su tp, l ArrayList. Trong lc trnh by, bn s bit c mt l do khc khin cho nhiu ngi thun ty ch ngha hng i tng cng kch ngn ng Java. dng ArrayList, bn phi thm mt lnh quan trng vo lp ca mnh: import java.util.ArrayList;

Bn khai bo mt ArrayList rng nh sau: ArrayList referenceVariableName = new ArrayList();

B sung v loi b cc phn t trong danh sch kh d dng. C nhiu phng thc lm iu y, nhng c hai phng thc thng dng nht nh sau: someArrayList.add(someObject); Object removedObject = someArrayList.remove(someObject); V u trang ng hp v m hp cc kiu nguyn thy. Cc su tp Java cha cc i tng, ch khng phi l cc kiu nguyn thy. Mng c th cha c hai, nhng li khng hng i tng nh ta mun. Nu bn mun lu tr bt c kiu g l kiu con ca Object vo mt danh sch, bn n gin ch cn gi mt trong s nhiu phng thc ca ArrayList lm vic ny. Cch n gin nht l: referenceVariableName.add(someObject);

Cu lnh ny thm mt i tng vo cui danh sch. Cho n y mi vic u n. Nhng liu iu g s xy ra khi bn mun thm mt kiu nguyn thy vo danh sch? Bn khng th lm vic ny trc tip. Thay vo , bn phi bc kiu nguyn thy thnh i tng. Mi kiu nguyn thy c mt lp bao bc tng ng: Boolean dnh cho cc boolean Byte dnh cho cc byte Character dnh cho cc char Integer dnh cho cc int Short dnh cho cc short Long dnh cho cc long Float dnh cho cc float Double dnh cho cc double V d, a kiu nguyn thy int vo mt ArrayList, chng ta s phi vit m lnh nh sau: Integer boxedInt = new Integer(1); someArrayList.add(boxedInt);

Bao bc kiu nguyn thy trong mt c th ca lp bao bc (wrapper) cng c gi l thao tc ng hp (boxing) kiu nguyn thy. nhn li kiu nguyn thy ban u, ta phi m hp (unboxing) n. C nhiu phng thc hu dng trong cc lp bao bc, nhng s dng chng kh phin toi i vi hu ht cc lp trnh vin v n i hi nhiu thao tc ph thm s dng kiu nguyn thy vi cc su tp. Java 5.0 gim bt nhng vt v y bng cch h tr cc thao tc ng hp/m hp t ng. V u trang S dng cc su tp Trong i thc hu ht ngi trng thnh u mang theo tin. Gi s cc Adult u c v ng tin ca mnh. Vi hng dn ny, chng ta s gi s rng: Ch cc t giy bc l biu hin ca tin t Mnh gi ca t giy bc (nh mt s nguyn) ng nht vi t giy bc . Tt c tin trong v u l la M. Mi i tng Adult khi u cuc i c lp trnh ca n khng c ng tin no Bn nh mng cc s nguyn ch? Thay vo ta hy to mt ArrayList. Nhp khu gi ArrayList, sau thm mt ArrayList vo lp Adult cui danh sch cc bin c th khc: protected ArrayList wallet = new ArrayList();

Chng ta to mt ArrayList v khi to n l danh sch rng v i tng Adult phi kim tng ng la. Chng ta cng c th b sung thm vi phng thc truy cp wallet na: public ArrayList getWallet() { return wallet; } public void setWallet(ArrayList aWallet) { wallet = aWallet; }

Cung cp nhng phng thc truy cp no l ty theo c suy xt, nhng trong trng hp ny ta i n nhng phng thc truy cp thng thng. Chng c l do g m chng ta khng th gi setWallet() ging nh gi resetWallet(), hay thm ch lgoBankrupt() v chng ta ang thit t li n thnh ArrayList rng. Liu mt i tng khc c th thit t li wallet ca chng ta vi mt gi tr mi khng? Mt ln na ta li phi vin n c xt on. l nhng g m thit k hng i tng tnh n (OOD)! By gi chng ta s thit t mi th b sung mt vi phng thc cho php ta tng tc vi wallet: public void addMoney(int bill) { Integer boxedBill = new Integer(bill); wallet.add(boxedBill); } public void spendMoney(int bill) { Integer boxedBill = new Integer(bill);

boolean haveThatBill = wallet.contains(boxedBill); if(haveThatBill) { wallet.remove(boxedBill); } else { System.out.println("I don't have that bill."); } }

Chng ta s nghin cu chi tit hn trong my phn tip theo y. V u trang Tng tc vi su tp Phng thc addMoney() cho php chng ta a thm mt t giy bc vo v. Ta hy nh li rng t giy bc ca chng ta y ch n gin l nhng s nguyn. thm chng vo su tp, ta phi bao bc mt s kiu int thnh i tng Integer. Phng thc spendMoney() li nhy v iu ng hp kim tra t giy bc c trong wallet khng bng cch gi contains(). Nu ta c t giy bc , ta gi remove() ly n i. Nu ta khng thc hin th ta cng ni nh vy. Hy dng cc phng thc ny trong main(). Thay th ni dung hin ti trong main() bng ni dung sau: public static void main(String[] args) { Adult myAdult = new Adult(); myAdult.addMoney(5); myAdult.addMoney(1); myAdult.addMoney(10); StringBuffer bills = new StringBuffer(); Iterator iterator = myAdult.getWallet().iterator(); while (iterator.hasNext()) { Integer boxedInteger = (Integer) iterator.next(); bills.append(boxedInteger); } System.out.println(bills.toString()); }

Cho n thi im ny ta thy phng thc main() tng hp rt nhiu th. u tin, chng ta gi phng thc addMoney() vi ln nht tin vo trong wallet. Sau ta lp i qua ni dung ca wallet in ra nhng g c trong . Chng ta dng vng lpwhile lm iu ny, nhng ta cn phi lm thm mt s vic na. l: Ly mt Iterator cho danh sch, n s gip chng ta truy nhp tng phn t trong danh sch. Gi hasNext() ca Iterator vi vai tr biu thc logic chy vng lp xem liu ta c cn phn t no cn x l na khng Gi next() ca Iterator ly phn t tip theo mi ln i qua vng lp p kiu i tng tr v thnh kiu m ta bit trong danh sch (trong trng hp ny l Integer) l cch din t chun dnh cho vng lp qua mt su tp trong ngn ng Java. Mt cch lm khc l ta c th gi phng thctoArray() ca danh sch v nhn li mt mng, sau ta c th lp qua mng ny, s dng vng for nh ta lm vi vng while. Cch lm hng i tng hn l khai thc sc mnh ca khung cng tc su tp ca Java. Khi nim mi duy nht y l tng p kiu (casting). l g? Nh ta bit, i tng trong ngn ng Java c kiu, hay l lp. Nu bn nhn vo ch k ca phng thc next(), bn s thy n tr li mt Object, ch khng phi l mt lp con c th caObject. Tt c cc i tng trong th gii lp trnh Java u l lp con ca Object, nhng Java cn bit kiu chnh xc ca i tng bn c th gi cc phng thc tng ng vi kiu m bn mun c. Nu bn khng p kiu, bn s b gii hn ch c dng cc phng thc c sn dnh cho Object, thc s ch gm mt danh sch ngn m thi. Trong v d c th ny, chng ta khng cn gi bt k

phng thc no ca Integer m khng c trong danh sch, nhng nu ta cn gi th ta phi p kiu trc . Nng cp i tng ca bn Gii thiu v vic nng cp i tng ca bn By gi th Adult ca ta kh hu ch, nhng cha thc s hu ch nh n cn phi c. Trong phn ny, chng ta s nng cp i tng khin n d s dng hn v cng hu ch hn. Cng vic bao gm: To ra vi hm to hu ch. Np chng mt vi phng thc to ra mt giao din cng cng thun tin hn Thm m lnh h tr so snh cc Adult s Thm m lnh d dng g li khi s dng Adult s ng thi, chng ta s tm hiu v cc k thut ti cu trc m v xem xem c th x l nhng sai st m ta gp trong khi chy m lnh nh th no. Xy dng cc hm to Trc y chng ta cp n cc hm to. Bn c th nh rng tt c cc i tng trong m lnh Java u c sn mt hm to khng tham s mc nh. Bn khng phi nh ngha n, v bn s khng thy n xut hin trong m lnh ca mnh. Thc t, chng ta dng li th y trong lp Adult. Bn khng thy c s xut hin ca mt hm to trong lp ny. Tuy nhin, trong thc tin sng sut hn l nn nh ngha hm to ca ring bn. Khi bn lm vy, bn c th han ton yn tm l ai khi kho st lp ca bn s bit cch xy dng n theo cch m bn mun. Bi vy hy nh ngha mt hm to khng c tham s ring ca mnh. Ta nhc li cu trc c bn ca mt hm to: accessSpecifier ClassName( arguments ) { constructor statement(s) }

nh ngha mt hm to khng tham s cho Adult tht l n gin: public Adult { }

Chng ta lm xong. Hm to khng c tham s ca chng ta chng lm g c, thc th, ngoi tr vic to ra mt Adult. By gi khi ta gi new sinh mt Adult, chng ta s dng hm to khng tham s ca chng ta thay th cho hm to mc nh. Nhng iu g s xy ra nu ta mun hm to do ta xy dng thc hin mt s vic? Trong trng hp ca Adult, s tin li hn nhiu nu c th chuyn thm tn v h di dng String, v yu cu hm to thit t cc bin c th vi cc gi tr khi to . iu ny cng c lm n gin nh th ny: public Adult(String aFirstname, String aLastname) { firstname = aFirstname; lastname = aLastname; }

Hm to ny nhn hai tham s v s gn chng cho cc bin c th. Hin ti chng ta c hai hm to. Chng ta thc s khng cn hm to u tin na, nhng khng h g nu gi n li. N mang li cho ngi dng lp ny mt ty chn. H c th to mt i tng Adult vi tn mc nh hoc to mt i tng Adult c tn xc nh m h a vo. Nhng g ta va lm, thm ch l bn c l cn cha bit, c gi l np chng (overload) phng phc. Chng ta s tho lun v khi nim ny chi tit hn trong phn tip theo. V u trang Np chng phng thc Khi bn to hai phng thc c cng tn, nhng s lng tham s khc nhau (hoc kiu ca tham s khc nhau), bn np chngphng thc . y l mt mt mnh ca i tng. Mi trng chy thi hnh ca Java s quyt nh phin bn no ca phng thc c gi, da trn nhng th m bn truyn vo. Trong trng hp cc hm to ca chng ta, nu bn khng truyn vo bt c tham s no th JRE s dng hm to khng tham s. Nu ta truyn vo hai i tng kiu String th mi trng chy thi hnh s dng phin bn nhn hai tham s String. Nu ta truyn vo cc tham s c kiu khc (hoc l ch mt String) th mi trng chy thi hnh s nhc rng khng c hm to no nhn nhng tham s kiu .

Bn c th np chng bt c phng thc no ch khng phi ch hm to, vic ny khin cho vic to cc giao din thun tin cho ngi dng s dng lp ca bn tr nn d dng. Hy th bng cch b sung thm phin bn khc ca phng thc addMoney()ca bn. Lc ny, phng thc nhn mt tham s kiu int. Tt thi, nhng iu g s xy ra nu chng ta mun np thm 100$ vo qu ca Adult ? Chng ta phi gi i gi li phng thc ny thm vo mt lot t giy bc c tng gi tr l 100$. Tht l v cng bt tin. S hay hn nhiu nu c th truyn vo mt mng cc phn t int biu th cho mt tp nhiu t giy bc. Ta hy np chng phng thc ny nhn tham s l mt mng. y l phng thc m ta c: public void addMoney(int bill) { Integer boxedBill = new Integer(bill); wallet.add(boxedBill); }

Cn y l phin bn np chng: public void addMoney(int[] bills) { for (int i = 0; i < bills.length; i++) { int bill = bills[i]; Integer boxedBill = new Integer(bill); wallet.add(boxedBill); } }

Phng thc ny trng rt ging vi mt phng thc addMoney() khc ca chng ta, nhng n nhn tham s l mt mng. Ta th dng phng thc ny bng cch bin i phng thc main() ca Adult ging nh sau: public static void main(String[] args) { Adult myAdult = new Adult(); myAdult.addMoney(new int[] { 1, 5, 10 }); System.out.println(myAdult); }

Khi chy m lnh ny, ta c th thy Adult c mt wallet bn trong c 16$. y l giao din tt hn nhiu. Nhng cha xong. Hy nh rng chng l lp trnh vin chuyn nghip, v ta mun gi cho m lnh ca mnh c sng sa. Bn c thy s trng lp m lnh no trong hai phng thc ca chng ta cha? Hai dng trong phin bn u tin xut hin nguyn vn trong phin bn th hai. Nu ta mun thay i nhng g ta lm khi thm tin vo, ta phi bin i m lnh hai ni, l tng km. Nu ta b sung phin bn khc ca phng thc ny n nhn tham s l ArrayList thay v nhn mt mng, chng ta phi bin i m lnh ba ni. iu nhanh chng tr nn khng th chp nhn ni. Thay vo , chng ta c th ti cu trc (refactor) m lnh loi b s trng lp. phn tip theo, chng ta s thc hin mt thao tc ti cu trc gi l trch xut phng thc (Extract Method) hon thnh vic ny. V u trang Ti cu trc khi nng cao Ti cu trc (refactoring) l qu trnh thay i cu trc ca m lnh hin c m khng lm bin i chc nng ca n. ng dng ca bn phi sn sinh cng mt kt qu u ra nh c sau qu trnh ti cu trc, nhng m lnh ca bn s tr nn r rng hn, sng sa hn, v t trng l p. Thng thun li hn lm ti cu trc m lnh trc khi thm mt c tnh ( b sung vo d hn hoc lm r hn cn b sung thm vo u), v sau khi thm mt c tnh ( lm sch s nhng g lm khi b sung vo). Trong trng hp ny, chng ta thm vo mt phng thc mi v ta thy mt s m lnh trng lp. Chnh l lc ti cu trc! u tin, chng ta cn to ra mt phng thc nm gi hai dng m lnh trng lp. Chng ta gi phng thc laddToWallet(): protected void addToWallet(int bill) { Integer boxedBill = new Integer(bill); wallet.add(boxedBill); }

Chng ta t ch truy nhp cho phng thc ny l protected v n thc s l phng thc ph tr ni ti ca ring chng ta, ch khng phi l mt phn ca giao din cng cng ca lp do chng ta xy dng. By gi hy thay cc dng m lnh trong phng thc bng li gi n phng thc mi: public void addMoney(int bill) { addToWallet(bill); }

y l phin bn c np chng: public void addMoney(int[] bills) { for (int i = 0; i < bills.length; i++) { int bill = bills[i]; addToWallet(bill); } }

Nu bn chy li m lnh, bn s thy cng mt kt qu. Kiu ti cu trc ny nn tr thnh mt thi quen, v Eclipse s khin n tr nn d dng hn i vi bn bng cch a vo thm nhiu cng c ti cu trc t ng. Vic i su tm hiu chi tit v chng nm ngoi phm vi ca ti liu hng dn ny, nhng bn c th th nghim chng. Nu chng ta chn hai dng m lnh trng lp trong phin bn u ca addMoney(), chng ta c th nhn chut phi vo m lnh chn v chn Refactor>Extract Method. Eclipse s tng bc dn dt chng ta qua qu trnh ti cu trc. y l mt trong nhng c tnh mnh nht ca IDE ny. V u trang Cc thnh phn ca lp Cc bin v phng thc m chng ta c trong Adult l cc bin c th v phng thc c th. Mi i tng s c cc bin v phng thc c th nh th. Bn thn cc lp cng c cc bin v phng thc. Chng c gi chung l cc thnh phn ca lp, v bn khai bo chng bng t kha static. S khc nhau gia cc thnh phn ca lp v cc bin c th l: Tt c cc c th ca mt lp s chia s chung mt bn sao n l ca bin lp (class variable). Bn c th gi cc phng thc lp (class method) ngay trn bn thn lp m khng cn c mt c th ca lp. Cc phng thc ca c th c th truy cp cc bin lp, nhng cc phng thc lp khng th truy cp vo bin c th Cc phng thc lp ch c th truy cp bin lp. Khi no th vic thm cc bin lp hay phng thc lp tr nn c ngha? Quy tc xuyn sut l him khi lm iu , bn khng lm dng chng. Mt s cch dng thng thng l: khai bo cc hng s m bt c c th no ca lp cng c th s dng c theo vt b m cc c th ca lp. Trn mt lp vi cc phng thc tin ch m khng bao gi cn n mt c th, vn gip ch c (nh l phng thc Collections.sort()) V u trang Cc bin lp to mt bin lp, ta dng t kha static khi khai bo: accessSpecifier static variableName [= initialValue ];

JRE to mt bn sao ca cc bin c th ca lp cho mi c th ca lp . JRE ch sinh duy nht mt bn sao cho mi bin lp, khng ph thuc vo s lng c th, khi ln u tin n gp li gi lp trong chng trnh. Tt c cc c th s chia s chung (v c th sa i) bn sao ring l ny. iu ny lm cho cc bin lp tr thnh mt la chn tt cha cc hng s m tt c cc c th u c th s dng. V d, chng ta ang dng cc s nguyn m t t giy bc trong wallet ca Adult. iu hon ton chp nhn c, nhng s tht tuyt nu ta t tn cho cc gi tr nguyn ny chng

ta c th d dng hiu con s biu th cho ci g khi ta c m lnh. Hy khai bo mt vi hng s lm iu ny, chnh ngay ni ta khai bo cc bin c th trong lp ca mnh: protected static final int ONE_DOLLAR_BILL = 1; protected static final int FIVE_DOLLAR_BILL = 5; protected static final int TEN_DOLLAR_BILL = 10; protected static final int TWENTY_DOLLAR_BILL = 20; protected static final int FIFTY_DOLLAR_BILL = 50; protected static final int ONE_HUNDRED_DOLLAR_BILL = 100;

Theo quy c, cc hng s ca lp u c vit bng ch in hoa, cc t phn tch nhau bng du gch di. Ta dng t khastatic khai bo chng nh l cc bin lp, v ta thm t kha final vo m bo l khng mt c th no c th thay i chng c (ngha l bin chng tr thnh hng s). By gi ta c th bin i main() thm mt t tin cho Adult ca ta, s dng cc hng c t tn mi: public static void main(String[] args) { Adult myAdult = new Adult(); myAdult.addMoney(new int[] { Adult.ONE_DOLLAR_BILL, Adult.FIVE_DOLLAR_BILL }); System.out.println(myAdult); }

c on m ny s gip lm sng t nhng g ta b sung vo wallet wallet. V u trang Cc phng thc lp Nh ta bit, ta gi mt phng thc c th nh sau: variableWithInstance.methodName();

Chng ta gi phng thc trn mt bin c tn, bin cha mt c th ca lp. Khi bn gi mt phng thc lp, bn s gi nh sau: ClassName.methodName();

Chng ta khng cn n mt c th gi phng thc ny. Chng ta gi n thng qua chnh bn thn lp. Phng thc main() m ta ang dng chnh l mt phng thc lp. Hy nhn ch k ca n. Ch rng n c khai bo vi t kha public static. Chng ta bit nh t truy nhp ny t trc y. Cn t kha static ch ra rng y l mt phng thc lp, y chnh l l do m cc phng thc kiu ny i khi c gi l ccphng thc static. Chng ta khng cn c mt c th ca Adult gi phng thc main(). Chng ta c th xy dng cc phng thc lp cho Adult nu ta mun, mc d thc s khng c l do lm iu trong trng hp ny. Tuy nhin, minh ha cch lm, ta s b sung thm mt phng thc lp tm thng: public static void doSomething() { System.out.println("Did something"); }

Thm du ch thch vo cc dng lnh hin c ca main() loi b chng v b sung thm dng sau: Adult.doSomething(); Adult myAdult = new Adult(); myAdult.doSomething();

Khi bn chy m lnh ny, bn s thy thng ip tng ng trn mn hnh hai ln. Li gi th nht gi doSomething() theo cch in hnh khi gi mt phng thc lp. Bn cng c th gi chng thng qua mt c th ca lp, nh dng th ba ca m lnh. Nhng khng phi l

cch hay. Eclipse s cnh bo cho bn bit bng cch dng dng gch chn dng sng mu vng v ngh bn nn truy cp phng thc ny theo cch tnh (static way), ngha l trn lp ch khng phi l trn c th. V u trang So snh cc i tng vi ton t == C hai cch so snh cc i tng trong ngn ng Java: Ton t == Ton t equals() Cch u tin, v l cch c bn nht, so snh cc i tng theo tiu ch ngang bng i tng (object equality). Ni cch khc, cu lnh: a == b

s tr li gi tr true nu v ch nu a v b tr ti chnh xc cng mt c th ca mt lp (tc l cng mt i tng). Cc kiu nguyn thy l ngoi l ring. Khi ta so snh hai kiu nguyn thy bng ton t ==, mi trng chy thi hnh ca Java s so snh cc gi tr ca chng (hy nh rng d g th chng cng khng phi l i tng thc s). Hy th v d ny trong main() v xem kt qu trn mn hnh. int int1 = 1; int int2 = 1; Integer integer1 = new Integer(1); Integer integer2 = new Integer(1); Adult adult1 = new Adult(); Adult adult2 = new Adult(); System.out.println(int1 == int2); System.out.println(integer1 == integer2); integer2 = integer1; System.out.println(integer1 == integer2); System.out.println(adult1 == adult2);

Php so snh u tin tr li gi tr true, v ta ang so snh hai kiu nguyn thy c cng gi tr. Php so snh th hai tr li gi trfalse, v hai bin khng tham chiu n cng mt i tng c th. Php so snh th ba tr li gi tr true, v by gi hai bin tr n cng mt c th. Hy th vi lp ca chng ta, ta cng nhn c gi tr false v adult1 v adult2 khng ch n cng mt c th. V u trang So snh cc i tng bng equals() Bn gi phng thc equals() trn mt i tng nh sau: a.equals(b);

Phng thc equals() l mt phng thc ca lp Object, vn l lp cha ca mi lp trong ngn ng Java. iu c ngha l bt c lp no bn xy dng nn cng s tha k hnh vi c s equals() t lp Object. Hnh vi c s ny khng khc so vi ton t ==. Ni cch khc, mc nh l hai cu lnh ny cng s dng ton t == v tr li gi tr false: a == b; a.equals(b);

Hy nhn li phng thc spendMoney() ca lp Adult. Chuyn g xy ra ng sau khi ta gi phng thc contains()ca i tng wallet ca ta? Ngn ng Java s dng ton t == so snh cc i tng trong danh sch vi mt i tng m ta yu cu. Nu Java thy khp, phng thc s tr li gi tr true; cc trng hp khc tr li gi tr false. Bi v ta ang so snh cc kiu nguyn thy, Java c th thy s trng khp da theo gi tr ca cc s nguyn (hy nh rng ton t == so snh cc kiu nguyn thy da trn gi tr ca chng). Tht tuyt vi i vi cc kiu nguyn thy, nhng liu s th no nu ta so snh ni dung ca cc i tng? Ton t == khng th lm vic ny. so snh ni dung ca cc i tng, chng ta phi chng phng thc equals() ca lp m a l c th ca lp . iu c ngha

l bn to ra mt phng thc c cng ch k chnh xc nh ch k ca phng thc ca mt trong cc lp bc trn (superclasses), nhng bn s trin khai thc hin phng thc ny khc vi phng thc ca lp bc trn. Nu lm nh vy, bn c th so snh ni dung ca hai i tng xem liu chng c ging nhau khng ch khng phi l ch kim tra xem liu hai bin c tr ti cng mt c th khng. Hy th v d ny trong main(), v xem kt qu trn mn hnh: Adult adult1 = new Adult(); Adult adult2 = new Adult(); System.out.println(adult1 == adult2); System.out.println(adult1.equals(adult2)); Integer integer1 = new Integer(1); Integer integer2 = new Integer(1); System.out.println(integer1 == integer2); System.out.println(integer1.equals(integer2));

Php so snh u tin tr li gi tr false v adult1 v adult2 tr n cc c th khc nhau ca lp Adult. Php so snh th hai cng tr li gi tr false v trin khai mc nh ca equals() n gin l so snh hai bin xem liu chng c tr ti cng mt c th khng. Nhng hnh vi mc nh ny ca equals() thng khng phi l ci ta mong mun. Chng ta mun so snh ni dung ca hai Adult xem liu chng c ging nhau khng. Ta c th chng phng thc equals() lm iu ny. Nh bn thy kt qu ca hai php so snh cui cng trong v d trn, lp Integer chng ln phng thc ny sao cho ton t ==tr li gi trfalse, nhng equals() li so snh cc gi tr int bao bc xem c bng nhau khng. Chng ta s lm tng t vi Adulttrong phn tip theo. V u trang chng phng thc equals() chng phng thc equals() nhm so snh cc i tng th thc t chng ta phi chng hai phng thc: public boolean equals(Object other) { if (this == other) return true; if ( !(other instanceof Adult) ) return false; Adult otherAdult = (Adult)other; if (this.getAge() == otherAdult.getAge() && this.getName().equals(otherAdult.getName()) && this.getRace().equals(otherAdult.getRace()) && this.getGender().equals(otherAdult.getGender()) && this.getProgress() == otherAdult.getProgress() && this.getWallet().equals(otherAdult.getWallet())) return true; else return false; } public int hashCode() { return firstname.hashCode() + lastname.hashCode(); }

Chng ta chng phng thc equals() theo cch sau, l cch din t tiu biu ca Java: Nu i tng c so snh chnh l i tng so snh th hai i tng ny l r rng l bng nhau, bi vy ta tr li gi trtrue

Chng ta kim tra chc chn rng i tng m chng ta s em so snh l mt c th ca lp Adult (nu khng th hai i tng ny khng th nh nhau c) Chng ta p kiu i tng c gi n thnh mt Adult c th gi cc phng thc ph hp ca n Chng ta so snh cc mnh ca hai Adult, chng s phi ging nhau nu hai i tng l bng nhau (d theo bt c nh ngha no v php bng m chng ta s dng)

Nu bt c mnh no khng bng nhau th chng ta s tr v gi tr l false; ngc li tr v gi tr true Lu rng chng ta c th so snh age bng ton t == v age l gi tr nguyn thy. Chng ta dng phng thc equals() so snh cc String, v lp chng phng thc equals() so snh ni dung ca cc String (nu ta dng ton t ==, chng ta s lun nhn c kt qu tr v l false, v hai String khng bao gi cng l mt i tng). Chng ta lm tng t viArrayList, v n chng phng thc equals() kim tra xem hai danh sch c cng cc phn t theo cng th t hay khng, nh th l cho v d n gin ca chng ta. Bt c khi no bn chng phng thc equals(), bn cng nn vit chng c phng thc hashCode() na. L do v sao li nh th nm ngoi phm vi ca ti liu hng dn ny, nhng hin gi, ch cn bit rng ngn ng Java dng cc gi tr c tr v t phng thc hashCode() ny t cc c th ca lp ca bn vo cc su tp, cc su tp ny li dng thut ton bm sp t cc i tng (nh HashMap). Quy tc nghim ngt v nhanh chng quyt nh hashCode() phi tr li gi tr g (ngoi vic n phi tr li mt s nguy n) l n phi tr v: Cng gi tr ging nhau cho cng mt i tng vo mi thi im. Cc gi tr bng nhau i vi cc i tng bng nhau. Thng thng, vic tr v gi tr m bm ca mt vi hoc ton b cc bin c th ca mt i tng l mt cch thch hp tnh ton ra m bm. Mt la chn khc l chuyn i cc bin thnh String, ni chng li v sau tr v m bm ca String kt qu. Mt la chn khc na l mt hoc mt vi bin kiu s vi mt hng s no lm cho kt qu tr nn c tnh duy nht hn na, nhng vic ny thng l qu mt cng. V u trang chng phng thc toString() Lp Object c mt phng thc toString(), mi lp sau ny do bn to ra s tha k n. N tr v mt biu din dng Stringca i tng ca bn v rt hu dng cho vic g li. xem phin bn trin khai thc hin mc nh ca phng thctoString() lm g th ta hy th v d sau trong main(): public static void main(String[] args) { Adult myAdult = new Adult();

myAdult.addMoney(1); myAdult.addmoney(5); System.out.println(myAdult); }

Kt qu ta nhn c trn mn hnh s nh sau: intro.core.Adult@b108475c

Phng thc println() gi phng thc toString() ca i tng truyn n n. V chng ta cn cha chng phng thc toString() nn chng ta s nhn c kt qu u ra mc nh, l ID ca i tng. Tt c i tng u c ID nhng chng khng cho bn bit g nhiu v i tng. S tt hn khi bn chng ln phng thc toString() a ra cho chng ta mt bc tranh c nh dng p ca cc ni dung ca i tng Adult(): public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("And Adult with: " + "\n"); buffer.append("Age: " + age + "\n");

buffer.append("Name: " + getName() + "\n"); buffer.append("Race: " + getRace() + "\n"); buffer.append("Gender: " + getGender() + "\n"); buffer.append("Progress: " + getProgress() + "\n"); buffer.append("Wallet: " + getWallet()); return buffer.toString(); }

Chng ta to ra mt StringBuffer xy dng mt biu din dng String ca i tng ca chng ta, sau tr v String ny. Khi bn chy li th mn hnh s cho ta kt qu xut ra p nh sau: An Adult with: Age: 25 Name: firstname lastname Race: inuit Gender: male Progress: 0 Wallet: [1, 5]

Th ny r rng l thun tin v c ch hn l mt ID i tng kh hiu. V u trang Cc li Tht tuyt nu nh m lnh ca chng ta khng bao gi c bt k sai st no nhng iu ny l phi thc t. i khi mi th khng xui cho mt mi nh ta mun, v c nhng khi vn xy ra cn t hn l vic sn sinh ra nhng kt qu khng mong mun. Khi iu xy ra, JRE s a ra mt li ngoi l (throws an exception). Ngn ng ny c bao gm nhng cu lnh c bit cho php bn bt li v qun l li mt cch thch hp. Sau y l khun dng chung ca nhng cu lnh ny: try { statement(s) } catch ( exceptionType name ) { statement(s) } finally { statement(s) }

Lnh try bao bc on m lnh c th gy ra li. Nu c li, vic thi hnh s lp tc nhy ti khi catch, cng gi l trnh x l li. Khi qua khi try v khi catch, vic thi hnh s tip tc n khi finally, bt chp vic liu c li xy ra hay khng. Khi bn bt c li, bn c th th phc hi li sau li hoc bn c th thot ra khi chng trnh (hay phng thc) mt cch nh nhng. V u trang X l li Th v d sau trong main(): public static void main(String[] args) { Adult myAdult = new Adult(); myAdult.addMoney(1); String wontWork = (String) myAdult.getWallet().get(0); }

Khi chng ta chy m lnh ny, chng ta s nhn c bo li. Mn hnh s hin th nh sau: java.lang.ClassCastException at intro.core.Adult.main(Adult.java:19)

Exception in thread "main"

Lu vt ca ngn xp s bo cho bit kiu ca li v s hiu ca dng xut hin li. Hy nh rng chng ta phi p kiu (cast) khi g b mt Object khi su tp. Chng ta c su tp cc i tng Integer nhng chng ta th ly i tng th nht bng lnhget(0) (trong 0 l ch s ca phn t u tin trong danh sch v danh sch bt u t 0, cng nh mng) v p kiu n thnhString. Mi trng chy thi hnh ca Java s ku ca v li ny. Lc th chng trnh s ngng. Hy lm sao n chm dt nh nhng hn bng cch x l li ny: try { String wontWork = (String) myAdult.getWallet().get(0); } catch (ClassCastException e) { System.out.println("You can't cast that way."); }

Ti y chng ta bt li v in ra mt thng bo lch s. Mt cch khc l ta c th khng lm g trong khi catch, in ra thng bo lch s trong khi finally, nhng iu khng cn thit. Trong mt vi trng hp, i tng li (thng c tn khi u b ng e hocex, nhng khng nht thit phi th) c th cung cp cho bn nhiu thng tin hn v li, chng c th gip bn nm c thng tin tt hn hoc sa cha li mt cch d dng. V u trang H phn cp li Ngn ng Java tch hp cht ch trn vn mt h phn cp li, iu c ngha l c rt nhiu kiu li. mc cao nht, mt s li c kim tra nh trnh bin dch, v mt s li khc, c gi l RuntimeException, th trnh bin dch khng kim tra c. Quy tc ca Java l bn phi bt li hoc xc nh r li ca mnh. Nu mt phng thc c th a ra mt li khng phiRuntimeException, phng thc hoc l phi x l li, hoc l phi ch r rng phng thc gi n phi lm vic ny. Bn lm vic ny vi biu thc throws trong ch k ca phng thc. V d: protected void someMethod() throws IOException

Trong m lnh ca bn, nu bn gi mt phng thc m phng thc ny ch r rng n a ra mt hoc cc kiu li, bn phi x l n bng mt cch no , hoc b sung thm mt mnh throws vo ch k ca phng thc ca bn chuyn tip n ngn xp cc li gi phng thc c gi trong m lnh ca bn. Trong trng hp xy ra s kin li, mi trng chy thi hnh ca ngn ng Java s tm trnh x l li u , ti tn ngn xp nu khng c trnh x l no ni m li pht sinh ra. Nu khng tm thy trnh x l li cho n khi truy n nh ngn xp th mi trng chy thi hnh ca Java s lp tc dng chng trnh li. Mt tin tt lnh l hu ht cc IDE (Eclipse hin nhin nm trong s ny) s thng bo cho bn nu m lnh ca bn cn phi by li c th c a ra bi phng thc m bn gi. Sau bn c th quyt nh s lm g vi n. Cn nhiu iu ni v x l li, d nhin l th, nhng li qu nhiu trnh by trong ti liu ny. Hy vng nhng g chng ta bn n y s gip bn hiu ci g ang i bn. Cc ng dng Java ng dng l g? Chng ta thy mt ng dng ri, d l ng dng rt n gin. Lp Adult c mt phng thc main() ngay t khi mi xut hin. Phng thc ny cn thit v bn cn mt phng thc nh vy Java thc thi m lnh ca bn. Thng thng, cc i tng lnh vc ng dng ca bn s khng c phng thc main(). ng dng Java in hnh thng bao gm:: Ch mt lp c phng thc main() khi ng mi th Mt lot cc lp khc thc hin cng vic minh ha chng lm vic ra sao, chng ta cn b sung thm mt lp khc vo ng dng ca mnh. Lp s c gi l trnh iu khin (driver). To ra lp iu khin Lp iu khin ca chng ta c th rt n gin: package intro.core;

public class CommunityApplication { public static void main(String[] args) { } }

Lm theo cc bc sau y to lp iu khin v thc s n iu khin chng trnh ca chng ta: To lp trong Eclipse bng cch dng cc nt trn thanh cng c Ne w Java Class m ta dng xy dng lp Adult trong phn Khai bo lp.

t tn lp l CommunityApplication, v m bo l bn nh du ty chn thm phng thc main() vo lp ny. Eclipse s to ra lp cho bn, bao gm c phng thc main().

Xa phng thc main() khi lp Adult. Tt c nhng g cn phi lm l t cc th vo phng thc main() mi ca chng ta: package intro.core;

public class CommunityApplication { public static void main(String[] args) { Adult myAdult = new Adult(); System.out.println(myAdult.walk(10)); } }

To mt cu hnh khi chy mi trong Eclipse, ging nh ta lm i vi lp Adult trong phn Thc thi m lnh trong Eclipse, v chy cu hnh ny. Bn s thy rng i tng ca chng ta i c 10 bc. By gi ci bn ang c l mt ng dng n gin bt u bng CommunityApplication.main(), v dng i tng lnh vc ng dng Adult ca chng ta. D nhin, cc ng dng c th phc tp hn th, nhng tng c bn vn nh vy. Khng c g l bt thng khi cc ng dng Java c hng trm lp. Mt khi lp iu khin chnh khi ng mi th, chng trnh s chy nh vo vic cc lp cng tc vi nhau thc hin cng vic. Theo di vic thi hnh chng trnh c th l kh kh khn nu bn quen vi cc chng trnh hng th tc, khi ng t im u v chy cho n cui, nhng n s d hiu hn khi thc hnh. V u trang Cc tp JAR Bn ng gi ng dng Java th no ngi khc c th dng c hoc gi m lnh cho ngi khc h c th s dng cho chng trnh ring ca h (nh mt th vin cc i tng hu ch hay nh mt khung cng tc)? Bn to mt tp Java Archive (JAR) ng gi m lnh sao cho nhng lp trnh vin khc c th tch hp n vo Java Build Path trong Eclipse, hoc tch hp vo ng dn lp nu h dng cc cng c dng lnh. Mt ln na, Eclipse khin mi vic tr nn d dng hn. To tp JAR trong Eclipse (v nhiu IDE khc) ch trong chp mt: 1. Trong vng lm vic ca bn, nhn chut phi vo gi intro.core v chn mc Export 2. Chn mc JAR file trong hp thoi Export, sau nhn chn Next 3. Chn v tr m bn mun t tp JAR, v t cho tp ny bt c tn g bn mun vi phn ui m rng l .jar 4. Nhn chn Finish Bn c th thy tp JAR va to v tr m bn xc nh. Khi c tp JAR (ca bn hay t mt ngun khc), bn c th s dng cc lp nm trong tp ny khi vit m lnh nu bn t tp JAR vo Java Build Path ca mnh trong Eclipse. Lm vic ny cng khng tn cng sc lm. Hin ti th khng c m lnh no ta cn thm vo ng dn, nhng ta hy lm theo cc bc m bn cn thc hin lm c iu y: 1. Nhn chut phi vo d n Intro trong vng lm vic ca bn, sau chn Properties 2. Trong hp thoi Properties, chn phiu Libraries 3. Bn s thy cc nt Add JARs... v Add External JARs..., bn c th dng cc nt ny t cc tp JAR vo Java Build Path ca mnh. Mt khi m lnh ( y l cc tp class) trong tp JAR c mt trong Java Build Path, bn c th dng nhng lp ny trong m Java ca mnh m khng gp li khi bin dch. Nu tp JAR c

tch hp c m ngun, bn c th kt hp cc file m ngun vi cc tp class trong ng dn ca mnh. Sau bn c th c cc tr gip m lnh v thm ch c th m m lnh ra xem. Vit m lnh Java tt Gii thiu m lnh Java By gi bn bit kh nhiu v c php ca Java, nhng khng phi l lp trnh thc s chuyn nghip. Vy iu g to nn mt chng trnh Java tt? C l s lng cu tr li cho cu hi ny cng nhiu nh s cc lp trnh vin Java chuyn nghip. Nhng ti c mt s xut m ti tin rng hu ht cc lp trnh vin Java chuyn nghip s ng ci tin cht lng ca m lnh Java m h x l hng ngy. Vi ch tm bc l ht, ti phi ni rng ti nghing v ng h cc phng php lanh ln (agile) nh Lp trnh nh cao (Extreme Programming - XP), do nhiu quan im ca ti v m lnh tt ni chung l c cng ng pht trin theo phng php lanh ln v c bit l XP cng b. Ti ngh hu ht cc lp trnh vin Java chuyn nghip giu kinh nghim s ng vi nhng im m ti s trnh by trong phn ny. Hy gi cho cc lp nh gn Chng ta xy dng lp Adult n gin trong ti liu ny. Thm ch sau khi chng ta chuyn phng thc main() sang lp khc,Adult cng cn hn 100 dng m lnh. Lp ny c ti hn hai mi phng thc, v n thc s khng lm c g nhiu nu so snh vi nhiu lp v bn c th thy (hay to ra) trong hot ng ngh nghip. y l mt lp nh. Khng c g bt thng khi bn thy c nhng lp c t 50 n 100 phng thc. iu g khin cho bn ngh rng t hn l t hn ? Chng c g c. iu quan trng v cc phng thc l bn c nhng g bn cn. Nu bn cn vi phng thc tr gip, v bn cht thc hin cng mt vic nhng nh n cc tham s khc nhau (nh phng thc addMoney() chng hn), th l mt la chn hay. Hy m bo l ch hn ch trong danh sch cc phng thc bn cn v ng thm na. Thng thng, mt lp c qu nhiu phng thc s c mt vi phng thc khng thuc danh sch ny v rng i tng khng l th cng lm qu nhiu th. Trong cun Ti cu trc (Refactoring, xem Cc ti nguyn), Martin Fowler gi iu ny l c mi m phng thc ngoi lai (Foreign Method code smell). Nu bn c mt i tng vi 100 phng thc, bn nn suy ngh k v vic liu i tng ny c phi thc s l nhiu i tng hay khng. Trong trng hc cc lp ng thng gy phin toi. iu ny cng xy ra i vi m lnh Java. V u trang Hy gi cho cc phng thc nh gn Cc phng thc nh gn cng nn c u tin hn ging nh cc lp nh gn vi l do tng t. Mt trong nhng li phn nn ca cc lp trnh vin hng i tng giu kinh nghim i vi ngn ng Java l n cung cp mt ng hng i tng nhng khng dy h cch thc hin n sao cho tt. Ni cch khc, Java mang li cho h rc ri, d t nht cng khng nhiu nh ngn ng C++. Ni thng thy iu ny chnh l trong mt lp vi phng thc main() di dng dc, hoc ch mt phng thc c tn l doIt(). Nu ch v bn c th nhi tt c m lnh ca mnh vo ch mt phng thc trong mt lp th iu khng c ngha l bn nn lm th. Ngn ng Java c nhiu gia v c php hn nhiu ngn ng hng i tng khc nn cng cn di dng i cht, nhng khng nn qu . Hy ngm ngh chc lt v nhng phng thc cc k di y. Phi cun n 10 trang mn hnh y m lnh lun ra ci g ang xy ra khin cho tht kh khn hiu ci g ang xy ra. Phng thc y lm g? Bn s cn c mt cc c ph b v nghin cu vi gi hiu ra. Phng thc nh, thm ch l t hon na l mt b lnh d tiu ha. Hiu sut chy thi hnh khng phi l l do vit cc phng thc nh gn. Kh nng d c hiu mi l phn thng thc s ca n. iu ny khin cho m lnh ca bn d dng bo tr hn v d thay i hn khi bn mun thm cc c tnh mi. Hy hn ch sao cho mi phng thc thc hin ch mt vic. V u trang Hy t tn phng thc ph hp Mu vit m lnh hay nht m ti tng xem qua (v ti qun mt ngun) c gi l cc tn phng thc biu l mc ch. Trong hai ci tn phng thc di y, ci no d gii mi hn khi ch thong nhn qua? a() computeCommission() Cu tr li tht hin nhin. V mt vi l do, cc nh lp trnh dng nh khng thch t tn phng thc di dng. Tt nhin mt ci tn di l bch c th bt tin, nhng mt ci tn di r rng thng li khng l bch. Ti chng gp kh khn g vi mt ci tn phng thc nh aReallyLongMethodNameThatIsAbsolutelyClear(). Vo lc 3:00 gi sng khi ti th tm

hiu xem ti sao chng trnh ca ti khng chy, nu ti gp phi mt phng thc c tn l a() th ti ch mun nn cho ai mt trn. Hy dnh thm vi pht chn mt ci tn rt gi t; nu c th, bn hy cn nhc vic t tn cho cc phng thc theo cch thc sao cho m lnh ca bn c ra ging nh li ni thng thng vy, thm ch nu iu ny c ngha l cn thm cc phng thc ph tr lm c vic . V d, hy xem xt vic thm vo mt phng thc ph tr khin cho on m lnh ny thm d c hn: if (myAdult.getWallet().isEmpty()) { do something }

Phng thc isEmpty() ca ArrayList t n rt c ch, nhng iu kin logic trong cu lnh if ca chng ta c th c li t phng thc hasMoney() ca Adult nh sau: public boolean hasMoney() { return !getWallet().isEmpty(); }

Sau y l cu lnh if c ging li ni thng thng hn: if (myAdult.hasMoney()) { do something }

K thut ny n gin v c l l bnh thng trong trng hp ny, nhng n li rt hu hiu khi m lnh tr nn phc tp hn. V u trang Gi cho s lng cc lp t nht Mt trong nhng nguyn tc ch o c c thit k n gin trong lp trnh nh cao (XP) l t c mc tiu vi t lp nht c th, nhng khng t hn. Nu bn cn mt lp khc, chc chn l nn thm n vo. Nu thm lp khc lm cho m lnh ca bn n gin hn hay lm cho bn din dch nh ca mnh d dng hn th hy c tip tc thm lp vo. Nhng chng c l do g thm cc lp ch c chng m thi. Thng khi bt u d n bn c t lp hn l khi hon thnh xong xui, d nhin, nhng cng thng th d ti cu trc m lnh ca bn thnh nhiu lp hn l tch hp chng li. Nu bn c mt lp c rt nhiu phng thc, phn tch xem liu c phi c mt lp khc mc by vo y v ang i c tch ra hay khng. Nu c, hy to ra mt i tng mi. Trong hu ht cc d n Java ca ti, khng ai ngi xy dng cc lp nhng chng ti cng lun c gng gim s lng cc lp m khng lm cho nh ca mnh km tng minh. V u trang Hy gi cho s lng cc ch thch t nht Ti thng vit cc ch thch tha trong m lnh ca mnh. c chng ht nh c c mt cun sch. By gi ti khn ngoan hn cht t. Tt c cc chng trnh hc tp v khoa hc my tnh, tt c cc cun sch dy lp trnh v rt nhiu lp trnh vin ti quen bit u khuyn bn ch thch cho cc m lnh. Trong mt vi trng hp, cc ch thch tht s c ch. Nhng trong mt s trng hp khc th chnh chng li lm cho vic bo tr m lnh kh thm. Th ngh xem bn phi lm g khi bn thay i m lnh. C ch thch y khng? Nu c, tt hn l bn phi thay i c ch thch hoc l n s tr nn li thi kinh khng, v thi gian tri i, thm ch n ch din t g m lnh c. Theo kinh nghim ca ti th n ch tng gp i thi gian bo tr ca bn m thi. Quy tc ch o ca ti l: Nu m lnh kh c v kh hiu n ni cn phi c ch thch th ti cn lm cho n sng sa hn khng cn ch thch na. C th l n qu di hoc lm qu nhiu vic. Nu th, phi lm cho n tr nn n gin hn. C th n qu kh hiu. Nu th, ti s b sung thm cc phng thc ph tr lm n d hiu hn. Thc t, trong 3 nm lp trnh Java vi cc thnh vin trong i, ti c th m s lng ch thch ti vit trn u ngn tay v ngn chn. Hy lm m lnh ca bn sng sa hn! Nu bn cn mt bc tranh tng th v h thng, hoc mt thnh phn c th no lm ci g, hy vit ti liu ngn gn m t n.

Nhng ch thch di dng thng kh bo tr, thng chng khng din gii nh ca bn tt bng mt phng thc c vit chun, nh gn, v s nhanh chng tr nn li thi. ng ph thuc qu nhiu vo cc ch thch. V u trang Hy dng mt phong cch nht qun Vit m lnh theo phong cch g thc s l vn v s cn thit v ci c th chp nhn c trong mi trng ca bn l g. Ti thm ch khng bit n mt phong cch m ti c th gi l tiu biu. N l chuyn s thch c nhn. V d, nhng dng lnh sau c th lm ti git ny mnh cho n khi ti bin i i: public void myMethod() { if (this.a == this.b) { statements } }

V sao iu li lm ti bn khon? V c nhn ti khng a kiu vit m lnh thm c lot dng mi, m theo kin ca ti, khng cn thit. Trnh bin dch Java ghi nhn nhng dng m lnh sau y cng ging nh vy, v ti tit kim c vi dng: public void myMethod() { if (this.a == this.b) statements }

Khng c cch vit no l ng hay l sai. Ch n gin l n ngn hn cch kia. Vy iu g xy ra khi ti vit m lnh vi nhng ngi thch cch u tin hn ? Chng ti trao i v n, chn ra kiu chng ti s dng v sau th trung thnh vi n. Ch c mt quy tc nghim ngt l hy nht qun. Nu nhng ngi tham gia thc hin mt d n p dng cc phong cch khc nhau, vic c m lnh s kh khn. Hy chn mt kiu thi v ng thay i na. V u trang Trnh dng lnh switch Mt vi lp trnh vin Java thch dng lnh switch. Ti th ngh lnh cng hay, nhng sau nhn ra rng switch thc ra ch l mt lot lnh if, v nh th c ngha l logic iu kin s xut hin nhiu ni trong m lnh ca ti. l s lp li m lnh, v y l ci khng chp nhn c. Ti sao? Bi v c nhng m lnh ging nhau ti nhiu v tr c th khin cho m lnh kh thay i. Nu ti c cng lnh switch ti 3 ni v ti mun thay i cch x l mt trng hp c th th ti phi thay i 3 on m lnh. By gi, nu nh bn c th ti cu trc m lnh sao cho ch cn c mt lnh switch th sao? Tuyt vi! Ti khng tin c bt k chuyn t hi g khi dng n. Trong mt vi trng hp, dng switch li khin m lnh sng t hn l nhiu lnh if lng nhau. Nhng nu bn thy n xut hin nhiu ni c vn th bn nn sa i. Cch d nht khi vp phi vn ny l trnh dng lnhswitch tr khi n l cng c tt nht cho cng vic . Theo kinh nghim ca ti th iu ny rt him khi xy ra. V u trang Hy l public Ti dnh li khuyn co gy nhiu tranh ci nht n pht cui cng. Hy chun b tinh thn no v ht th tht su. Ti tin bn s sai lm khi t ton b cc phng thc ca bn ch truy nhp l public. Cc bin c th t ch protected. D nhin, nhiu lp trnh vin chuyn nghip s rng mnh khi ngh n iu v nu mi th u l cng cng th ai cng c th bin i chng c, c th bng c nhng cch bt hp php. Trong mt th gii m mi th u c th truy cp cng cng, bn phi ph thuc vo tnh nguyn tc ca ngi lp trnh trong vic m bo rng mi ngi khng th truy nhp vo nhng th m h khng nn truy nhp khi h khng c php. Nhng trong thc t lp trnh, t c iu g gy phin toi hn l mun truy cp mt bin hay mt phng thc m bn khng nhn thy c. Nu bn hn ch truy cp nhng th trong m lnh v bn coi rng nhng ngi

khc s khng truy cp c, th c l bn thc s l ng ton nng. l mt gi nh nguy him trong mi thi im. Ni phin toi ny thng l ra khi bn dng m lnh ca ngi khc. Bn c th thy mt phng thc thc hin chnh xc nhng g bn mun lm, nhng n li khng cho php truy cp cng cng. i khi c l do chnh ng lm vic v vic hn ch cc truy nhp l c ngha. Th nhng, i khi l do duy nht ch truy cp khng l public l nhng ngi vit m lnh ngh rng Ch bao gi c ai cn truy nhp vo y c. Hoc c th h ngh Chng ai s cn truy nhp v v tip theo, khng c mt l do vng chc. Nhiu khi ngi ta s dng ch private v n c sn . ng lm vy. Hy cc phng thc l public v cc bin l protected cho n khi bn c l do hp l hn ch truy nhp. V u trang Theo du chn ca Fowler By gi bn bit cch lm th no vit m lnh Java tt v gi gn cho n chun mc. Cun sch hay nht trong ngnh cng nghip phn mm l cun Ti cu trc ca Martin Fowler (xem Cc ti nguyn). N thm ch cn rt hi hc na. Ti cu trc c ngha l thay i thit k ca m lnh hin c m khng lm bin i kt qu ca n. Fowler ni v cc mi m lnh ang xin c ti cu trc, v i su vo chi tit cc k thut khc nhau (hoc cc kiu ti cu trc khc nhau) khc phc chng. Theo quan im ca ti, vic ti cu trc v kh nng vit m lnh kim th i trc (code test -first) (xem Cc ti nguyn l nhng k nng quan trng nht m cc lp trnh vin mi vo ngh cn hc. Nu mi ngi tho c hai, n s cch mng ha ngnh cng nghip ny. Nu bn tr nn thnh tho c hai k nng, s rt d kim vic lm, v bn s c th lm ra kt qu tt hn so vi a s ngi tm vic. Vic vit m lnh Java tng i n gin. Vit m lnh Java tt li l mo mc. Bn hy tp trung tr thnh nhng ngi lnh ngh.

You might also like