You are on page 1of 193

B gio dc v o to Trng i hc s phm k thut hng yn ---------------ooo------------------

cng bi ging Java c s

Chng 1 CC KHI NIM C BN

BI 1. LM QUEN VI JAVA I. Lch s java Java l mt ngn ng lp trnh c Sun Microsystems gii thiu vo thng 6 nm 1995. T , n tr thnh mt cng c lp trnh ca cc lp trnh vin chuyn nghip. Java c xy dng trn nn tng ca C v C++. Do vy n s dng cc c php ca C v cc c trng hng i tng ca C++. Ban u Java c thit k lm ngn ng vit chng trnh cho cc sn phm in t dn dng nh u video, tivi, in thoi, my nhn tin.. . Tuy nhin vi s mnh m ca Java khin n ni ting n mc vt ra ngoi s tng tng ca cc nh thit k ra n. Java khi thu tn l Oak- l cy si mc pha sau vn phng ca nh thit k chnh ng Jame Gosling, sau ny ng thy rng c ngn ng lp trnh tn Oak ri, do vy nhm thit k quyt nh i tn, Java l ci tn c chn, Java l tn ca mt qun cafe m nhm thit k java hay n ung. II. Java em l ai Java l ngn ng lp trnh hng i tng, do vy khng th dng Java vit mt chng trnh hng chc nng. Java c th gii quyt hu ht cc cng

vic m cc ngn ng khc c th lm c. Java l ngn ng va bin dch va thng dch. u tin m ngun c bin dch bng cng c JAVAC chuyn thnh dng ByteCode. Sau c thc thi trn tng loi my c th nh chng trnh thng dch JAVA. Mc tiu ca cc nh thit k Java l cho php ngi lp trnh vit chng trnh mt ln nhng c th chy trn bt c phn cng c th, th nn khu hiu ca cc nh thit k Java l Write One, Run Any Where. Ngy nay, Java c s dng rng ri vit chng trnh chy trn Internet. N l ngn ng lp trnh hng i tng c lp thit b, khng ph thuc vo h iu hnh. Java khng ch dng vit cc ng dng chy n l hay trong mng m cn xy dng cc trnh iu khin thit b cho in thoi di ng, PDA, II. Mt s c trng ca java 1.n gin Nhng ngi thit k mong mun pht trin mt ngn ng d hc v quen thuc vi a s ngi lp trnh. Java ta nh C++, nhng lc b i cc c trng phc tp, khng cn thit ca C v C++ nh: thao tc con tr, thao tc nh ngha chng ton t (operator overloading), Java khng s dng lnh goto cng nh file header (.h). Cu trc struct v union cng c loi b khi Java. Nn c ngi bo Java l C++--, ng bo java l C++ nhng b i nhng th phc tp, khng cn thit. 2. Hng i tng C th ni java l ngn ng lp trnh hon ton hng i tng, tt cc trong java u l s vt, u u cng l s vt. 3. c lp vi h nn Mc tiu chnh ca cc nh thit k java l c lp vi h nn hay cn gi

l c lp phn cng v h iu hnh. y l kh nng mt chng trnh c vit ti mt my nhng c th chy c bt k u Tnh c lp vi phn cng c hiu theo ngha mt chng trnh Java nu chy ng trn phn cng ca mt h my no th n cng chy ng trn tt c cc h my khc. Mt chng trnh ch chy ng trn mt s h my c th c gi l ph thuc vo phn cng. Tnh c lp vi h iu hnh c hiu theo ngha mt chng trnh Java c th chy c trn tt c cc h iu hnh. Mt chng trnh ch chy c trn mt s h iu hnh c gi l ph thuc vo h iu hnh. Cc chng trnh vit bng java c th chy trn hu ht cc h nn m khng cn phi thay i g, iu ny c nhng ngi lp trnh t cho n mt khu hiu vit mt ln, chy mi ni, iu ny l khng th c vi cc ngn ng lp trnh khc. i vi cc chng trnh vit bng C, C++ hoc mt ngn ng no khc, trnh bin dch s chuyn tp lnh thnh m my (machine code), hay lnh ca b vi x l. Nhng lnh ny ph thuc vo CPU hin ti trn my bn. Nn khi mun chy trn loi CPU khc, chng ta phi bin dch li chng trnh. 4. Mnh m Java l ngn ng yu cu cht ch v kiu d liu, vic p kiu t ng ba bi ca C, C++ nay c hn ch trong Java, iu ny lm chng trnh r rng, sng sa, t li hn.Java kim tra lc bin dch v c trong thi gian thng dch v vy Java loi b mt mt s loi li lp trnh nht nh.Java khng s dng con tr v cc php ton con tr. Java kim tra tt c cc truy nhp n mng, chui khi thc thi m bo rng cc truy nhp khng ra ngoi gii hn kch thc. Trong cc mi trng lp trnh truyn thng, lp trnh vin phi t mnh cp pht b nh. Trc khi chng trnh kt thc th phi t gii phng b nh cp. Vn ny sinh khi lp trnh vin qun gii phng b nh xin cp trc . Trong chng trnh Java, lp trnh vin khng phi bn tm n vic cp pht

b nh. Qa trnh cp pht, gii phng c thc hin t ng, nh dch v thu nht nhng i tng khng cn s dng na (garbage collection). C ch by li ca Java gip n gin ha qa trnh x l li v hi phc sau li. 5. H tr lp trnh a tuyn y l tnh nng cho php vit mt chng trnh c nhiu on m lnh c chy song song vi nhau. Vi java ta c th vit cc chng trnh c kh nng chy song song mt cch d dng, hn th na vic ng b ti nguyn dng chung trong Java cng rt ng gin. iu ny l khng th c i vi mt s ngn ng lp trnh khc nh C/C++, pascal 6. Phn tn Java h tr y cc m hnh tnh ton phn tn: m hnh client/server, gi th tc t xa 7. H tr internet Mc tiu quan trng ca cc nh thit k java l to iu kin cho cc nh pht trin ng dng c th vit cc chng trnh ng dng internet v web mt cch d dng, vi java ta c th vit cc chng trnh s dng cc giao thc TCP, UDP mt cch d dng, v lp trnh web pha my khch java c cng ngh java applet, v lp trnh web pha my khch java c cng ngh servlet/JSP, v lp trnh phn tn java c cng ngh RMI, CORBA, EJB, Web Service. 8. Thng dch Cc chng trnh java cn c thng dch trc khi chy, mt chng trnh java c bin dch thnh m byte code m c lp vi h nn, chng trnh thng dch java s nh x m byte code ny ln mi nn c th, iu ny khin java chm chp i phn no.

III. Cc kiu ng dng Java Vi Java ta c th xy dng cc kiu ng dng sau: 1. ng dng Applets Applet l chng trnh Java c to ra s dng trn Internet thng qua cc trnh duyt h tr Java nh IE hay Netscape. Applet c nhng bn trong trang Web. Khi trang Web hin th trong trnh duyt, Applet s c ti v v thc thi ti trnh duyt. 2. ng dng dng lnh (console) Cc chng trnh ny chy t du nhc lnh v khng s dng giao din ha. Cc thng tin nhp xut c th hin ti du nhc lnh. 3. ng dng ha y l cc chng trnh Java chy c lp cho php ngi dng tng tc qua giao din ha. 4. JSP/Servlet Java thch hp pht trin ng dng nhiu lp. Applet l chng trnh ha chy trn trnh duyt ti my trm. cc ng dng Web, my trm gi yu cu ti my ch. My ch x l v gi kt qu tr li my trm. Cc Java API chy trn my ch chu trch nhim x l ti my ch v tr li cc yu cu ca my trm. Cc Java API chy trn my ch ny m rng kh nng ca cc ng dng Java API chun. Cc ng dng trn my ch ny c gi l cc JSP/Servlet. hoc Applet ti my ch. X l Form ca HTML l cch s dng n gin nht ca JSP/Servlet. Chng cn c th c dng x l d liu, thc thi cc giao dch v thng c thc thi thng qua my ch Web. 5. ng dng c s d liu

Cc ng dng ny s dng JDBC API kt ni ti c s d liu. Chng c th l Applet hay ng dng, nhng Applet b gii hn bi tnh bo mt. 6. ng dng mng Java l mt ngn ng rt thch hp cho vic xy dng cc ng dng mng. Vi th vin Socket bn c th lp trnh vi hai giao thc: UDP v TCP. 7. ng dng nhiu tng Vi Java bn c th xy dng phn tn nhiu tng vi nhiu h tr khc nhau nh: RMI, CORBA, EJB, Web Service 8. ng dng cho cc thit b di ng Hin nay phn ln cc thit b di ng nh: in thoi di ng, my tr gip c nhn u h tr Java. Th nn bn c th xy dng cc ng dng chy trn cc thit b di ng ny. y l mt kiu ng dng kh hp dn, bi v cc thit b di ng ny ngy cng ph bin v nhu cu c cc ng dng chy trn , c bit l cc ng dng mang tnh cht gii tr nh game IV. My o Java (JVM-Java Virtual Machine) My o l mt phn mm m phng mt my tnh tht (my tnh o). N c tp hp cc lnh logic xc nh cc hot ng ca my tnh v c mt h iu hnh o. Ngi ta c th xem n nh mt my tnh tht (my tnh c phn cng o, h iu hnh o). N thit lp cc lp tru tng cho: Phn cng bn di, h iu hnh, m bin dch. Trnh bin dch chuyn m ngun thnh tp cc lnh ca my o m khng ph thuc vo phn cng v h iu hnh c th. Trnh thng dch trn mi my s chuyn tp lnh ny thnh chng trnh thc thi. My o to ra mt mi trng bn trong thc thi cc lnh bng cch: 1 Np cc file .class

2 Qun l b nh 3 Dn rc Vic khng nht qun ca phn cng lm cho my o phi s dng ngn xp lu tr cc thng tin sau: 1 Cc Frame cha cc trng thi ca cc phng thc. 2 Cc ton hng ca m bytecode. 3 Cc tham s truyn cho phng thc. 4 Cc bin cc b. Khi JVM thc thi m, mt thanh ghi cc b c tn Program Counter c s dng. Thanh ghi ny tr ti lnh ang thc hin. Khi cn thit, c th thay i ni dung thanh ghi i hng thc thi ca chng trnh. Trong trng hp thng thng th tng lnh mt ni tip nhau s c thc thi. Mt khi nim thng dng khc trong Java l trnh bin dch Just In Time-JIT. Cc trnh duyt thng dng nh Netscape hay IE u c JIT bn trong tng tc thc thi chng trnh Java. Mc ch chnh ca JIT l chuyn tp lnh bytecode thnh m my c th cho tng loi CPU. Cc lnh ny s c lu tr v s dng mi khi gi n.

BI 2 NN TNG CA JAVA I. Tp k t dng trong java Mi ngn ng ni chung, ngn ng lp trnh ni ring u phi xy dng trn mt tp hp ch ci (hay cn gi l bng ch ci), cc k t c nhm li theo mt cch no to thnh cc t, cc t li c nhm li thnh cc cu (trong ngn ng lp trnh gi l cu lnh), mt chng trnh my tnh tnh l mt tp cc cu lnh c b tr theo mt trt t m ngi vit ra chng sp t Ngn ng java c c xy dng trn bng ch ci unicode, do vy ta c th dng cc k t unicode t tn cho cc nh danh. II. T kho ca Java Mi ngn ng lp trnh c mt tp cc t kho, ngi lp trnh phi s dng t kho theo ng ngha m ngi thit k ngn ng ra, ta khng th nh ngha li ngha ca cc t kho, nh s dng n t tn bin, hm.. Sau y l mt s t kho thng gp: T kha abstract boolean break byte case cast catch char class Kiu d liu logic c s dng kt thc vng lp hoc cu trc switch kiu d liu s nguyn c s dng trong ln switch Cha c s dng ( dnh cho tng lai) c s dng trong x l ngoi l kiu d liu k t Dng khai bo lp M t S dng khai bo lp, phng thc tru tng

const continue default do double else extends false final finally float for goto if implements import instanceof interface long native new null package private protected public

Cha c dng c dng trong vng lp bt u mt vng lp mi c s dng trong lnh switch c dng trong vng lp iu kin sau kiu d liu s thc kh nng la chn th hai trong cu lnh if ch rng mt lp c k tha t mt lp khc Ga tr logic Dng khai bo hng s, phng thc khng th ghi , hoc lp khng th k tha phn cui ca khi x l ngoi l kiu s thc Cu lnh lp Cha c dng Cu lnh la chn ch rng mt lp trin khai t mt giao din Khai bo s dng th vin kim tra mt i tng c phi l mt th hin ca lp hay khng s dng khai bo giao din kiu s nguyn Khai bo phng thc c vit bng ngng ng bin dch C++ to mt i tng mi mt i tng khng tn ti Dng khai bo mt gi c t truy xut c t truy xut c t truy xut

return short static super switch this throw throws true try void while

Quay t phng thc v ch gi n kiu s nguyn Dng khai bo bin, thuc tnh tnh Truy xut n lp cha lnh la chn m ch chnh lp Nm ra ngoi l Khai bo phng thc nm ra ngoi l Gi tr logic s dng bt ngoi l Dng khai bo mt phng thc khng tr v gi tr Dng trong cu trc lp

synchronized mt phng thc c quyn truy xut trn mt i tng

III. nh danh (tn) Tn dng xc nh duy nht mt i lng trong chng trnh. Trong java tn c t theo quy tc sau: - Khng trng vi t kho - Khng bt u bng mt s, tn phi bt u bng k t hoc bt u bng k $,_ - Khng cha du cch, cc k t ton hc nh +, -, *,/, %.. - Khng trng vi mt nh danh khc trong cng mt phm vi ch : - Tn nn t sao cho c th m t c i tng trong thc t - Ging nh C/C++, java c phn bit ch hoa ch thng - Trong java ta c th t tn vi di tu - Ta c th s dng cc k t ting vit t tn

Quy c v t tn trong java Ta nn t tn bin, hng, lp, phng thc sao cho ngha ca chng r rng, d hiu, khoa hc v mang tnh c l quc t. Do java c phn bit ch hoa, ch thng nn ta phi cn thn v ch . Sau y l quy c t tn trong java (ch y ch l quy c do vy khng bt buc phi tun theo quy c ny): i vi bin v phng thc th tn bao gi cng bt u bng k t thng, nu tn c nhiu t th ghp li th: ghp tt c cc t thnh mt, ghi t u tin ch thng, vit hoa k t u tin ca mi t theo sau trong tn, v d area, radius, readInteger - i vi tn lp, giao din ta vit hoa cc k t u tin ca mi t trong tn, v d lp WhileTest, Circle Tn hng bao gi cng vit hoa, nu tn gm nhiu t th chng c ni vi hau bi k t ghch di _, v d PI, MAX_VALUE IV. Cu trc mt chng trnh java - Mi ng dng Java bao gm mt hoc nhiu n v bin dch (mi n v bin dch l mt tp tin c phn m rng Java) - Mi n v bin dch bao gm mt hoc nhiu lp - Mi ng dng c lp phi c duy nht mt phng thc main (im bt u ca ng dng) - Mi n v bin dch c nhiu nht mt lp c khai bo l public, nu nh trong n v bin dch c lp public th tn ca n v bin dch phi trng vi tn ca lp public (ging ht nhau c k t hoa ln k t thng) - Bn trong thn ca mi lp ta khai bo cc thuc tnh, phng thc ca lp , Java l ngn ng hng i tng, do vy m lnh phi nm trong lp no . Mi lnh u c kt thc bng du chm phy ;.

Trong ngn ng Java, lp l mt n v mu c cha d liu v m lnh lin quan n mt thc th no . Khi xy dng mt lp, thc cht bn ang to ra mt mt kiu d liu. Kiu d liu mi ny c s dng xc nh cc bin m ta thng gi l i tng. i tng l cc th hin (instance) ca lp. Tt c cc i tng u thuc v mt lp c chung c tnh v hnh vi. Mi lp xc nh mt thc th, trong khi mi i tng l mt th hin thc s. - Khi ban khai bo mt lp, bn cn xc nh d liu v cc phng thc ca lp . V c bn mt lp c khai bo nh sau: C php: class classname { var_datatype variablename; : met_datatype methodname(parameter_list) : } Trong : class - T kho xc nh lp classname - Tn ca lp var_datatype - kiu d liu ca bin variablename - Tn ca bin met_datatype - Kiu d liu tr v ca phng thc

methodname - Tn ca phng thc parameter_list Cc tham s c ca phng thc

- Bn cn c th nh ngha mt lp bn trong mt lp khc. y l lp xp lng nhau, cc th hin (instance) ca lp ny tn ti bn trong th hin ca mt lp che ph chng. N chi phi vic truy nhp n cc thnh phn ca lp bao ph chng. C hai loi lp trong l lp trong tnh static v lp trong khng tnh non static + Lp trong tnh (static) Lp trong tnh c nh ngha vi t kho static. Lp trong tnh c th truy nhp vo cc thnh phn tnh ca lp ph n. + Lp trong khng tnh (non static) Lp bn trong (khng phi l lp trong tnh) c th truy nhp tt c cc thnh phn ca lp bao n, song khng th ngc li.

V. Chng trnh JAVA u tin c th bin dch v chy cc chng trnh java ta phi ci JRE (Java Runtime Enviroment) mi trng thc thi ca java, n bao gm: JVM (Java Virtual Machine) my o java v cc chng trnh java c thng dch v chy trn my o java v tp cc th vin cn thit chy cc ng dng java. B cng c bin dch v thng dch JDK ca Sun Microsystem Sau khi ci t JDK (gi s th mc ci t l C:\JDK1.4) ta s nhn c mt cu trc th mc nh sau:

- bin dch mt chng trnh java sang m byte code ta dng lnh C:\JDK1.4\BIN\javac TnTp.java - thng dch v chy chng trnh ta s dng lnh C:\JDK1.4\BIN\java TnTp bin dch v chy chng trnh Java n gin ta nn thit t hai bin mi trng paht v classpath nh sau: - i vi dng WinNT: + R-Click vo My Computer chn Properties chn Advanced Enviroment Variables

+ Trong phn System variables chn new thm bin mi trng mi, trong hp thoi hin ra g classpath vo Variable Name v .;C:\jdk1.4\lib\tools.jar;C:\jdk1.4\lib\dt.jar;C:\jdk1.4\jre\lib\rt.jar trong variable value (ch khng g du vo, mc ch cho d nhn m thi)

+ Cng trong phn System variables tm n phn path trong danh sch chn edit sa li gi tr hin c, trong value ta thm vo cui ;C:\jdk1.4\bin Cng vic t cc bin mi trng xong, thy c tc dng ca cc bin mi trng ta cn phi khi ng li my - i vi dng Win9X: M tp C:\Autoexec.bat sau thm vo hai dng sau: +classpath=.;C:\jdk1.4\lib\tools.jar;C:\jdk1.4\lib\dt.jar;C:\jdk1.4\jre\lib\rt.ja r + path=;c:\jdk1.4\bin Khi ng li my thy c tc dng ca cc bin mi trng ny V d u tin: chng trnh Hello World (chng trnh khi chy s in ra mn hnh li cho Hello World) Cc bc: M mt chng trnh son tho vn bn h tr asciii, nh notepad, wordpad, EditPlus v g vo cc dng sau:

public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World"); } } Ghi li vi ci tn C:\HelloWorld.java (ch tn tp phi trng vi tn lp, k c ch hoa ch thng, phn m rng l java) - M ca s DOS Prompt + chuyn vo th mc C:\ + G lnh javac HelloWorld.java bin dch chng trnh, nu vic bin dch tp thnh cng (chng trnh khng c li c php) th ta s thu c HelloWorld.class trong cng th mc, nu trong chng trnh cn th trong bc ny ta s nhn c mt thng bo li v lc

li c php

ny tp HelloWorld.class cng khng c to ra

+ G lnh java HelloWorld (ch khng g phn m rng) chy chng trnh HelloWorld. Sau khi thng dch v chy ta nhn c

VI. Ch thch trong chng trnh

Trong java ta c 3 cch ghi ch thch Cch 1: s dng cp /* v */ ngha ca cp ch thch ny ging nh ca C, C++ Cch 2: s dng cp // ngha ca cp ch thch ny ging nh ca C, C++ Cch 3: s dng cp /** v */, y l kiu ch thch ti liu (khng c trong C/C++), n dng to ra ti liu ch thch cho chng trnh. Vi cch th nht v cch ba ta c th vit ch thch trn nhiu dng, vi cch ch thch hai ta ch c th ch thch trn mt dng. Ch : trong java ta c th t ch thch u?, cu tr li l: u c th t c mt du cch th c th t ch thch. VII. Kiu d liu 1. Cc kiu d liu nguyn thu T kho byte short int long float double M t s nguyn mt byte s nguyn ngn s nguyn s nguyn di Kch c (kiu s nguyn) 8 bit 16 bit 32 bit 64 bit (kiu s thc) kiu thc vi chnh 32 bit xc n Double-precision floating point (kiu khc) char kiu k t 16 bit Unicode 0 Unicode Character 216-1 64 bit IEEE754 IEEE754 IEEE75 Float 4 IEEE75 Double 4 -128 -215 -231 -263 127 215-1 231-1 -263-1 Byte Short Integer Long Ti thiu Ti a Lp bao

boolean void

kiu logic -

true hoc false -

Boolean Void

c im ca cc bin c kiu nguyn thy l vng nh ca chng c cp pht phn stack. Do vy vic truy xut vo mt bin kiu nguyn thy rt nhanh. 2. Kiu tham chiu Trong Java c 3 kiu d liu tham chiu Kiu d liu Mng (Array) Lp (Class) Giao din (Interface) M t Tp hp cc d liu cng kiu. L s ci t m t v mt i tng trong bi ton. L mt lp thun tru tng c to ra cho php ci t a tha k trong Java.

c im ca cc bin kiu tham chiu l n cha a ch ca i tng m n tr n. Vng nh ca bin tham chiu c cp pht vng nh stack cn vng nh ca i tng c cp pht vng nh heap. Vic truy xt vo vng nh heap chm hn truy xt vo vng nh stack tuy nhin java c c ch cho php truy cp vo vng nh heap vi tc xp x bng tc truy cp vo vng nh stack.

VIII. Khai bo bin 1. Khai bo bin Tng t ngn ng C/C++, khai bo bin trong java ta s dng c php sau: type name [=InitValue];

trong : type l kiu d liu cu bin name l tn ca bin, tn bin l mt xu k t c t theo quy tc t tn ca java InitValue l gi tr khi to cho bin, y l phn tu chn, nu b qua phn ny th gi tr ban u ca bin c khi to gi tr mc nh Ch : - Nu cn khai bo nhiu bin c cng mt kiu d liu ta c th t cc khai bo cc bin trn mt dng, cc bin ny c phn cch nhau bi du phy - Java s x l cc bin khng c khi u gi tr nh sau: + i vi thuc tnh (bin c khai bo trong phm vi ca lp) th Java s t ng khi gn gi tr cho cc bin theo quy tc sau: + gi tr 0 cho kiu d liu s + false cho kiu logic + k t null (m 0) cho k t + gi tr null cho kiu i tng + i vi cc bin cc b th bin khng c khi gn gi tr mc nh, tuy nhin Java s bo li nu ta s dng mt bin cha c nhn gi tr 2. phm vi bin Mi bin c khai bo ra c mt phm vi hot ng, phm vi ca bin l ni m bin c th c truy cp, iu ny xc nh c tnh thy c v thi gian sng ca bin.

bin phm vi lp l bin c khai bo bn trong lp nhng bn ngoi cc phng thc v hm to, tuy nhin vic khai bo phi xut hin trc khi bin c s dng bin phm vi cc b l bin c khai bo bn trong mt khi, phm vi ca bin tnh t im bin c khai bo cho n cui khi m bin c khai bo V d: { int i=1; // ch c i sn sng s dng { int j=10; // c i v j u sn sng } // ch c i sn sng // j khng sn sng v nm ngoi phm vi } Ch : Ta khng th lm iu sau cho d n c th trong C/C++ {

int i=1; { int i=10;// khng c php v c mt bin cng tn vi n } } nhng ngi thit k java cho rng iu c th gy ln ln, do vy h quyt nh khng cho php che giu mt bin phm vi ln hn. Ch : thi gian sng ca cc i tng khng tun theo quy lut thi gian sng ca cc bin kiu nguyn thu. VII. Mt s php ton trn kiu d liu nguyn thu 1. Php gn C php Bin=BiuThc; Php gn c thc hin bng ton t =, n c ngha l hy tnh ton gi tr biu thc bn phi du gn, sau a gi tr vo nh c tn nm bn tri du gn Ch : + cu lnh gn gm mt du = + kiu ca biu thc bn phi du gn phi tng thch vi kiu d liu ca bin + trong java ta c th thc hin mt dy gn nh sau: i = j = 10;// c i v j u c gi tr 10 2. Ton t ton hc Ngn ng java cng c cc php ton s hc nh cc ngn ng khc: + ( php cng), - ( php tr ), * ( php nhn ),/ ( php chia ), % ( php ton chia ly phn nguyn) Ta m t tm tt cc php ton s hc qua bng tng kt sau:

Php ton + * / %

S dng op1 + op2 op1 - op2 op1 * op2 op1/ op2 op1 % op2 Cng op1 viop2 Tr op1 cho op2 Nhn op1 vi op2 chia op1 cho op2

M t

Tnh phn d ca php chia op1 cho op2

3. Ton t tng, gim Ging nh ngn ng C/C++, java cng c php ton tng, gim, ta c th m t tm tt qua cc bng sau: Php ton ++ ++ --S dng op++ ++op op---op thc cha n c tnh Tng op ln 1 n v, gi tr ca op c tng ln sau khi biu thc cha n c tnh Gim op xung1 n v, gi tr ca op c gim xung trc khi biu thc cha n c tnh Gim op xung1 n v, gi tr ca op c gim xung sau khi biu thc cha n c tnh M t Tng op ln 1 n v, gi tr ca op c tng ln trc khi biu

Ch : nu ton t tng trc, tng sau(gim trc, gim sau) ng mt mnh(khng nm trong biu thc ) th chng hot ng nh nhau, chng ch khc nhau khi chng nm trong biu thc 4. Php ton quan h Php ton quan h bao gi cng cho kt qu boolean, php ton quan h s so snh 2 gi tr, n xc nh mi quan h gia chng, v d! = s tr v true nu 2 ton hng l khc nhau. Ta tm tt cc php ton qua bng sau:

Php ton > >= < <= == !=

S dng op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1! = op2 op1 ln hn op2

Nhn v gi tr true khi op1 ln hn hoc bng op2 op1 nh hn op2 op1 nh hn hoc bng op2 op1 bng op2 op1 khc op2

V d s dng cc php ton quan h public class RelationalDemo { public static void main(String[] args) { // a few numbers int i = 37; int j = 42; int k = 42; System.out.println("Variable values..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" k = " + k); //greater than System.out.println("Greater than..."); System.out.println(" i > j = " + (i > j)); // false System.out.println(" j > i = " + (j > i));// true System.out.println(" k > j = " + (k > j));// false, they are equal

//greater than or equal to System.out.println("Greater than or equal to..."); System.out.println(" i >= j = " + (i >= j));// false System.out.println(" j >= i = " + (j >= i));// true System.out.println(" k >= j = " + (k >= j));// true //less than System.out.println("Less than..."); System.out.println(" i < j = " + (i < j));// true System.out.println(" j < i = " + (j < i));// false System.out.println(" k < j = " + (k < j));// false //less than or equal to System.out.println("Less than or equal to..."); System.out.println(" i <= j = " + (i <= j));// true System.out.println(" j <= i = " + (j <= i));// false System.out.println(" k <= j = " + (k <= j));// true //equal to System.out.println("Equal to..."); System.out.println(" i == j = " + (i == j));// false System.out.println(" k == j = " + (k == j));// true //not equal to System.out.println("Not equal to..."); System.out.println(" i! = j = " + (i! = j));// true System.out.println(" k! = j = " + (k! = j));// false }

} y l u ra ca chng trnh Variable values... i = 37 j = 42 k = 42 Greater than... i > j = false j > i = true k > j = false Greater than or equal to... i >= j = false j >= i = true k >= j = true Less than... i < j = true j < i = false k < j = false Less than or equal to... i <= j = true j <= i = false k <= j = true Equal to... i == j = false k == j = true Not equal to... i! = j = true k! = j = false

5. Php ton logic Java h tr 6 php ton logic c ch ra trong bng sau: Php ton && || ! & | ^ Nhn xt: + Php ton && ( & ) ch nhn gi tr true khi v ch khi c hai ton hng u l true + Php ton || ( | ) ch nhn gi tr false khi v ch khi c hai ton hng l false + Php ton ^ ch nhn gi tr true khi v ch khi hai ton hng khc nhau 6. php ton thao tc trn bit 6.1. Php ton dch bit Ta s m t php ton dch chuyn qua bng sau: Php ton >> << S dng op1 >> op2 op1 << op2 c in bng cc bt 0 Dch chuyn op1 sang tri op2 bit(gi nguyn du ca op1), op2 bit nm bn tri s c in bng cc bt 0 Kt qu Dch chuyn op1 sang phi op2 bit, op2 bit pha bn phi s S dng op1 && op2 op1 || op2 ! op op1 & op2 op1 | op2 op1 ^ op2 khi op1 l true Hoc op1 hoc op2 l true, gi tr ca op2 ch c tnh khi op1 l false op l false C op1 v op2 u l true, gi tr ca op2 lun c tnh k c khi op1 l false Hoc op1 hoc op2 l true, gi tr ca op2 lun lun c tnh k c khi op1 l true Nu op1 khc op2 Nhn v gi tr true khi C op1 v op2 u l true, gi tr ca op2 ch c tnh

>>>

op1>>> op2

Dch chuyn op1 sang phi op2 bit, op2 bit

Sau y l hnh minh ho php ton dch bt

V d: 13>>1=6 v 13=11012 do vy khi dch phi mt bit ta s c 1102=6 5<<1=10 v 5=1012 do vy khi dch tri 1 bit ta s c 10102=10 5<<2=100 v 5=1012 do vy khi dch tri 2 bit ta s c 101002=100 Nhn xt: php ton dch tri mt bit chnh l php nhn vi 2, cn dch phi chnh l php chia cho 2 6.2. Php ton logic trn bit

Cc php ton thao tc bit cho php ta thao tc trn tng bit ring l trong mt kiu d liu thch hp, cc php ton thao tc bit thc hin i s boolean trn cc bit tng ng ca 2 ton hng to ra kt qu Ta tm tt cc php ton trong bng sau: Php ton & | ^ ~ Php AND op1 0 0 1 1 op2 Result 0 1 0 1 0 0 0 1 S dng op1 & op2 op1 | op2 op1 ^ op2 ~op2 Thc hin Thc hin php and cc bit tng ng ca op1 vi op2 Thc hin php or cc bit tng ng ca op1 vi op2 Thc hin php xor cc bit tng ng ca op1 vi op2 Thc hin php lt cc bit ca op2

Bng gi tr chn l ca cc php ton i s boolean:

Php OR op1 op2 Result 0 0 1 1 0 1 0 1 0 1 1 1

Php XOR op1 op 2 Result

0 0 1 1 op1 0 1

0 1 0 1

0 1 1 0

Php NOT Result 1 0

V d: 1101// 13 & 1100// 12 -----1100// 12 1101// 13 | 1100// 12 -----1101// 13

1101// 13 ^ 1100// 12 -----0001// 1

! 10101=01010 7. Ton t gn tt Ging nh C/C++ java cng c ton t gn, ta tm tt cc ton t gn qua bng sau: Php gn += -= *= /= %= &= |= ^= <<= >>= >>>= S dng op1 += op2 op1 -= op2 op1 *= op2 op1/ = op2 op1 %= op2 op1 &= op2 op1 |= op2 op1 ^= op2 op1 <<= op2 op1 >>= op2 op1 >>>= op2 Tng ng op1 = op1 + op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1/ op2 op1 = op1 % op2 op1 = op1 & op2 op1 = op1 | op2 op1 = op1 ^ op2 op1 = op1 << op2 op1 = op1 >> op2 op1 = op1 >>> op2

8. Th t u tin ca cc php ton Th t u tin ca cc php ton xc nh trnh t tnh ton gi tr ca mt biu thc, java c nhng quy tc ring xc nh trnh t tnh ton ca biu thc, ta phi nh quy tc sau: cc php ton mt ngi bao gi cng c thc hin trc tin trong mt biu thc c nhiu php ton th php ton no c u tin cao hn s c thc hin trc php ton c u tin thp trong mt biu thc c nhiu php ton c u tin ngang nhau th chng s

c tnh theo trnh t t tri qua phi Ta c bng tm tt th t u tin ca cc php ton trong bng sau: postfix operators unary operators creation or cast multiplicative additive shift relational equality Bitwise AND Bitwise exclusive OR Bitwise inclusive OR Logical AND Logical OR Conditional Assignment []. (params) expr++ expr-++expr --expr +expr -expr ~! new (type)expr */ % +<< >> >>> < > <= >= instanceof ==! = & ^ | && || ?: = += -= *=/ = %= &= ^= |= <<= >>= >>>=

Trong bng trn th t u tin ca cc php ton c gim t trn xung di, trn cng mt hng th chng c u tin ngang nhau. 1. Ton t dy Khng ging nh C/C++, trong java ch duy nht m ta c th t ton t dy l bn trong cp ngoc trn ca cu trc for( s c m t chi tit trong chng sau ) IX. Ton t chuyn kiu 9.1 Chuyn i kiu khng tng minh

Vic chuyn i kiu thng c din ra mt cch t ng trong trng hp biu thc gm nhiu ton hng c kiu d liu khc nhau. iu ny i khi lm cho bn kh ngc nhin v nhn c mt kt qu khng theo mun. V d ta xt on trnh sau: int two=2, three=3; float result=1.5 +three/two; kt qu nhn c ca result l 2.5. iu m bn mong mun l 3.0 ch khng phi l 2.5. Kt qu 2.5 nhn c l do three v two l hai gi tr nguyn nn kt qu ca php chia three/two cho ta mt gi tr nguyn bng 1 ch khng phi l 1.5. ni rng kt qu ca php chia three/two l mt gi tr thc ch khng phi l mt gi tr nguyn th mt trong hai ton hng ca php chia ny phi l mt s thc. Do vy ta cn phi chuyn kiu ca mt trong hai ton hng ny hoc c hai thnh s thc. nhn c kt qu ng trong trng hp ny bn cn vit nh sau: float result=1.5 +(float)three/two; hoc float result=1.5 +three/(float)two; hoc float result=1.5 +(float)three/(float)two; L do m ta vit nh trn l nu trong mt php ton c s tham gia ca nhiu ton hng c kiu khc nhau th java s chuyn kiu t ng cho cc ton hng mt cch t ng theo quy tc sau: byte -> short -> int -> long -> float -> double 9.2. Chuyn i kiu tng minh chuyn i kiu mt cch tng minh ta s dng c php sau: (type) biu_thc; khi gp cu lnh ny java s tnh ton gi tr ca biu thc sau chuyn i kiu gi tr ca biu thc thnh kiu type. V d: (int) 2.5 * 2 = 4

(int) 2.5 * 2.5 = 5 (int)(2.5 * 2.5) = 6 1+(float)5/2=1+5/(float)2=1+(float)5/(float)2=3.5 Ch : 1. 2. Php ton chuyn kiu l php ton c u tin cao, nn (int)3.5*2(int)(3.4*2) Cn ch khi chuyn mt biu thc kiu d liu c min gi tr ln sang mt kiu c min gi tr nh hn. Trong trng hp ny c th bn s b mt thng tin. X. Cc hm ton hc Cc hm ton hc nh sin, cos, sqrt c java vit sn trong lp Math. Lp ny nm trong gi java.lang (gi mc nh) do vy bn khng cn phi thm cu lnh import u chng trnh c th s dng lp ny. Cc hm ny c vit l cc phng thc tnh do vy ta khng cn phi to ra th hin ca lp Math. Bng sau lit k mt s phng thc tnh trong lp Math:

Tn phng thc sin(arg)

M t ngha tnh sin ca arg

Kiu tham s

Kiu tr v

arg l mt biu double thc kiu double th hin mt cung theo radians

cos(arg)

tnh cos ca arg

arg l mt biu double thc kiu double th hin mt cung theo radians

tan(arg)

tnh tang ca arg

arg l mt biu double thc kiu double th hin mt cung theo radians

asin(arg)

tnh sin-1 (arcsin) arg l mt biu double trong h arg thc kiu double radians th hin mt cung theo radians

acos(arg)

tnh

cos-1 arg l mt biu double trong h thc kiu double radians th hin mt cung theo radians

(arccosin) ca arg

atan(arg)

tnh

tan-1 arg l mt biu double trong h thc kiu double radians th hin mt cung theo radians

(arctang) ca arg

atan2 (arg1,arg2)

tnh (arctang) ca arg1/arg2

tan-1 arg1,arg2 l cc double trong h biu double mt radians thc th cung kiu radians hin theo

abs(arg)

tnh tr tuyt i arg l mt biu The same type as ca arg thc kiu int, long, the argument float, hoc double

max (arg1,arg2)

Nhn v gi tr ln arg1, arg2 l mt Nhn v kiu cng

trong hai tham s

biu thc kiu int, kiu vi tham s long, float, hoc double

min (arg1,arg2)

Nhn v gi tr arg1, arg2 l mt Nhn v kiu cng nh trong hai tham biu thc kiu int, kiu vi tham s s long, float, hoc double

ceil(arg)

Nhn v gi tr arg l biu thc double nguyn nh hn kiu hoc bng arg double float hoc

floor(arg)

Nhn v gi tr arg l biu thc double nguyn ln hn kiu hoc bng arg double tr arg l biu thc Nhn v kiu int arg kiu float hoc nu arg kiu float, nhn v kiu long nu double arg kiu float hoc

round(arg)

Tr

gi gn

nguyn

nht, gi tr ny double chnh l gi tr ca arg sau khi lm trn rint(arg) Ging round(arg) sqrt(arg)

nh arg l biu thc double kiu double

tnh cn bc hai arg l biu thc double ca arg kiu double C arg1 v arg2 l double cc biu thc kiu

pow (arg1,arg2)

tnh arg1arg2

double exp(arg) tnh earg arg l biu thc double kiu double log(arg) tnh logarithm s arg l biu thc double e ca arg random() kiu double double

Nhn v mt s Khng c tham s gi [0, 1) ngu nhin nm trong khon

V d v cc hm ton hc trong lp Math, bn hy g on chng trnh sau v cho chy th thy c kt qu tnh ton ca cc hm ton hc. XI. Cc php ton trn kiu k t i vi kiu k t ta c th thc hin cc php ton s hc (nh: +, -, *,/ ) v cc php ton quan h. V d: char kt1=A; char kt2=tk1+a;// kt2 nhn k t B char kt3=(char)33*2;// kt3 nhn k t B (kt1>kt2)= false; (kt2=kt3)= false;

BI 3 IU KHIN LUNG CHNG TRNH Chng trnh l mt dy cc lnh c b tr thc hin theo mt trnh t no , nhng i khi ta mun iu khin lung thc hin ca chng trnh tu thuc vo iu kin g . Ngn ng lp trnh java cung cp mt s pht biu cho php ta iu khin lung thc hin ca chng trnh, chng c lit k trong bng sau: Kiu lnh Lp Quyt nh X l li R nhnh I. cu trc r nhnh 1.1. pht biu if a) dng khuyt C php if(Boolean-expression) statement; s hot ng ca cu trc if thiu c m ta qua s sau: while, do-while, for if-else, switch-case try-catch-finally, throw break, continue, label:, return T kho

b) dng C php if(Boolean-expression) statement1; else statement2; s hot ng ca cu trc if thiu c m ta qua s sau:

1.2. biu thc iu kin C php: Variable=booleanExpression? true-result-expression: false-result-expression; 1.3. cu trc switch a) Dng khuyt C php switch(biu_thc) { case gt_1: lnh 1; [ break;] case gt_2: lnh 2; [ break;] case gt_n: lnh n; [ break;]

} Sau y l s khi m t s hot ng ca cu trc r nhnh switch dng thiu b) Dng C php switch(biu_thc) { case gt_1: lnh 1; [ break;] case gt_2: lnh 2; [ break;] case gt_n: lnh n; [ break;] default: lnh n+1; } Sau y l s khi m t s hot ng ca cu trc switch dng Ch : - biu_thc phi l mt biu thc c kiu char, byte, short, int nhng khng th l kiu long, nu biu_thc c kiu khc vi cc kiu lit k trn th java s a ra mt thng bo li. - Nu biu_thc bng gi tr ca gt_i th cc lnh t lnh i cho n lnh n nu khng c default (lnh n+1 nu c default) s c thc hin. - Cu lnh break thot ra khi cu trc switch. S khi m t s hot ng ca cu trc switch trong trng hp c lnh break

1.4 Ton t iu kin Ton t iu kin l mt loi ton t c bit v n gm ba thnh phn cu thnh biu thc iu kin. hay ni cch khc ton t iu kin l ton t 3 ngi. C php : biu thc 1? biu thc 2 : biu thc 3; Trong biu thc 1: Biu thc 1 l mt biu thc logic. Tc l n tr tr v gi tr True hoc False biu thc 2: Gi tr tr v nu biu thc 1 nhn gi True. biu thc 3: Gi tr tr v nu biu thc 1 nhn gi tr False Ch : Kiu gi tr ca biu thc 2 v biu thc 3 phi tng thch vi nhau. V d: on biu thc iu kin sau tr v gi tr a l s chn nu nh gi tr ca bin a l s chn, ngc li tr v gi tr a l s l nu nh gi tr ca bin a l s l. String result=a%2==0 ? a l s chn : a l s l;

II. Cu trc lp while v do-while 1. Lp kim tra iu kin trc Ta c th s dng cu trc while thc thi lp i lp li mt lnh hoc mt khi lnh trong khi iu kin ng C php:

while (BooleanExpression) { statement; } ta c th thy c lung thc hin ca chng trnh thng qua s khi sau:

trc tin pht biu while s tnh gi tr ca biu thc logic, nu gi tr ca biu thc logic l ng th cu lnh trong thn ca while s c thc hin, sau khi thc hin xong n tnh li gi tr ca biu thc logic, nu gi tr ng n li tip tc thc hin lnh trong thn while cho n khi gi tr ca biu thc sai. V d: public class WhileDemo { public static void main(String[] args) { String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); while (c! = 'g') { copyToMe.append(c); c = copyFromMe.charAt(++i); } System.out.println(copyToMe); }

} Ch : + biu thc bn trong cp ngoc trn phi l mt biu thc logic ( biu thc tr v gi tr true hoc false ) + biu thc iu kin phi nm trong cp ngoc trn + sau t kho while ta ch c th t c duy nht mt lnh, do vy c th thc hin nhiu tc v sau while ta phi bao chng trong mt khi lnh + bn trong thn ca vng lp while ta nn c lnh lm thay i gi tr ca biu thc logic, nu khng chng ta s ri vo vng lp v hn. + cu lnh trong thn cu trc while c th khng c thc hin ln no (do biu thc lgic ban u c gi tr false ) 2. Lp kim tra iu kin sau C php: do { statement(s); } while (expression); s hot ng ca cu trc ny c th hin qua s sau: Nhn vo s ny ta thy s hot ng ca n nh sau: b1) thc hin lnh b2) sau khi thc hin lnh xong n tnh gi tr ca biu thc logic b3) nu biu thc logic ng n quay tr li b1, nu sai th b4 b4) kt thc vng lp v thc hin lnh sau do-while v d: public class DoWhileDemo {

public static void main(String[] args) { String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer(); int i = 0; char c = copyFromMe.charAt(i); do { copyToMe.append(c); c = copyFromMe.charAt(++i); } while (c! = 'g'); System.out.println(copyToMe); } } Ch : + biu thc bn trong cp ngoc trn phi l mt biu thc logic ( biu thc tr v gi tr true hoc false ) + biu thc iu kin phi nm trong cp ngoc trn + sau t kho do ta c th t c nhiu lnh + bn trong thn ca vng lp do-while ta nn c lnh lm thay i gi tr ca biu thc logic, nu khng chng ta s ri vo vng lp v hn. + cu lnh trong thn cu trc do-while c thc hin t nht mt ln III. Cu trc for y la cu trc lp ph bin nht trong cc ngn ng lp trnh, m ni dung cu vng lp cn phi lp i lp li mt s ln bit trc, c php ca n nh sau:

for (initialization; termination; increment) { statement } Trong : - initialization l gi tr khi to trc khi vng lp bt u, n ch c thc hin duy nht mt ln trc khi vng lp bt u - termination l iu kin dng kt thc qu trnh lp - increment l cu lnh dng iu khin qu trnh lp - statement l cu lnh m ta cn phi thc hin lp i lp li. S khi din gii s hot ng ca cu trc for sau: Nhn xt: + thn ca cu trc lp for ta ch c th t c duy nht mt lnh, do vy c th thc hin nhiu tc v trong thn for ta phi bao chng trong khi lnh + thn vng lp for c th khng c thc hin ln no + cc phn initialization, termination, increment c th khuyt tuy nhin dy phy dnh cho n vn phi c + s ln thc hin initialization=1 + s ln thc hin termination = s ln lp +1 + s ln thc hin increment = s ln lp + ta c th t mt vi khai bo bin trong phn initialization, nh v d sau + ta c th m t cu trc while thng qua cu trc for nh sau for(; Boolean_Expression;) statement; V d: kit k ra 128 cc k t asciii u tin public class ListCharacters { public static void main(String[] args) { for( char c = 0; c < 128; c++)

if (c! = 26 )// ANSI Clear screen System.out.println( "value: " + (int)c + " character: " + c); } }// /:~ Ton t dy v vng lp for Trong bi trc ta nhc n ton t dy (ton t dy l mt dy cc lnh n c cch nhau bi du phy), trong java ch duy nht m ta c th t ton t dy l bn trong cu trc lp for, ta c th t ton t dy c trong phn initialization ln phn increment V d v ton t dy public class CommaOperator { public static void main(String[] args) { for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) { System.out.println("i= " + i + " j= " + j); } } } Kt qu chy chng trnh sau: i= 1 j= 11 i= 2 j= 4 i= 3 j= 6 i= 4 j= 8 IV. Lnh break v continue Bn trong thn ca cc cu trc lp ta c th iu khin lung thc hin bng cch

s dng lnh break v continue, lnh break s chm dt qu trnh lp m khng thc hin nt phn cn li ca cu trc lp, continue s ngng thc thi phn cn li ca thn vng lp v chuyn iu khin v im bt u ca vng lp, thc hin ln lp tip theo, v d sau ch ra cch s dng break v continue bn trong cu trc lp for v while public class BreakAndContinue { public static void main(String[] args) { for(int i = 0; i < 100; i++) { if(i == 74) break;// Out of for loop if(i % 9! = 0) continue;// Next iteration System.out.println(i); } int i = 0; // An "infinite loop": while(true) { i++; int j = i * 27; if(j == 1269) break;// Out of loop if(i % 10! = 0) continue;// Top of loop System.out.println(i); } } } kt qu chy chng trnh sau: 0 9 18 27

36 45 54 63 72 10 20 30 40 Bn trong cu trc lp for gi tr ca i khng th t c gi tr 100 v pht biu break s kt thc vng lp khi i=74 Ch : Java khng c lnh nhy goto, tuy nhin trong java vn c mt vi vt tch ca lnh nhy goto ( kht ting v c coi l ngun sinh cc li ) l lnh break v continue Nhn ca vng lp Trong thc t cc vng lp c th lng vo nhau, mc lng nhau khng hn ch, th th cu hi t ra l lnh break s thot ra khi vng lp no, cu tr li l n thot ra khi vng lp m lnh break c t, th th lm cch no ta c th cho n thot ra khi mt vng lp tu no , cu tr li l java h tr cho ta mt cng c l nhn ca vng lp. Nhn l mt ci tn sau c 2 du chm V d LabelName: Ch duy nht m nhn c ngha l ngay trc lnh lp, ta khng th c bt c mt lnh no nm gia nhn v lnh lp, ta m t s hot ng, cch s dng nhn ca vng lp thng qua v d sau: public class LabeledFor {

public static void (String[] args) { int i = 0; outer:// Can't have statements here for(; true; ) {// infinite loop inner:// Can't have statements here for(; i < 10; i++) { prt("i = " + i); if(i == 2) { prt("continue"); continue; } if(i == 3) { prt("break"); i++;// Otherwise i never // gets incremented. break; } if(i == 7) { prt("continue outer"); i++;// Otherwise i never // gets incremented. continue outer; } if(i == 8) { prt("break outer"); break outer; } for(int k = 0; k < 5; k++) { if(k == 3) {

prt("continue inner"); continue inner; } } } } // Can't break or continue // to labels here } static void prt(String s) { System.out.println(s); } } kt qu chy chng trnh nh sau: i=0 continue inner i=1 continue inner i=2 continue i=3 break i=4 continue inner i=5 continue inner i=6

continue inner i=7 continue outer i=8 break outer

Chng 2 LP TRNH HNG I TNG

Lp l khi nim trng tm ca lp trnh hng i tng, java l ngn ng lp trnh hng i tng, mt chng trnh java gm mt tp cc i tng, cc i tng ny phi hp vi nhau to thnh mt ng dng hon chnh. Cc i tng c m t qua khi nim lp, lp l s m rng khi nim RECORD trong pascal, hay struct ca C, ngoi cc thnh phn d liu, lp cn c cc hm ( phng thc, hnh vi ), ta c th xem lp l mt kiu d liu, v vy ngi ta cn gi lp l kiu d liu i tng. Sau khi nh ngha lp ta c th to ra cc i tng ( bng cch khai bo bin ) ca lp va to, do vy c th quan nim lp l tp hp cc i tng cng kiu.

BI 1 NH NGHA LP I. Khai bo lp 1.1. Mt lp c nh ngha theo mu sau: [pbulic][final][abstract] class <tn_lp>{ // khai bo cc thuc tnh // khai bo cc phng thc } sau u l v d n gin nh ngha lp ngn xp:

Tng qut: mt lp c khai bo dng sau:

[public][<abstract><final>][ class <Tn lp> [extends <Tn lp cha>] [implements <Tn giao din>] { <Cc thnh phn ca lp, bao gm: thuc tnh v phng thc> } Trong : 1) bi mc nh mt lp ch c th s dng bi mt lp khc trong cng mt gi vi lp , nu mun gi khc c th s dng lp ny th lp ny phi c khai bo l lp public. 2) abstract l b t cho java bit y l mt lp tru tng, do vy ta khng th to ra mt th hin ca lp ny 3) final l b t cho java bit y l mt lp khng th k tha 4) class l t kho cho chng trnh bit ta ang khai bo mt lp, lp ny c tn l NameOfClass 5) extends l t kho cho java bit lp ny ny c k tha t lp super 6) implements l t kho cho java bit lp ny s trin khai giao din Interfaces, y l mt dng tng t nh k tha bi ca java. Ch : 1) Thuc tnh ca lp l mt bin c kiu d liu bt k, n c th li l mt bin c kiu l chnh lp 2) Khi khai bo cc thnh phn ca lp (thuc tnh v phng thc) c th dng mt trong cc t kho private, public, protected gio hn s truy cp n thnh truy lp. cc thnh phn protected tng t nh cc thnh phn private, nhng c th cp vo cc thnh phn phn private t bn ngoi . lp cc thnh phn private ch c th s dng c bn trong lp, ta khng th Cc thnh phn public c th truy cp c c bn trong lp ln bn ngoi

truy

cp

bt

lp

con

no

tha

n.

Nu mt thnh phn ca lp khi khai bo m khng s dng mt trong 3 b t protected, private, public th s truy cp l bn b, tc l thnh phn ny c th truy cp c t bt c lp no trong cng gi vi lp . 3) Cc thuc tnh nn mc truy cp private m bo tnh du kn v lc bn ngoi phm vi ca lp c th truy cp c n thnh phn private ny ta phi to ra cc phng thc phng thc get v set. 4) Cc phng thc thng khai bo l public, chng c th truy cp t bt c u. 5) Trong mt tp chng trnh (hay cn gi l mt n v bin dch) ch c mt lp c khai bo l public, v tn lp public ny phi trng vi tn ca tp k c ch hoa, ch thng - Khai bo thuc tnh Tr li lp Stack public class Stack { private Vector items; // a method with same name as a member variable public Vector items() { ... } } Trong lp Stack trn ta c mt thuc tnh c nh ngha nh sau: private Vector items; Vic khai bo nh trn c gi l khai bo thuc tnh hay cn gi l bin thnh vin lp

Tng qut vic khai bo mt thuc tnh c vit theo mu sau:

Trong : accessLevel c th l mt trong cc t public, private, protected hoc c th b trng, ngha ca cc b t ny c m t phn trn static l t kho bo rng y l mt thuc tnh lp, n l mt thuc tnh s transient v volatile cha c dng type l mt kiu d liu no dng chung cho c lp, n khng l ca ring mt i tng no.

name l tn ca thuc tnh Ch : Ta phi phn bit c vic khai bo nh th no l khai bo thuc tnh, khai bo th no l khai bo bin thng thng? Cu tr li l tt c cc khai bo bn trong thn ca mt lp v bn ngoi tt c cc phng thc v hm to th l khai bo thuc tnh, khai bo nhng ch khc s cho ta bin. - Khai bo phng thc Trong lp Stack trn ta c phng thc push dng y mt i tng vo nh ngn xp, n c nh ngha nh sau:

Cng ging nh mt lp, mt phng thc cng gm c 2 phn: phn khai bo v

phn thn - Phn khai bo gm c nhng phn sau( chi tit ca khai bo c m t sau):

- Phn thn ca phng thc gm cc lnh m t hnh vi ca phng thc, cc hnh vi ny c vit bng cc lnh ca java. II. Chi tit v khai bo mt phng thc 1. Tng qut mt phng thc c khai bo nh sau: accessLevel static abstract final native synchronized returnType MethodName throws exception Trong : - accessLevel c th l mt trong cc t kho public, private, protected hoc b trng, ngha ca cc b t ny c m t trong phn khai bo lp - static l t kho bo cho java bit y l mt phng thc lp - abstract t kho cho bit y l mt lp tru tng, n khng c ci t. - final y l t kho bo cho java bit y l phng thc khng th ghi t lp //m t mc truy cp n phng thc //y l phng thc lp //y l phng thc khng c ci t //phng thc ny khng th ghi //phng thc ny c vit trong mt ngn ng khc //y l phng thc ng b //gi tr tr v ca phng thc //tn ca phng thc //khai bo cc ngoi l c th c nem ra t phng thc

con - native y l t kho bo cho java bit phng thc ny c vit bng mt ngn ng lp trnh no khng phi l java ( thng c vit bng C/C++) - synchronized y l mt phng thc ng b, n rt hu ch khi nhiu phng thc cng truy cp ng thi vo ti nguyn min gng - returnType l mt kiu d liu, y l kiu tr v ca phng thc, khi phng thc khng tr v d liu th phi dng t kho void - MethodName l tn ca phng thc, tn ca phng thc c t theo quy tc t tn ca java - throws l t kho dng khai bo cc ngoi l c th c nm ra t phng thc, theo sau t kho ny l danh sch cc ngoi l c th c phng thc ny nm ra Ch : 1) Nu trong lp c t nht mt phng thc tru tng th lp phi l lp tru tng 2) khng c thuc tnh tru tng 3) ta khng th to i tng ca lp tru tng 4) khc vi ngn ng C/C++, java bt buc bn phi khai bo gi tr tr v cho phng thc, nu phng thc khng tr v d liu thi dng t kho void (trong C/C++ khi ta khng khai bo gi tr tr v th mc nh gi tr tr v l int) 2. Nhn gi tr tr v t phng thc Ta khai bo kiu gi tr tr v t lc ta khai bo phng thc, bn trong thn ca phng thc ta phi s dng pht biu return value; nhn v kt qu, nu hm c khai bo kiu void th ta ch s dng pht biu return; mnh return i khi cn c dng kt thc mt phng thc. 3. Truyn tham s cho phng thc

Khi ta vit cc phng thc, mt s phng thc yu cu phi c mt s tham s, cc tham s ca mt phng thc c khai bo trong li khai bo phng thc, chng phi c khai bo chi tit c bao nhiu tham s, mi tham s cn phi cung cp cho chng mt ci tn v kiu d liu ca chng. V d: ta c mt phng thc dng tnh tng ca hai s, phng thc ny c khai bo nh sau: public double tongHaiSo(double a, double b){ return (a + b); } 1. Kiu tham s Trong java ta c th truyn vo phng thc mt tham s c kiu bt k, t kiu d liu nguyn thu cho n tham chiu i tng. 2. Tn tham s Khi bn khai bo mt tham s truyn vo phng thc th bn phi cung cp cho n mt ci tn, tn nay c s dng bn trong thn ca phng thc tham chiu n tham s c truyn vo. Ch : tn ca tham s c th trng vi tn ca thuc tnh, khi tn ca tham s s che i tn ca phng thc, bi vy bn trong thn ca phng thc m c tham s c tn trng vi tn ca thuc tnh, th khi nhc n ci tn c ngha l nhc n tham s. 3. Truyn tham s theo tr Khi gi mt phng thc m tham s ca phng thc c kiu nguyn thu, th bn sao gi tr ca tham s thc s s c chuyn n phng thc, y l c tnh truyn theo tr ( pass- by value ), ngha l phng thc khng th thay i gi tr ca cc tham s truyn vo. Ta kim tra iu ny qua v d sau:

public class TestPassByValue { public static void test(int t) { t++; System.out.println("Gia tri ca t bi?n trong ham sau khi tang len 1 la " + t); } public static void main(String[] args) { int t = 10; System.out.println("Gia tri ca t tru?c khi gi ham = " + t); test(t); System.out.println("Gia tri ca t truoc khi gi ham = " + t); } } ta se nhn c kt qu ra nh sau: Gia tri ca t truoc khi gi ham = 10 Gia tri ca t bn trong ham sau khi tang len 1 la 11 Gia tri ca t truoc khi gi ham = 10 4. Thn ca phng thc Trong v d sau thn ca phng thc isEmpty v phng thc pop c in m v c mu class Stack { static final int STACK_EMPTY = -1; Object[] stackelements; int topelement = STACK_EMPTY;

... boolean isEmpty() { if (topelement == STACK_EMPTY) return true; else return false; } Object pop() { if (topelement == STACK_EMPTY) return null; else { return stackelements[topelement--]; } } III. T kho this Thng thng bn trong thn ca mt phng thc ta c th tham chiu n cc thuc tnh ca i tng , tuy nhin trong mt s tnh hung c bit nh tn ca tham s trng vi tn ca thuc tnh, lc ch cc thnh vin ca i tng ta dng t kho this, t kho this dng ch i tng ny. V d sau ch ra cho ta thy trong tnh hung ny bt buc phi dng t kho this v tn tham s ca phng thc to dng li trng vi tn ca thuc tnh class HSBColor { int hue, saturation, brightness; HSBColor (int hue, int saturation, int brightness) { this.hue = hue; this.saturation = saturation; this.brightness = brightness;

} IV. T kho super Khi mt lp c k tha t lp cha trong c lp cha v lp con u c mt phng thc trng tn nhau, th th lm th no c th gi phng thc trng tn ca lp cha, java cung cp cho ta t kho super dng ch i tng ca lp cha Ta xt v d sau class ASillyClass { boolean aVariable; void aMethod() { aVariable = true; } } class ASillierClass extends ASillyClass { boolean aVariable; void aMethod() { aVariable = false; super.aMethod(); System.out.println(aVariable); System.out.println(super.aVariable); } } trong v d trn ta thy trong lp cha c phng thc tn l aMethod trong lp con cng c mt phng thc cng tn, ta cn thy c hai lp ny cng c mt thuc tnh tn aVariable c th truy cp vo cc thnh vin ca lp cha ta phi dng t kho super.

Ch : ta khng th dng nhiu t kho ny ch lp ng, lp c chng hn vit nh sau l sai: super.super.add(1,4); V. S dng lp Sau khi khao mt mt lp ta c th xem lp nh l mt kiu d liu, nn ta c th to ra cc bin, mng cc i tng, vic khai bo mt bin, mng cc i tng cng tng t nh khai bo mt bin, mng ca kiu d liu nguyn thu Vic khai bo mt bin, mng c khai bo theo mu sau: Tn_Lp tn_bin; Tn_Lp tn_mang[kch thc mng]; Tn_Lp[kch thc mng] tn_mang; V bn cht mi i tng trong java l mt con tr ti mt vng nh, vng nh ny chnh l vng nh dng lu tr cc thuc tnh, vng nh dnh cho con tr ny th c cp pht trn stack, cn vng nh dnh cho cc thuc tnh ca i tng ny th c cp pht trn heap. VI. iu khin vic truy cp n cc thnh vin ca mt lp Khi xy dng mt lp ta c th hn ch s truy cp n cc thnh vin ca lp, t mt i tng khc. Ta tm tt qua bng sau: T kho Truy cp trong chnh lp private protected public X X X Truy cp Truy cp trong lp trong lp con cng con khc gi X X gi X X X X X Truy cp trong Truy cp trong

lp khc cng gi lp khc khc gi

default

Trong bng trn th X th hin cho s truy cp hp l cn th hin khng th truy cp vo thnh phn ny. 1. Cc thnh phn private Cc thnh vin private ch c th s dng bn trong lp, ta khng th truy cp cc thnh vin private t bn ngoi lp ny. V d class Alpha { private int iamprivate; private void privateMethod() { System.out.println("privateMethod"); } } class Beta { void accessMethod() { Alpha a = new Alpha(); a.iamprivate = 10;// khng hp l a.privateMethod();// khng hp l } } 2. Cc thnh phn protected Cc thnh vin protected s c tho lun trong chng sau

3. Cc thnh phn public Cc thnh vin public c th truy cp t bt c u, ta se xem v d sau: package Greek; public class Alpha { public int iampublic; public void publicMethod() { System.out.println("publicMethod"); } } package Roman; import Greek.*; class Beta { void accessMethod() { Alpha a = new Alpha(); a.iampublic = 10;// hp l a.publicMethod();// hp l } } 4. Cc thnh phn c mc truy xut gi khi ta khai bo cc thnh vin m khng s dng mt trong cc t public, private, protected th java mc nh thnh vin c mc truy cp gi. V d

package Greek; class Alpha { int iampackage; void packageMethod() { System.out.println("packageMethod"); } } package Greek; class Beta { void accessMethod() { Alpha a = new Alpha(); a.iampackage = 10;// legal a.packageMethod();// legal } }

BI 2 KHI U V DN DP I. Phng thc to dng (constructor) 1. Cng dng Phng thc to dng l mt phng thc ca lp ( nhng kh c bit ) thng dng khi to mt i tng mi. Thng thng ngi ta thng s dng hm to khi gn gi tr cho cc thuc tnh ca i tng v c th thc hin mt s cng vic cn thit khc nhm chun b cho i tng mi. 2. cch vit hm to a) c im ca phng thc to dng hm to c tn trng vi tn ca lp hm to khng bao gi tr v kt qu n c java gi t ng khi mt i tng ca lp c to ra hm to c th c i s nh cc phng thc thng thng khc trong mt lp c th c nhiu hm to b) v d v d 1: s dng hm to in ra mn hnh xu Creating Rock class Rock { Rock() {// This is the constructor System.out.println("Creating Rock"); } } public class SimpleConstructor { public static void main(String[] args) { for(int i = 0; i < 10; i++) new Rock();// call constructor }

} v d 2: s dng hm to c i class Rock2 { Rock2(int i) { System.out.println( "Creating Rock number " + i); } } public class SimpleConstructor2 { public static void main(String[] args) { for(int i = 0; i < 10; i++) new Rock2(i);// gi hm to c i } }// /:~ 3. Hm to mc nh Khi xy dng mt lp m khng xy dng hm to th th java s cung cp cho ta mt hm to khng i mc nh, hm to ny thc cht khng lm g c, nu trong lp c t nht mt hm to th hm to mc nh s khng c to ra, khi ta to ra mt i tng th s c mt hm to no c gi, nu trnh bin dch khng tm thy hm to tng ng n s thng bo li, iu ny thng xy ra khi chng ta khng xy dng hm to khng i nhng khi to dng i tng ta li khng truyn vo tham s, nh c ch ra trong v d sau: public class TestPassByValue { public TestPassByValue(String s) {

System.out.println(s); } public static void main(String[] args) { TestPassByValue thu = new TestPassByValue(); // li v lp ny khng c hm to khng i TestPassByValue thu1 = new TestPassByValue("Hello World"); // khng vn g } } 4. Gi hm to t hm to Khi bn vit nhiu hm to cho lp, c i lc bn mun gi mt hm to ny t bn trong mt hm to khc trnh phi vit lp m. c th gi n hm to ta s dng t kho this. C php this(danh sch i s); V d: public class Test { public Test () { System.out.println("hm to khng i"); } public Test ( int i) { this();// gi n hm to khng i ca chnh lp ny }

public static void main(String[] args) { TestPassByValue thu=new TestPassByValue(10); }

} Ch : 1) bn trong cu t ta ch c th gi c ti a mt cu t, iu ny c ngha l ta khng th gi c t 2 cu t tr ln bn trong mt cu t khc nh c ch ra trong v d sau: public class TestPassByValue { public TestPassByValue() { System.out.println("Day la ham tao khong doi"); } public TestPassByValue(int i) { System.out.println("Day la ham tao doi so nguyen"); } public TestPassByValue(String s) { this();// khng th gi hai hm to tr ln bn trong mt hm to this(10); System.out.println("Day la ham tao doi so xau"); } public static void main(String[] args) { TestPassByValue thu = new TestPassByValue();// TestPassByValue thu1 = new TestPassByValue("Hello World");// }

} 2) khi gi mt hm to bn trong mt hm to khc th li gi hm to phi l lnh u tin trong thn phng thc, nn v d sau s b bo li public class Test{ public Test () { System.out.println("Day la ham tao khong doi"); } public Test (String s) { System.out.println("Day la ham tao doi so xau"); this();// gi n cu t phi l lnh u tin } public static void main(String[] args) { Test thu = new Test (Hello World); } } nu cho dch v d trn trnh bin dch s phn nn "Test.java": call to this must be first statement in constructor at line 7, column 9 II. Khi khi u v danh v khi khi u tnh 1. Khi v danh Trong java ta c th t mt khi lnh khng thuc mt phng thc no, ngha l khi ny khng thuc bt c phng thc no k c hm to. khi khi lnh ny c gi l khi v danh, khi v danh ny c java gi thc thi khi mt i tng c to ra, cc khi v danh c gi trc c hm to, thng thng ta hay s dng khi v danh khi u cc thuc tnh ca lp hoc c

s dng khi to cho cc thc tnh ca mt lp v danh(v lp v danh khng c tn do vy ta khng th vit hm to cho lp ny, trong trng hp ny khi v danh l gii php duy nht ) V d: v d ny ta c 3 khi v danh, khi chy java cho thc thi cc khi v danh ny theo th t t trn xung di public class Untitled1{ // hm to public Untitled1 (){ System.out.println ( "Day la ham tao" ); } // bt u khi v danh { System.out.println ( "khoi khoi dau thu 3 "); }// kt thc khi v danh

//bt u khi v danh { System.out.println ( "khoi khoi dau thu 1 "); }//kt thc khi v danh // bt u khi v danh { System.out.println ( "khoi khoi dau thu 2 "); }//kt thc khi v danh public static void main ( String[] args )

{ Untitled1 dt1 = new Untitled1 (); Untitled1 dt2 = new Untitled1 (); } } khi chy chng trnh s cho kt qu sau: khoi khoi dau thu 3 khoi khoi dau thu 1 khoi khoi dau thu 2 Day la ham tao khoi khoi dau thu 3 khoi khoi dau thu 1 khoi khoi dau thu 2 Day la ham tao 2. Khi khi u tnh Khi khi u tnh l mt khi lnh bn ngoi tt c cc phng thc, k c hm to, trc khi lnh ny ta t t kho static, t kho ny bo cho java bit y l khi khi u tnh, khi ny ch c gi 1 ln khi i tng u tin ca lp ny c to ra, khi khi u tnh ny cng c java gi t ng trc bt c hm to no, thng thng ta s dng khi khi u tnh khi u cc thuc tnh tnh ( static ), sau y l mt v d c 1 khi khi u tnh v mt khi v danh, bn thy c s khc nhau gia khi khi u tnh v khi v danh public class Untitled1 {

public Untitled1 () { System.out.println ( "y l hm to" ); } static {// y l khi khi u tnh System.out.println ( "y l khi khi u tnh"); System.out.println("Khi ny ch c gi 1 ln khi th hin u tin ca lp c to ra"); } {//y l khi v danh System.out.println ( "y l khi v danh "); }

public static void main ( String[] args ) { Untitled1 dt1 = new Untitled1 ();/ / to ra th hin th nht ca lp Untitled1 dt2 = new Untitled1 ();/ / to tip th hin th 2 ca lp } } khi cho chy chng trnh ta s c kt qu ra nh sau: y l khi khi u tnh Khi ny ch c gi 1 ln khi th hin u tin ca lp c to ra y l khi v danh

y l hm to y l khi v danh y l hm to Nhn vo kt qu ra ta thy khi khi u tnh ch c java gi thc hin 1 ln khi i tng u tin ca lp ny c to, cn khi v danh c gi mi khi mt i tng mi c to ra III. Dn dp: kt thc v thu rc 1. Phng thc finalize Java khng c phng thc hy b. Phng thc finalize tng t nh phng thc hy b ca C++, tuy nhin n khng phi l phng thc hy b. S d n khng phi l phng thc hy b v khi i tng c hy b th phng thc ny cha chc c gi n. Phng thc ny c gi n ch khi b thu rc ca Java c khi ng v lc i tng khng cn c s dng na. Do vy phng thc finalize c th khng c gi n. 2. C ch gom rc ca java Ngi lp trnh C++ thng s dng ton t new cp pht ng mt i tng, nhng li thng qun gi ton t delete gii phng vng nh ny khi khng cn dng n na, iu ny lm r r b nh i khi dn n chng trnh phi kt thc mt cch bt thng, qu tht u l mt iu ti t. Trong java ta khng cn quan tm n iu , java c mt c ch thu rc t ng, n thng minh bit i tng tng no khng dng na, ri n t ng thu hi vng nh dnh cho i tng . Trong ngn ng C++ khi mt i tng b ph hu, s c mt hm c gi t ng, hm ny c gi l hu t hay cn gi l hm hu, thng thng

hm hm hu mc nh l l dn dp, tuy nhin trong mt s trng hp th hm hu mc nh li khng th p ng c, do vy ngi lp trnh C++, phi vit ra hm hu ring lm vic , tuy nhin java li khng c khi nim hm hu hay mt ci g tng t.

BI 3 CC THNH PHN TNH I. Thuc tnh tnh Thuc tnh c khai bo vi t kho static gi l thuc tnh tnh V d: class Static{ static int i = 10;// y l thuc tnh tnh int j = 10;// y l thuc tnh thng } + Cc thuc tnh tnh c cp pht mt vng b nh c nh, trong java b nh dnh cho cc thuc tnh tnh ch c cp pht khi ln u tin ta truy cp n n. + Thnh phn tnh l chung ca c lp, n khng l ca ring mt i tng no c. + truy xut n thuc tnh tnh ta c th dng mt trong 2 cch sau: tn_lp.tn_thuc_tnh_tnh; tn_i_tng.tn_thuc_tnh_tnh; c 2 cch truy xut trn u c tc dng nh nhau + khi gn gi tr cho thuc tnh tnh thnh phn tnh c khi gn bng mt trong 2 cch sau: S dng khi khi u tnh (xem li bi trc ) S dng khi u trc tip khi khai bo nh v d trn Ch : ta khng th s dng hm to khi u cc thuc tnh tnh, bi v hm to khng phi l phng thc tnh. II. Phng thc tnh Mt phng thc c khai bo l static c gi l phng thc tnh V d:

class Static{ static int i;// y l thuc tnh tnh // phng thc tnh static void println (){ System.out.println ( i ); } } + Phng thc tnh l chung cho c lp, n khng l thuc vo mt i tng c th no + Li gi phng thc tnh xut pht t: tn ca lp: tn_lp.tn_phng_thc_tnh(tham s); tn ca i tng: tn_i_tng. tn_phng_thc_tnh(tham s); + V phng thc tnh l c lp vi i tng do vy bn trong phng thc tnh ta khng th truy cp cc thnh vin khng tnh ca lp , tc l bn trong phng thc tnh ta ch c th truy cp n cc thnh vin tnh m thi. + Ta khng th s dng t kho this bn trong phng thc tnh

BI 4 NP CHNG PHNG THC I. Khi nim v phng thc bi ti Java cho php ta xy dng nhiu phng thc trng tn nhau, trong cng mt lp, hin tng cc phng thc trong mt lp c tn ging nhau c gi l bi ti phng thc. II. Yu cu ca cc phng thc bi ti Do s dng chung mt ci tn cho nhiu phng thc, nn ta phi cho java bit cn phi gi phng thc no thc hin, java da vo s khc nhau v s lng i cng nh kiu d liu ca cc i ny phn bit cc phng thc trng tn . V d: public class OverloadingOrder { static void print(String s, int i) { System.out.println( "String: " + s + ", int: " + i); } static void print(int i, String s) { System.out.println( "int: " + i + ", String: " + s); } public static void main(String[] args) { print("String first", 11); print(99, "Int first"); } }// /:~

Ch : 1) nu nu java khng tm thy mt hm bi ti thch hp th n s a ra mt thng bo li 2) ta khng th s dng gi tr tr v ca hm phn bit s khc nhau gia 2 phng thc bi ti 3) khng nn qu lm dng cc phng thc bi ti v trnh bin dch phi mt thi gian phn on tm ra hm thch hp, iu ny i khi cn dn n sai st 4) khi gi cc hm np chng ta nn c lnh chuyn kiu tng minh trnh bin dch tm ra hm ph hp mt cch nhanh nht 5) trong java khng th nh ngha chng ton t nh trong ngn ng C++, c th y l mt khuyt im, nhng nhng ngi thit k java cho rng iu ny l khng cn thit, v n qu phc tp. BI 5 K THA (INHERITANCE) I. Lp c s v lp dn xut - Mt lp c xy dng thng qua k tha t mt lp khc gi l lp dn xut (hay cn gi l lp con, lp hu du ), lp dng xy dng lp dn xut c gi l lp c s ( hay cn gi l lp cha, hoc lp t tin ) Mt lp dn xut ngoi cc thnh phn ca ring n, n cn c k tha tt c cc thnh phn ca lp cha II. Cch xy dng lp dn xut ni lp b l dn xut ca lp a ta dng t kho extends, c php nh sau: class b extends a{ // phn thn ca lp b

} III. Tha k cc thuc tnh Thc tnh ca lp c s c tha k trong lp dn xut, nh vy tp thuc tnh ca lp dn xut s gm: cc thuc tnh khai bo trong lp dn xut v cc thuc tnh ca lp c s, tuy nhin trong lp dn xut ta khng th truy cp vo cc thnh phn private, package ca lp c s IV. Tha k phng thc Lp dn xut k tha tt c cc phng thc ca lp c s tr: Phng thc to dng Phng thc finalize V. Khi u lp c s Lp dn xut k tha mi thnh phn ca lp c, iu ny dn ta n mt hnh dung, l lp dn xut c cng giao din vi lp c s v c th c cc thnh phn mi b sung thm. nhng thc t khng phi vy, k tha khng ch l sao chp giao din ca lp ca lp c s. Khi ta to ra mt i tng ca lp suy dn, th n cha bn trong n mt s vt con ca lp c s, s vt con ny nh th ta to ra mt s vt tng minh ca lp c s, th th lp c s phi c bo m khi u ng, thc hin iu trng java ta lm nh sau: Thc hin khi u cho lp c s bng cch gi cu t ca lp c s bn trong cu t ca lp dn xut, nu bn khng lm iu ny th java s lm gip ban, ngha l java lun t ng thm li gi cu t ca lp c s vo cu t ca lp dn xut nu nh ta qun lm iu , c th gi cu t ca lp c s ta s dng t kho super V d 1: v d ny khng gi cu t ca lp c s mt cch tng minh class B

{ public B () { System.out.println ( "Ham tao ca lop co so" ); } } public class A extends B { public A () {// khng gi hm to ca lp c s tng minh System.out.println ( "Ham tao ca lop dan xuat" ); } public static void main ( String arg[] ) { A thu = new A (); } } Kt qu chy chng trnh nh sau: Ham tao ca lop co so Ham tao ca lop dan xuat V d 2: v d ny s dng t kho super gi cu t ca lp c s mt cch tng minh class B {

public B () { System.out.println ( "Ham tao ca lop co so" ); } } public class A extends B { public A () { super();// gi to ca lp c s mt cch tng minh System.out.println ( "Ham tao ca lop dan xuat" ); } public static void main ( String arg[] ) { A thu = new A (); } } khi chy chng trnh ta thy kt qu ging ht nh v d trn Ch 1: nu gi tng minh cu t ca lp c s, th li gi ny phi l lnh u tin, nu v d trn i thnh class B { public B () { System.out.println ( "Ham tao ca lop co so" ); }

} public class A extends B { public A () {// Li gi cu t ca lp c s khng phi l lnh u tin System.out.println ("Ham tao ca lop dan xuat"); super (); } public static void main ( String arg[] ) { A thu = new A (); } } nu bin dch on m ny ta s nhn c mt thng bo li nh sau: "A.java": call to super must be first statement in constructor at line 15, column 15 Ch 2: ta ch c th gi n mt hm to ca lp c s bn trong hm to ca lp dn xut, v d ch ra sau b bo li class B { public B () { System.out.println ( "Ham tao ca lop co so" ); }

public B ( int i ) { System.out.println ( "Ham tao ca lop co so" ); } } public class A extends B { public A () { super (); super ( 10 );/ / khng th gi nhiu hn 1 hm to ca lp c s System.out.println ( "Ham tao ca lop dan xuat" ); } public static void main ( String arg[] ) { A thu = new A (); } } 1. Trt t khi u Trt t khi u trong java c thc hin theo nguyn tc sau: java s gi cu t ca lp c s trc sau mi n cu t ca lp suy dn, iu ny c ngha l trong cy ph h th cc cu t s c gi theo trt t t gc xung dn n l

2. Trt t dn dp Mc d java khng c khi nim hu t nh ca C++, tuy nhin b thu rc ca java vn hot ng theo nguyn tc lm vic ca cu t C++, tc l trt t thu rc th ngc li so vi trt t khi u. VI. Ghi phng thc ( Override ) Hin tng trong lp c s v lp dn xut c hai phng thc ging ht nhau ( c tn ln b tham s) gi l ghi phng thc ( Override ), ch Override khc Overload. Gi phng thc b ghi ca lp c s Bn trong lp dn xut, nu c hin tng ghi th phng thc b ghi ca lp c s s b n i, c th gi phng thc b ghi ca lp c s ta dng t kho super truy cp n lp cha, c php sau: super.overriddenMethodName(); Ch : Nu mt phng thc ca lp c s b bi ti ( Overload ), th n khng th b ghi ( Override ) lp dn xut. VI. Thnh phn protected Trong mt vi bi trc ta lm quen vi cc thnh phn private, public, sau khi hc v k tha th t kho protected cui cng c ngha. T kho protected bo cho java bit y l thnh phn ring t i vi bn ngoi nhng li sn sng vi cc con chu VII. T kho final T kho final trong java c nhiu ngha khc nhau, ngha ca n tu thuc vo ng cnh c th, nhng ni chung n mun ni ci ny khng th thay i

c. 1. Thuc tnh final Trong java cch duy nht to ra mt hng l khai bo thuc tnh l final V d: public class A { // nh ngha hng tn MAX_VALUE gi tr 100 static final int MAX_VALUE = 100; public static void main ( String arg[] ) { A thu = new A (); System.out.println("MAX_VALUE= " +thu.MAX_VALUE); } } Ch : 1) khi khai bo mt thuc tnh l final th thuc tnh ny la hng, do vy ta khng th thay i gi tr ca n 2) khi khai bo mt thuc tnh l final th ta phi cung cp gi tr ban u cho n 3) nu mt thuc tnh va l final va l static th n ch c mt vng nh chung duy nht cho c lp 2. i s final Java cho php ta to ra cc i final bng vic khai bo chng nh vy bn trong danh sch i, ngha l bn trong thn ca phng php ny, bt c c gng no thay i gi tr ca i u gy ra li lc dch V d sau b bo li lc dch v n c gng thay i gi tr ca i final public class A

{ static public void thu ( final int i ) { i=i+1;//khng cho php thay i gi tr ca tham s final System.out.println ( i );; } public static void main ( String arg[] ) { int i = 100; thu ( i ); } } chng trnh ny s b bo li: "A.java": variable i might already have been assigned to at line 5, column 9 3. Phng thc final Mt phng thc bnh thng c th b ghi lp dn xut, i khi ta khng mun phng thc ca ta b ghi lp dn xut v l do g , mc ch ch yu ca cc phng thc final l trnh ghi , tuy nhin ta thy rng cc phng thc private s t ng l final v chng khng th thy c trong lp dn xut ln chng khng th b ghi , nn cho d bn c cho mt phng thc private l final th bn cng ch thy mt hiu ng no 4. Lp final Nu bn khng mun ngi khc k tha t lp ca bn, th bn hy dng t kho final ngn cn bt c ai mun k tha t lp ny. Ch : do mt lp l final (tc khng th k tha )do vy ta khng th no ghi

cc phng thc ca lp ny, do vy ng c gng cho mt phng thc ca lp final l final

BI 6 LP C S TRU TNG Mt lp c s tru tng l mt lp ch c dng lm c s cho cc lp khc, ta khng th to ra th hin ca lp ny, bi v n c dng nh ngha mt giao din chung cho cc lp khc. Phng thc tru tng Mt lp tru tng c th cha mt vi phng thc tru tng, do lp tru tng ch lm lp c s cho cc lp khc, do vy cc phng thc tru tng cng khng c ci t c th, chng ch gm c khai bo, vic ci t c th s dnh cho lp con 1. Ch : 1) nu trong lp c phng thc tru tng th lp phi c khai bo l tru tng 2) nu mt lp k tha t lp tru tng th: hoc chng phi ghi tt c cc phng thc o ca lp cha, hoc lp phi l lp tru tng 3) khng th to ra i tng ca lp tru tng

BI 7 A HNH THI a hnh thi trong lp trnh hng i tng cp n kh nng quyt nh trong lc thi hnh (runtime) m no s c chy, khi c nhiu phng thc trng tn nhau nhng cc lp c cp bc khc nhau. Ch : kh nng a hnh thi trong lp trnh hng i tng cn c gi vi nhiu ci tn khc nhau nh: tng ng bi, kt ghp ng,.. a hnh thi cho php cc vn khc nhau, cc i tng khc nhau, cc phng thc khc nhau, cc cch gii quyt khc nhau theo cng mt lc chung. Cc bc to a hnh thi: 1. Xy dng lp c s ( thng l lp c s tru tng, hoc l mt giao din), lp ny s c cc lp con m rng( i vi lp thng, hoc lp tru tng), hoc trin khai chi tit ( i vi giao din ). 2. 2. Xy dng cc lp dn xut t lp c s va to. trong lp dn xut ny ta s ghi cc phng thc ca lp c s( i vi lp c s thng), hoc trin khai chi tit n ( i vi lp c s tru tng hoc giao din). 3. Thc hin vic to khun xung, thng qua lp c s, thc hin hnh vi a hnh thi Khi nim v to khun ln, to khun xung Hin tng mt i tng ca lp cha tham tr n mt i tng ca lp con th c gi l to khun xung, vic to khun xung lun c java chp thun, do vy khi to khun xung ta khng cn phi p kiu tng minh. Hin tng mt i tng ca lp con tham tr ti mt i tng ca lp cha th c gi l to khun ln, vic to khun ln l an ton, v mt i tng ca lp con cng c y cc thnh phn ca lp cha, tuy nhin vic to khun ln s b bo li nu nh ta khng p kiu mt cch tng minh.

BI 8 GIAO DIN, LP TRONG, GI Giao din l mt khi nim c java a ra vi 2 mc ch chnh: to ra mt lp c s thun o, mt lp khng c bt c hm no c ci t Thc hin hnh vi tng t nh k tha bi, bi trong java khng c khi nim k tha bi, nh ca C++ Lp trong cho ta mt cch thc tinh vi che giu m mt cch ti a, trong java ta c th nh ngha mt lp bn trong mt lp khc, thm ch ta cn c th to lp trong, bn trong thn ca mt phng thc, iu ny cho php ta c th to ra cc lp cc b, ch c s dng ni b bn trong mt n v . Ta khng th to ra mt lp trong, trong ngn ng C++ I. Giao din T kho interface a khi nim abstract i xa thm mt bc na. Ta c th ngh n nh l mt lp abstract thun tu, n cho php ta to ra mt lp thun o, lp ny ch gm tp cc giao din cho cc lp mun dn xut t n, mt interface cng c th c cc trng, tuy nhin java t ng lm cc trng ny thnh static v final to ra mt interface, ta dng t kho interface thay v t kho class. Mt interface gm c 2 phn: phn khai bo v phn thn, phn khai bo cho bit mt s thng tin nh: tn ca interface, n c k tha t mt giao din khc hay khng. Phn thn cha cc khai bo hng, khai bo phng thc ( nhng khng c ci t). Ging nh mt lp ta cng c th thm b t public vo trc nh ngha ca interface. Sau y l hnh nh ca mt interface.

Nhng do java t ng lm cc trng thnh final nn ta khng cn thm b t ny, do vy ta c th nh ngha li giao din nh sau: Nhng do java t ng lm cc trng thnh final nn ta khng cn thm b t ny public interface StockWatcher { final String sunTicker = "SUNW"; final String oracleTicker = "ORCL"; final String ciscoTicker = "CSCO"; void valueChanged(String tickerSymbol, double newValue); } 1. Phn khai bo ca giao din Tng qut phn khai bo ca mt giao din c cu trc tng qut nh sau: Public interface InterfaceName Extends SuperInterface { //giao din ny l cng cng //tn ca giao din //giao din ny l m rng ca 1 giao din khc

InterfaceBody }

//thn ca giao din

Trong cu trc trn c 2 phn bt buc phi c l phn interface v InterfaceName, cc phn khc l tu chn. 2. Phn thn Phn thn khai bo cc cc hng, cc phng thc rng ( khng c ci t ), cc phng thc ny phi kt thc vi du chm phy ;, bi v chng khng c phn ci t Ch : 1) Tt c cc thnh phn ca mt giao din t ng l public do vy ta khng cn phi cho b t ny vo. 2) Java yu cu tt c cc thnh phn ca giao din phi l public, nu ta thm cc b t khc nh private, protected trc cc khai bo th ta s nhn c mt li lc dch 3) Tt c cc trng t ng l final v static, nn ta khng cn phi cho b t ny vo. 3. Trin khai giao din Bi mt giao din ch gm cc m t chng khng c phn ci t, cc giao din c nh ngha cho cc lp dn xut trin khai, do vy cc lp dn xut t lp ny phi trin khai y tt c cc khai bo bn trong giao din, trin khai mt giao din bn bao gm t kho implements vo phn khai bo lp, lp ca bn c th trin khai mt hoc nhiu giao din ( hnh thc ny tng t nh k tha bi ca C++) V d public class StockApplet extends Applet implements StockWatcher {

.. . public void valueChanged(String tickerSymbol, double newValue) { if (tickerSymbol.equals(sunTicker)) { .. . } else if (tickerSymbol.equals(oracleTicker)) { .. . } else if (tickerSymbol.equals(ciscoTicker)) { .. . } } } Ch : 1) Nu mt lp trin khai nhiu giao din th cc giao din ny c lit k cch nhau bi du phy , 2) Lp trin khai giao din phi thc thi tt c cc phng thc c khai bo trong giao din, nu nh lp khng trin khai, hoc trin khai khng ht th n phi c khai bo l abstract 3) Do giao din cng l mt lp tru tng do vy ta khng th to th hin ca giao din 4) Mt lp c th trin khai nhiu giao din, do vy ta c li dng iu ny thc hin hnh vi k tha bi, vn khng c java h tr 5) Mt giao din c th m rng mt giao din khc, bng hnh thc k tha II. Lp trong C th t mt nh ngha lp ny vo bn trong mt lp khc. iu ny c gi l lp trong. Lp trong l mt tnh nng c gi tr v n cho php bn gp nhm cc lp v mt logic thuc v nhau v kim sot tnh thy c ca cc

lp ny bn trong lp khc. Tuy nhin bn phi hiu rng lp trong khng phi l l hp thnh V d: public class Stack { private Vector items; .. .//code for Stack's methods and constructors not shown... public Enumeration enumerator() { return new StackEnum(); } class StackEnum implements Enumeration { int currentItem = items.size() - 1; public boolean hasMoreElements() { return (currentItem >= 0); } public Object nextElement() { if (!hasMoreElements()) throw new NoSuchElementException(); else return items.elementAt(currentItem--); } } } Lp trong rt hu hiu khi bn bn mun to ra cc lp iu hp ( c bn k khi ni v thit k giao din ngi dng )

Bi 9 MNG, XU K T, TP HP I. Mng 1. Mng 1 chiu a) Khai bo C php khai bo: - KDL tn_mng[];//Khai bo mt con tr mng - KDL []tn_mng;//nh trn - KDL tn_mng[] = new KDL[spt];//To ra mt mng c spt phn t Trong c php trn th: KDL l mt kiu d liu bt k nh: kiu nguyn thy, kiu i tng n xc nh kiu d liu ca tng phn t ca mng. Spt l s phn t ca mng. Ch : Mng trong Java l mt i tng Cng nh cc i tng khc, mng phi c to ra bng ton t new nh sau: Tn_mng=new KDL[spt]; Khi mng c to ra th mi phn t ca mng s nhn mt gi tr mc nh, quy tc khi to gi tr cho cc phn t ca mng cng chnh l quy tc khi u gi tr cho cc thuc tnh ca i tng, tc l mi phn t ca mng s nhn gi tr: + 0 nu KDL l kiu s + \0 nu KDL l k t + false nu KDL l boolean + null nu KDL l mt lp no . V d 1. Khai bo mt mng s nguyn gm 100 phn t Cch 1: int mangInt[];//Khai bo mt con tr n mng cc s nguyn

mangInt=new int[100];//To ra mng Cch 2: int mangInt[]=new int[100]; V d 2: Gi s ta c lp SinhVien c nh ngha, hy khai bo mt mng gm 100 i tng ca lp SinhVien SinhVien arraySinhVien[]=new SinhVien[100]; Ch : Lc ny mi phn t ca mng arraySinhVien l mt con tr ca lp SinhVien v hin gi mi phn t ca mng ang tr n gi tr null. khi to tng phn t ca mng ta phi lm nh sau: arraySinhVien[0]=new SinhVien(sv01, Nguyn Vn An, Hng Yn); arraySinhVien[1]=new SinhVien(sv02, Nguyn Th Bnh, Bc Giang); . arraySinhVien[99]=new SinhVien(sv100, o Th Mn, H Nam); Ngoi cch khai bo trn Java cn cho php ta kt hp c khai bo v khi gn cc phn t ca mng theo cch sau: int[] mangInt = {1, 3, 5, 7, 9}; To ra mt mng gm 5 phn t, cc phn t ca mng ln lt c gn cc gi tr l: 1, 3, 5, 7, 9 SinhVien[] mangSinhVien = { new SinhVien(sv01, Nguyn Vn A, HY), new SinhVien(sv02, Nguyn Th B, HN), new SinhVien(sv03, Th Q, BG), null }; Khai bo mt mng gm 4 phn t, gi tr ca cc phn t ln lt c khi gn nh sau:

mangSinhVien [0]=new SinhVien(sv01, Nguyn Vn A, HY) mangSinhVien [1]=new SinhVien(sv02, Nguyn Th B, HN) mangSinhVien [2]=new SinhVien(sv03, Th Q, BG) mangSinhVien [3]=null b) Truy xt n cc phn t ca mng mt chiu truy xut n phn t th ind ca mng ta s dng c php nh sau: Tn_mng[ind-1] Ch : Phn t u tin ca mng c ch s l 0. V d: int a[]=new int [3];//Khai bo v to ra mng gm 3 phn t Lc ny cc phn t ca mng ln lt c truy xut nh sau: - Phn t u tin ca mng l a[0] - Phn t th 2 ca mng l a[1] - Phn t th 3 ng thi l phn t cui cng ca mng l a[2] c) Ly v s phn t hin ti ca mng Mng trong Java l mt i tng, do vy n cng c cc thuc tnh v cc phng thc nh cc i tng khc. ly v s phn t ca mng ta s dng thuc tnh length nh sau: Tn_mng.length V d 1: Nhp vo mt mng v in ra mn hnh import com.theht.Keyboard; class ArrayDemo{ public static void main(String[] args) { //Nhp s phn t ca mng System.out.print("Nhp s phn t ca mng:"); int n=Keyboard.readInt(); //Khai bo mng vi s phn t bng n

int a[]=new int[n]; //Nhp d liu cho mng for(int i=0;i<a.length;i++){ System.out.print("a[" + i + "]="); a[i]=Keyboard.readInt(); } //In mng ra mn hnh System.out.println("Mng va nhp l"); for (int i = 0; i < a.length; i++) System.out.print(a[i] + " "); } } V d 2: Nhp vo mt mng s thc sau kim tra xem mng c phi l mt dy tng hay khng? import com.theht.Keyboard; class ArrayDemo2{ public static void main(String[] args) { //Nhp s phn t ca mng System.out.print("Nhp s phn t ca mng:"); int n=Keyboard.readInt(); //Khai bo mng vi s phn t bng n int a[]=new int[n]; //Nhp d liu cho mng for(int i=0;i<a.length;i++){ System.out.print("a[" + i + "]="); a[i]=Keyboard.readInt(); }

//Kim tra dy tng boolean kt=true; for (int i = 0; i < a.length-1; i++) if(a[i+1]-a[i]<0){ kt=false;//thay i trng thi c break;//Thot khi vng lp } if(kt) System.out.println("Dy tng dn"); else System.out.println("Dy khng phi tng dn"); } } 2. Mng nhiu chiu a) Khai bo Khai bo mng N chiu trong Java c tin hnh nh sau: hoc hoc Trong : KDL l mt kiu d liu bt k: nguyn thu hoc lp sp1, sp2, , sptN ln lt l s phn t trn chiu th 1, 2, .., N V d: - Khai bo mt con tr ca mng 2 chiu int[][] a; hoc int a[][]; Khai bo v to ra mng 2 chiu: int[][] a = new int[2][3]; // Ma trn gm 2 hng, 3 ct

- Khai bo v khi gn gi tr cho cc phn t ca mng 2 chiu: int a[][]={ {1, 2, 5}. //Cc phn t trn hng th nht {2, 4, 7, 9}. //Cc phn t trn hng th hai {1, 7}. //Cc phn t trn hng th ba } Khai bo trn s to ra mt mng hai chiu gm: 3 hng, nhng trn mi hng li c s phn t khc nhau, c th l: trn hng th nht c 3 phn t, hng 2 gm 4 phn t v hng th 3 gm 2 phn t. Ch : Vi khai bo trn nu ta lit k cc phn t ca mng theo trnh t t tri qua phi v t trn xung di th cc phn t ln lt l: a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2], a[1][3], a[2][0], a[2][1] b) Truy xut n phn t mng nhiu chiu tn_mng[ind1][ind2] V d 1: Nhp vo mt ma trn v in ra mn hnh import com.theht.Keyboard; class MaTram { public static void main(String[] args) { //Nhp s hng v s ct System.out.print("Nhp s hng:"); int sh = Keyboard.readInt(); System.out.print("Nhp s ct:"); int sc = Keyboard.readInt(); //Khai bo mng hai chiu gm sh hng v sc ct float a[][] = new float[sh][sc];

//Nhp d liu cho mng hai chiu for (int i = 0; i < a.length; i++) for (int j = 0; j < a[i].length; j++) { System.out.print("a[" + i + "," + j + "]="); //Nhp liu cho phn t hng i, ct j a[i][j] = Keyboard.readFloat(); } //In mng hai chiu ra mn hnh for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) System.out.print(a[i][j] + " "); System.out.println(); } } } V d 2: Nhp vo ma trn vung sau tnh tng cc phn t trn ng cho chnh.

II. Xu k t Vic x l cc xu k t trong Java c h tr bi hai lp String v StringBuffer. Lp String dng cho nhng xu k t bt bin, ngha l nhng xu ch c v sau khi dc khi to gi tr th ni dung bn trong xu khng th thay i c. Lp StringBuffer c s dng i vi nhng xu k t ng, tc l c th thay i c ni dung bn trong ca xu.

1. Lp String Chui l mt dy cc k t. Lp String cung cp cc phng thc thao tc vi cc chui. N cung cp cc phng thc khi to (constructor) khc nhau: String str1 = new String( ); //str1 cha mt chui rng. String str2 = new String(Hello World); //str2 cha Hello World char ch[] = {A,B,C,D,E}; String str3 = new String(ch); //str3 cha ABCDE String str4 = new String(ch,0,2); //str4 cha AB v 0- tnh t k t bt u, 2- l s lng k t k t k t bt u. Ton t + c s dng cng chui khc vo chui ang tn ti. Ton t + ny c gi nh l ni chui. y, ni chui c thc hin thng qua lp StringBuffer. Chng ta s tho lun v lp ny trong phn sau. Phng thc concat( ) ca lp String cng c th thc hin vic ni chui. Khng ging nh ton t +, phng thc ny khng thng xuyn ni hai chui ti v tr cui cng ca chui u tin. Thay vo , phng thc ny tr v mt chui mi, chui mi s cha gi tr ca c hai. iu ny c th c gn cho chui ang tn ti. V d: String strFirst, strSecond, strFinal; StrFirst = Charlie;

StrSecond = Chaplin; //.bng cch s dng phng thc concat( ) gn vi mt chui ang tn ti. StrFinal = strFirst.concat(strSecond); Phng thc concat( ) ch lm vic vi hai chui ti mt thi im. Cc phng thc ca lp String Trong phn ny, chng ta s xem xt cc phng thc ca lp String. - char charAt(int index ) Phng thc ny tr v mt k t ti v tr index trong chui. V d: String name = new String(Java Language); char ch = name.charAt(5); Bin ch cha gi tr L, t v tr cc s bt u t 0. - boolean startsWith(String s ) Phng thc ny tr v gi tr kiu logic (Boolean), ph thuc vo chui c bt u vi mt chui con c th no khng. V d: String strname = Java Language; boolean flag = strname.startsWith(Java); Bin flag cha gi tr true. - boolean endsWith(String s ) Phng thc ny tr v mt gi tr kiu logic (boolean), ph thuc vo chui kt thc bng mt chui con no khng.

V d: String strname = Java Language; boolean flag = strname.endsWith(Java); Bin flag cha gi tr false. - String copyValueOf( ) Phng thc ny tr v mt chui c rt ra t mt mng k t c truyn nh mt i s. Phng thc ny cng ly hai tham s nguyn. Tham s u tin ch nh v tr t ni cc k t phi c rt ra, v tham s th hai ch nh s k t c rt ra t mng. V d: char name[] = {L,a,n,g,u,a,g,e}; String subname = String .copyValueOf(name,5,2); By gi bin subname cha chui ag. - char [] toCharArray( ) Phng thc ny chuyn chui thnh mt mng k t. V d: String text = new String(Hello World); char textArray[] = text.toCharArray( ); - int indexOf(String sunString ) Phng thc ny tr v th t ca mt k t no , hoc mt chui trong phm vi mt chui. Cc cu lnh sau biu din cc cch khc nhau ca vic s dng hm. String day = new String(Sunday); int index1 = day.indexOf(n);

//cha 2

int index2 = day.indexOf(z,2); //cha 1 nu z khng tm thy ti v tr 2.

int index3 = day.indexOf(Sun); //cha mc 0 - String toUpperCase( ) Phng thc ny tr v ch hoa ca chui. String lower = new String(good morning); System.out.println(Uppercase: +lower.toUpperCase( )); - String toLowerCase( ) Phng thc ny tr v ch thng ca chui. String upper = new String(JAVA); System.out.println(Lowercase: +upper.toLowerCase( )); - String trim() Phng thc ny ct b khong trng hai u chui. Hy th on m sau thy s khc nhau trc v sau khi ct b khong trng. String space = new String( Spaces );

System.out.println(space); System.out.println(space.trim()); //Sau khi ct b khong trng - boolean equals(String s) Phng thc ny so snh ni dung ca hai i tng chui. String name1 = Java, name2 = JAVA; boolean flag = name1.equals(name2); Bin flag cha gi tr false. - Cc phng thc valueOf c np chng cho php chuyn mt gi tr thnh xu static String valueOf(Object obj)//Chuyn mt i tng thnh xu, bng cch gi n phng thc toString ca i tng obj static String valueOf(char[] characters)//Chuyn mng cc k t thnh xu. static String valueOf(boolean b)//Chuyn mt gi tr logic thnh xu, xu nhn c l true hoc false tng ng vi gi tr true hoc false ca b static String valueOf(char c)//Chuyn k t thnh xu static String valueOf(int i)//chuyn mt s nguyn thnh xu static String valueOf(long l)//Chuyn mt gi tr long thnh xu static String valueOf(float f)//chuyn mt gi tr float thnh xu static String valueOf(double d)//chuyn mt gi tr double thnh xu

2. Lp StringBuffer Lp StringBuffer cung cp cc phng thc khc nhau thao tc mt i

tng dng chui. Cc i tng ca lp ny rt mm do, l cc k t v cc chui c th c chn vo gia i tng StringBuffer, hoc ni thm d liu vo ti v tr cui. Lp ny cung cp nhiu phng thc khi to. Chng trnh sau minh ho cch s dng cc phng thc khi to khc nhau to ra cc i tng ca lp ny. class StringBufferCons{ public static void main(String args[]){ StringBuffer s1 = new StringBuffer(); StringBuffer s2 = new StringBuffer(20); StringBuffer s3 = new StringBuffer(StringBuffer); System.out.println(s3 = + s3); System.out.println(s2.length()); //cha 0 System.out.println(s3.length()); //cha 12 System.out.println(s1.capacity()); //cha 16 System.out.println(s2.capacity()); //cha 20 System.out.println(s3.capacity()); //cha 28 } } length() v capacity() ca StringBuffer l hai phng thc hon ton khc nhau. Phng thc length() cp n s cc k t m i tng thc cha, trong khi capacity() tr v tng dung lng ca mt i tng (mc nh l 16)

v s k t trong i tng StringBuffer. Dung lng ca StringBuffer c th thay i vi phng thc

ensureCapacity(). i s int c truyn n phng thc ny, v dung lng mi c tnh ton nh sau: NewCapacity = OldCapacity * 2 + 2 Trc khi dung lng ca StringBuffer c t li, iu kin sau s c kim tra: 1 Nu dung lng(NewCapacity) mi ln hn i s c truyn cho phng thc ensureCapacity(), th dung lng mi (NewCapacity) c t. 2 Nu dung lng mi nh hn i s c truyn cho phng thc ensureCapacity(), th dung lng c t bng gi tr tham s truyn vo. Chng trnh sau minh ho dung lng c tnh ton v c t nh th no. class test{ public static void main(String args[]){ StringBuffer s1 = new StringBuffer(5); System.out.println(Dung +s1.capacity()); //cha 5 s1.ensureCapacity(8); System.out.println(Dung +s1.capacity()); //cha 12 lng ca b nh m = lng ca b nh m =

s1.ensureCapacity(30); System.out.println(Dung +s1.capacity()); //cha 30 } } Trong on m trn, dung lng ban u ca s1 l 5. Cu lnh s1.ensureCapacity(8); Thit lp dung lng ca s1 n 12 =(5*2+2) bi v dung lng truyn vo l 8 nh hn dung lng c tnh ton l 12 . s1.ensureCapacity(30); Thit lp dung lng ca s1 n 30 bi v dung lng truyn vo l 30 th ln hn dung lng c tnh ton (12*2+2). Cc phng thc lp StringBuffer Trong phn ny, chng ta s xem xt cc phng thc ca lp StringBuffer vi mt chng trnh. - void append() Phng thc ny ni thm mt chui hoc mt mng k t vo cui cng ca i tng StringBuffer. V d: StringBuffer s1 = new StringBuffer(Good); s1.append(evening); Gi tr trong s1 by gi l goodevening. lng ca b nh m =

- void insert() Phng thc ny c hai tham s. Tham s u tin l v tr chn. Tham s th hai c th l mt chui, mt k t (char), mt gi tr nguyn (int), hay mt gi tr s thc (float) c chn vo. V tr chn s ln hn hay bng 0, v nh hn hay bng chiu di ca i tng StringBuffer. Bt k i s no, tr k t hoc chui, c chuyn sang chui v sau mi c chn vo. V d: StringBuffer str = new StringBuffer(Java sion); str.insert(1,b); Bin str cha chui Jbava sion. - char charAt() Phng thc ny tr v mt gi tr k t trong i tng StringBuffer ti v tr c ch nh.V d: StringBuffer str = new StringBuffer(James Gosling); char letter = str.charAt(6); //cha G - void setCharAt(int index, char value) Phng thc ny c s dng thay th k t trong mt StringBuffer bng mt k t khc ti mt v tr c ch nh. StringBuffer name = new StringBuffer(Jawa); name.setCharAt(2,v); Bin name cha Java. - void setLength()

Phng thc ny thit lp chiu di ca i tng StringBuffer. Nu chiu di c ch nh nh hn chiu di d liu hin ti ca n, th cc k t tha s b ct bt. Nu chiu di ch nh nhiu hn chiu di d liu th cc k t null c thm vo phn cui ca StringBuffer StringBuffer str = new StringBuffer(10); str.setLength(str.length() +10); - char [] getChars() Phng thc ny c s dng trch ra cc k t t i tng StringBuffer, v sao chp chng vo mt mng. Phng thc getChars() c bn tham s sau: Ch s u: v tr bt u, t ni m k t c ly ra. Ch s kt thc: v tr kt thc Mng: Mng ch, ni m cc k t c sao chp. V tr bt u trong mng ch: Cc k t c sao chp vo mng ch t v tr ny. V d: StringBuffer str = new StringBuffer(Leopard); char ch[] = new char[10]; str.getChars(3,6,ch,0); By gi bin ch cha par - void reverse() Phng thc ny o ngc ni dung ca mt i tng StringBuffer, v tr v

mt i tng StringBuffer khc. V d: StringBuffer str = new StringBuffer(devil); StringBuffer strrev = str.reverse(); Bin strrev cha lived.

III. Lp StringTokenizer Mt lp StringTokenizer c th s dng tch mt chui thnh cc phn t (token) nh hn. V d, mi t trong mt cu c th coi nh l mt token. Tuy nhin, lp StringTokenizer i xa hn vic phn tch cc t trong cu. tch ra cc thnh token ta c th tu bin ch ra mt tp du phn cch cc token khi khi to i tng StringTokenizer. Nu ta khng ch ra tp du phn cch th mc nh l du trng (space, tab, ...). Ta cng c th s dng tp cc ton t ton hc (+, *, /, v -) trong khi phn tch mt biu thc. Bng sau tm tt 3 phng thc to dng ca lp StringTokenizer: Phng thc xy dng StringTokenizer(String) StringTokenizer(String, Strng) ngha To ra mt i tng StringTokenizer mi da trn chui c ch nh. To ra mt i tng StringTokenizer mi da trn (String, String) chui c ch nh v mt tp cc du phn cch. StringTokenizer(String, String, boolean) To ra mt i tng StringTokenizer da trn chui c ch nh, mt tp cc du phn cch, v mt c hiu cho bit nu cc du phn cch s c tr v nh cc token hay khng.

Cc phng thc to dng trn c minh ha trong cc v d sau: StringTokenizer st1 = new StringTokenizer(A Stream of words); StringTokenizer st2 = new StringTokenizer(4*3/2-1+4, +-*/, true); StringTokenizer st3 = new StringTokenizer(aaa,bbbb,ccc, ,); Trong cu lnh u tin, StringTokenizer ca st1 s c xy dng bng cch s dng cc chui c cung cp v du phn cch mc nh. Du phn cch mc nh l khong trng, tab, cc k t xung dng. Cc du phn cch ny th ch s dng khi phn tch vn bn, nh vi st1. Cu lnh th hai trong v d trn xy dng mt i tng StringTokenizer cho cc biu thc ton hc bng cch s dng cc k hiu *, +, /, v -. Cu lnh th 3, StringTokenizer ca st3 s dng du phy nh mt du phn cch. Lp StringTokenizer ci t giao din Enumeration. V th, n bao gm cc phng thc hasMoreElements() v nextElement(). Cc phng thc c th s dng ca lp StringTokenizer c tm tt trong bng sau: Phng thc countTokens() hasMoreElements() hasMoreTokens() nextElement() Mc ch Tr v s cc token cn li. Tr v True nu cn c token ang c nh du trong chui. N th ging ht nh hasMoreTokens. Tr v True nu cn c token ang c nh du trong chui. N ging ht nh hasMoreElements. Tr v token k tip trong chui. N th ging nh nextToken.

nextToken() nextToken(String)

Tr v Token k tip trong chui. N th ging nh nextElement. Thay i b du phn cch bng chui c ch nh, v sau tr v token k tip trong chui.

Hy xem xt chng trnh cho bn di. Trong v d ny, hai i tng StringTokenizer c to ra. u tin, st1 c s dng phn tch mt biu thc ton hc. Th hai, st2 phn tch mt dng ca cc trng c phn cch bi du phy. C hai tokenizer, phng thc hasMoreTokens() v nextToken() c s dng duyt qua tp cc token, v hin th cc token. import java.util.*; public class StringTokenizerImplementer{ public static void main(String args[]){ // t mt biu thc ton hc v to mt tokenizer cho chui . String mathExpr = 4*3+2/4; StringTokenizer st1 = new StringTokenizer(mathExpr,*+/-, true); //trong khi vn cn cc token, hin th mathExpr: ); while(st1.hasMoreTokens()) System.out.println(st1.nextToken()); //to mt chui ca cc trng c phn cch bi du phy v to //mt tokenizer cho chui. System.out.println(Tokens of

String commas = field1,field2,field3,and field4; StringTokenizer st2 = new StringTokenizer(commas,,,false); //trong khi vn cn token, hin th. System.out.println(Comma-delimited tokens : ); while (st2.hasMoreTokens()) System.out.println(st2.nextToken()); } } Kt qu chy chng trnh c m t nh hnh di.

IV. Mt s lp c bn ca Java Cc lp c bn, hay s dng ca Java nh: Object, cc lp Wrapper (lp bao ca cc kiu d liu nguyn thy), Math, String v lp StringBuffer. Nhng lp ny c xy dng trong gi java.lang (gi mc nh ca Java, khi cn s dng cc lp trong gi ny ta khng cn phi import n). Mi lp trong Java u

l lp con ca lp Object .

Cu trc phn cp mt s lp trong gi java.lang 1. Lp Object Tt c cc lp c xy dng trong cc chng trnh Java u hoc l trc tip hoc gin tip c m rng t lp Object. y l lp c s nht, nh ngha hu nh tt c nhng phng thc phn c bn cc lp con chu ca n s dng trc tip hoc vit . Object cung cp cc phng thc sau: int hashCode() Khi cc i tng c lu vo cc bng bm (hash table), hm ny c th s dng xc nh duy nht gi tr cho mi i tng. iu ny m bo tnh nht qun ca h thng khi thc hin chng trnh. Class getClass() Tr li tn lp ca i tng hin thi. boolean equals(Object obj) Cho li kt qu true khi i tng hin thi v obj l cng mt i tng. Hm ny thng c vit cc lp con cho ph hp vi ng cnh so snh bng nhau trong cc lp m rng . protected Object clone() throws CloneNotSupportedException i tng mi c to ra c cng cc trng thi nh i tng hin thi khi s dng clone(), ngha l to ra bn copy mi ca i tng hin thi. String toString() Nu cc lp con khng vit hm ny th n s tr li dng biu din vn bn (textual) ca i tng. Hm println() lp PrintStream s chuyn cc i s ca n sang dng vn bn khi s dng hm toString().

protected void finalize() throws Throwable Hm ny c gi ngay trc khi i tng b dn vo thng rc, ngha l trc khi i tng b hu b. 2. Cc lp bao kiu nguyn thy (Wrapper class) Cc gi tr nguyn thy khng phi l i tng trong Java. c th thao tc c trn cc gi tr nguyn thy (gi tr s, k t v logic) th gi java.lang cung cp cc lp bao gi (Wrapper) cho tng kiu d liu nguyn thy (gi tt l lp bao). Cc lp bao c nhng c tnh chung sau: 1. Cc ton t to lp chung. Cc lp bao (tr lp Character ch c mt ton t to lp) u c hai ton t to lp: Ton t to lp s dng gi tr nguyn thy to ra i tng tng ng Character charObj = new Character(a); Boolean boolObj = new Boolean(true); Integer intObj = new Integer(2002); Float floatObj = new Float(3.14F); Double doubleObj = new Double(3.14); 1 Ton t th hai: chuyn cc i tng lp String biu din cho cc gi tr nguyn thy v cc lp tng ng. Cc ton t ny s nm ra ngoi l NumberFormatException khi gi tr String truyn vo hm to khng hp l. Boolean boolObj = new Boolean(true); Integer intObj = new Integer(2002); Float floatObj = new Float(3.14F); Double doubleObj= new Double(3.14); 2. C cc hm tin ch chung: valueOf(String s), toString(), typeValue(),

equals(). 2 Mi lp (tr lp Character) u nh ngha hm static valueOf(String s) tr li i tng tng ng. Cc hm ny nm ra ngoi l NumberFormatException khi gi tr String truyn vo phng thc khng hp l. Boolean boolObj = Boolean.valueOf(true); Integer intObj = Integer.valueOf(2002); Float floatObj = Float.valueOf(3.14F); Double doubleObj= Double.valueOf(3.14); 3 Cc lp vit hm toString() tr li l cc i tng String biu din cho cc gi tr nguyn thy dng xu. String charStr = charObj.toString(); String boolStr = boolObj.toString(); // a // true

String intStr = intObj.toString(); // 2002 String doubleStr = doubleObj.toString(); // 3.14 4 Cc lp nh ngha hm typeValue() tr li cc gi tr nguyn thy tng ng vi cc i tng nguyn thy. boolean b = boolObj.booleanValue(); int i = intObj.intValue(); float f = floatObj.floatValueOf(); // true // 2002 // 3.14F

double d = doubleObj.doubleValueOf(); // 3.14 char c = charObj.charValue(); // a

5 Cc lp vit hm equals() thc hin so snh bng nhau ca cc i tng nguyn thy. Character charObj = new Character(a); boolean charTest = charObj.equals(b); // false

Integer intObj1 = Integer.valueOf(2010); boolean intTest = intObj.equals(intObj1); // false Lp Boolean Lp ny nh ngha hai i tng Boolean.TRUE, Boolean.FALSE biu din cho hai gi tr nguyn thy true v false tng ng. Lp Character Lp Character nh ngha hai gi tr cc tiu, cc i Character.MIN_VALUE, Character.MAX_VALUE v cc gi tr kiu k t Unicode. Ngoi ra lp ny cn nh ngha mt s hm static x l trn cc k t: static boolean isLowerCase(char ch)// true nu ch l k t thng static boolean isUpperCase(char ch)// true nu ch l k t vit hoa static boolean isDigit(char ch) // true nuch l ch s static boolean isLetter(char ch)// true nu ch l ch ci static boolean isLetterOrDigit(char ch) // true nu ch l ch hoc l s static char toUpperCase(char ch)// Chuyn ch v ch vit hoa static char toLowerCase(char ch)// Chuyn ch v ch vit thng static char toTitleCase(char ch)// Chuyn ch v dng tiu . Cc lp bao kiu s Cc lp Byte, Short, Integer, Long, Float, Double l cc lp con ca lp Number. Trong cc lp ny u xc nh hai gi tr: <Lp bao>.MIN_VALUE <Lp bao>.MAX_VALUE l cc gii hn ca cc s trong kiu . V d, byte minByte = Byte.MIN_VALUE; int maxInt = Integer.MAX_VALUE; nguyn thy v gi tr s: // -128 // 2147483647

Trong mi lp bao c hm typeValue() chuyn cc gi tr ca cc i tng

byte byteValue() short shortValue() int intValue() long longValue() float floatValue() double doubleValue() Trong mi lp bao cn c hm static parseType(String s) chuyn cc gi tr c biu din di dng xu v cc gi tr s: byte value1 = Byte.parseByte(16); int value2 = Integer.parseInt(2002); double value3 = Double.parseDouble(3.14); V d: Vit chng trnh nhp vo mt dy s ty v sp xp theo th t tng dn. import java.io.*; class SapXep{ static int[] day; static void nhap(){ String str; int n = day.length; DataInputStream stream = new DataInputStream(System.in); System.out.println("Nhap vao " + n + " so nguyen"); for (int k = 0; k < n; k++){ try{ System.out.print(k + ": ); str = stream.readLine(); day[k] = Integer.valueOf(str).intValue(); }catch(IOException e){

System.err.println("I/O Error!"); } } } static void hienThi(){ int n = day.length; for (int k = 0; k < n; k++) System.out.print(day[k] + " "); System.out.println(); } static void sapXep(){ int x, max, k; for(int i =day.length-1; i > 0; i--){ max = day[i];k = i; for (int j = 0; j < i; j++) if (max < day[j]){ max = day[j]; k = j; } day[k] = day[i]; day[i] = max; } } public static void main(String[] args){ String str; int n; DataInputStream stream = new DataInputStream(System.in); System.out.print("\nCho biet bao nhieu so nhap vao: ");

try{ str = stream.readLine(); }catch(IOException e){ System.err.println("I/O Error!"); str = "0"; } n = Integer.valueOf(str).intValue(); SapXep.day = new int[n]; nhap(); sapXep(); System.out.println("Day so duoc sap xep: "); hienThi(); } } Lp Void Lp ny k hiu cho i tng ca lp Class biu din cho gi tr void. 3. Lp Math Lp final class Math nh ngha mt tp cc hm tnh thc hin cc chc nng chung ca ton hc nh cc php lm trn s, sinh s ngu nhin, tm s cc i, cc tiu, v.v. Lp final class Math cn cung cp nhng hng s nh s e (c s ca logarithm), s pi thng qua Math.E v Math.PI. Cc hm lm trn v x l cc gi tr gii hn static int abs(int i) static long abs(long l) static float abs(float f) static double abs(double d) Hm abs() c np chng tr li gi tr tuyt i ca i s.

static double ceil(double d) Hm ceil() tr li gi tr nh nht kiu double m khng nh hn i s v li bng s nguyn. V d ceil(3.14) cho gi tr 4.0 l s trn trn ca i s. static double floor(double d) Hm floor() tr li gi tr ln nht kiu double m khng ln hn i s v li bng s nguyn. V d floor(3.14) cho gi tr 3.0 l s sn di ca i s. static int round(float f d) static long round(double d) Hm round() c np chng tr li s nguyn gn nht ca i s. static int static long static float max(int a, int b) max(long a, long b) max(float a, float b)

static double max(double a, double b) Hm max() c np chng tr li gi tr cc i ca hai i s. static int static long static float min(int a, int b) min(long a, long b) min(float a, float b)

static double min(double a, double b) Hm min() c np chng tr li gi tr cc tiu ca hai i s. Cc hm ly tha static double pow(double d1, double d2) Hm pow() tr li gi tr l ly tha ca d1 v d2 (d1d2). static double exp(double d) Hm exp() tr li gi tr l lu tha c s e v s m d (ed). static double log(double d)

Hm log() tr li gi tr l l-ga-rit t nhin (c s e) ca d. static double sqrt(double d) Hm sqrt() tr li gi tr l cn bc hai ca d , hoc gi tr NaN nu i s m. Cc hm lng gic static double sin(double d) Hm sin() tr li gi tr l sine ca gc d c cho di dng radian. static double cos(double d) Hm cos() tr li gi tr l cose ca gc d c cho di dng radian. static double tan(double d) Hm tan() tr li gi tr l tangent ca gc d c cho di dng radian. Hm sinh s ngu nhin static double random() Hm random() cho li gi tr l s ngu nhin trong khong t 0.0 n 1.0.

V. Cc lp tp hp Tp hp (Collection) trong Java cho php lu li tham chiu n cc i tng. Cc i tng bt k c th c lu tr, tm kim v c thao tc nh l cc phn t ca tp hp. Phn giao din Giao din (interface) Collection l c s pht trin, m rng thnh cc giao din khc nh Set, List, SortedSet v Map v giao din c s m rng thnh SortedMap. Hnh sau m t cu trc phn cp theo quan h k tha ca cc giao din li.

Cc giao din li ca cu trc Collection c m t trong bng sau: interface Collection M t interface c s nh ngha tt c cc php ton c bn cho cc lp cn duy tr thc hin v ci t chng Set M rng Collection ci t cu trc tp hp, trong khng c phn t c lp v chng khng c sp xp SortedSet M rng Set ci t cu trc tp hp c sp, trong khng c phn t c lp v chng c sp xp theo th t List M rng Collection ci t cu trc danh sch, trong cc phn t c sp xp theo th t, v c lp Map interface c s nh ngha cc php ton cc lp s dng v ci t cc nh x t kho sang cc gi tr SortedMap M rng ca Map ci t cc nh x kho theo th t

Phn ci t Gi java.util cung cp tp cc lp ci t cc giao din li to ra nhng cu trc d liu thng s dng nh: Vector, HashTable, HashSet, LinkedList, TreeSet, v.v. Nhng lp ny v giao din li c xy dng theo cu trc phn cp nh trong hnh H6-3.

Cc giao din li v cc lp ci t chng Trong hnh trn k hiu biu din cho quan h k tha gia cc giao

din v --> biu din cho s ci t cc giao din.

Phn thut ton Lp java.util.Collection (cn phn bit vi giao din Collection) cung cp mt s hm static thc hin nhng thut ton a x cho nhng php ton khc nhau trn tp hp, k c sp xp, tm kim v dch chuyn cc phn t. Mt s hm trong s l: static int binarySearch(List list, Object key) S dng thut ton tm kim nh phn xc nh ch s ca phn t key trong danh sch list. static void fill(List list, Object obj) Thay th tt c cc phn t trong danh sch list bng obj. static void shuffle(List list) Hon v cc phn t ca danh sch list mt cch ngu nhin. static void sort(List list) Sp xp cc phn t trong danh sch list theo th t tng dn. 1. Collection Giao din Collection c xy dng nh l mu hp ng cho tt c cc cu trc tp hp c th da vo m thc thi v ci t. Gi java.util cung cp cc lp tp hp v ci t hu ht cc hm ca Collection. Cc php ton c s int size();Xc nh kch thc ca tp hp. boolean isEmpty();Tr li true nu tp hp rng, ngc li false.

boolean contains(Object obj);Tr li true nu tp hp cha obj, ngc li false. boolean add(Object obj); // Ty chn boolean remove(Object obj); // Ty chn Tr li true nu tp hp thc hin thnh cng vic b sung (loi b) obj, ngc li false. Mt s php ton khc Nhng php ton sau thc hin trn tp hp nh mt n v cu trc d liu. boolean cotainAll(Collection c); // Ty chn Kim tra xem tp hp hin thi c cha c tp hp c hay khng. boolean addAll(Collection c);// Ty chn Thc hin php hp hai tp hp boolean removeAll(Collection c); // Ty chn Thc hin php tr hai tp hp boolean retainAll(Collection c); Thc hin php giao hai tp hp void clear() // Ty chn Hy b i tng trong tp hp cc php trn tr li true nu thc hin thnh cng v cho kt qu thc hin c minh ha nh trong hnh H6-4, trong a, b l hai tp hp bt k. // Ty chn

a.addAll(b) Hnh Cc php ton trn cc tp hp

a.removeAll(b) a.retainAll(b)

2. Set (tp hp) Tp hp Set l cu trc d liu, trong khng c s lp li v khng c s sp xp ca cc phn t. Giao din Set khng nh ngha thm cc hm mi m ch gii hn li cc hm ca Collection khng cho php cc phn t ca n c lp li. Gi s a, b l hai tp hp (hai i tng ca cc lp ci t Set). Kt qu thc hin trn a, b c th m t nh trong bng sau:

Cc hm trong Cc php hp tng ng Set a.containsAll(b) a.addAll(b) a.removeAll(b) a.retainAll(b) a.clear() b a ? (Tp con) a = a b (Hp tp hp) a = a - b (Hiu tp hp) a = a b (Giao tp hp) a = (Tp rng)

Sau y chng ta xt mt s lp thc thi ci t giao din Set. HashSet Mt dng ci t nguyn thy ca Set l lp HashSet, trong cc phn t ca n l khng c sp. Lp ny c cc ton t to lp: HashSet() To ra mt tp mi khng c phn t no c (tp rng). HashSet(Collection c) To ra mt tp mi cha cc phn t ca tp hp c nhng khng cho php lp. HashSet(int initCapacity) To ra mt tp mi rng c kch thc (kh nng cha) l initCapacity.

HashSet(int initCapacity, float loadFactor) To ra mt tp mi rng c kch thc (kh nng cha) l initCapacity v yu t c np vo l loadFactor. V d 6.4 Khi thc hin cc i s c a vo sau tn chng trnh theo dng lnh. Chng trnh bt u vi tap1 l rng v ly cc k t ca i s u tin to ra tap2. So snh hai tp , thng bo kt qu ra mn hnh, sau cng dn tap2 vo tap1 v li tip tc nh th i vi i s tip theo cho n ht. import java.util.*; public class TapKT { public static void main(String args[]){ int nArgs = args.length; // S i s ca chng trnh

Set tap1 = new HashSet(); // To ra tp th nht l rng for (int i = 0; i < nArgs; i++){ String arg = args[i]; // Ly tng i s ca chng trnh Set tap2 = new HashSet();// To ra tp th 2 int size = arg.length(); // S k t trong mi i s

for (int j = 0; j < size; j++)// Tp th 2 cha cc k t ca arg tap2.add(new Character(arg.charAt(j))); // To ra tp tapChung chnh bng tap1 Set tapChung = new HashSet(tap1); tapChung.retainAll(tap2);// tapChung = tap1 tap2 boolean b = tapChung.size() == 0; if (b) System.out.println(tap2+" va "+tap1+" la roi nhau"); else { // tap2 c phi l tp con ca tap1?

boolean isSubset = tap1.containsAll(tap2); // tap1 c phi l tp con ca tap2? boolean isSuperset = tap2.containsAll(tap1); // tap1 c bng tap2? if (isSuperset && isSubset) System.out.println(tap2 + " bang tap " + tap1); else if (isSubset) System.out.println(tap2+" la tap con cua "+tap1); else if (isSuperset) System.out.println(tap2+" la tap cha cua "+tap1); else System.out.println(tap2 + " va " + tap1 + " co " + tapChung + " la phan chung"); } tap1.addAll(tap2);// hp tap2 vo tap1 } } } Dch v thc hin chng trnh vi cc i s nh sau: java TapKT em voi em anh s cho kt qu: [m, e] va [ ] la roi nhau [v, i, o] va [m, e] la roi nhau [m, e] la tap con cua [m, v, i, e, o] [a, h, n] va [m, v, i, e, o] la roi nhau

3. List (danh sch) Cu trc List l dng tp hp cc phn t c sp theo th t (cn c gi l dy tun t) v trong cho php lp (hai phn t ging nhau). Ngoi nhng hm m n c k tha t Collection, List cn b sung thm nhng hm nh: Object get(int index) Cho li phn t c xc nh bi index. Object set(int index, Object elem) // Ty chn

Thay th phn t c xc nh bi index bng elem. void add(int index, Object elem) // Ty chn

Chn elem vo sau phn t c xc nh bi index. Object remove(int index) // Ty chn

B i phn t c xc nh bi index. boolean addAll(int index, Collection c) // Ty chn

Chn cc phn t ca tp hp c vo v tr c xc nh bi index. int indexOf(Object elem) Cho bit v tr ln xut hin u tin ca elem trong danh sch. int lastIndexOf(Object elem) Cho bit v tr ln xut hin cui cng ca elem trong danh sch. List subList(int fromIndex, int toIndex) Ly ra mt danh sch con t v tr fromIndex n toIndex . ListIterator listIterator() Cho li cc phn t lin tip bt u t phn t u tin. ListIterator listIterator(int index) Cho li cc phn t lin tip bt u t phn t c xc nh bi index. Trong ListIterator l giao din m rng giao din Iterator c trong

java.lang. Cc lp ArrayList, Vector v LinkedList Ba lp ny c nhng ton t to lp to ra nhng danh sch mi rng hoc c cc phn t ly theo cc tp hp khc. Vector v ArrayList l hai lp kiu mng ng (kch thc thay i c). Hiu sut s dng hai lp ny l tng ng nhau, tuy nhin nu xt theo nhiu kha cnh khc th ArrayList l cu trc hiu qu nht ci t cu trc danh sch List. V d 6.5 H thng c mt dy N_DIGIT (5) ch s b mt. Hy vit chng trnh nhp vo N_DIGIT ch s on xem c bao nhiu ch s trng v c bao nhiu v tr cc ch s trng vi dy s cho trc. import java.util.*; public class NhapDoanSo { final static int N_DIGIT = 5; public static void main(String args[]){ if(args.length != N_DIGIT) { System.err.println("Hay doan " + N_DIGIT + " chu so!"); return; } List biMat = new ArrayList();// To danh sch biMat l rng biMat.add("5"); biMat.add("3"); biMat.add("2"); biMat.add("7"); biMat.add("2"); List doan = new ArrayList();// To danh sch doan l rng for(int i = 0; i < N_DIGIT; i++) doan.add(args[i]); // a cc s t i s chng trnh vo doan // B sung cc s vo dy biMat

List lap = new ArrayList(biMat);// Lu lu biMat sang lap int nChua = 0; // m s cc ch s trng nhau, ngha l thc hin c php b i remove() for(int i = 0; i < N_DIGIT; i++) if (lap.remove(doan.get(i))) ++nChua; int nViTri = 0; ListIterator kiemTra = biMat.listIterator(); ListIterator thu = doan.listIterator(); // Tm nhng v tr on trng trong hai dy c lp while (kiemTra.hasNext())// Khi cn phn t tip theo // Kim tra xem ln lt cc v tr ca hai dy c trng nhau hay khng if (kiemTra.next().equals(thu.next())) nViTri++; // Thng bo kt qu ra mn hnh System.out.println(nChua + " chu so doan trung."); System.out.println(nViTri + " vi tri doan trung."); } } Dch v thc hin chng trnh: java NhapDoanSo 3 2 2 2 7 s cho kt qu: 4 chu so doan trung 1 vi tri doan trung 4. Map (nh x) Map nh ngha cc nh x t cc kho (keys) vo cc gi tr. Lu : cc kha phi l duy nht (khng cho php lp). Mi ko c nh x sang nhiu nht mt gi tr, c gi l nh x n.

Cc nh x khng phi l cc tp hp, giao din Map cng khng phi l m rng ca cc Collection. Song, php nh x c th xem nh l mt loi tp hp theo ngha: cc kho (key) to thnh tp hp v tp hp cc gi tr (value) hoc tp cc cp <key, value>. Giao din Map khai bo nhng hm sau: Object put(Object key, Object value); Chn vo mt cp <key, value> Object get(Object key); c gi tr c xc nh bi key nu c nh x, ngc li cho null nu khng c nh x ng vi key. Object remove(Object key); Loi b nh x c xc nh bi key. boolean containsKey(Object key); Cho gi tr true nu key c nh x sang mt gi tr no , ngc li l false. boolean containsValue(Object value); Cho gi tr true nu value c nh x bi mt key no , ngc li l false. int size(); Cho s cc cp nh x <key, value>. boolean isEmpty(); Cho gi tr true nu nh x rng, ngc li l false. Mt s php ton thng dng void putAll(Map t); Sao li cc nh x t t. void clear(); Xo i tt c cc nh x. Set keySet(); // Ty chn // Ty chn // Ty chn // Ty chn

Xc nh tp cc kho. Collection values(); Xc nh tp hp cc gi tr. Set entrySet(); Xc nh tp cc nh x <key, value>. Cc lp HashMap v HashTable Hai lp ny ci t giao din Map v c xy dng trong java.lang. Chng cho php to ra cc nh x mi c th rng hoc c nhng kch thc ty . I. V d 6.6 Vit chng trnh nhp vo cc trng lng v in ra tn sut ca cc trng lng trong cc nhm cch nhau 5 n v (kg). import java.util.*; public class NhomTrongluong { public static void main(String args[]){ // To ra mt nh x lu tn sut ca mi nhm Map demNhom = new HashMap(); int nArgs = args.length; // c cc trng lng c nhp vo t i s v chia nhm cch nhau 5 n v. for(int i = 0; i < nArgs; i++){ double trongL = Double.parseDouble(args[i]); Integer nhomTL=new Integer((int)Math.round(trongL/5)*5); Integer demCu = (Integer)demNhom.get(nhomTL); // Tng s ln trng lung trong cng nhm, nu l ln u (demCu = null) th t l 1. Integer demMoi = (demCu == null)? new Integer(1): new Integer(demCu.intValue()+1); demNhom.put(nhomTL, demMoi); }

// Ly ra tp cc gi tr t nh x demNhom List keys = new ArrayList(demNhom.keySet()); // Sp xp li theo cc nhm trng lng Collections.sort(keys); ListIterator keyIterator = keys.listIterator(); // Tm tn sut ca cc trng lng c nhp vo trong cc nhm while(keyIterator.hasNext()) { Integer nhom = (Integer) keyIterator.next(); Integer dem = (Integer) demNhom.get(nhom); int demInt = dem.intValue(); // S dng hm fill() ca lp Array to ra xu gm demInt cc du * char[] bar = new char[demInt]; Arrays.fill(bar, '*'); System.out.println(nhom+"\t" + new String(bar)); } } } Dch v chy chng trnh NhomTrongLuong vi cc tham s: java NhomTrongLuong 75 72 93 12 34 s cho kt qu: 10 35 36 95 * * ** *

Nh vy, nhm 10 kg c 1, 35 kg c 1, 75 kg c 2 v 95 kg c 1. 4. SortedSet (tp c sp) v SortedMap (nh x c sp) Cc cu trc tp hp (set) v nh x (map) c giao din c bit l SortedSet v SortedMap nh trong hnh H6-5 ci t nhng cu trc c cc phn t c sp

theo th t ch nh. Giao din SortedSet SortedSet l giao din m rng ca Set cung cp cc hm x l cc tp c sp. SortedSet headSet(Object toElem); Cho li tp c sp gm nhng phn t ng trc toElem. SortedSet tailSet(Object fromElem); Cho li tp c sp gm nhng phn t cui ng sau fromElem. SortedSet subSet(Object fromElem, Object toElem); Cho li tp c sp gm nhng phn t k t fromElem n toElem. Object first();Cho li phn t u tin (cc tiu) ca tp c sp. Object last();Cho li phn t cui cng (cc i) ca tp c sp. Comparator comparator() Cho li th t so snh ca cu trc c sp, cho null nu cc phn t c sp theo th t t nhin (tng dn) Giao din SortedMap SortedMap l giao din m rng ca Map cung cp cc hm x l cc nh x c sp theo th t ca kho (key). SortedMap headMap(Object toKey);Cho li nh x c sp gm nhng phn t ng trc toKey. SortedMap tailMap(Object fromKey);Cho li nh x c sp gm nhng phn t cui ng sau fromKey. SortedMap subMap(Object fromKey, Object toKey);Cho li nh x c sp gm nhng phn t k t fromKey n toKey. Object firstKey();Cho li phn t u tin (cc tiu) ca nh x c sp. Object lastKey();Cho li phn t cui cng (cc i) ca nh x c sp.

TreeSet v TreeMap Hai lp ny ci t hai giao din SortedSet v SortedMap tng ng. Chng c bn loi ton t to lp nh sau: TreeSet() TreeMap() To ra nhng tp hoc nh x mi v rng, c sp theo th t tng dn ca cc phn t hoc ca kho. TreeSet(Comparator c) TreeMap(Comparator c) To ra nhng tp hoc nh x mi c sp v xc nh th t so snh theo c. TreeSet(Collection c) TreeMap(Map m) To ra nhng tp hoc nh x mi c sp v c cc phn t ly t c hoc t m tng ng. TreeSet(SortedSet s) TreeMap(SortedMap m) To ra nhng tp hoc nh x mi c sp v c cc phn t ly t s hoc t m tng ng.

Chng 3 X L NGOI L

i vi ngi lp trnh h c th gp mt trong cc li sau: 1 Li c php (syntac error) 2 Li logic thut ton 3 Li lc thc thi ( runtime error) - i vi li c php ngi lp trnh c th pht hin v sa li, da vo trnh bin dch, y l li d pht hin v sa cha, tuy nhimn y cng l li gy kh khn v chn nn i vi ngi mi hc lp trnh. - i vi li thut ton, y l li kh pht hin v sa cha nht, tuy nhin trong bi ny ta khng bn lun v vn ny. - i vi li lc thc thi, ta hon ton c th kim sot c chng, thng thng li runtime thng do nguyn nhn khch quan nh: truy cp vo mt a nhng a ny li cha sn sng, hay thc hin php chia nhng mu s li bng 0, kt ni vi my tnh xa nhng my li khng tn ti, khi mt li runtime xy ra JVM s pht sinh mt ngoi l, nu mt chng trnh khng cung cp m s l ngoi l c th kt thc khng bnh thng, trong bi hm nay ta s bn v vn s l ngoi l trong java. - Mi lp bit l trong java u c dn xut t lp c s Throwable, ta c th to ra lp ngoi l ring bng cch m rng lp Throwable I. Mc ch ca vic x l ngoi l Mt chng trnh nn c c ch x l ngoi l thch hp. Nu khng, chng trnh s b ngt khi mt ngoi l xy ra. Trong trng hp , tt c cc ngun ti nguyn m h thng cp khng c gii phng. iu ny gy lng ph ti nguyn. trnh trng hp ny, tt c cc ngun ti nguyn m h thng cp nn c thu hi li. Tin trnh ny i hi c ch x l ngoi l thch hp.

V d, xt thao tc vo ra (I/O) trong mt tp tin. Nu vic chuyn i kiu d liu khng thc hin ng, mt ngoi l s xy ra v chng trnh b hy m khng ng tp tin li. Lc tp tin d b h hi v cc ngun ti nguyn c cp pht cho tp tin khng c tr li cho h thng. II. M hnh s l ngoi l ca java M hnh s l ngoi l ca java da trn ba hot ng chnh: c t ngoi l, nm ra ngoi l, v bt ngoi l. - Mi phng thc u c th pht sinh cc ngoi l, cc ngoi l c th pht sinh cn c m t chi tit trong lnh khai bo ca phng thc, vic khai bo ny c gi l c t ngoi l. - Khi mt cu lnh trong phng thc gy li, m ngi lp trnh khng cung cp m x l li, th ngoi l c chuyn n phng thc gi phng thc , vic ny c gi l nm ra bit l, ta c th nm ra bit l mt cch tng minh (iu ny s c gii thiu sau). - Sau khi JVM nm ra mt ngoi l, th h thng thi hnh java bt u tin trnh tm m x l li. M x l li hay cn gi l m x l bit l, java runtime s tm m x l li bng cch ln ngc tr li chui cc phng thc gi nhau, bt u t phng thc hin ti. Chng trnh s kt thc nu khng tm thy m x l bit l. Qu trnh tm kim ny gi l bt bit l. III. c t ngoi l c t ngoi l l khai bo cho trnh bin dch bit l phng thc ny c th gy ra ngoi l lc thi hnh. khai bo bit l ta s dng t kho throws trong khai bo phng thc, v d: public void myMethod() throws IOException, RemoteException t kho throws ch cho trnh bin dch java bit rng phng thc ny c th nm

ra ngoi l IOException v RemoteException, nu mt phng thc nm ra nhiu ngoi l th cc ngoi l c khai bo cch nhau bi du phy , III. Nm ra ngoi l Mt phng thc sau khi khai bo cc bit l, th bn (hoc chng trnh thc thi java) c th nm ra cc i tng bit l, c kiu m ta khai bo trong danh sch throws. C php ca lnh nm ra ngoi l: throw ExceptionObject; Ch : 3 Bn phi ch gia lnh khai bo bit l v lnh nm ra ngoi l 4 Mt phng thc ch c th nm ra cc ngoi l m n c khai bo IV. Bt ngoi l Mt ngoi l (exception) trong chng trnh Java l du hiu ch ra rng c s xut hin mt iu kin khng bnh thng no . Khi mt ngoi l xy ra, i tng tng ng vi ngoi l c to ra. i tng ny sau c truyn cho phng thc l ni m ngoi l xy ra. i tng ny cha thng tin chi tit v ngoi l. Thng tin ny c th c nhn v v c x l. Cc ngoi l ny c th l mt ngoi l chun ca Java hoc c th l mt ngoi l do ta to ra. Lp Throwable c Java cung cp l cha ca tt c cc ngoi l trong Java (lp u tin trong cy tha k). Sau khi bn bit cch khai bo v nm ra bit l, th phn vic quan trng nht l bt v x l bit l. Vn i vi ngi lp trnh java l phi bit c on m no ca anh ta c th gy ra li. Khi h khoanh vng c on m c th gy ra li h s t on m, c kh nng gy ra li trong khi try ( th lm), v t on m x l li trong khi catch ( bt gi). Khun dng tng qut nh sau: try{

// Cc lnh c kh nng gy li } catch ( TypeException1 ex){ // M c thc thi khi mt ngoi l TypeException1 c pht sinh trong khi try } catch ( TypeException2 ex){ // M c thc thi khi mt ngoi l TypeException2 c pht sinh trong khi try } ... catch ( TypeExceptionN ex){ // M c thc thi khi mt ngoi l TypeExceptionN c pht sinh trong khi try } finally{ // khi lnh nay lun c thc hin cho d ngoi l c xy ra trong khi try hay khng. }

Nu khng c mt ngoi l no pht sinh trong khi try th cc mnh catch s b b qua, trong trng hp mt trong cc cu lnh bn trong khi try gy ra mt ngoi l th, th java s b qua cc cu lnh cn li trong khi try i tm m x l ngoi l, nu kiu ngoi l so khp vi kiu ngoi l trong mnh catch, th m lnh trong khi catch s c thc thi, nu khng tm thy mt kiu ngi l no c so khp java s kt thc phng thc v chuyn bit l ra phng thc gi phng thc ny qu trnh ny c tip tc cho n khi tm thy m x l bit l, nu khng tm thy m x l bit l trong chui cc

phng thc gi nhau, chng trnh c th chm dt v in thng bo li ra lung li chun System.err V d class TryClass{ public static void main(String args[]){ int n=0; try{ System.out.println(1/n); } catch(ArithmeticException ex){ System.out.println(Loi chia cho 0); } } } Khi chy chng trnh ny ta se thu c mt dng in ra mn hnh nh sau: Loi chia cho 0 Trong on chng trnh trn khi chia mt s cho 0 s gp ngoi l ArithmeticException, bit c ngoi l ny c th xy ra do vy ta bt n v x l trong khi catch(ArithmeticException ex), y ex l mt i tng ca lp ArithmeticException cha cc thng tin v ngoi l xy ra, ta c th ly c thng tin v ngoi l chng hn nh ly v m t ngoi l nh sau: System.out.println(a.getMessage()). V. Khi finally Khi mt ngoi l xut hin, phng thc ang c thc thi c th b dng m

khng c hon thnh. Nu iu ny xy ra, th cc on m pha sau (v d nh on m c chc nng thu hi ti nguyn, nh cc lnh ng tp vit cui phng thc) s khng bao gi c gi. Java cung cp khi finally gii quyt vic ny. Thng thng khi finally cha cc cu lnh mang tnh cht dn dp nh: ng kt ni CSDL, ng tp tin,. try{ //Cc lnh c kh nng nm ra ngoi l } catch(Exception1 ex1){ } catch(Exception2 ex2){ } catch(Exceptionn exn){ } finally{ //M lnh dn dp } Khi finally l tu chn, khng bt buc phi c. Khi ny c t sau khi catch cui cng. Chng trnh s thc thi cu lnh u tin ca khi finally ngay sau khi gp cu lnh return hay lnh break trong khi try. Khi finally bo m lc no cng c thc thi, bt chp c ngoi l xy ra hay khng.

Hnh minh ha s thc hin ca cc khi try, catch v finally.

try block No Exception Exception occurs

finally block

catch block

finally block

VI. Mt s lp ngoi l chun ca Java Danh sch mt s lp ngoi l Tn lp ngoi l Throwable Exception ngha y l lp cha ca mi lp ngoi l trong Java y l lp con trc tip ca lp Throwable, n m t mt ngoi l tng qut c th xy ra trong ng dng RuntimeException ArthmeticException IllegalAccessException IllegalArgumentException ArrayIndexOutOfBoundsExeption NullPointerException SecurityException ClassNotFoundException NumberFormatException Lp c s cho nhiu ngoi l java.lang Li v s hc, v d nh chia cho 0. Lp khng th truy cp. i s khng hp l. Li truy cp ra ngoi mng. Khi truy cp i tng null. C ch bo mt khng cho php thc hin. Khng th np lp yu cu. Vic chuyn i t chui sang s khng thnh

cng. AWTException IOException FileNotFoundException EOFException NoSuchMethodException InterruptedException Ngoi l v AWT Lp cha ca cc lp ngoi l I/O Khng th nh v tp tin Kt thc mt tp tin. Phng thc yu cu khng tn ti. Khi mt lung b ngt.

Chng 4 LP TRNH A TUYN

I. Cc kin thc lin quan 1. Tin trnh ( process) Tin trnh l mt th hin ca mt chng trnh ang x l. S hu mt con tr lnh, tp cc thanh ghi v cc bin. hon thnh tc v ca mnh, mt tin trnh cn cn n mt s ti nguyn khc nh: CPU, b nh, cc tp tin, cc thit b ngoi vi.. Cn phn bit c gia tin trnh v chng trnh. Mt chng trnh l mt th hin th ng, cha cc ch th iu khin my tnh thc hin mc ch g ; khi cho thc thi ch th ny th chng trnh s bin thnh tin trnh C th ni tm tt tin trnh l mt chng trnh chy trn h iu hnh v c qun l thng qua mt s hiu gi l th 2. Tiu trnh ( thread ) Mt tiu trnh l mt n v x l c bn trong h thng. Mi tiu trnh x l tun t cc on code ca n, s hu mt con tr lnh, mt tp cc thanh ghi v mt vng nh stack ring, cc tiu trnh chia s CPU vi nhau ging nh cch chia

s gia cc tin trnh. Mt tin trnh s hu nhiu tiu trnh, tuy nhin mt tiu trnh ch c th thuc v mt tin trnh, cc tiu trnh bn trong cng mt tin trnh chia s nhau khng gian a ch chung, iu ny c ngha l cc tiu trnh c th chia s nhau cc bin ton cc ca tin trnh. Mt tiu trnh cng c th c cc trng thi ging nh cc trng thi ca mt tin trnh. 3. H iu hnh n nhim, a nhim HH n nhim l HH ch cho php 1 tin trnh chy ti mt thi im, v d HH DOS l HH n nhim. HH a nhim cho php nhiu tin trnh chy ti mt thi im, v d HH windows, Unix, Linux l cc HH a nhim HH a nhim u tin: cc tin trnh c cp pht thi gian s dng CPU theo mc u tin khc nhau HH a nhim khng u tin: cc tin trnh khng c mc u tin no c, chng t gic nh quyn kim sot CPUsau khi kt thc phn cng vic Ch : trong thc t mi my thng ch c 1 CPU, nn khng th c nhiu tin trnh chy ti mt thi im. Nn thng thng s a chng ch l gi lp. Chng c gi lp bng cch lu tr nhiu tin trnh trong b nh ti mt thi im, v iu phi CPU qua li gia cc tin trnh. 4. Cc trng thi ca tin trnh Trng thi ca mt tin trnh ti mt thi im c xc nh bi hot ng hin thi ca tin trnh . Trong qu trnh sng mt tin trnh thay i trng thi do nhiu nguyn nhn nh: ht thi gian s dng CPU, phi ch mt s kin no xy ra, hay i mt thao tc nhp/xut hon tt Ti mt thi im mt tin trnh c th nhn mt trong cc trng thi sau y: To mi: tin trnh ang c thnh lp Running: cc ch th ca tin trnh ang c x l, hay ni cch khc tin

trnh ang s hu CPU Blocked: tin trnh ang ch c cp ti nguyn, hay ch mt s kin no xy ra Ready: tin trnh ang ch cp CPU x l Kt thc: tin trnh hon tt vic x l

5. Min gng ( Critical Section ) a) Vn tranh chp ti nguyn Ta xt tnh hung sau: gi s A c 500$ trong ti khon ngn hng A quyt nh rt ra 100$ t ti khon ngn hng, thao tc ca A gm 2 bc: 1) ly ra 100$ 2) gim s ti khon i 100$ Tnh hung gia 2 thao tc 1 v 2, B tr A 300$, do vy B cp nht vo trong ti khon ca A l 800$ ( =500$ +300$), sau A tip tc cng vic 2, n cp nht li trong ti khon l 400$, nh vy B tr A 300$, nhng A khng nhn c. b) Min gng (Critical Section) on chng trnh trong c th xy ra cc mu thun truy xut trn ti nguyn dng chung c gi l min gng ( Critical Section ) 6. Kho cht (deadlock) Mt tp cc tin trnh c nh ngha l trong tnh trng kho cht nu nh, mi tin trnh trong tp hp u u ch i mt s ti nguyn ang b nm

gi bi cc tin trnh khc, nh vy khng c tin trnh no c th tip tc x l, cng nh gii phng ti nguyn cho cc tin trnh khc s dng, tt c cc tin trnh trong tp hp u b kho vnh vin!. II. Lp trnh a tuyn trong Java Vi Java ta c th xy dng cc chong trnh a lung. Mt ng dng c th bao gm nhiu lung. Mi lung c gn mt cng vic c th, chng c thc thi ng thi vi cc lung khc. C hai cch to ra lung Cch 1: To ra mt lp k tha t lp Thread v ghi phng thc run ca lp Thread nh sau: class MyThread extends Thread{ public void run(){ //M lnh ca tuyn } } Cch 2: To ra mt lp trin khai t giao din Runnable, ghi phng thc run class MyThread implements Runnable{ public void run(){ //M lnh ca tuyn } } 1. Lp Thread Lp Thread cha phng thc to dng Thread() cng nh nhiu phng thc hu ch c chc nng chy, khi ng, tm ngng, tip tc, gin on v ngng tuyn. to ra v chy mt tuyn ta cn lm 2 bc:

M rng lp Thread v Ghi phng thc run() Gi phng thc start() bt u thc thi tuyn Lp Thread khng c nhiu phng thc lm, chng ch c mt vi phng thc hu dng c lit k sau: public void run() c java gi thc thi tuyn thi hnh, bn phi ghi phng thc ny thc thi nhim v ca tuyn, bi v phng thc run()ca lp Thread ch l phng thc rng public void start() khi ta to ra tuyn n cha thc s chy cho n khi, phng thc start() c gi, khi start() c gi th phng thc run() cng c kch hot public void stop() c chc nng ngng tuyn thi hnh, phng thc ny khng an ton, bn nn gn null vo bin Thread dng tuyn, thay v s dng phng thc stop() public void suspend() C chc nng tm ngng tuyn, trong java 2, phng thc ny t c s dng, bi v phng thc ny khng nh ti nguyn m n lm gi, do vy c th nguy c dn n deadlock ( kho cht ), bn nn dng phng thc wait(), tm ngng tuyn thay v s dng phng thc suspend() public void resume() Tip tc vn hnh tuyn nu nh n ang b ngng, nu tuyn ang thi hnh th phng thc ny b b qua, thng thng phng thc ny c dng kt hp vi phng thc suspend(), k t java 2 phng thc ny cn vi phng thc suspend()b t chi, do vy bn nn dng phng thc notify () thay v s dng phng thc resume() public static void sleep( long millis) Threadows InterruptedException t tuyn thi hnh vo trng thi ng, trong khong thi gian xc nh bng mili giy. ch sleep() l phng thc tnh.

public void interrupt() lm gin on tuyn thi hnh public static boolean isInterrupt() kim tra xem tuyn c b ngt khng public void setpriority( int p) n nh u tin cho tuyn thi hnh, u tin c xc nh l mt s nguyn thuc on [1,10] public final void wait() throws InterruptException t tuyn vo trng thi ch mt tuyn khc, cho n khi c mt tuyn khc thng bo th n li tip tc, y l phng thc ca lp c s Object public final void notify () nh thc tuyn ang ch, trn i tng ny public final void notifyAll() nh thc tt c cc tuyn ang ch trn i tng ny isAlive() Tr v True, nu lung l vn cn tn ti (sng) getPriority() Tr v mc u tin ca lung join() i cho n khi lung kt thc isDaemon() Kim tra nu lung l lung mt lung chy ngm (deamon) setDeamon(boolean on) nh du lung nh l lung chy ngm v d: ta to ra 2 tuyn thi hnh song song, mt tuyn thc hin vic in 200 dng i hc s phm k thut Hng Yn, trong khi tuyn ny ang thc thi th c mt tuyn khc vn tip tc in 200 dng ch cho mng bn n vi java /** * <p>Title: </p> * <p>Description: Giao trinh ngon ngu lap trinh Java</p> * <p>Copyright: Copyright (c) 2004</p>

* <p>Company: DHSPKT HY</p> * @author Hoang Trong The * @version 1.0 */ public class Hello{ public static void main ( String[] args ){ new ChaoDH ().start (); new ChaoJV ().start (); } } class ChaoDH extends Thread{ public void run (){ for ( int i = 1; i <= 200; i++ ) System.out.println ( "i hc s phm k thut Hng Yn" ); } } class ChaoJV extends Thread{ public void run (){ for ( int i = 1; i <= 200; i++ ) System.out.println ( "cho mng bn n vi java" ); } } khi ta chy chng trnh thy kt qu xen k nhau nh .. i hc s phm k thut Hng Yn

i hc s phm k thut Hng Yn cho mng bn n vi java i hc s phm k thut Hng Yn cho mng bn n vi java i hc s phm k thut Hng Yn cho mng bn n vi java cho mng bn n vi java ... 2. Vng i ca Thread Hnh sau th hin trng thi ca tuyn trong vng i ca chng

3. Lung chy ngm (deamon) Mt chng trnh Java kt thc ch sau khi tt c cc lung thc thi xong. Trong Java c hai loi lung: - Lung ngi s dng - Lung chy ngm (deamon) Ngi s dng to ra cc lung ngi s dng, trong khi cc lung deamon l cc lung chy nn. Lung deamon cung cp cc dch v cho cc lung khc. My o Java thc hin tin trnh thot, khi ch cn duy nht lung deamon vn cn sng. My o Java c t nht mt lung deamon l lung garbage collection (thu lm ti nguyn - dn rc). Lung dn rc thc thi ch khi h thng khng c

tc v no. N l mt lung c quyn u tin thp. Lp lung c hai phng thc lm vic vi lung deamon: - public void setDaemon(boolean on) - public boolean isDaemon() 4. Giao din Runnable mc trc bn to ra cc lung thc hin song song vi nhau, trong java ta cn c th to ra cc tuyn thi hnh song song bng cch trin khai giao din Runnable. Chc bn s t hi, c lp Thread ri ti sao li cn c giao din Runnable na, chng khc g nhau?, cu tr li ch, java khng h tr k tha bi, nu chng trnh ca bn va mun k tha t mt lp no , li va mun a tuyn th bn bt buc phi dng giao din Runnable, chng hn nh bn vit cc Applet, bn va mun n l Applet, li va mun thc thi nhiu tuyn, th bn va phi k tha t lp Applet, nhng nu k tha t lp Applet ri, th bn khng th k tha t lp Thread na. Ta vit li v d trn, nhng ln ny ta khng k tha lp Thread, m ta trin khai giao din Runnable public class Hello{ public static void main ( String[] args ){ Thread t = new Thread ( new ChaoDH () ); t.start (); Thread t1 = new Thread ( new ChaoJV () ); t1.start (); } } class ChaoDH implements Runnable{

public void run (){ ChaoDH thu = new ChaoDH (); for ( int i = 1; i <= 200; i++ ) } } } class ChaoJV implements Runnable{ public void run (){ for ( int i = 1; i <= 200; i++ ) } } } Cho chy v d ny ta thy kt qu ra khng khc g vi v d trc. 5. Thit lp u tin cho tuyn Khi mt tuyn c to ra, n nhn mt u tin mc nh, i khi ta mun iu chnh u tin ca tuyn t c mc ch ca ta, tht n gin, t u tin cho mt tuyn ta ch cn gi phng thc setPriority() v truyn cho n mt s nguyn s ny chnh l u tin m bn cn t. Ta vit li v d trn nh sau: Thm vo phng thc main() 2 dng lnh: t.setPriority(1);//Tuyn ny c u tin l 1 t1.setPriority(10);// Tuyn ny c u tin l 1 Chy li chng trnh ny sau khi sa v trc khi sa ta thy tuyn t1 c cp thi gian s dng CPU nhiu hn tuyn t, l do l ta t u tin ca tuyn { System.out.println ( "cho mng bn n vi java" ); { System.out.println("i hc s phm k thut Hng Yn");

t1, ln hn u tin ca tuyn t Ch : 1) u tin ca mt tuyn biu th bi mt s nguyn nm trong on t 1 n 10, mt li s pht sinh nu ta gn cho n u tin, nm ngoi khong ny 2) 2) nu mt tuyn khng c t u tin th n s nhn u tin mc nh ( bng 5 ), ta c th kim tra iu ny bng cch gi phng thc getPriority() 6. Nhm tuyn (Thread Group) - Nhm tuyn l mt tp hp gm nhiu tuyn, khi ta tc ng n nhm tuyn ( chng hn nh tm ngng, ) th tt c cc tuyn trong nhm u nhn c cng tc ng , iu ny l tin li khi ta mun qun l nhiu tuyn thc hin cc tc v tng t nhau. to mt nhm tuyn ta cn: + to ra mt nhm tuyn bng cch s dng phng thc to dng ca lp ThreadGroup() ThreadGroup g=new ThreadGroup(ThreadGroupName); ThreadGroup g= new ThreadGroup(ParentThreadGroup,ThreadGroupName); Dng lnh trn to ra mt nhm tuyn g c tn l ThreadGroupName, tn ca tuyn l mt chui v khng trng vi tn ca mt nhm khc. + a cc tuyn vo nhm tuyn dng phng thc to dng ca lp Thread() : Thread =new Thread (g, new ThreadClass(),ThisThread); 7. ng b cc tuyn thi hnh Khi nhiu tuyn truy cp ng thi vo ti nguyn dng chung, m ti nguyn ny li khng th chia s, cho nhiu tuyn, khi ti nguyn dng chung

c th b hng. V d, mt lung c th c gng c d liu, trong khi lung khc c gng thay i d liu. Trong trng hp ny, d liu c th b sai. Trong nhng trng hp ny, bn cn cho php mt lung hon thnh trn vn tc v ca n, v ri th mi cho php cc lung k tip thc thi. Khi hai hoc nhiu hn mt lung cn thm nhp n mt ti nguyn c chia s, bn cn chc chn rng ti nguyn s c s dng ch bi mt lung ti mt thi im. Bi trong java khng c bin ton cc, chng ta ch c thuc tnh ca i tng, tt c cc thao tc c th dn n hng hc u thc hin qua phng thc, do vy java cung cp t kho synchronized, t kho ny c thm vo nh ngha ca phng thc bo cho java bit y l mt phng thc ng b, mi i tng s c mt b qun l kho, b qun l kho ny ch cho 1 phng thc synchronized ca i tng chy ti mt thi im Mu cht ca s ng b ha l khi nim monitor (gim st), hay cn gi semaphore (c hiu). Mt monitor l mt i tng m c kha c quyn. Ch mt lung c th c monitor ti mi thi im. Tt c cc lung khc c gng thm nhp vo monitor s b tr hon, cho n khi lung u tin thot khi monitor. Cc lung khc c bo ch i monitor. Mt lung c th monitor mt i tng nhiu ln.

Chng 5 NHP XUT

Mt chng trnh thng xuyn lm vic vi d liu, c th lu tr lu di chng ta phi lu tr v nhn li d liu t thit b lu tr ngoi, ngun thng tin ngoi khng ch gm d liu c lu tr trn a t, a CD m n c th l d liu ca mt chng trnh khc, hoc c th l c lu tr trn mng d chng c lu tr u chng cng ch c 1 s dng nh: i tng, k t, hnh nh hoc m thanh, d d liu c lu tr di hnh thc no, lu tr u th java u tru tng ho thnh cc lung, iu ny l rt tinh vi n lm cho ta khng cn phi quan tm d liu c lu tr u, di dng thc nh th no, n ng nht mi ngun d liu vi nhau: nhn v cc thng tin, mt chng trnh m mt lung lin kt vi i tng ngun( tp tin, b nh, Socket) v c cc thng tin tun t. Tng t ghi thng tin ra cc thit b ngoi bng cch m mt lung n i tng ch v ghi thng tin ra mt cch tun t nh

Lung l s tru tng ho mc cao, do vy bt k d liu c c vo t u hoc ghi ra u, th thut ton c/ghi tun t u ta nh sau: c vo

open a stream while more information read information close the stream Ghi ra open a stream while more information write information close the stream Lp lung Java a ra nhiu lp lung, x l mi loi d liu, java chia lung ra thanh 2 loi: lung byte ( byte stream) v lung k t (character stream), lp InputStream v OutputStream l hai lp c s cho mi lung nhp xut hng byte, v lp Reader/ Writer l hai lp c s cho vic c ghi hng k t. Lp RandomAccessFile k tha t lp Object v trin khai giao din, InputStream v OutputStream, y l lp duy nht h tr c c ln ghi. Lp nhp, xut hng k t Reader v Writer l hai lp c s tru tng cho lung hng k t, hai lp ny cung cp mt giao din chung cho tt c cc lp c/ ghi hng k t, mi ln c/ ghi ra lung l c 2 byte tng ng vi mt k t unicode, Sau ay l m hnh phn cp cc lp c/ ghi hng k t

Lung hng byte c th c ghi 1 byte, ta phi s dng lung hng byte, hai lp InputStream v OutputStream l hai lp c s tru tng cho cc lung hng byte, mi ln c/ ghi ra lung l c/ ghi 8 bit d liu ra lung, Hnh sau th hin mi quan h phn cp gia lp c/ ghi hng byte

S tng t gia hai lung hng byte v hng k t Lp Reader v InputStream c mt giao din ging nhau, chng ch khc nhau v

kiu d liu c vo, v d lp Reader c cc phng thc sau gip cho vic c mt k t hoc mt mng cc k t int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) th trong lp InputStream cng c cc phng thc vi tn tng t cho vic c mt byte hoc mt mng cc byte int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length) Cng tng t vy lp Writer v OutputStream cng c mt giao din tng t nhau, v d lp Writer nh ngha cc phng thc ghi mt k t, mt mng cc k t ra lung int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length) th lp OutputStream cng c cc phng thc tng ng, ghi mt byte, mt mng byte ra lung int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length) X l tp tin x l tp tin ngoi tr, ta s dng cc lung lin quan n tp tin nh FileInputStream v FileOutputStream cho vic c ghi tp hng byte, FileReader v FileWriter cho vic c ghi hng k t, thng thng mun s dng lung tp tin ta s dng hm to ca cc lp tng ng lin kt lung vi mt tp tin c th.

public void FileInputStream ( String FileName) public void FileInputStream ( File file) public void FileOutputStream ( String FileName) public void FileOutputStream (File file) public void FileWriter ( String FileName) public void FileWriter (File file) public void FileReader ( String FileName) public void FileReader (File file) V d: vit chng trnh file copy, thc hin vic copy mt tp, ta s vit chng trnh ny s dng c 2 lung hng byte v hng k t import java.io.*; // chng trnh copy s dng lung hng k t public class CopyCharacter { public static void main(String[] args) throws IOException { File inputFile = new File("C:/in.txt"); File outputFile = new File("C:/out.txt"); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read())! = -1) out.write(c); in.close(); out.close(); }

} import java.io.*; // Chng trnh copy s dng lung hng byte public class CopyBytes { public static void main(String[] args) throws IOException { File inputFile = new File("farrago.txt"); File outputFile = new File("outagain.txt"); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; while ((c = in.read())! = -1) out.write(c); in.close(); out.close(); } }

Lung d liu c/ ghi cc kiu d liu nguyn thu, ta s dng lung DataInputStream v DataOutputStream, lp DataInputStream trin khai giao din DataInput, cn lp DataOutputStream trin khai giao din DataOuput Cc phng thc sau c nh ngha trong giao din DataOutput

void write(byte[] b) void write(byte[] b, int off, int len) void write(int b) void writeBoolean(boolean v) void writeByte(int v) void writeBytes(String s) void writeChar(int v) void writeChars(String s) void writeDouble(double v) void writeFloat(float v) void writeInt(int v) void writeLong(long v) void writeShort(int v) void writeUTF(String str)

Ghi mt mng byte ra lung Ghi mt mng byte ra lung k t v tr off, len byte Ghi mt byte ra lung Ghi mt gi tr logic ra lung Ghi ra lung phn thp ca v Ghi mt xu ra lung Ghi mt k t ra lung Ghi mt xu k t ra lung Ghi mt s double ra lung Ghi mt s thc ra lung Ghi mt s nguyn ra lung Ghi mt s long ra lung Ghi mt s short ra lung Chi mt xu k t Unicode ra lung

Cc phng thc sau c nh ngha trong giao din DataInput: boolean readBoolean() byte readByte() char readChar() double readDouble() float readFloat() void readFully(byte[] b) voidreadFully(byte[] b, int off, int len) int readInt() c mt gi tr logic t lung c mt byte t lung c mt k t t lung c mt s double t lung c mt s float t lung c mt mng byte t lung v ghi vo mng c len byte t lung v ghi vo mng t v tr off c mt s nguyn

String readLine() long readLong() short readShort() int readUnsignedByte() in treadUnsignedShort() String readUTF() int skipBytes(int n)

c mt xu k t cho n khi gp k t xung dng v b qua k t xung dng c mt s long c mt s short c mt s nguyn khng du trong khong 0..255 c mt s nguyn khng du trong on t 0..65535 c mt xu k t Unicode B qua n byte t lung

Sau y l mt v d nh v lung nhp xut d liu, v d ny ghi d liu ra tp ri li c lai: import java.io.*; public class DataIODemo { public static void main(String[] args) throws IOException { // write the data out DataOutputStream out = new DataOutputStream(new FileOutputStream(c:/TestIO.txt")); // ghi s nguyn out.writeInt(10); // ghi s long out.writeLong(123456789); // ghi s thc chnh xc kp out.writeDouble(123.456789);

// ghi s thc chnh xc n out.writeFloat(123.456789f); // ghi gi tr logic out.writeBoolean(true); // ghi mt xu out.writeUTF("Day la mot xau ki tu"); out.close(); // read it in again DataInputStream in = new DataInputStream(new FileInputStream("c:/TestIO.txt")); try { // c li s nguyn System.out.println("Gia tri nguyen " + in.readInt()); // c li s nguyn di System.out.println("Gia tri long " + in.readLong()); // c li s thc chnh xc kp System.out.println("Gia tri double " + in.readDouble()); // c li s thc chnh xc n System.out.println("Gia tri float " + in.readFloat()); // c li gi tr logic System.out.println("Gia tri boolean " + in.readBoolean()); // c li mt xu unicode System.out.println("Gia tri xau " + in.readUTF()); } catch (EOFException e) { System.out.println("loi"); }

in.close(); } } Lung in n V cc lung xut ghi d liu ra di dng nh phn do vy bn khng th dng lnh type, hoc cc chng trnh son tho asciii xem c, trong java c th s dng lung in n xut d liu ra di dng asciii. Lp PrintStream v PrintWriter s gip ta lm vic ny. Hai lp ny thc hin chc nng nh nhau, u xut ra d liu dng asciii. Mt s phng thc ca lp PrintStream: boolean checkError() void close() void flush() void print(boolean b) void print(char c) void print(char[] s) void print(double d) void print(float f) void print(int i) void print(long l) void print(Object obj) void print(String s) void println() void println(boolean x) void println(char x) void println(char[] x) dn ht d liu ra v kim tra li lung ng lung dn d liu trong vng m ra ghi gi tr logic ra lung ghi k t ghi mt mange k t ghi mt s thc chnh xc kp ghi mt s thc ghi mt s nguyn ghi mt s nguyn di ghi mt i tng ghi mt xu to ra mt dng trng ghi gi tr logic ra lung v xung dng ghi k t v xung dng ghi mt mange k t v xung dng

void println(double x) void println(float x) void println(int x) void println(long x) void println(Object x) void println(String x) protected void setError() void write(byte[] buf, int off, int len) void write(int b) Hm to ca lp PrintStream:

ghi mt s thc chnh xc kp v xung dng ghi mt s thc v xung dng ghi mt s nguyn v xung dng ghi mt s nguyn di v xung dng ghi mt i tng v xung dng ghi mt xu v xung dng t trng thi li ca lung l true ghi mng byte t v tr off len k byte ra lung ghi mt byte ra lung

PrintStream(OutputStream out) to ra mt lung mi PrintStream(OutputStream out, boolean autoFlush) to ra mt lung mi vi chc nng AutoFlush ( t dn) Mt s phng thc ca lp PrintWriter boolean checkError() void close() void flush() void print(boolean b) void print(char c) void print(char[] s) void print(double d) void print(float f) void print(int i) void print(long l) dn ht d liu ra v kim tra li lung ng lung dn d liu trong vng m ra ghi gi tr logic ra lung ghi k t ghi mt mange k t ghi mt s thc chnh xc kp ghi mt s thc ghi mt s nguyn ghi mt s nguyn di

void print(Object obj) void print(String s) void println() void println(boolean x) void println(char x) void println(char[] x) void println(double x) void println(float x) void println(int x) void println(long x) void println(Object x) void println(String x) protected void setError() void write(byte[] buf, int off, int len) void write(int b) void write(int c) void write(String s)

ghi mt i tng ghi mt xu to ra mt dng trng ghi gi tr logic ra lung v xung dng ghi k t v xung dng ghi mt mange k t v xung dng ghi mt s thc chnh xc kp v xung dng ghi mt s thc v xung dng ghi mt s nguyn v xung dng ghi mt s nguyn di v xung dng ghi mt i tng v xung dng ghi mt xu v xung dng t trng thi li ca lung l true ghi mng byte t v tr off len k byte ra lung ghi mt byte ra lung Ghi mt k t n Ghi mt xu

void write(String s, int off, int len) Ghi mt xu len k t tnh t v tr off Cc hm to ca lp PrintWriter - PrintWriter(OutputStream out) to ra mt PrintWriter khng c chc nng t dn t mt i tng OutputStream. - PrintWriter(OutputStream out, boolean autoFlush) to ra mt PrintWriter vi chc nng t dn t mt i tng OutputStrea. - PrintWriter(Writer out) to ra mt PrintWriter khng c chc nng t dn t mt i tng Writer

- PrintWriter(Writer out, boolean autoFlush) to ra mt PrintWriter vi chc nng t dn t mt i tng Writer Sau y l mt v d v lung in n, v d ny in ra mt tp mt s nguyn, mt s thc v mt xu k t, sau khi chy chng trnh bn c th s dng lnh type ca DOS xem import java.io.*; public class DataIODemo1 { public static void main(String[] args) throws IOException { // write the data out PrintWriter out = new PrintWriter(new FileOutputStream("c:/a.txt")); out.println(10); out.println(1.2345); out.print("xau ki tu"); out.close(); } } Lung m V cc thao tc vi cng, mng thng lu hn rt nhiu so cc thao tc vi b nh trong, do vy chng ta cn phi c mt k thut no tng tc c/ghi, k thut chnh l vng m, vi vng m ta s gim c s ln c ghi lung, trong java ta c th to ra vng m vi cc lp BufferInputStream, BufferOutputStream, BufferReader, BufferWriter, thng thng bn s ni cc lung ca bn vo lung m. Cc phng thc to dng lung m:

public BufferInputStream( InputStream ) public BufferInputStream (InputStream in, int bufferSize) public BufferOutputStream ( OutputStream out) public BufferOutputStream ( OutputStream out, int bufferSize) public BufferReader ( Reader in) public BufferReader ( Reader in, int bufferSize) public BufferWriter ( Writer out) public BufferWriter ( Writer out, int bufferSize) Tp tin truy cp ngu nhin Tt c cc lung xt trn ch c th c, hoc ghi, chng khng th c ghi ng thi, ch duy nht c mt lp cho php ta c ghi ng thi, l lp RandomAccessFile, lp ny trin khai giao din InputData v OutputData, nn chng c tt c cc phng thc ca c 2 lp ny, ngoi ra chng cn c cc phng thc sau: - public void seek(long pos) chuyn con tr n v tr pos tnh t v tr u tin, ch v tr u tin tnh t 0 - public long getFilePointer() tr v v tr con tr tp tnh bng byte, k ta u tp - public long length() tr v di ca tp - public void writeChar(int v) ghi k t unicode ra tp vi byte cao c ghi trc - public final void writeChars(String s) ghi mt xu k t ra tp Tng t ging C/C++ khi bn m mt tp truy cp ngu nhin bn phi ch r ch lm vic l c r, hay ghi w hay c ghi ng thi rw, v d nh bn mun m tp a.txt theo ch c ghi ng thi th bn dng c php RandomAccessFile =new RandomAccessFile(C:/ a.txt, rw) Chng trnh di y minh ho cch dng lp RandomAccessFile. N ghi mt gi tr boolean, mt int, mt char, mt double ti mt file c tn abc.txt. N s dng phng php seek( ) tm v tr nh v bn trong tp tin (bt u t 1).

Sau n c gi tr s nguyn, k t v double t tp tin v hin th chng ra mn hnh. import java.lang.System; import java.io.RandomAccessFile; import java.io.IOException; public class rndexam{ public static void main (String args[ ]) throws IOException RandomAccessFile rf; rf = new RandomAccessFile(abc.txt, rw); rf.writeBoolean(true); rf.writeInt(67868); rf.writeChars(J); rf.writeDouble(678.68); //S dng phng thc seek() di chuyn con tr n byte th hai rf.seek(1); System.out.println(rf.readInt()); System.out.println(rf.readChar()); System.out.println(rf.readDouble()); rf.seek(0); System.out.println(rf.readBoolean)); rf.close(); } } Kt qu xut ra ca chng trnh: {

Lp File Lp File cung cp giao din chung x l h thng tp c lp vi mi trng ca cc my tnh. Mt ng dng c th s dng cc chc nng chnh ca File x l tp hoc cc th mc (directory) trong h thng tp. x l cc ni dung ca cc tp th s dng cc lp FileInputStream, FileOutputStream v RandomAccessFile. Lp File nh ngha cc thuc tnh ph thuc vo mi trng (platform) c s dng x l tp v tn gi cc ng dn trong cc th mc mt cch c lp vi mi trng. public static final char separatorChar public static final String separator nh ngha cc k hiu hoc cc xu s dng ngn cch cc thnh phn trong tn ca ng dn. K hiu / ngn cch cho Unix, \ c s dng ngn cch cc mc ca ng dn trong Window. V d: C:\book\Java l tn ng dn trong Window. public static final char pathSeparatorChar public static final String pathSeparator nh ngha cc k hiu hoc cc xu s dng ngn cch cc tp hoc tn th mc trong danh sch ca cc ng dn. K hiu ngn cch : cho Unix, ; c s dng phn cch cc ng dn trong Window.

V d: C:\book; C:\Java; D:\Anh\ABC; A:\Docs l danh sch cc ng dn trong Window. File(String pathName) Gn ng dn c tn pathName cho i tng ca lp File. pathName c th l ng dn tuyt i (c c tn a, tn ca tt c cc mc ln lt theo cy th mc) hoc ng dn tng i (bt u t th mc hin thi). V d: File ch1 = new File(File.separator + book + File.separator + chuong1); File(File direct, String filename) Gn tp c tn filename th mc direct cho i tng ca lp File. Nu direct l null th filename c x l th mc hin thi, ngc li tn ng dn s l i tng direct ghp vi separator v filename. V d: File mucNhap = new File(book + File.separator + duThao); File ch2 = new File(mucNhap, chuong1); Lp File c th s dng truy vn vo cc h thng tp bit c cc thng tin v tp v cc th mc. Lp File cung cp cc hm nhn c cc biu din ph thuc vo mi trng ca ng dn v cc thnh phn ca ng dn. String getName() Hm getName() cho li tn ca tp trong th mc ch nh. V d, tn ca C:\java\bin\javac l javac. String getPath() Hm getPath() cho li tn ca ng dn (tuyt i hoc tng i) cha tp ch nh. String getAbsolutePath() Hm getAbsolutePath() cho li tn ca ng dn tuyt i cha tp ch nh. long lastModified()

Hm ny cho li thi gian dng s long ca ln sa i tp ln cui cng. long length() Hm ny cho li kch thc ca tp tnh theo byte. boolean equals(Object obj) Hm ny so snh tn cc ng dn ca cc i tng tp, cho kt qu true nu chng ng nht vi nhau. boolean exists() boolean isFile() Hai hm ny cho kt qu true nu tp tn ti trn ng dn hin thi. boolean isDirectory() Hm ny cho kt qu true nu th mc tn ti trn a hin thi. boolean createNewFile() throws IOException Mt tp mi l rng c to ra th mc hin thi ch khi tp ny cha c. boolean mkdir() boolean mkdirs() To ra cc ng dn c xc nh trong i tng ca File. boolean renameTo(File dest) Hm ny i tn tp hin thi thnh dest. String[] list() Hm ny hin th danh sch cc tp th mc hin thi. boolean delete() Hm ny xo tp hin thi. V d 8.1 Vit chng trnh c v hin th cc tp trong mt th mc. import java.io.*; public class DirectoryLister{ public static void main(String args[]){ File entry; if (args.length==0){

System.err.println("Hay cho biet ten duong dan?"); return; } entry = new File(args[0]);// To ra i tng ca File ly tn t agrs[0] listDirectory(entry); // Hin th cc mc trong danh mc ch nh } public static void listDirectory(File entry) { try { if(!entry.exists()) { System.out.println(entry.getName() +"not found."); return; } if (entry.isFile()){ // Nu i s ca chng trnh l mt tp th hin th tp System.out.println(entry.getCanonicalPath()); } else if(entry.isDirectory()){ // Nu i s ca chng trnh l mt danh mc th c ra (list()) String[] fileName = entry.list(); if (fileName ==null)return; for (int i = 0; i<fileName.length; i++){ // To ra i tng ca File x l tng mc File item = new File(entry.getPath(), fileName[i]); // Gi qui hm listDirectory() hin th tng tp. listDirectory(item); } } }catch(IOException e){System.out.println("Error:" +e); }

} } Dch xong c th chy trong mi trng DOS: java DirectoryLister c:\users\lan Tt c cc tp trong danh mc c:\users\lan s c hin ln.

Chng 6 LP TRNH HO

Mt kh nng ca Java l cho php ta xy dng cc ng dng c giao din ho hay cn gi l GUI (Grapthical User Interface). Khi Java c pht hnh, cc thnh phn ho c tp trung vo th vin mang tn Abstract Window Toolkit (AWT). i vi mi h nn, thnh phn AWT s c nh x sang mt thnh phn nn c th, bng cch s dng trc tip m native ca h nn, chnh v vy n ph thuc rt nhiu vo h nn v n cn gy li trn mt s h nn. Vi bn pht hnh Java 2, cc thnh phn giao din c thay bng tp hp cc thnh phn linh hot, a nng, mnh m, c lp vi h nn thuc th vin Swing. Phn ln cc thnh phn trong th vin Swing u c t v trc tip trn canvas bng m lnh ca Java, ngoi tr cc thnh phn l lp con ca lp java.awt.Window hoc Java.awt.Panel vn phi c v bng GUI trn nn c th. Thnh phn Swing t ph thuc vo h nn hn do vy t gp li hn v c bit n s dng t ti nguyn ca h thng hn cc thnh phn trong th vin awt. Mc d cc thnh phn awt vn c h tr trong Java 2 nhng, tuy nhin Sun khuyn bn nn s dng cc thnh phn Swing thay cho cc thnh phn awt, tuy nhin cc thnh phn trong th vin Swing khng th thay tt c cc thnh phn trong th vin awt. Chng ch thay th mt phn ca awt nh: Button, Panel, TextFeild, v.v. Cn cc lp tr gip khc trong awt nh : Graphics, Color, Font, FontMetrics, v.v. vn khng thay i. Bn cnh cc thnh phn Swing cn s dng m hnh s l s kin ca awt. I. Gii thiu v h thng ho ca Java 1. Gii thiu chung Thit k API cho lp trnh ho ca Java l mt v d hon ho v cch dng

lp, s k tha v giao din. API cho lp trnh ho bao gm mt tp rt nhiu lp nhm tr gip xy dng cc thnh phn giao din khc nhau nh: ca s,nt n, vn bn, menu, hp kim, v.v. Mi quan h k tha gia cc thnh phn ny c m t trong hnh sau: 1 Componient y l lp (tru tng) cha ca mi lp giao din ngi dng. Lp ny cung cp cc thuc tnh, hnh vi c bn nht ca tt c cc thnh phn giao din. 2 Container L mt vt cha dng ghp nhm cc thnh phn giao din khc. Mi vt cha c mt lp qun l hin th, lp qun l hin th c trch nhim b tr cch thc hin th cc thnh phn bn trong. Hai vt cha hay c s dng nht la JFrame v JPanel. 3 Jcomponient L lp cha ca mi thnh phn Swing ligth weight, c v trc tip ln canvas bng m lnh Java. 4 Window c s dng to ra mt ca s, Thng thng ta hay s dng hai lp con ca n l JFrame v JDialog. 5 JFrame l ca s khng lng bn trong ca s khc. 6 JDialog l mt ca s c hin th di dng modal. 7 JAplet l lp cha ca mi lp ng dng aplet. 8 JPanel l mt vt cha, lu gi cc thnh phn giao din ngi dng. 9 Graphics l lp tru tng cung cp ng cnh ho v cc i tng ho nh: ng thng, ng trn, hnh nh 10 Color lp ny biu din mt mu sc. 11 Font lp ny biu th cho mt font ho. 12 FontMetrics l mt lp tru tng dng xc nh cc thuc tnh ca Font. Tt c cc thnh phn ho trong th vin Swing c nhm trong gi javax.swing. a s cc thnh phn trong th vin Swing u c tip u ng l J, V d mt nt lnh trong th vin Swing c tn l JButton, mt memu c tn l

JMenu. Tt c nhng lp khc c lit k trong hnh di y

Ch : ng pha trn cc thnh phn giao din swing v awt trong cng mt ng dng. Chng hn nh ng nn t mt JButton vo mt Panel v ng nn t Button vo JPanel. Vic lm ny c th gy li. Mt lp c k tha t lp JComponent c th hin trong hnh sau:

2. Mt s phng thc ca lp Component Lp Component cung cp cc thuc tnh, phng thc chung cho cc lp con ca n. Sau y l mt s phng thc ca lp Component : - Dimension getSize():cho li i tng thuc lp Dimension gm width (chiu rng), height (chiu cao) xc nh kch thc ca mt thnh phn tnh theo pixel. - void setSize(int width, int height) v void setSize(Dimension d) t li kch thc ca thnh phn. - Point getLocation(): cho li ta (kiu Point) trn cng bn tri (ta gc) ca thnh phn ang xt. - void setLocation(int x, int y) v void setLocation(Point p) t li cc ta c ch nh cho mt thnh phn. - Rectangle getBounds():cho li ng bin l hnh ch nht Rectangle bao gm

ta gc v chiu di, chiu rng ca hnh ch nht. - void setBounds(int x, int y) v void setBounds(Rectangle r):t li ng bin cho mt thnh phn. - void setForeground(Color c):c s dng t mu v cho thnh phn ha - void setBackground(Color c):t mu nn cho thnh phn ha. Cc tham s ca hai hm ny l i tng ca lp Color s c gii thiu phn sau. - Font getFont(): c s dng bit c font ca cc ch ang x l trong thnh phn ha. - void setFont(Font f):t li font ch cho mt thnh phn. - void setEnabled(boolean b):Nu i s b ca hm getEnabled() l true th thnh phn ang xt hot ng bnh thng, ngha l c kh nng kch hot (enable), c th tr li cc yu cu ca ngi s dng v sinh ra cc s kin nh mong mun. Ngc li, nu l false th thnh phn tng ng s khng kch hot c, ngha l khng th tr li c cc yu cu ca ngi s dng. - Lu : Tt c cc thnh phn giao din khi khi to u c kch hot - void setVisible(boolean b):Mt thnh phn ha c th c hin th ln mn hnh (nhn thy c) hoc b che giu ty thuc vo i s ca hm setVisible() l true hay false.

3. Lp Container Lp Container l lp con ca lp tru tng Component. Cc lp cha (lp con ca Container) cung cp tt c cc chc nng xy dng cc giao din ha ng dng, trong c phng thc add() c np chng dng b sung mt thnh phn vo vt cha v phng thc remove() cng c np chng g b mt thnh phn ra khi vt cha. 4. To ra Frame Lp JFrame l lp con ca lp Frame (Frame l lp con ca lp Window)

c s dng to ra nhng ca s cho cc giao din ng dng GUI. Kch bn chung to ra mt ca s l: 1. To ra mt frame c tiu g , v d My Frame : JFrame myWindow= new JFrame(My Frame); 2. Xy dng mt cu trc phn cp cc thnh phn bng cch s dng hm myWindow.getContentPane().add() b sung thm JPanel hoc nhng thnh phn giao din khc vo Frame: V d: myWindow.getContentPane().add(new JButton(OK));// a vo mt nt (JButton) c tn OK vo frame 3. t li kch thc cho frame s dng hm setSize(): myWindow.setSize(200, 300);// t li khung frame l 200 ( 300 4. Gi khung frame li bng hm pack(): myWindow.pack(); 5. Cho hin frame: myWindow.setVisible(true); II. Trnh qun l hin th trong Java Khi thit k giao din ha cho mt ng dng, chng ta phi quan tm n kch thc v cch b tr (layout) cc thnh phn giao din nh: JButton, JCheckbox, JTextField, v.v. sao cho tin li nht i vi ngi s dng. Java c cc lp m nhim nhng cng vic trn v qun l cc thnh phn giao din GUI bn trong cc vt cha. Bng sau cung cp bn lp qun l layout (cch b tr v sp xp) cc thnh phn GUI.

Tn lp FlowLayout

M t Xp cc thnh phn giao din trc tin theo hng t tri qua phi, sau theo ct t trn xung di. Cch sp xp ny l mc nh i vi Panel, JPanel ,Applet v JApplet.

GridLayout

Cc thnh phn giao din c sp xp trong cc li hnh ch nht ln lt theo hng t tri qua phi v theo ct t trn xung di trong mt phn t cha. Mi thnh phn giao din cha trong mt .

BorderLayout

Cc thnh phn giao din (t hn 5) c t vo cc v tr theo cc hng: north (bc), south (nam), west (ty), east (ng) v center (trung tm)). Cch sp xp ny l mc nh i vi lp Window, Frame, Jframe, Dialog v JDialog.

GridBagLayout Cho php t cc thnh phn giao din vo li hnh ch nht, nhng mt thnh phn c th chim nhiu nhiu hn mt . null Cc thnh phn bn trong vt cha khng c sp li khi kch thc ca vt cha thay i.

Cc phng php thit t layout ly v layout hay t li layout cho vt cha, chng ta c th s dng hai phng thc ca lp Container: LayoutManager getLayout(); void setLayout(LayoutManager mgr); Cc thnh phn giao din sau khi c to ra th phi c a vo mt phn t cha no . Hm add() ca lp Container c np chng thc hin nhim v a cc thnh phn vo phn t cha. Component add(Component comp) Component add(Component comp, int index)

Cmponent add(Component comp, Object constraints) Cmponent add(Component comp, Object constraints, int index) Trong , i s index c s dng ch ra v tr ca cn t thnh phn giao din comp vo. i s constraints xc nh cc hng a comp vo phn t cha. Ngc li, khi cn loi ra khi phn t cha mt thnh phn giao din th s dng cc hm sau: void remove(int index) void remove(Component comp) void removeAll()

1. Lp FlowLayout Lp FlowLayout cung cp cc hm to lp sp hng cc thnh phn giao din: FlowLayout() FlowLayout(int aligment) FlowLayout(int aligment, int horizongap, int verticalgap) public static final int LEFT public static final int CENTER public static final int RIGHT i s aligment xc nh cch sp theo hng: t tri, phi hay trung tm, horizongap v verticalgap l khong cch tnh theo pixel gia cc hng cc ct. Trng hp mc nh th khong cch gia cc hng, ct l 5 pixel.

2. Lp GridLayout Lp GridLayout cung cp cc hm to lp sp hng cc thnh phn giao din: GridLayout() GridLayout(int rows, int columns) GridLayout(int rows, int columns, int hoiongap, int verticalgap)

To ra mt li hnh ch nht c rows ( columns c khong cch gia cc hng cc ct l horizongap, verticalgap. Mt trong hai i s rows hoc columns c th l 0, nhng khng th c hai, GridLayout(1,0) l to ra li c mt hng.

3.Lp BorderLayout Lp BorderLayout cho php t mt thnh phn giao din vo mt trong bn hng: bc (NORTH), nam (SOUTH), ng (EAST), ty (WEST) v gia (CENTER). BorderLayout() BorderLayout(int horizongap, int verticalgap) To ra mt layout mc nh hoc c khong cch gia cc thnh phn (tnh bng pixel) l horizongap theo hng v verticalgap theo ct. Component add(Component comp) void add(Component comp, Object constraint) public static final String NORTH public static final String SOUTH public static final String EAST public static final String WEST public static final String CENTER Trng hp mc nh l CENTER, ngc li, c th ch nh hng t cc thnh phn comp vo phn t cha theo constraint l mt trong cc hng trn.

III. X l s kin trong Java Cc ng dng vi GUI thng c hng dn bi cc s kin (event). Vic nhn mt nt, m, ng cc Window hay g cc k t t bn phm, v.v. u

to ra cc s kin (event) v c gi ti cho chng trnh ng dng. Trong Java cc s kin c th hin bng cc i tng. Lp c s nht, lp cha ca tt c cc lp con ca cc s kin l lp java.util.EventObject.

Hnh H7-20 Cc lp x l cc s kin Cc lp con ca AWTEvent c chia thnh hai nhm: 1. Cc lp m t v ng ngha ca cc s kin, 2. Cc lp s kin mc thp. 1. ngha ca cc lp a. ActionEvent S kin ny c pht sinh bi nhng hot thc hin trn cc thnh phn ca

GUI. Cc thnh phn gy ra cc s kin hnh ng bao gm: 1 JButton - khi mt nt button c khch hot, 2 JList - khi mt mc trong danh sch c kch hot p, 3 JmenuItem, JcheckBoxMenu, JradioMenu - khi mt mc trong thc n c chn, 4 JTextField - khi g phm ENTER trong trng vn bn (text). b. AdjustmentEvent S kin ny xy ra khi ta iu chnh (adjustment) gi tr thanh cun (JScollBar) 1 Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar. Lp ny c phng thc int getValue(): cho li gi tr hin thi c xc nh bi ln cn chnh sau cng. c. ItemEvent Cc thnh phn ca GUI gy ra cc s kin v cc mc gm c: 1 JCheckbox - khi trng thi ca hp kim tra Checkbox thay i. 2 CheckboxMenuItem - khi trng thi ca hp kim tra Checkbox ng vi mc ca thc n thay i. 3 JRadioButton- khi trng thi ca hp chn (Option) thay i. 4 JList - khi mt mc trong danh sch c chn hoc b loi b chn. 5 JCompoBox - khi mt mc trong danh sch c chn hoc b loi b chn. Lp ItemEvent c phng thc Object getItem(): Cho li i tng c chn hay va b b chn. d. TextEvent Cc thnh phn ca GUI gy ra cc s kin v text gm c: 1 TextArea - khi kt thc bng nhn nt ENTER, 2 TextField - khi kt thc bng nhn nt ENTER.

e. ComponentEvent S kin ny xut hin khi mt thnh phn b n i/hin ra hoc thay thay i li kch thc. Lp ComponentEvent c phng thc: Component getComponent() Cho li i tng tham chiu kiu Component. f. ContainerEvent S kin ny xut hin khi mt thnh phn c b sung hay b loi b khi vt cha (Container). g. FocusEvent S kin loi ny xut hin khi mt thnh phn nhn hoc mt focus. h. KeyEvent Lp KeyEvent l lp con ca lp tru tng InputEvent c s dng x l cc s kin lin quan n cc phm ca bn phm. Lp ny c cc phng thc: int getKeyCode() - i vi cc s kin KEY_PRESSED hoc KEY_RELEASED, hm ny c s dng nhn li gi tr nguyn tng ng vi m ca phm trn bn phm. char getKeyChar() - i vi cc s kin KEY_PRESSED, hm ny c s dng nhn li gi tr nguyn, m Unicode tng ng vi k t ca bn phm. i. MouseEvent Lp MouseEvent l lp con ca lp tru tng InputEvent c s dng x l cc tn hiu ca chut. Lp ny c cc phng thc: int getX() int getY() Point getPoint()

Cc hm ny c s dng nhn li ta x, y ca v tr lin quan n s kin do chut gy ra. void translatePoint(int dx, int dy) Hm translate() c s dng chuyn ta ca s kin do chut gy ra n (dx, dy). int getClickCount() Hm getClickCount() m s ln kch chut. j. PaintEvent S kin ny xut hin khi mt thnh phn c v li, thc t s kin ny xy ra khi phng thc paint()/ update() c gi n. k. WindowEvent S kin loi ny xut hin khi thao tc vi cc Window, chng hn nh: ng, phng to, thu nh.. mt ca s. Lp ny c phng thc: Window getWindow() Hm ny cho li i tng ca lp Window ng vi s kin lin quan n Window xy ra.

Kiu s kin

Ngun gy ra s kin

Phng thc ang k, g b Giao i tng lng nghe Listener

din lng

nghe tng ng AcitionEvent JButton JList TexField AdjustmentEvent JScrollbar addComponentlistener removeActiontListener addAdjustmentListener removeAdjustmentListener ItemEvent JCheckbox addItemListener AdjustmentListe ner ItemListener AcitionListener

JCheckboxMenuItem JRadioButton JList JCompoBox

removeItemListener

TextEvent

JTextArea JTexField JTextPane JEditorPane

addTexListener removeTextListener

TextListener

ComponentEvent

Component

addComponentListener removeComponentListener

ComponentListe ner ContainerListen er

ContainerEvent

Container

addContainerListener removeContainerListener

FocusEvent

Component

addFocusListener removeFocusListener

FocusListener

KeyEvent

Component

addkeyListener removeKeyListener

KeyListener

MouseEvent

Component

addMouseListener remoMouseListener addMouseMotionListener remoMouseMotionListener

MouseMotionLi stener

WindowEvent

Window

addWindowListener removeWindowListener

WindowListener

3. Mt s lp iu hp Giao din Listener lng nghe AcitionListener AdjustmentListener ItemListener TextListener ComponentListener ContainerListener FocusListener KeyListener MouseMotionListener WindowListener Lp iu hp tng ng Khng c lp iu hp tng ng AdjustmentAdapter Khng c lp iu hp tng ng Khng c lp iu hp tng ng ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseMotionAdapter WindowAdapter

You might also like