Lp trnh hng i tng l phng php lp trnh ph bin hin nay. Bi ging Lp trnh hng i tng vi Java l mn hc cung cp cho sinh vin ngnh Cng ngh thng tin nhng kin thc c bn v phng php lp trnh hng i tng v bc u lm quen vi ngn ng lp trnh Java. y l ngn ng lp trnh m ngun m ca hng SunMicrosystem ang c s dng rng ri nh mt ngn ng lp trnh chuyn nghip. Bi ging dnh cho sinh vin h i hc v Cao ng ngnh Cng ngh thng tin trng i Hc Thnh . Bi ging ny c bin son da trn cng chi tit mn Lp trnh hng i tng vi Java ca khoa Cng ngh thng tin. Ni dung bi ging c bin son da trn nhiu ngun khc nhau nhm p ng tt nht cho vic hc trn lp cng nh t hc nh ca sinh vin h o to tn ch. Do bi ging c bin son ln u nn khng trch khi nhng thiu st rt mong cc qu thy c v cc bn sinh vin ng gp kin bi ging c hon thin hn. Xin chn thnh cm n! Bin son Trn Xun Thanh Khoa CNTT- trng H Thnh E-mail: txthanh@thanhdo.edu.vn. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 2
Mc lc
CHNG 1 : TNG QUAN V OOP V NGN NG JAVA ................................ 4 1.1. Tng quan v OOP ............................................................................................. 4 1.2. Tng quan v Java .............................................................................................. 6 Applets ....................................................................................................................... 9 ng dng thc thi qua dng lnh .............................................................................. 9 ng dng ha ....................................................................................................... 9 Servlet ........................................................................................................................ 9 ng dng c s d liu ........................................................................................... 10 CHNG 2 : CN BN V NGN NG JAVA ................................................... 13 2.1. Cc thnh phn ngn ng ................................................................................. 13 2.2. Bin, hng v cc kiu d liu ......................................................................... 14 2.3. Cc cu trc iu khin .................................................................................... 24 CHNG 3 : I TNG V LP ........................................................................ 31 3.1. i tng v lp............................................................................................... 31 3.2. Bin lp v phng thc lp ............................................................................ 32 3.3. Phng thc finalize() ...................................................................................... 36 3.4.Gi (packages) ................................................................................................... 37 3.5. ng gi (encapsulation) ................................................................................. 37 CHNG 4 : THA K V A HNH ................................................................... 39 4.1. Tha k (inheritance) ....................................................................................... 39 4.1.2. Khi bo phng thc chng ........................................................................ 39 4.2. a hnh (polymorphism) ................................................................................. 40 4.3. Phng thc tu tng v lp tru tng ....................................................... 42 4.4. Giao din (interface) ......................................................................................... 43 Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 3 4.5. Lp ni ............................................................................................................. 44 4.6. Lp v sinh ....................................................................................................... 44 4.7. V d minh ha ................................................................................................. 45 CHNG 5 : MNG V CHUI ............................................................................. 52 5.1. Mng 1 chiu .................................................................................................... 52 5.2. Chui (string) ................................................................................................... 54 5.3. Cc v d minh ho ........................................................................................... 57 CHNG 6: LP TRNH WINDOW VI AWT ..................................................... 62 6.1. Gii thiu chung ............................................................................................... 62 6.2. Cc container v cc component ...................................................................... 62 6.3. X l s kin .................................................................................................... 77 6.4. Cc v d minh ha ........................................................................................... 84 CHNG 7 : X L NGOI L (EXCEPTION) ................................................... 93 7.1. i tng Exception ........................................................................................ 93 7.2. Catch exception ................................................................................................ 94 7.3. Throw exception ............................................................................................... 97 7.4. Danh sch cc ngoi l ................................................................................... 100 CHNG 8: XUT NHP TP TIN ..................................................................... 101 8.1. Gii thiu chung ............................................................................................. 101 8.2. Cc loi tp tin ................................................................................................ 101 8.3. Nguyn tc c/ghi tp tin ............................................................................. 105 8.4.File truy cp ngu nhin (Random Access Files) ........................................... 111 8.5. S dng lung k t ....................................................................................... 113 8.6. Lp File .......................................................................................................... 117 8.7. Khi nim lung ............................................................................................. 118
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 4
CHNG 1 : TNG QUAN V OOP V NGN NG JAVA 1.1. Tng quan v OOP 1.1.1. Gii thiu chung Lp trnh hng i tng (object oriented programming- OOP), hay cn gi l lp trnh nh hng i tng, l k thut lp trnh h tr cng ngh i tng. OOP c xem l gip tng nng sut, n gin ha phc tp khi bo tr cng nh m rng phn mm bng cch cho php lp trnh vin tp trung vo cc i tng phn mm bc cao hn. Ngoi ra, nhiu ngi cn cho rng OOP d tip thu hn cho nhng ngi mi hc v lp trnh hn l cc phng php trc . Mt cch gin lc, y l khi nim v l mt n lc nhm gim nh cc thao tc vit m cho ngi lp trnh, cho php h to ra cc ng dng m cc yu t bn ngoi c th tng tc vi cc chng trnh ging nh l tng tc vi cc i tng vt l. Nhng i tng trong mt ngn ng OOP l cc kt hp gia m v d liu m chng c nhn nhn nh l mt n v duy nht. Mi i tng c mt tn ring bit v tt c cc tham chiu n i tng c tin hnh qua tn ca n. Nh vy, mi i tng c kh nng nhn vo cc thng bo, x l d liu (bn trong ca n), v gi ra hay tr li n cc i tng khc hay n mi trng
1.1.2. Mt s khi nim i tng (object): Cc d liu v ch th c kt hp vo mt n v y to nn mt i tng. n v ny tng ng vi mt chng trnh con v v th cc i tng s c chia thnh hai b phn chnh: phn cc phng thc (method) v phn cc thuc tnh (attribute). Trong thc t, cc phng thc ca i tng l cc hm v cc thuc tnh ca n l cc bin, cc tham s hay hng ni ti ca mt i tng (hay ni cch khc tp hp cc d liu ni ti to thnh thuc tnh ca i tng). Cc phng thc l phng tin s dng mt i tng trong khi cc thuc tnh s m t i tng c nhng tnh cht g. Cc phng thc v cc thuc tnh thng gn cht vi thc t Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 5 cc c tnh v s dng ca mt i tng. Cc i tng thng c tru tng ha qua vic nh ngha ca cc lp (class). Tp hp cc gi tr hin c ca cc thuc tnh to nn trng thi ca mt i tng. Mi phng thc hay mi d liu ni ti cng vi cc tnh cht c nh ngha (bi ngi lp trnh) c xem l mt c tnh ring ca i tng. Nu khng c g lm ln th tp hp cc c tnh ny gi chung l c tnh ca i tng. Lp trnh hng i tng l mt phng php lp trnh c cc tnh cht chnh sau: - Tnh tru tng (abstraction): y l kh nng ca chng trnh b qua hay khng ch n mt s kha cnh ca thng tin m n ang trc tip lm vic ln, ngha l n c kh nng tp trung vo nhng ct li cn thit. Mi i tng phc v nh l mt "ng t" c th hon tt cc cng vic mt cch ni b, bo co, thay i trng thi ca n v lin lc vi cc i tng khc m khng cn cho bit lm cch no i tng tin hnh c cc thao tc. Tnh cht ny thng c gi l s tru tng ca d liu. Tnh tru tng cn th hin qua vic mt i tng ban u c th c mt s c im chung cho nhiu i tng khc nh l s m rng ca n nhng bn thn i tng ban u ny c th khng c cc bin php thi hnh. Tnh tru tng ny thng c xc nh trong khi nim gi l lp tru tng hay lp c s tru tng. - Tnh ng gi (encapsulation) v che giu thng tin (information hiding): Tnh cht ny khng cho php ngi s dng cc i tng thay i trng thi ni ti ca mt i tng. Ch c cc phng thc ni ti ca i tng cho php thay i trng thi ca n. Vic cho php mi trng bn ngoi tc ng ln cc d liu ni ti ca mt i tng theo cch no l hon ton ty thuc vo ngi vit m. y l tnh cht m bo s ton vn ca i tng. - Tnh a hnh (polymorphism): Th hin thng qua vic gi cc thng ip (message). Vic gi cc thng ip ny c th so snh nh vic gi cc hm bn trong ca mt i tng. Cc phng thc dng tr li cho mt thng ip s ty theo i tng m thng ip c gi ti s c phn ng khc nhau. Ngi lp trnh c th nh ngha mt c tnh (chng hn thng qua tn ca cc phng thc) cho mt lot cc i tng gn nhau nhng khi thi hnh th dng cng mt tn gi m s thi hnh ca mi i tng s t ng xy ra tng ng theo c tnh ca tng i tng m khng b nhm ln. Th d khi nh ngha hai i tng "hinh_vuong" v "hinh_tron" th c mt phng thc chung l "chu_vi". Khi gi phng thc ny th nu i tng l "hinh_vuong" n s tnh theo cng thc khc vi khi i tng l "hinh_tron". Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 6 - Tnh k tha (inheritance): c tnh ny cho php mt i tng c th c sn cc c tnh m i tng khc c thng qua k tha. iu ny cho php cc i tng chia s hay m rng cc c tnh sn c m khng phi tin hnh nh ngha li. Tuy nhin, khng phi ngn ng nh hng i tng no cng c tnh cht ny. 1.2. Tng quan v Java 1.2.1 Lch s pht trin Java l g? Java l ngn ng lp trnh hng i tng (ta C++) do Sun Microsystem a ra vo gia thp nin 90. Chng trnh vit bng ngn ng lp trnh java c th chy trn bt k h thng no c ci my o java (Java Virtual Machine-JVM). Ngn ng lp trnh Java do James Gosling v cc cng s ca Cng ty Sun Microsystem pht trin. u thp nin 90, Sun Microsystem tp hp cc nh nghin cu thnh lp nn nhm t tn l Green Team. Green c trch nhim xy dng cng ngh mi cho ngnh in t tiu dng. gii quyt vn ny nhm nghin cu pht trin xy dng mt ngn ng lp trnh mi t tn l Oak tng t nh C++ nhng loi b mt s tnh nng nguy him ca C++ v c kh nng chy trn nhiu nn phn cng khc nhau. Cng lc world wide web bt u pht trin v Sun thy c tim nng ca ngn ng Oak nn u t ci tin v pht trin. Sau khng lu ngn ng mi vi tn gi l Java ra i v c gii thiu nm 1995. Java l tn gi ca mt hn o Indonexia, l ni nhm nghin cu pht trin chn t tn cho ngn ng lp trnh Java trong mt chuyn i tham quan v lm vic trn hn o ny. Hn o Java ny l ni rt ni ting vi nhiu khu vn trng cafe, chnh l l do chng ta thng thy biu tng ly caf trong nhiu sn phm phn mm, cng c lp trnh Java ca Sun cng nh mt s hng phn mm khc a ra.
1.2.2 c im ngn ng Sun Microsystem chu trch nhim pht trin cc my o Java chy trn cc h iu hnh trn cc kin trc CPU khc nhau. - Thng dch: Java l mt ngn ng lp trnh va bin dch va thng dch. Chng trnh ngun vit bng ngn ng lp trnh Java c ui *.java u tin c bin dch thnh tp tin c ui *.class v sau s c trnh thng dch thng dch thnh m my. - c lp nn: Mt chng trnh vit bng ngn ng Java c th chy trn nhiu my tnh c h iu hnh khc nhau (Windows, Unix, Linux, ) min sao c ci t my o java (Java Virtual Machine). Vit mt ln chy mi ni (write once run anywhere). Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 7
H nh 1.1 Cch bin dch truyn thng 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. Hnh 2.1 th hin qu trnh thc thi chng trnh vit bng C++ trn cc loi my khc nhau. Qu trnh thc thi chng trnh vit bng Java trn cc loi my khc nhau:
H nh 1.2 Dch chng trnh Java
- Hng i tng: Hng i tng trong Java tng t nh C++ nhng Java l mt ngn ng lp trnh hng i tng hon ton. Tt c mi th cp n trong Java u lin quan n cc i tng c nh ngha trc, thm ch hm chnh ca mt chng trnh vit bng Java ( l hm main) cng phi t bn trong mt lp. Hng i tng trong Java khng c tnh a k tha (multi inheritance) nh trong C++ m thay vo Java a ra khi nim interface h tr tnh a k tha. Vn ny s c bn chi tit trong chng 3. - a nhim - a lung (MultiTasking - Multithreading): Java h tr lp trnh a nhim, a lung cho php nhiu tin trnh, tiu trnh c th chy song song cng mt thi im v tng tc vi nhau. - Kh chuyn (portable): Chng trnh ng dng vit bng ngn ng Java ch cn chy c trn my o Java l c th chy c trn bt k my tnh, h iu hnh no c my o Java. Vit mt ln, chy mi ni (Write Once, Run Anywhere). Macinto sh Trnh bin dch
Bytecode c lp nn (Platform independent)
Trnh thng dch Java
(Java Interpreter) IB M Spar c
Macintosh compile r compile r compile r IB M M Spar c Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 8 - H tr mnh cho vic pht trin ng dng: Cng ngh Java pht trin mnh m nh vo i gia Sun Microsystem cung cp nhiu cng c, th vin lp trnh phong ph h tr cho vic pht trin nhiu loi hnh ng dng khc nhau c th nh: J2SE (Java 2 Standard Edition) h tr pht trin nhng ng dng n, ng dng client-server; J2EE (Java 2 Enterprise Edition) h tr pht trin cc ng dng thng mi, J2ME (Java 2 Micro Edition) h tr pht trin cc ng dng trn cc thit b di ng, khng dy, 1.2.3 Mi trng pht trin ng dng vit m ngun java chng ta c th s dng trnh son tho NotePad hoc mt s mi trng pht trin h tr ngn ng java nh: Jbuilder ca hng Borland, Visual Caf ca hang Symantec, JDeveloper ca hng Oracle, Visual J++ ca Microsoft, NetBean ca hng Sun Microsystem, Jcreator ca XINOX software Trong khun kh gio trnh ny cng nh hng dn sinh vin thc hnh chng ti dng cng c JCreator LE v3.50 c th download ti http://www.jcreator.com/download.htm hoc NetBean 7.0 c th download ti http://www.netbeans.org/downloads/. B cng c pht trin JDK (Java Development Kit) Sun Microsystem a ra ngn ng lp trnh Java qua sn phm c tn l Java Development Kit (JDK). Ba phin bn chnh l: Java 1.0 - S dng ln u vo nm 1995 Java 1.1 a ra nm 1997 vI nhiu u im hn phin bn trc. Java 2 Phin bn mi nht JDK bao gm Java Plug-In, chng cho php chy trc tip Java Applet hay JavaBean bng cch dng JRE thay cho s dng mi trng thc thi m c nh ca trnh duyt. JDK cha cc cng c sau: - Trnh bin dch, 'javac' C php: javac [options] sourcecodename.java - Trnh thng dch, 'java' C php: java [options] classname - Trnh dch ngc, 'javap' Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 9 javap dch ngc bytecode v in ra thng tin v cc thuc tnh (cc trng), cc phng thc ca mt lp. C php: javap [options] classname - Cng c sinh ti liu, 'javadoc' Tin ch ny cho php ta to ra tp HTML da trn cc li gii thch trong m chng trnh (phn nm trong cp du /*.... */). C php: javadoc [options] sourcecodename.java - Chng trnh tm li - Debug, 'jdb C php: jdb [options] sourcecodename.java Hay jdb -host -password [options] sourcecodename.java 1.2.4 Cu trc ng dng Java Chng ta c th xy dng cc loi chng trnh Java nh sau: Applets Applet l chng trnh c to ra s dng trn Internet thng qua cc trnh duyt h tr Java nh IE hay Netscape. Bn c th dng Java xy dng Applet. 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. ng dng thc thi qua dng lnh 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. ng dng ha y l cc chng trnh Java chy c lp cho php ngi dng tng tc qua giao din ha. 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 Servlet. hoc Applet ti my ch. X l Form ca HTML l cch s dng n gin nht Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 10 ca 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. 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.
1.2.5 Cc cu trc chng trnh Java Chng trnh JAVA u tin Chng ta hy bt u t chng trnh Java c in nht vi mt ng dng n gin. Chng trnh sau y cho php hin th mt thng ip: // This is a simple program called First.java class First { public static void main(String args[]) { System.out.println(My first program in Java); } } Tn file ng vai tr rt quan trng trong Java. Chng trnh bin dch Java chp nhn phn m rng .java. Trong Java, m lnh phi nm trong cc lp. Bi vy tn lp v tn file phi trng nhau. Java phn bit ch hoa v ch thng (case-sensitive). V d tn file First v first l hai file khc nhau. bin dch m ngun, ta s dng trnh bin dch java. Trnh bin dch xc nh tn ca file ngun ti dng lnh nh m t di y: C:\jdk1.2.1\bin>javac First.java Trnh dch java to ra file First.class cha cc m bytecodes. Nhng m ny cha th thc thi c. chng trnh thc thi c ta cn dng trnh thng dch java interpreter Lnh c thc hin nh sau: C:\jdk1.2.1\bin>java First Kt qu s hin th trn mn hnh nh sau: My first program in Java Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 11
Phn tch chng trnh u tin // This is a simple program called First.java K hiu // dng thuyt minh dng lnh. Trnh bin dch s b qua dng thuyt minh ny. Java cn h tr thuyt minh nhiu dng. Loi thuyt minh ny c th bt u vi /* v kt thc vi */ /*This is a comment that extends to two lines*/ / *This is a multi line comment */ Dng k tip khai bo lp c tn First. to mt lp thm ta bt u vi t kho class, k n l tn lp (v cng chnh l tn file).
class First Tn lp ni chung nn bt u bng ch in hoa. T kho class khai bo nh ngha lp. First l tn ca lp. Mt nh ngha lp nm trn vn nm gia hai ngoc mc m ({) v ng (}). Cc ngoc ny nh du bt u v kt thc mt khi lnh.
public static void main(String args[ ]) y l phng thc chnh, t y chng trnh bt u vic thc thi ca mnh. Tt c cc ng dng java u s dng mt phng thc main ny. Chng ta s tm hiu tng t trong lnh ny. T kho public l mt ch nh truy xut. N cho bit thnh vin ca lp c th c truy xut t bt c u trong chng trnh. Trong trng hp ny, phng thc main c khai bo public, bi vy JVM c th truy xut phng thc ny. T kho static cho php main c gi ti m khng cn to ra mt th hin (instance) ca lp. Nhng trong trng hp ny, bn copy ca phng thc main c php tn ti trn b nh, thm ch khng c mt th hin ca lp c to ra. iu ny rt quan trng v JVM trc tin gi phng thc main thc thi chng trnh. V l do ny phng thc main cn phi l tnh (static). N khng ph thuc vo cc th hin ca lp c to ra. T kho void thng bo cho my tnh bit rng phng thc s khng tr li bt c gi tr no khi thc thi chng trnh. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 12 Phng thc main() s thc hin mt s tc v no , n l im mc m t tt c cc ng dng Java c khi ng. String args[] l tham s dng trong phng thc main. Cc bin s trong du ngoc n nhn tng thng tin c chuyn vo main. Nhng bin ny l cc tham s ca phng thc. Thm ch ngay khi khng c mt thng tin no c chuyn vo main, phng thc vn c thc hin vi cc d liu rng khng c g trong du ngoc n. args[] l mt mng kiu String. Cc i s (arguments) t cc dng lnh c lu vo mng. M nm gia du ngoc mc ({ }) ca main c gi l method block. Cc lnh c thc thi trong main cn c vit trong khi ny.
System.out.println(My first program in Java); Dng lnh ny hin th chui My first program in Java trn mn hnh. Pht biu println() to ra mt cng xut (output). Phng thc ny cho php hin th chui c truyn vo ra System.out. y System l mt lp nh trc, n cho php truy nhp vo h thng v out l mt chui xut c kt ni vi du nhc (console).
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 13
CHNG 2 : CN BN V NGN NG JAVA 2.1. Cc thnh phn ngn ng Phn u ca mt chng trnh Java xc nh thng tin mi trng. lm c vic ny, chng trnh c chia thnh cc lp hoc cc gi ring bit. Nhng gi ny s c ch dn trong chng trnh. Thng tin ny c ch ra vi s tr gip ca lnh nhp import. Mi chng trnh c th c nhiu hn mt lnh nhp. Di y l mt v d v lnh nhp: import java. awt.*; Lnh ny nhp gi awt. Gi ny dng to cc i tng GUI. y java l tn ca th mc cha gi awt. K hiu * ch tt c cc lp thuc gi ny. Trong java, tt c cc m, bao gm cc bin v cch khai bo nn c thc hin trong phm vi mt lp. Bi vy, tng khai bo lp c tin hnh sau lnh nhp. Mt chng trnh n gin c th ch c mt vi lp. Nhng lp ny c th m rng thnh cc lp khc. Mi lnh u c kt thc bi du chm phy ;. Chng trnh cn c th bao gm cc ghi ch, ch dn. Khi dch, chng trnh dch s t loi b cc ghi ch ny. Dng c bn ca mt lp c xc nh nh sau : Import java.io.*; class classname { /* y l dng ghi ch*/ int num1,num2; // Khai bo bin vi cc du phy gia cc bin Show() { // Method body statement (s); // Kt thc bi du chm phy } } Token l n v ring l, nh nht, c ngha i vi trnh bin dch ca mt chng trnh Java. Mt chng trnh java l tp hp ca cc token Cc token c chia thnh nm loi: Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 14 nh danh (identifiers): Dng th hin tn bin, phng thc, hoc cc lp. Chng trnh bin dch s xc nh cc tn ny l duy nht trong chng trnh. Khi khai bo nh danh cn lu cc im sau y: Mi nh danh c bt u bng mt ch ci, mt k t gch di (_) hay du $. Cc k t tip theo c th l ch ci, ch s, du $ hoc mt k t c gch di. Mi nh danh ch c cha hai k t c bit ny l du gch di (_) v du $. Ngoi ra khng c php s dng bt k k t c bit no khc. Cc nh danh khng c cha du cch (space). T kho/t d phng (Keyword/Reserve Words): Mt s nh danh c Java xc nh trc. Ngi lp trnh khng c php s dng chng nh mt nh danh. V d class, import l nhng t kho. K t phn cch (separator): Thng bo cho trnh bin dch vic phn nhm cc phn t ca chng trnh. Mt vi k t phn cch ca java c ch ra di y: { } ; , Nguyn dng (literals): L cc gi tr khng i trong chng trnh. Nguyn dng c th l cc s, chui, cc k t hoc cc gi tr Boolean. V d 21, A, 31.2, This is a sentence l nhng nguyn dng. Cc ton t: Cc qu trnh nh gi, tnh ton c thc hin trn d liu hoc cc i tng. Java c mt tp ln cc ton t. Chng ta s tho lun chi tit chng ny. 2.2. Bin, hng v cc kiu d liu Cc ng dng lun x l d liu u vo v xut d liu kt qu u ra. u vo, u ra, v kt qu ca cc qu trnh tnh ton u lin quan n d liu. Trong mi trng tnh ton, d liu c phn lp theo cc tiu ch khc nhau ph thuc vo bn cht ca n. mi tiu ch, d liu c mt tnh cht xc nh v c mt kiu th hin ring bit. Java cung cp mt vi kiu d liu. Chng c h tr trn tt c cc nn. V d, d liu loi int (integer) ca Java c th hin bng 4 bytes trong b nh ca tt c cc loi my bt lun u chy chng trnh Java. Bi vy cc chng trnh Java khng cn phi thay i khi chy trn cc nn khc nhau. 2.2.1. Trong Java kiu d liu c chia thnh hai loi: - Cc kiu d liu nguyn thy (primitive) Kiu d liu di theo Phm vi biu din M t Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 15 s bit gi tr byte 8 -128 n 127 S liu kiu byte l mt loi in hnh dng lu tr mt gi tri bng mt byte. Chng c s dng rng ri khi x l mt file vn bn char 16 \u0000 to u\ffff Kiu Char s dng lu tn hoc cc d liu k t .V d tn ngI lao ng boolean 1 True hoc False D liu boolean dng lu cc gi tr ng hoc sai V d : Ngi lao ng c p ng c yu cu ca cng ty hay khng ? short 16 -32768 n 32767 Kiu short dng lu cc s c gi tr nh di 32767.V d s lng ngi lao ng. int 32 -2,147,483,648 n +2,147,483,648 Kiu int dng lu mt s c gi tr ln n 2,147,483,648.V d tng lng m cng ty phi tr cho nhn vin. long 64 - 9,223,372,036854,7 75,808 n +9,223,372,036854, 775,808 Kiu long c s dng lu mt s c gi tr rt ln n 9,223,372,036854,775,808 .V d dn s ca mt nc float 32 -3.40292347E+38 n +3.40292347E+38 Kiu float dng lu cc s thp phn n 3.40292347E+38 V d : gi thnh sn phm Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 16 double 64 - 1,797693134862315 70E+308 n +1,79769313486231 570E+308 Kiu double dng lu cc s thp phn c gi tr ln n 1,79769313486231570E+308 V d gi tr tn dng ca ngn hng nh nc. Bng 2.1 Kiu d liu nguyn thu - Kiu d liu tham chiu (reference) Kiu d liu M t Mng (Array) Tp hp cc d liu cng kiu. V d : tn sinh vin Lp (Class) Tp hp cc bin v cc phng thc.V d : lp Sinhvin cha ton b cc chi tit ca mt sinh vin v cc phng thc thc thi trn cc chi tit . Giao din (Interface) L mt lp tru tng c to ra cho php ci t a tha k trong Java. Bng 2.2 Kiu d liu tham chiu 2.2.2. p kiu (Type casting) C th bn s gp tnh hung khi cng mt bin c dng integer vi mt bin c dng float. x l tnh hung ny, Java s dng tnh nng p kiu (type casting) ca cc phn mm trc C, C++. Lc ny mt kiu d liu s chuyn i sang kiu khc. Khi s dng tnh cht ny, bn cn thn trng v khi iu chnh d liu c th b sai gi tr. on m sau y thc hin php cng mt gi tr du phy ng (float) vi mt gi tr nguyn (integer). float c=34.896751f; int b = (int)c +10; u tin gi tr du phy ng c c i thnh gi tr nguyn 34. Sau n c cng vi 10 v kt qu l gi tr 44 c lu vo b. S ni rng (widening) qu trnh lm trn s theo hng ni rng khng lm mt thng tin v ln ca mi gi tr.Bin i theo hng ni rng chuyn mt gi tr sang mt dng khc c rng ph hp hn so vi nguyn bn. Bin i theo hng li thu nh li (narrowwing) lm mt thng tin v ln ca gi tr c chuyn i. Chng khng c thc hin khi thc hin php gn. v d trn gi tr thp phn sau du phy s b mt. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 17 2.2.3. Cc bin Cc ng dng s dng cc bin lu tr cc d liu cn thit hoc cc d liu c to ra trong qu trnh thc thi chng trnh. Cc bin c xc nh bi mt tn bin v c mt phm vi tc ng. Phm vi tc ng ca bin c xc nh mt cch r rng trong chng trnh. Mi bin c khai bo trong mt khi chng trnh ch c tc ng trong phm vi khi , khng c ngha v khng c php truy nhp t bn ngoi khi. Vic khai bo mt bin bao gm 3 thnh phn: kiu bin, tn ca n v gi tr ban u c gn cho bin (khng bt buc). khai bo nhiu bin ta s dng du phy phn cch cc bin, Khi khai bo bin, lun nh rng Java phn bit ch thng v ch in hoa (case - sensitive). C php: Datatype indentifier [=value] [, indentifier[=value] ]; V d: khai bo mt bin nguyn (int) c tn l counter dng lu gi tr ban u l 1, ta c th thc hin pht biu sau y: int counter = 1; Java c nhng yu cu hn ch t tn bin m bn c th gn gi tr vo. Nhng hn ch ny cng ging cc hn ch khi t tn cho cc nh danh m ta tho lun cc phn trc ca chng ny. 2.2.4. Hng s Hng s l nhng gi tr khng thay i trong qu trnh x l tnh ton. Trong Java hng c khai bo bng t kha final V d: final float PI=3.14f; 2.2.5. Ton t (Operation) Mt chng trnh thc t bao hm vic to ra cc bin. Cc ton t kt hp cc gi tr n hoc cc biu thc con thnh nhng biu thc mi, phc tp hn v c th tr v gi tr. iu ny lin quan n vic thc hin cc php ton logic, s hc, quan h v so snh trn cc biu thc. a. Cc ton t s hc Cc ton hng ca cc ton t s hc phi dng s. Cc ton hng kiu boolean khng s dng c, song cc ton hng k t cho php s dng loi ton t ny. Mt vi kiu ton t c lit k trong bng di y.
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 18 Ton t M t + Cng.Tr v gi tr tng hai ton hng V d: 5+3 tr v kt qu l 8 - Tr Tr v gi tr khc nhau gia hai ton hng hoc gi tr ph nh ca ton hng. V d: 5-3 kt qu l 2 v 10 tr v gi tr m ca 10 * Nhn Tr v gi tr l tch hai ton hng. V d: 5*3 kt qu l 15 / Chia Tr v gi tr l thng ca php chia V d: 6/3 kt qu l 2 % Php ly modulo Gi tr tr v l phn d ca php chia V d: 10%3 gi tr tr v l 1 ++ Tng dn Tng gi tr ca bin ln 1. V d a++ tng ng vi a= a+1 -- Gim dn Gim gi tr ca bin 1 n v. V d a-- tng ng vi a=a-1 += Cng v gn gi tr Cng cc gi tr ca ton hng bn tri vo ton hng bn phi v gn gi tr tr v vo ton hng bn tri. V d: c+=a tng ng c=c+a -= Tr v gn gi tr Tr cc gi tr ca ton hng bn tri vo ton ton hng bn phi v gn gi tr tr v vo ton hng bn tri. V d: c-= a tng ng vI c=c-a *= Nhn v gn Nhn cc gi tr ca ton hng bn tri vi ton ton hng bn phi v gn gi tr tr v vo ton hng bn tri. V d: c *= a tng ng vi c=c*a /= Chia v gn Chia gi tr ca ton hng bn tri cho ton ton hng bn phi v gn gi tr tr v vo ton hng bn tri. V d: c /= a tng ng vi c=c/a Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 19 %= Ly s d v gn Chia gi tr ca ton hng bn tri cho ton ton hng bn phi v gn gi tr s d vo ton hng bn tri. V d: c%=a tng ng vi c=c%a Bng 2.2 Cc ton t s hc Chng trnh sau m t vic s dng ton t s hc class ArithmeticOp { public static void main(String args[]){ int p=5,q=12,r=20,s; s=p+q; System.out.println(p+q is +s); s=p%q; System.out.println(p%q is +s); s*=r; System.out.println(s*=r is +s); System.out.println(Value of p before operation is +p); p++; System.out.println(Value of p after operation is +p); double x=25.75,y=14.25,z; z=x-y; System .out.println(x-y is +z); z-=2.50; System.out.println(z-=2.50 is +z); System.out.println(Value of z before operation is+z); z--; System.out.println(Value of z after operation is+z); z=x/y; System .out.println(x/y is +z); } } u ra ca chng trnh l: p+q is 17 Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 20 p%q is 5 s*=r is 100 Value of p before operation is 9.0 Value of z after operation is 8.0 x/y is 1.8070175438596429 b. Ton t Bit Cc ton t dang Bit cho php ta thao tc trn tng Bit ring bit trong cc kiu d liu nguyn thu. Ton t Bit da trn c s i s Boolean. N thc hin php tnh trn hai bit c v tr tng ng trn hai ton hng to ra mt kt qa mi. Mt vi dng ton t kiu ny c lit k di y Ton t M t ~ Ph nh bit (NOT) Tr v gi tr m ca mt s. V d a=10 th ~a=-10 & Ton t AND Tr v gi tr l 1 nu cc ton hng l 1 v 0 trong cc trng hp khc. V d nu a=1v b=0 th a&b tr v gi tr 0 | Ton t OR Tr v gi tr l 1 nu mt trong cc ton hng l 1 v 0 trong cc trng hp khc. V d nu a=1v b=0 th a | b tr v gi tr 1 ^ Exclusive OR Tr v gi tr l 1 nu ch mt trong cc ton hng l 1 v tr v 0 trong cc trng hp khc. V d nu a=1v b=1 th a^b tr v gi tr 0 >> Dch sang phi Chuyn ton b cc bt cu mt s sang phi mt v tr, gi nguyn du ca s m. Ton hng bn tri l s b dch cn s bn phi ch s v tr m cc bt cn dch. V d x=31 tc l 00011111 vy x>>2 s l 00000111. << Dch sang tri Chuyn ton b cc bt cu mt s sang tri mt v tr, gi nguyn du cu s m. Ton hng bn tri l s b dch cn s bn phi ch s v tr m cc bt cn dch. Bng 2.3 Cc ton t Bit Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 21 c. Cc ton t quan h Cc ton t quan h kim tra mi quan h gia hai ton hng. Kt qu ca mt biu thc c dng cc ton t quan h l nhng gi tr Boolean (logic ng hoc sai). Cc ton t quan h c s dng trong cc cu trc iu khin. Ton t M t = = So snh bng Ton t ny kim tra s tng ng ca hai ton hng V d if (a= =b) tr v gi tri True nu gi tr ca a v b nh nhau != So snh khc Kim tra s khc nhau ca hai ton hng V d if (a!=b) Tr v gi tr true nu a khc b > Ln hn Kim tra gi tr ca ton hng bn phi ln hn ton hng bn tri hay khng V du if(a>b) . Tr v gi tr true nu a ln hn b,ngc lai (nh hn hoc bng ), tr v False < Nh hn Kim tra gi tr ca ton hng bn phi c nh hn ton hng bn tri hay khng V du if(a<b) . Tr v gi tr true nu a nh hn b , ngc li (ln hn hoc bng tr v False >= Ln hn hoc bng Kim tra gi tr ca ton hng bn phi c ln hn hoc bng ton hng bn tri hay khng V du if(a>=b) . Tr v gi tr true nu a ln hn hoc bng b , ngc li (nh hn tr v False <= Nh hn hoc bng Kim tra gi tr ca ton hng bn phi c nh hn hoc bng ton hng bn tri hay khng V du if(a<=b) . Tr v gi tr true nu a nh hn hoc bng b , ngc li (ln hn tr v false) Bng 2.4 Cc ton t quan h on chng trnh sau y m t vic s dng cc ton t quan h class RelationalOp { public static void main (String args[]){ float a= 10.0f; double b=10.0; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 22 if (a== b) System.out.println(a and b are equal); else System.out.println(a and b are not equal); } } Kt qu chng trnh s hin th: a and b are not equal Trong chng trnh trn c a v b l nhng s c du phy ng, dng d liu c khc nhau, a l kiu float cn b l kiu double. Tuy vy chng khng phi l cng mt kiu. Bi vy khi kim tra gi tr ca cc ton hng, kiu d liu cn phi c kim tra. d. Cc ton t logic Cc ton t logic lm vic vi cc ton hng Boolean. Mt vi ton t kiu ny c ch ra di y Ton t M t && V (AND) Tr v mt gi tr ng (True) nu ch khi c hai ton t c gi tr True V d: if (sciencemarks>90) && (mathmarks>75) th gn Y cho bin c nhn hc bng || Hoc (OR) Tr v gi tr True nu mt gi tr l True hoc c hai u l True V d Nu age_category is Senior_citizen || special_category is handicapped th gim gi tua l hnh. Gi cng s c gim nu t nht mt iu kin c tha mn ! Ton hng n t NOT. Chuyn gi tr t True sang False v ngc li. V d: Qu trnh thc thi cc dng lnh tip tc cho n khi kt thc chng trnh. Bng 2.5 Cc ton t logic e. Cc 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 C php : <biu thc 1> ? <biu thc 2>: <biu thc 3>; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 23 biu thc 1 Biu thc logic. Tr tr v gi tr True hoc False biu thc 2 Gi tr tr v nu biu thc 1 xc nh l True biu thc 3 Gi tr tr v nu biu thc 1 xc nh l False Cu lnh sau y kim tra c nhng ngi i lm bng v thng c tui ln hn 65 khng v gn mt tiu chun cho h. Nu nhng ngi ny c tui l 55, tiu chun gn l Regular CommuterCategory =(CommuterAge>65)?Senior Citizen: Regular f. Ton t gn Ton t gn (=) dng gn mt gi tr vo mt bin. Bn c th gn nhiu gi tr n nhiu bin cng mt lc. V d on lnh sau gn mt gi tr cho bin num. Th gi tr trong bin num c gn cho nhiu bin trn mt dng lnh n. int num = 20000; int p,q,r,s; p=q=r=s=num; Dng lnh cui cng c thc hin t phi qua tri. u tin gi tr bin num c gn cho s, sau gi tr ca s c gn cho r v c tip nh vy. g. Th t u tin ca cc ton t Cc biu thc c vit ra ni chung gm nhiu ton t. Th t u tin quyt nh trt t thc hin cc ton t trn cc biu thc. Bng di y lit k th t thc hin cc ton t trong Java Th t Ton t 1. Cc ton t n nh +,-,++,-- 2. Cc ton t s hc v cc ton t dch nh *,/,+,-,<<,>> 3. Cc ton t quan h nh >,<,>=,<=,= =,!= 4. Cc ton t logic v Bit nh &&,II,&,I,^ 5. Cc ton t gn nh =,*=,/=,+=,-= Bng 2.6 Th t u tin Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 24 h. Thay i th t u tin thay i th t u tin trn mt biu thc, bn c th s dng du ngoc n (). Tng phn ca biu thc c gii hn trong ngoc n c thc hin trc tin. Nu bn s dng nhiu ngoc n lng nhau th ton t nm trong ngoc n pha trong s thc thi trc, sau n cc vng pha ngoi. Nhng trong phm vi mt ngoc n th quy tc th t u tin vn gi nguyn tc dng. 2.3. Cc cu trc iu khin 2.3.1. Cu lnh if-else Cu lnh if-else kim tra kt qu ca mt iu kin v thc thi mt thao tc ph hp trn c s kt qu . Dng ca cu lnh if-elsse rt n gin C php If (conditon) { action 1 statements; } else { action 2 statements; } Condition: Biu thc Boolean nh ton t so snh. Biu thc ny tr v gi tr True hoc False action 1: Cc dng lnh c thc thi khi gi tr tr v l True else: T kho xc nh cc cu lnh tip sau c thc hin nu iu kin tr v gi tr False action 2: Cc cu lnh c thc thi nu iu kin tr v gi tr False V d: on chng trnh sau kim tra xem cc s l chn hay l v hin th thng bo ph hp class CheckNumber { public static void main(String args[]) { int num =10; if(num %2 == 0) System.out.println (num+ is an even number); else Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 25 System.out.println (num +is an odd number); } } on chng trnh trn num c gn gi tr nguyn l 10. Trong cu lnh if-else iu kin num %2 tr v gi tr 0 v iu kin thc hin l True. Thng bo 10 is an even number c in ra. Lu rng cho n gi ch c mt cu lnh tc ng c vit trong on if v else, bi vy khng cn phi c a vo du ngoc mc. 2.3.2. Cu lnh switch-case Pht biu switch-case c th c s dng ti cu lnh if-else. N c s dng trong tnh hung mt biu thc cho ra nhiu kt qu. Vic s dng cu lnh switch-case cho php vic lp trnh d dng v n gin hn. C php swich (expression) { case value:action 1 statement; break; case value:action 2 statement; break; : : case valueN: actionN statement; break; default: default_action statement; } expession - Bin cha mt gi tr xc nh value1,value 2,.valueN: Cc gi tr hng s ph hp vi gi tr trn bin expression . action1,action2actionN: Cc pht biu c thc thi khi mt trng hp tng ng c gi tr True break: T kho c s dng b qua tt c cc cu lnh sau v ginh quyn iu khin cho cu trc bn ngoi switch default: T kha tu chn c s dng ch r cc cu lnh no c thc hin ch khi tt Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 26 c cc trng hp nhn gi tr False default - action: Cc cu lnh c thc hin ch khi tt c cc trng hp nhn gi tr False on chng trnh sau xc nh gi tr trong mt bin nguyn v hin th ngy trong tun c th hin di dng chui. kim tra cc gi tr nm trong khong 0 n 6 V d: chng trnh s thng bo li nu nm ngoi phm vi trn. class SwitchDemo { public static void main(String agrs[]) { int day =4; switch(day) { case 0 : System.out.println(Sunday); break; case 1 : System.out.println(Monday); break; case 2 : System.out.println(Tuesday); break; case 3 : System.out.println(Wednesday); break; case 4 : System.out.println(Thursday); break; case 5: System.out.println(Friday); break; case 6 : System.out.println(Satuday); break; default: System.out.println(Invalid day of week); } } } Nu gi tr ca bn day l 4 ,chng trnh s hin th Thursday,v c tip nh vy . Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 27 2.3.3. Vng lp While Vng lp while c s dng khi vng lp c thc hin mi cho n khi iu kin thc thi vn l True. S lng ln lp khng c xc nh trc song n s ph thuc vo tng iu kin. C php while(condition) { action statement; : : } condition: Biu thc Boolean, n tr v gi tr True hoc False. Vng lp s tip tc cho n khi no gi tr True c tr v. action statement: Cc cu lnh c thc hin nu condition nhn gi tr True V d: on chng trnh sau tnh giai tha ca s 5.Giai tha c tnh nh tch 5*4*3*2*1. class WhileDemo { public static void main(String args[]) { int a = 5,fact = 1; while (a >= 1) { fact *=a; a--; } System.out.println(The Factorial of 5 is +fact); } } v d trn, vng lp c thc thi cho n khi iu kin a>=1 l True. Bin a c khai bo bn ngoi vng lp v c gn gi tr l 5. Cui mi vng lp, gi tri ca a gim i 1. Sau nm Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 28 vng gi tr ca a bng 0. iu kin tr v gi tr False v vng lp kt thc. Kt qu s c hin th The factorial of 5 is 120 2.3.4. Vng lp for Vng lp for c s dng khi vng lp c s ln lp bit trc. C php for (Biu thc 1; Biu thc 2; Biu thc 3) { action statement; : : } Biu thc1: khi to ban u Biu thc 2: iu kin lp, vng lp cn thc hin khi bt2 cn ng Biu thc 3: thit lp li action statement: Cc cu lnh c thc hin nu condition nhn gi tr True V d: on chng trnh sau hin thi tng ca 5 s chn u tin class ForDemo { public static void main(String args[]) { int i=1,sum=0; for (i=1;i<=10;i+=2) sum+=i; System.out.println (sum of first five old numbers is +sum); } } v d trn, i v sum l hai bin c gn cc gi tr u l 1 v 0 tng ng. iu kin c kim tra v khi n cn nhn gi tr True, cu lnh tc ng trong vng lp c thc hin. Tip theo gi tr ca i c tng ln 2 to ra s chn tip theo. Mt ln na, iu kin li c kim tra v cu lnh tc ng li c thc hin. Sau nm vng, i tng ln 11, iu kin tr v Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 29 gi tr False v vng lp kt thc. Thng bo: Sum of first five odd numbers is 25 c hin th. 2.3.5. Vng lp do/while Vng lp do/while c s dng khi vng lp c thc hin mi cho n khi iu kin thc thi vn l True. S lng ln lp khng c xc nh trc song n s ph thuc vo tng iu kin. C php do{ action statement; : }while (condition) condition: Biu thc Boolean, n tr v gi tr True hoc False. Vng lp s tip tc cho n khi no gi tr True c tr v. action statement: Cc cu lnh c thc hin nu condition nhn gi tr True V d: on chng trnh sau tnh giai tha ca s 5.Giai tha c tnh nh tch 5*4*3*2*1. class WhileDemo { public static void main(String args[]) { int a = 5,fact = 1; do { fact *=a; a--; } while (a >= 1) System.out.println(The Factorial of 5 is +fact); } } v d trn, vng lp c thc thi cho n khi iu kin a>=1 l True. Bin a c khai bo bn ngoi vng lp v c gn gi tr l 5. Cui mi vng lp, gi tri ca a gim i 1. Sau nm vng gi tr ca a bng 0. iu kin tr v gi tr False v vng lp kt thc. Kt qu s c hin th The factorial of 5 is 120. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 30 2.3.6. Cu trc lnh nhy (jump) Lnh break: trong cu trc switch chng ta dng cu lnh break thot thi cu trc switch trong cng cha n. Tng t nh vy, trong cu trc lp, cu lnh break dng that khi cu trc lp trong cng cha n. Lnh continue: dng tip tc vng lp trong cng cha n (ngc vi break). Nhn (label): Khng ging nh C/C++, Java khng h tr lnh goto nhy n 1 v tr no ca chng trnh. Java dng kt hp nhn (label) vi t kha break v continue thay th cho lnh goto.
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 31 CHNG 3 : I TNG V LP 3.1. i tng v lp 3.2.1. Lp (class) a. Khi nim Chng ta c th xem lp nh mt khun mu (template) ca i tng (Object). Trong bao gm d liu ca i tng (fields hay properties) v cc phng thc(methods) tc ng ln thnh phn d liu gi l cc phng thc ca lp. Cc i tng c xy dng bi cc lp nn c gi l cc th hin ca lp (class instance).
b. Khai bo/nh ngha lp [access rights(tin t)] class <ClassName> { <kiu d liu> <field_1>; <kiu d liu> <field_2>; constructor method_1 method_2 } class: l t kha ca java ClassName: l tn chng ta t cho lp field_1, field_2: cc thuc tnh, cc bin, hay cc thnh phn d liu ca lp. constructor: l s xy dng, khi to i tng lp. method_1, method_2: l cc phng thc/hm th hin cc thao tc x l, tc ng ln cc thnh phn d liu ca lp. access rights: Quyn truy xut (public, private, protected) V d: Khi bo lp SinhVien public class SinhVien{ // khai bo cc phng thc v thuc tnh
} 3.2.2. i tng (object) i tng l s c th ha ca lp. i tng c khai bo tng mnh bng t kha new theo c php: ClassName objectName = new ClassName(); V d: Khi bo i tng sinh vien A (A l mt sinh vin c th thuc lp SinhVien) SinhVien A=new SinhVien( ); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 32 3.2. Bin lp v phng thc lp 3.2.1. Thuc tnh - bin lp (attribute) Vng d liu (fields) hay thuc tnh (properties) ca lp c khai bo bn trong lp nh sau: class <ClassName> { // khai bo nhng thuc tnh ca lp <tin t> <kiu d liu> < thuc tnh>; // } xc nh quyn truy xut ca cc i tng khc i vi vng d liu ca lp ngi ta thng dng 3 tin t sau: - public: c th truy xut t tt c cc i tng khc - private: mt lp khng th truy xut vng private ca 1 lp khc. - protected: vng protected ca 1 lp ch cho php bn thn lp v nhng lp dn xut t lp truy cp n. V d: khai bo lp xemay public class xemay { public String nhasx; public String model; private float chiphisx; protected int thoigiansx; // so luong so cua xe may: 3, 4 so protected int so; // sobanhxe l bin tnh c gi tr l 2 trong tt c // cc th hin to ra t lp xemay public static int sobanhxe = 2; } Thuc tnh nhasx, modelc th c truy cp n t tt c cc i tng khc. Thuc tnh chiphisx ch c th truy cp c t cc i tng c kiu xemay Thuc tnh thoigiansx, so c th truy cp c t cc i tng c kiu xemay v cc i tng ca cc lp con dn xut t lp xemay Lu : Thng thng an ton cho vng d liu ca cc i tng ngi ta trnh dng tin t public, m thng chn tin t private ngn cn quyn truy cp n vng d liu ca mt lp t cc phng thc bn ngoi lp . Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 33
3.2.2. Phng thc (method) Hm hay phng thc (method) trong Java l khi lnh thc hin cc chc nng, cc hnh vi x l ca lp ln vng d liu. a. Khai bo phng thc: <Tin t> <kiu tr v> <Tn phng thc> (<danh sch i s>) { <khi lnh>; [return]; } xc nh quyn truy xut ca cc i tng khc i vi cc phng thc ca lp ngi ta thng dng cc tin t sau: - public: phng thc c th truy cp c t bn ngoi lp khai bo. - protected: c th truy cp c t lp khai bo v nhng lp dn xut t n. - private: ch c truy cp bn trong bn thn lp khai bo. - static: phng thc lp dng chung cho tt c cc th hin ca lp, c ngha l phng thc c th c thc hin k c khi khng c i tng ca lp cha phng thc . - final: phng thc c tin t ny khng c khai bo chng cc lp dn xut. - abstract: phng thc khng cn ci t (khng c phn source code), s c hin thc trong cc lp dn xut t lp ny. - synchoronized: dng ngn cc tc ng ca cc i tng khc ln i tng ang xt trong khi ang ng b ha. Dng trong lp trnh miltithreads. <kiu tr v>: c th l kiu void, kiu c s hay mt lp. <Tn phng thc>: t theo qui c ging tn bin. <danh sch thng s>: c th rng Lu : Thng thng trong mt lp cc phng thc nn c khai bo dng t kha public, khc vi vng d liu thng l dng tin t private v mc ch an ton. Nhng bin nm trong mt phng thc ca lp l cc bin cc b (local) v nn c khia to sau khi khai bo. V d: public class xemay { public String nhasx; public String model; private float chiphisx; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 34 protected int thoigiansx; // so luong so cua xe may: 3, 4 so protected int so; // l bin tnh c gi tr l 2 trong tt c // cc th hin to ra t lp xemay public static int sobanhxe = 2; public float tinhgiaban() { return 1.5 * chiphisx; } }
b. Khi to mt i tng (Constructor) Contructor tht ra l mt loi phng thc c bit ca lp. Constructor dng gi t ng khi khi to mt th hin ca lp, c th dng khi gn nhng gi tr mc nh. Cc constructor khng c gi tr tr v, v c th c tham s hoc khng c tham s. Constructor phi c cng tn vi lp v c gi n dng t kha new. Nu mt lp khng c constructor th java s cung cp cho lp mt constructor mc nh (default constructor). Nhng thuc tnh, bin ca lp s c khi to bi cc gi tr mc nh (s: thng l gi tr 0, kiu lun l l gi tr false, kiu i tng gi tr null, ) Lu : thng thng an ton, d kim sot v lm ch m ngun chng trnh chng ta nn khai bo mt constructor cho lp. V d: public class xemay { // public xemay() } public xemay(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx, int i_so); { nhasx = s_nhasx; model = s_model; chiphisx = f_chiphisx; thoigiansx = i_thoigiansx; so = i_so; // hoc // this.nhasx = s_nhasx; // this.model = s_model; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 35 // this.chiphisx = f_chiphisx; // this.thoigiansx = i_thoigiansx; // this.so = i_so; } } c. Bin this Bin this l mt bin n tn ti trong tt c cc lp trong ngng ng java. Mt class trong Java lun tn ti mt bin this, bin this c s dng trong khi chy v tham kho n bn thn lp cha n. V d: <tin t> class A { <tin t> int <field_1>; <tin t> String <field_2>; // Contructor ca lp A public A(int par_1, String par_2) { this.field_1 = par_1; this.field_2 = par_2; } <tin t> <kiu tr v> <method_1>() { // } <tin t> <kiu tr v> <method_2>() { this.method_1() // } }
d. Khai bo chng phng thc (overloading method) Vic khai bo trong mt lp nhiu phng thc c cng tn nhng khc tham s (khc kiu d liu, khc s lng tham s) gi l khai bo chng phng thc (overloading method). V d: public class xemay Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 36 { // khai bo fields public float tinhgiaban() return 2 * chiphisx; } public float tinhgiaban(float huehong) { return (2 * chiphisx + huehong); } } e. c im hng i tng trong java H tr nhng nguyn tc c bn ca lp trnh hng i tng, tt c cc ngn ng lp trnh k c java u c ba c im chung: tnh ng gi (encapsulation), tnh a hnh (polymorphism), v tnh k tha (inheritance). 3.3. Phng thc finalize() Trong java khng c kiu d liu con tr nh trong C, ngi lp trnh khng cn phi qu bn tm v vic cp pht v gii phng vng nh, s c mt trnh dn dp h thng m trch vic ny. Trnh dn dp h thng s dn dp vng nh cp pht cho cc i tng trc khi hy mt i tng. Phng thc finalize() l mt phng thc c bit c ci t sn cho cc lp. Trnh dn dp h thng s gi phng thc ny trc khi hy mt i tng. V vy vic ci t mt s thao tc gii phng, dn dp vng nh cp pht cho cc i tng d liu trong phng thc finalize() s gip cho ngi lp trnh ch ng kim sot tt qu trnh hy i tng thay v giao cho trnh dn dp h thng t ng. ng thi vic ci t trong phng thc finalize() s gip cho b nh c gii phng tt hn, gp phn ci tin tc chng trnh. V d: class A { // Khai bo cc thuc tnh public void method_1() { // } protected void finalize() { // C th dng ng tt c cc kt ni Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 37 // vo c s d liu trc khi hy i tng. // } } 3.4.Gi (packages) Vic ng gi cc lp li to thnh mt th vin dng chung gi l package. Mt package c th cha mt hay nhiu lp bn trong, ng thi cng c th cha mt package khc bn trong. khai bo mt lp thuc mt gi no y ta phi dng t kha package. Dng khai bo gi phi l dng u tin trong tp tin khai bo lp. Cc tp tin khai bo lp trong cng mt gi phi c lu trong cng mt th mc. Lu : Vic khai bo import tt c cc lp trong gi s lm tn b nh. Thng thng chng ta ch nn import nhng lp cn dng trong chng trnh. V d: package phuongtiengiaothong; class xemay { // } class xega extends xemay { // } Khi mun s dng lp xemay vo chng trnh ta s khai bo nh sau:
import phuongtiengiaothong.xemay;
3.5. ng gi (encapsulation) C ch ng gi trong lp trnh hng i tng gip cho cc i tng du i mt phn cc chi tit ci t, cng nh phn d liu cc b ca n, v ch cng b ra ngoi nhng g cn cng b trao i vi cc i tng khc. Hay chng ta c th ni i tng l mt thnh t h tr tnh ng gi. n v ng gi c bn ca ngn ng java l class. Mt class nh ngha hnh thc ca mt i tng. Mt class nh r nhng thnh phn d liu v cc on m ci t cc thao tc x l Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 38 trn cc i tng d liu . Java dng class xy dng nhng i tng. Nhng i tng l nhng th hin (instances) ca mt class. Mt lp bao gm thnh phn d liu v thnh phn x l. Thnh phn d liu ca mt lp thng bao gm cc bin thnh vin v cc bin th hin ca lp. Thnh phn x l l cc thao tc trn cc thnh phn d liu, thng trong java ngi gi l phng thc. Phng thc l mt thut ng hng i tng trong java, trong C/C++ ngi ta thng dng thut ng l hm.
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 39 CHNG 4 : THA K V A HNH 4.1. Tha k (inheritance) 4.1.1. Lp k tha Mt lp con (subclass) c th k tha tt c nhng vng d liu v phng thc ca mt lp khc lp cha (siu lp - superclass).
Nh vy vic to mt lp mi t mt lp bit sao cho cc thnh phn (fields v methods) ca lp c cng s thnh cc thnh phn (fields v methods) ca lp mi. Khi ta gi lp mi l lp dn xut (derived class) t lp c (superclass). C th lp c cng l lp c dn xut t mt lp no y, nhng i vi lp mi va to th lp c l mt lp siu lp trc tip (immediate supperclass). Dng t kha extends ch lp dn xut. V d: // super class B class B{ // } // sub class A class A extends B { // } 4.1.2. Khi bo phng thc chng Tnh k tha gip cho cc lp con nhn c cc thuc tnh/phng thc public v protected ca lp cha. ng thi cng c th thay th cc phng thc ca lp cha bng cch khai bo chng. Chng hn phng thc tinhgiaban() p dng trong lp xega s cho kt qu gp 2.5 ln chi ph sn xut thay v gp 2 chi ph sn xut ging nh trong lp xemay. Superclass(B)
// attribute
// methods
Subclass (A)
// attribute
// methods
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 40 V d: public class xega extends xemay { public xega() { }
public xega(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx); { this.nhasx = s_nhasx; this.model = s_model; this.chiphisx = f_chiphisx; this.thoigiansx = i_thoigiansx; this.so = 0; } public float tinhgiaban() { return 2.5 * chiphisx; } } Java cung cp 3 tin t/t kha h tr tnh k tha ca lp: - public: lp c th truy cp t cc gi, chng trnh khc. - final: Lp hng, lp khng th to dn xut (khng th c con), hay i khi ngi ta gi l lp v sinh. - abstract: Lp tru tng (khng c khai bo cc thnh phn v cc phng thc trong lp tru tng). Lp dn xut s khai bo, ci t c th cc thuc tnh, phng thc ca lp tru tng. Ch : Trong Java khng cho php a k tha, ngha l 1 lp con ch k tha duy nht t 1 lp cha (khc vi C++), ngc li 1 lp cha c th cho php nhiu lp con k tha. 4.2. a hnh (polymorphism) Tnh a hnh cho php ci t cc lp dn xut khc nhau t mt lp ngun. Mt i tng c th c nhiu kiu khc nhau gi l tnh a hnh. V d: class A_Object { // void method_1() Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 41 { // } } class B_Object extends A_Object { // void method_1() { // } } class C { public static void main(String[] args) { // To mt mng 2 phn t kiu A A_Object arr_Object = new A_Object[2]; B_Object var_1 = new B_Object(); // Phn t u tin ca mng arr_Object[0]tham // chiu n 1 i tng kiu B_Object dnxut // t A_Object arr_Object[0] = var_1; A_Object var_2; for (int i=0; i<2; i++) { var_2 = arr_Object[i]; var_2.method_1(); } } } Vng lp for trong on chng trnh trn: - Vi i = 0 th bin var_2 c kiu l B_Object, v lnh var_2.method_1() s gi thc hin phng thc method_1 ca lp B_Object. - Vi i = 1 th bin var_2 c kiu l A_Object, v lnh var_2.method_1() s gi thc hin phng thc method_1 ca lp A_Object. Trong v d trn i tng var_2 c th nhn kiu A_Object hay B_Object. Hay ni cc khc, mt bin i tng kiu A_Object nh var_2 trong v d trn c th tham chiu n bt Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 42 k i tng no ca bt k lp con no ca lp A_Object (v d var_2 c th tham chiu n i tng var_1, var_1 l i tng ca lp B_Object dn xut t lp A_Object). Ngc li mt bin ca lp con khng th tham chiu n bt k i tng no ca lp cha. 4.3. Phng thc tu tng v lp tru tng Lp tru tng (abtract class) l lp khng c khai bo cc thuc tnh thnh phn v cc phng thc. Cc lp dn xut ca n s khai bo thuc tnh, ci t c th cc phng thc ca lp tru tng. Phng thc tru tng (abstract method) l phng thc khng c ni dung, ch c khai bo trong lp tru tng. V d: abstract class A { abstract void method_1(); // phng thc tru tng } public class B extends A { public void method_1() { // ci t chi tit cho phng thc method_1 // trong lp con B. // } } public class C extends A { public void method_1() { // ci t chi tit cho phng thc method_1 // trong lp con C. // } } Lu : Cc phng thc c khai bo dng cc tin t private v static th khng c khai bo l tru tng abstract. Tin t private th khng th truy xut t cc lp dn xut, cn tin t static th ch dng ring cho lp khai bo m thi. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 43 4.4. Giao din (interface) 4.3.1.Khi nim interface Nh chng ta bit mt lp trong java ch c mt siu lp trc tip hay mt cha duy nht (n tha k). trnh i tnh phc tp ca a tha k (multi-inheritance) trong lp trnh hng i tng, Java thay th bng giao tip (interface). Mt lp c th c nhiu giao tip (interface) vi cc lp khc tha hng thm vng d liu v phng thc ca cc giao tip ny.
4.3.2.Khai bo interface Interface c khai bo nh mt lp. Nhng cc thuc tnh ca interface l cc hng (khai bo dng t kha final) v cc phng thc ca giao tip l tru tng (mc d khng c t kha abstract). Trong cc lp c ci t cc interface ta phi tin hnh ci t c th cc phng thc ny. V d: public interface sanpham { static final String nhasx = Honda VN; static final String dienthoai = 08-8123456; public int gia(String s_model); } // khai bo 1 lp c ci t interface public class xemay implements sanpham { // ci t li phng thc ca giao din trong lp public int gia(String s_model) { if (s_model.equals(2005)) return (2000); else return (1500); } public String chobietnhasx() { return (nhasx); } } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 44 C mt vn khc vi lp l mt giao din (interface) khng ch c mt giao din cha trc tip m c th dn xut cng lc nhiu giao din khc (hay c nhiu giao din cha). Khi n s k tha tt c cc gi tr hng v cc phng thc ca cc giao din cha. Cc giao din cha c lit k thnh chui v cch nhau bi du phy ,. Khai bo nh sau: public interface InterfaceName extends interface1, interface2, interface3 { // } 4.5. Lp ni
Lp ni l lp c khai bo bn trong 1 lp khc. Lp ni th hin tnh ng gi cao v c th truy xut trc tip bin ca lp cha. V d: public class A { // int <field_1> static class B { // int <field_2> public B(int par_1) { field_2 = par_1 + field_1; } } } Trong v d trn th chng trnh dch s to ra hai lp vi hai files khc nhau: A.class v B.class 4.6. Lp v sinh Lp khng th c lp dn xut t n (khng c lp con) gi l lp v sinh, hay ni cch khc khng th k tha c t mt lp v sinh. Lp v sinh dng hn ch, ngn nga cc lp khc dn xut t n. khai bo mt lp l lp v sinh, chng ta dng t kha final class. Tt c cc phng thc ca lp v sinh u v sinh, nhng cc thuc tnh ca lp v sinh th c th khng v sinh. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 45 V d: public final class A { public final int x; private int y; public final void method_1() { // } public final void method_2() { // } }
4.7. V d minh ha V d: Minh ha tnh a hnh (polymorphism) trong phn cp k tha thng qua vic m t v x l mt s thao tc c bn trn cc i tng hnh hc. // nh ngha lp tru tng c s tn Shape trong // tp tin Shape.java public abstract class Shape extends Object { // tr v din tch ca mt i tng hnh hc shape public double area() { return 0.0; } // tr v th tch ca mt i tng hnh hc shape public double volume() { return 0.0; } /* Phng thc tru tng cn phi c hin thc trong nhng lp con tr v tn i tng hnh hc shape thch hp*/ public abstract String getName(); } // end class Shape
// nh ngha lp Point trong tp tin Point.java public class Point extends Shape Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 46 { protected int x, y; // Ta x, y ca 1 im // constructor khng tham s. public Point() { setPoint( 0, 0 ); } // constructor c tham s. public Point(int xCoordinate, int yCoordinate) { setPoint( xCoordinate, yCoordinate ); } // gn ta x, y cho 1 im public void setPoint( int xCoordinate, int yCoordinate ) { x = xCoordinate; y = yCoordinate; } // ly ta x ca 1 im public int getX() { return x; }
/* Phng thc tru tng cn phi c hin thc trong nhng lp con tr v tn i tng hnh hc shape thch hp*/ public abstract String getName(); } // end class Shape
// nh ngha lp Point trong tp tin Point.java public class Point extends Shape { protected int x, y; // Ta x, y ca 1 im // constructor khng tham s. public Point() { setPoint( 0, 0 ); } // constructor c tham s. public Point(int xCoordinate, int yCoordinate) { setPoint( xCoordinate, yCoordinate ); } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 47 // gn ta x, y cho 1 im public void setPoint( int xCoordinate, int yCoordinate ) { x = xCoordinate; y = yCoordinate; } // ly ta x ca 1 im public int getX() { return x; }
// ly ta y ca 1 im public int getY() { return y; } // Th hin ta ca 1 im di dng chui public String toString() { return "[" + x + ", " + y + "]"; } // tr v tn ca i tng shape public String getName() { return "Point"; } } // end class Point nh ngha mt lp cha Shape l mt lp tru tng dn xut t Object v c 3 phng thc khai bo dng tin t public. Phng thc getName() khai bo tru tng v vy n phi c hin thc trong cc lp con. Phng thc area() (tnh din tch) v phng thc volume() (tnh th tch) c nh ngha v tr v 0.0. Nhng phng thc ny s c khai bo chng trong cc lp con thc hin chc nng tnh din tch cng nh th tch ph hp vi nhng i tng hnh hc tng ng (ng trn, hnh tr, ) Lp Point: dn xut t lp Shape. Mt im th c din tch v th tch l 0.0, v vy nhng phng thc area() v volume() ca lp cha khng cn khai bo chng trong lp Point, chng c tha k nh nh ngha trong lp tru tng Shape. Nhng phng thc khc nh setPoint() gn ta x, y cho mt im, cn phng thc getX(), getY() tr v ta x, y ca mt im. Phng thc getName() l hin thc cho phng thc tru tng trong lp cha, nu nh phng thc getName() m khng c nh ngha th lp Point l mt lp tru tng. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 48 // nh ngha lp Circle trong tp tin Circle.java public class Circle extends Point { // Dn xut t lpPoint protected double radius; // constructor khng tham s public Circle() { // ngm gi n constructor ca lp cha setRadius( 0 ); } // constructor c tham s public Circle( double circleRadius, int xCoordinate,int yCoordinate ) { // gi constructorca lp cha super( xCoordinate, yCoordinate ); setRadius( circleRadius ); } // Gn bn knh ca ng trn public void setRadius( double circleRadius ) { radius = ( circleRadius >= 0 ? circleRadius:0 ); } // Ly bn knh ca ng trn public double getRadius() { return radius; } // Tnh din tch ng trn Circle public double area() { return Math.PI * radius * radius; } // Biu din ng trn bng mt chui public String toString() { return "Center = " + super.toString() +"; Radius = " + radius; } // tr v tn ca shape public String getName() { return "Circle"; } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 49 } // end class Circle Lp Circle dn xut t lp Point, mt ng trn c th tch l 0.0, v vy phng thc volume() ca lp cha khng khai bo chng, n s tha k t lp Point, m lp Point th tha k t lp Shape. Din tch ng trn khc vi mt im, v vy phng thc tnh din tch area() c khai bo chng. Phng thc getName() hin thc phng thc tru tng khai bo trong lp cha, nu phng thc getName() khng khai bo trong lp Circle th n s k tha t lp Point. Phng thc setRadius dng gn mt bn knh (radius) mi cho mt i tng ng trn, cn phng thc getRadius tr v bn knh ca mt i tng ng trn. // nh ngha lp hnh tr Cylinder // trong tp tin Cylinder.java. public class Cylinder extends Circle { // chiu cao ca Cylinder protected double height; // constructor khng c tham s public Cylinder() { // ngm gi n constructor ca lp cha setHeight( 0 ); } // constructor c tham s public Cylinder(double cylinderHeight, double cylinderRadius, int xCoordinate,int yCoordinate) { // Gi constructor ca lp cha super( cylinderRadius, xCoordinate, yCoordinate ); setHeight( cylinderHeight ); } // Gn chiu cao cho Cylinder public void setHeight( double cylinderHeight ) { height = ( cylinderHeight >= 0) ? cylinderHeight : 0 ; // Ly chiu cao ca Cylinder public double getHeight() { return height; } // Tnh din tch xung quanh ca Cylinder public double area() { return 2 * super.area() + 2 * Math.PI * radius * height; } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 50 // Tnh th tch ca Cylinder public double volume() { return super.area() * height; } // Biu din Cylinder bng mt chui public String toString() { return super.toString() + "; Height = " + height; } // tr v tn ca shape public String getName() { return "Cylinder"; } } // end class Cylinder Lp Cylinder dn xut t lp Circle. Mt Cylinder (hnh tr) c din tch v th tch khc vi mt Circle (hnh trn), v vy c hai phng thc area() v volume() cn phi khai bo chng. Phng thc getName() l hin thc phng thc tru tng trong lp cha, nu phng thc getName() khng khai bo trong lp Cylinder th n s k tha t lp Circle. Phng thc setHeight dng gn chiu cao mi cho mt i tng hnh tr, cn phng thc getHeight tr v chiu cao ca mt i tng hnh tr. // Test.java // Kim tra tnh k tha ca Point, Circle, Cylinder vi lp tru tng Shape. // Khai bo th vin import java.text.DecimalFormat; public class Test { // Kim tra tnh k tha ca cc i tng hnh hc public static void main( String args[] ) { // To ra cc i tng hnhhc Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, 8 ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); // To mt mng cc i tng hnh hc Shape arrayOfShapes[] = new Shape[ 3 ]; // arrayOfShapes[ 0 ] l mt i tng Point arrayOfShapes[ 0 ] = point; // arrayOfShapes[ 1 ] l mt i tng Circle arrayOfShapes[ 1 ] = circle; // arrayOfShapes[ 2 ] l mt i tng cylinder Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 51 arrayOfShapes[ 2 ] = cylinder; // Ly tn v biu din ca mi i tng hnh hc String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n" + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat( "0.00" ); // duyt mng arrayOfShapes ly tn, din tch, th tch // ca mi i tng hnh hc trong mng. for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() + ": " + arrayOfShapes[ i].toString() + "\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) + "\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( 0 ); } } // end class Test
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 52
CHNG 5 : MNG V CHUI 5.1. Mng 1 chiu 5.1.1. Khai bo v to mng Mng c dng lu tr cc khon mc (items) cng kiu d liu lin k nhau trong b nh. Mi ln ta khai bo kch thc ca mt mng, n s khng th thay i. D liu trn mng c th l kiu d liu nguyn thu hoc i tng. Cng nh cc bin, ta c th gn cc gi tr vo mng ti cc phn t c to ra trong mng. Nu khng, Java s gn gi tr mc nh vo tt c cc phn t ca mng, gi tr mc nh ph thuc vo kiu d liu. V d : nu kiu d liu l nguyn (int) th gi tr mc nh ban u s l 0. Mng c th c khai bo bng 3 cch : Cch khai bo M t C php V d Ch n thun khai bo Ch n thun khai bo mng Datatype identifier[] char ch[ ]; //khai bo mng k t c tn ch Khai bo v to mng Khai bo v cp pht b nh cho cc phn t mng s dng ton t new Datatype identifier[] = new datatype [size ] char ch[] = new char [10 ]; //Khai bo mt mng ch v lu tr 10 k t Khai bo, kin to v khi to Khai bo mng, cp pht b nh cho n v gn cc gi tr ban u cho cc phn t ca mng Datatype identifier[] = {value1,value2}; char ch [] = {A,B,C,D }; //khai bo mng ch v lu 4 ch ci kiu k t Bng 2.3 Khai bo mng xc nh tn v s phn t ca mng ta cn xem xt cc phn t mng.S phn t bt u vi 0 cho phn t u,1 cho phn t th hai v c tip nh vy.
5.1.2. Sp xp mng Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 53 S dng cc thut ton sp xp nh: Thut ton i ch trc tip, thut ton ni bt, thut ton chn trc tip, thut ton vun ng, ng dng cc thut ton trn sp xp dy s (mng s) theo chiu tng dn, hoc gim dn vi dy s nhp vo t bn phm. 5.1.3. Mng i tng Tng t nh mng d liu thng thng. Chng ta c th khai bo cc mng i tng t cc lp c nh ngha. V d: // khai bao lp class A{ // khai bo thuc tnh // phng thc
} // khai bo mng i tng m c kch thc l 10. A[] m=new A[10];
// s dng c mng m ta phi khi to tng i tng l thnh phn ca mng //(thng s dng cu trc lp).
5.1.4. Mng a chiu. Cc mng a chiu trong Java c coi nh l cc mng i tng cha cc tham chiu n cc mng khc S chiu c quy nh bi s cp ngoc vung []. Sau u l mt s v d: - B khi to mng cho mng hai chiu: int[][] mac1 = { { 1, 2, 3, }, { 4, 5, 6, } }; - Mt mng ng c to ra. int[][] mac2 = new int[n][m]; - Mt mng vi cc vc-t c kch thc khc nhau. Mng ph w xc nh di ca cc vc-t ny. V d: public class MultiArr { public static void main(String[] arg) { int w[] = { 2, 3, 4 }; int n = 3; int[][] m3 = new int[n][]; // sizes of the rows are set dynamically Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 54 for(int i = 0; i < m3.length; i++) { m3[i] = new int[w[i]]; for (int j = 0; j < m3[i].length; j++) m3[i][j] = i + j; } for (int i = 0; i < m3.length; i++) { System.out.println("Size of the " + i + "-th row " + m3[i].length); String out = " "; for(int j = 0; j < m3[i].length; j++) out += " " + m3[i][j]; System.out.println(out); } } } 5.2. Chui (string) Chui l tp cc k t ng lin nhau c gii hn trong du ngoc kp nh: hello word; hoc.itop.vn Sau y chng ta hy cng tm hiu cc vn v chui trong java. 5.3.1. Khai bo v khi to Java cung cp cc kiu khai bo v khi to string nh sau: - Khai bo mt xu rng V d: String str1=new String( ); //khi to str1 l mt xu trng - Khai bo v khi to mt xu bng mt chui cho trc. V d: String str2=new String(Hello word); //khi to str2 bng Hello word - Khai bo v khi to mt xu bng mt mng k t cho trc. V d: char ch[ ]={ a , b , c , d , e }; String str3=new String[ch]; Kt qu str3 l xu abcde Khai bo v khi to mt xu bng cch chn mt vi k t trong mt mng k t cho trc. V d: char ch[ ]={ a , b , c , d , e }; String str4=new String[ch,0,2]; Kt qu str4 l xu ab, v khi to ny s khi to xu str4 l ly 2 k t t v tr th 0. 5.3.2. Thao tc ni chui (cng 2 chui) - Cng 2 chui bng du cng (+) V d: String str1=new String(Hello word ); System.out.printf( toi muon noi +str1); Kt qu ca on m trn s in ra dong ch: toi muon noi Hello word Ch :java c kh nng t chuyn bt c d liu kiu s no khi cng vo String. V d: int n=100; Float m=100.123; System.out.printf( so nguyen la +n+ so thuc la +m); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 55 Kt qu s in ra chui s: so nguyen la 100 so thuc la 100.123c ngha l java s chuyn n v m thnh kiu string ri sau s ni vo chui pha trc. Khi cng chui bng du cng ,kt qu s a ra bng cch ni 2 chui vo v tr cui cng ca chui u tin. Cch ni chui ny thng c s dng khi in ra mn hnh hoc chuyn kiu d liu s sang string. - Ni 2 chui bng phng thc concat( ) Khc vi vic ni chui bng du cng l ni 2 chui ti v tr cui cng ca chui u tin.thay vo phng thc ny s tr v mt chui mi. V d: String str1,str2,str3; str1= Welcome ; str2= hoc.itop.vn ; str3=str1.concat(str2); kt qu l str3 s bng Welcome hoc.itop.vn 5.3.3. Cc hm x l vi chui trong java - substring v d: String str1=new String( hoc.itop.vn ); String str2=str1.substring(0,3); Kt qu l str2 bng hoc.c ngha l phng thc substring s ly 3 k t trong xu str1 bt u t k t th 0. - length tr v di chui v d: String str1=new String( hoc.itop.vn ); int n=str1.length( ); kt qu l n=11 ngha l phng thc length( ) s tr v di xu k t - charAt v d: String str1=new String( itop.vn ); char ch=str1.charAt(3); kt qu l ch=p ngha l phng thc charAt( 3) s tr v k t th 3 tnh t v tr th 0 trong xu str1 - equals: phng thc ny so snh 2 chui.kt qu tr v c kiu Boolean v d: String str1=new String( hello ); String str2=new String( ITOP ); Boolean k=str1.equals(str2); Kt qu tr v l k=false ngha l phng thc equals s so snh tng k t trong 2 chui. Ch l trong java c phn bit kiu ch hoa v ch thng nh: iTop # ITOP - compareTo: So snh 2 chui ln lt th t tng k t ca 2 chui ngha l: int Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 56 a=str1.compareTo(str2); a=0 nu s2=s1 a>0 nu s2>s1 a<0 nu s2<s1 V d: String str1=new String( kc ); String str2=new String( kavcb ); int a=str1.compareTo(str2);\\ kt qu l a>0 v kc > kavcb - toCharArray L phng thc i chui thnh mng k t. V d: String str1==new String( itop.vn ); char [ ] ch=str1.toCharArray( ); // //kt qu l mng ch={ i , t , o , p , . , v , n } - indexOf V d: String str1=new String( hoc.itop.vn); String str2=new String(op); String str3=new String(ab); int n=str1.indexOf(str2); int m=str1.indexOf(str3); //kt qu l n=7 v m=-1 ngha l phng thc ny s tr v v tr ca chui str2 v str3 trong chui str1.nu khng tm thy s tr v gi tr -1 - startsWith( ) Tr v gi tr kiu Boolean V d: String str1= hoc.itop.vn ; String str2= hoc ; boolean k=str1.startsWith(str2); kt qu l k=true ngha l phng thc ny s kim tra xem chui mt c bt u bng chui 2 hay khng - endsWith( ) Cng nh hm startsWith( ) kt qu tr v l kiu boolean. V d: String str1= hoc.itop.vn ; String str2= com ; boolean k=str1.endsWith(str2); kt qu l k=false ngha l hm ny s kim tra xem chui str1 c kt thc l chui str2 hay khng. - copyValueOf( ) phng thc ny tr v mt chui c rt ra t mt mng k t. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 57 V d: char ch[ ]={ a , b , c , d , e }; String str1=String.copyValueOf(2,2); Kt qu l str1=cd ngha l xu str1 c rt ra t mng ch bng cch ly 2 phn t ca mng v ly t v tr th 2. - toUpperCase( ) Phng thc ny s tr v ch hoa ca chui V d: String str1= hello ; String str2=str1.toUpperCase( ); Kt qu l str2= HELLO ; - toLowerCase( ) Phng thc ny s tr v ch thng ca chui V d: String str1= hello ; String str2=str1.toLowerCase( ); Kt qu l str2= hello ; - Chuyn kiu d liu t String sang s cc phng thc chuyn kiu d liu t String sang s nm trong gi th vin java.lang ta c bng cc phng thc nh sau:
V d: String str1=new String(124); int n=Integer.parseInt(str1); kt qu l n=124 5.3. Cc v d minh ho V d 1: Nhp k t t bn phm import java.io.*; /* gi ny cung cp th vin xut nhp h thng thng qua nhng lung d //liu v h thng file.*/ class InputChar Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 58 { public static void main(String args[]) { char ch = ; try { ch = (char) System.in.read(); } catch(Exception e) { System.out.println(Nhp li!); } System.out.println(Ky tu vua nhap: + ch); } } V d 2: Nhp d liu s import java.io.*; class inputNum { public static void main(String[] args) { int n=0; try { BufferedReader in = new BufferedReader(new InputStreamReader( System.in)); String s; s = in.readLine(); n = Integer.parseInt(s); } catch(Exception e) { System.out.println(Nhp d liu b li !); } System.out.println(Bn va nhp s: + n); } } V d 3: Nhp v xut gi tr cc phn t ca mt mng cc s nguyn. class ArrayDemo { public static void main(String args[]) { int arrInt[] = new int[10]; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 59 int i; for(i = 0; i < 10; i = i+1) arrInt[i] = i; for(i = 0; i < 10; i = i+1) System.out.println("This is arrInt[" + i + "]: " + arrInt[i]); } }
V d 4: Tm phn t c gi tr nh nht (Min) v ln nht (Max) trong mt mng.
// tm min
class MinMax { public static void main(String args[]) { int nums[] = new int[10]; int min, max; nums[0] = 99; nums[1] = -10; nums[2] = 100123; nums[3] = 18; nums[4] = -978; nums[5] = 5623; nums[6] = 463; nums[7] = -9; nums[8] = 287; nums[9] = 49; min = max = nums[0];
for(int i=1; i < 10; i++) { if(nums[i] < min) min = nums[i]; if(nums[i] > max) max = nums[i]; } System.out.println("min and max: " + min + " " + max); } }
// tm max class MinMax2 { public static void main(String args[]) { int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 }; int min, max; min = max = nums[0]; for(int i=1; i < 10; i++) { if(nums[i] < min) min = nums[i]; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 60 if(nums[i] > max) max = nums[i]; } System.out.println("Min and max: " + min + " " + max); } }
V d 5: Sp xp mng dng phng php sp xp ni bt (Bubble Sort) class BubbleSort { public static void main(String args[]) { int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 }; int a, b, t; int size; size = 10; // number of elements to sort // display original array System.out.print("Original array is:"); for(int i=0; i < size; i++) System.out.print(" " + nums[i]);
System.out.println(); // This is the Bubble sort. for(a=1; a < size; a++) for(b=size-1; b >= a; b--) { if(nums[b-1] > nums[b]) { // if out of order // exchange elements t = nums[b-1]; nums[b-1] = nums[b]; nums[b] = t; } } // display sorted array System.out.print("Sorted array is:"); for(int i=0; i < size; i++) System.out.print(" " + nums[i]);
System.out.println(); } }
V d 6: Nhp v xut gi tr ca cc phn t trong mt mng hai chiu. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 61 class TwoD_Arr { public static void main(String args[]) { int t, i; int table[][] = new int[3][4]; for(t=0; t < 3; ++t) { for(i=0; i < 4; ++i) { table[t][i] = (t*4)+i+1; System.out.print(table[t][i] + " "); } System.out.println(); } } } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 62 CHNG 6: LP TRNH WINDOW VI AWT 6.1. Gii thiu chung Chng ny cung cp cho sinh vin nhng kin thc c bn xy dng giao din (Graphic User Interface - GUI) ca chng trnh ng dng bng ngn ng java: - Nhng nguyn tc thit k giao din. - Nhng th vin, gi xy dng giao din: gm nhng lp (class), nhng giao tip (interface) qun l s kin v nhng thnh phn (components) xy dng nn giao din ngi dng. - B qun l trnh by (layout managers) - X l s kin Trong khun kh gio trnh lp trnh java cn bn ny chng ti trnh by vic thit k GUI dng th vin awt (abstract windows toolkit). Vic thit kt GUI s trc quan, uyn chuyn hn khi chng ta s dng th vin JFC (Java Foundation Class) s gii c gii thiu trong chuyn java nng cao.
Gii thiu th vin awt Th vin awt l b th vin dng xy dng giao din ngi dng cho mt chng trnh ng dng c y cc thnh phn c bn nh: Label, Button, Checkbox, Radiobutton, Choice, List, Text Field, Text Area, Scrollbar, Menu, Frame Ging nh cc API ca Windows, java cung cp cho ngi lp trnh th vin awt. Nhng khc vi cc hm API, th vin awt khng ph thuc h iu hnh. Th vin awt l nn tng, c s gip cho chng ta tip cn vi th vin m rng JFC hiu qu hn. Cu trc cy phn cp ca tt c nhng lp trong th vin awt chng ta c th xem chi tit trong ti liu km theo b cng c j2se (phn API Specification) 6.2. Cc container v cc component 6.2.1.Component Component l mt i tng c biu din ha c hin th trn mn hnh m ngi dng c th tng tc c. Chng hn nh nhng nt nhn (button), nhng checkbox, nhng scrollbar, Lp Component l mt lp tru tng. java.lang.Object java.awt.Component 6.2.2.Container Container l i tng vt cha hay nhng i tng c kh nng qun l v nhm cc i tng khc li. Nhng i tng con thuc thnh phn awt nh: button, checkbox, radio button, scrollbar, list, ch s dng c khi ta a n vo khung cha (container). Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 63 Mt s i tng container trong Java: - Panel: i tng khung cha n gin nht, dng nhm cc i tng, thnh phn con li. Mt Panel c th cha bn trong mt Panel khc. java.lang.Object +java.awt.Component +java.awt.Container +java.awt.Panel - Frame: khung cha Frame l mt ca s window hn hoi mc trn cng bao gm mt tiu u v mt ng bin (border) nh cc ng dng windows thng thng khc. Khung cha Frame thng c s dng to ra ca s chnh ca cc ng dng. java.lang.Object +java.awt.Component +java.awt.Container +java.awt.Window +java.awt.Frame - Dialogs: y l mt ca s dng hp hi thoi (ca s dng ny cn c gi l pop- up window), ca s dng ny thng c dng a ra thng bo, hay dng ly d liu nhp t ngoi vo thng qua cc i tng, thnh phn trn dialog nh TextField chng hn. Dialog cng l mt ca s nhng khng y chc nng nh i tng khung cha Frame. java.lang.Object +java.awt.Component +java.awt.Container +java.awt.Window +java.awt.Dialog - ScrollPanes: l mt khung cha tng t khung cha Panel, nhng c thm 2 thanh trt gip ta t chc v xem c cc i tng ln chon nhiu ch trn mn hnh nh nhng hnh nh hay vn bn nhiu dng. java.lang.Object +java.awt.Component +java.awt.Container +java.awt.ScrollPane 6.2.3.Layout Manager Khung cha container nhn cc i tng t bn ngoi a vo v n phi bit lm th no t chc sp xp ch cho cc i tng . Mi i tng khung cha u c mt b Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 64 qun l chu trch nhim thc hin cng vic y l b qun l trnh by (Layout Manager). Cc b qun l trnh by m th vin AWT cung cp cho ta bao gm: - FlowLayout: Sp xp cc i tng t tri qua phi v t trn xung di. Cc i tng u gi nguyn kch thc ca mnh. - BorderLayout: Cc i tng c t theo cc ng vin ca khung cha theo cc cnh West, East, South, North v Center tc ng, Ty, Nam, Bc v Trung tm hay Tri, Phi, Trn, Di v Gia ty theo cch nhn ca chng ta. - GridLayout: To mt khung li v hnh vi cc bng nhau. Cc i tng s t va kch thc vi tng . Th t sp xp cng t tri qua phi v t trn xung di. - GridBagLayout: Tng t nh GridLayout, cc i tng khung cha cng c a vo mt li v hnh. Tuy nhin kch thc cc i tng khng nht thit phi va vi 1 m c th l 2, 3 hay nhiu hn ty theo cc rng buc m ta ch nh thng qua i tng GridBagConstraint. - Null Layout: Cch trnh by t do. i vi cch trnh by ny ngi lp trnh phi t ng lm tt c t vic nh kch thc ca cc i tng, cng nh xc nh v tr ca n trn mn hnh. Ta khng ph thuc vo nhng rng buc ng, ty , nam, bc g c.
6.2.4.Thit k GUI cho chng trnh a.To khung cha ca s chng trnh Thng thng to ca s chnh cho chng trnh ng dng ta tin hnh cc bc: - To i tng Frame - Xc nh kch thc ca Frame - Th hin Frame trn mn hnh V d: import java.awt.*; class FrameDemo { public static void main(String args[]) { // To i tng khung chaFrame Frame fr = new Frame("My First Window") ; // Xc nh kch thc, v tr ca Frame fr.setBounds(0, 0, 640, 480); // Hin th Frame fr.setVisible(true); } } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 65 Kt qu thc thi chng trnh:
b.To h thng thc n i vi th vin awt, xy dng h thng thc n cho chng trnh ng dng chng ta c th dng cc lp MenuBar, Menu, MenuItem, MenuShortcut
V d: To h thng thc n cho chng trnh Calculator import java.awt.*; import java.awt.event.*; class Calculator { public static void main(String[] args) { createMenu(); } private static void createMenu() { // Tao Frame ung dung final Frame fr = new Frame(); fr.setLayout(new BorderLayout());
// Tao cac menu bar MenuBar menu = new MenuBar(); Menu menuFile = new Menu("Edit"); MenuItem copyItem = new MenuItem("Copy Ctrl+C"); MenuItem pasteItem = new MenuItem("Paste Ctrl+V"); menuFile.add(copyItem); menuFile.add(pasteItem); Menu menuHelp = new Menu("Help"); MenuItem hTopicItem = new MenuItem("Help Topics"); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 66 MenuItem hAboutItem = new MenuItem("About Calculator"); menuHelp.add(hTopicItem); menuHelp.addSeparator(); menuHelp.add(hAboutItem); menu.add(menuFile); menu.add(menuHelp); fr.setMenuBar(menu); fr.setBounds(100, 100, 300, 200); fr.setTitle("Calculator");
//fr.setResizable(false); fr.setVisible(true);
// x l bin s kin ng ca s ng dng. new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; } } Kt qu thc thi chng trnh:
c.Gn Component vo khung cha gn mt thnh phn, mt i tng component vo mt ca s (khung cha) chng ta dng phng thc add ca i tng khung cha container. V d: import java.awt.*; class AddDemo { public static void main(String args[]) { // To i tng khung chaFrame Frame fr = new Frame("AddDemo App"); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 67 // To i tng Component Button buttOk = new Button(OK); // Gn i tng nt nhn vo khung cha fr.add(buttOk); // Xc nh kch thc, v tr ca Frame fr.setSize(100, 100); // Hin th Frame fr.setVisible(true); } } d.Trnh by cc Component trong khung cha Nh chng ta bit khung cha container nhn cc i tng t bn ngoi a vo v n phi bit lm th no t chc sp xp ch cho cc i tng . Mi i tng khung cha u c mt b qun l chu trch nhim thc hin cng vic y l b qun l trnh by (Layout Manager). Chng ta s tm hiu chi tit v cc kiu trnh by ca th vin AWT. Interface LayoutManager nh ngha giao tip cho nhng lp bit c lm th no trnh by nhng trong nhng containers - FlowLayout public class FlowLayout extends Object implements LayoutManager, Serializable i vi mt container trnh by theo kiu FlowLayout th: + Cc component gn vo c sp xp theo th t t tri sang phi v t trn xung di. + Cc component c kch thc nh mong mun. + Nu chiu rng ca Container khng ch cho cc component th chng t ng to ra mt dng mi. + FlowLayout thng c dng sp xp cc button trong 1 panel. + Chng ta c th iu chnh khong cch gia cc component. V d: import java.awt.*; import java.lang.Integer; class FlowLayoutDemo { public static void main(String args[]) { Frame fr = new Frame("FlowLayout Demo"); fr.setLayout(new FlowLayout()); fr.add(new Button("Red")); fr.add(new Button("Green")); fr.add(new Button("Blue")); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 68 List li = new List(); for (int i=0; i<5; i++) { li.add(Integer.toString(i)); } fr.add(li); fr.add(new Checkbox("Pick me", true)); fr.add(new Label("Enter your name:")); fr.add(new TextField(20)); // phng thc pack() c gi s lm cho ca s // hin hnh s c kch thc va vi kch thc // trnh by b tr nhng thnh phn con ca n. fr.pack(); fr.setVisible(true); } } Kt qu thc thi chng trnh:
- BorderLayout public class BorderLayout extends Object implements LayoutManager2, Serializable i vi mt container trnh by theo kiu BorderLayout th: + B trnh by khung cha c chia lm 4 vng: NORTH, SOUTH, WEST, EAST v CENTER. (ng, Ty, Nam, Bc v trung tm). B trnh by loi ny cho php sp xp v thay i kch thc ca nhng components cha trong n sao cho va vi 5 vng NG, TY, NAM, BC, TRUNG TM. + Khng cn phi gn component vo cho tt c cc vng. + Cc component vng NORTH v SOUTH c chiu cao ty nhng c chiu rng ng bng chiu rng vng cha. + Cc component vng EAST v WEST c chiu rng ty nhng c chiu cao ng bng chiu cao vng cha. + Cc component vng CENTER c chiu cao v chiu rng ph thuc vo cc vng xung quanh. V d: import java.awt.*; class BorderLayoutDemo extends Frame { private Button north, south, east, west, center; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 69 public BorderLayoutDemo(String sTitle) { super(sTitle); north = new Button("North"); south = new Button("South"); east = new Button("East"); west = new Button("West"); center = new Button("Center"); this.add(north, BorderLayout.NORTH); this.add(south, BorderLayout.SOUTH); this.add(east, BorderLayout.EAST); this.add(west, BorderLayout.WEST); this.add(center, BorderLayout.CENTER); } // public static void main(String args[]) { Frame fr = new BorderLayoutDemo ("BorderLayout Demo"); fr.pack(); fr.setVisible(true); } } Kt qu thc thi chng trnh:
- GridLayout public class GridLayout extends Object implements LayoutManager i vi mt container trnh by theo kiu GridLayout th: + B trnh by to mt khung li v hnh vi cc bng nhau. + Cc i tng s t va kch thc vi tng . Th t sp xp t tri qua phi v t trn xung di. V d: Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 70 import java.awt.*; public class GridLayoutDemo { public static void main(String arg[]) { Frame f = new Frame("GridLayout Demo"); f.setLayout(new GridLayout(3,2)); f.add(new Button("Red")); f.add(new Button("Green")); f.add(new Button("Blue")); f.add(new Checkbox("Pick me", true)); f.add(new Label("Enter name here:")); f.add(new TextField()); f.pack(); f.setVisible(true); } } - GridBagLayout public class GridBagLayout extends Object implements LayoutManager2 (public interface LayoutManager2 extends LayoutManager) i vi mt container trnh by theo kiu GridBagLayout th: + Cc componets khi c a vo khung cha s c trnh by trn 1 khung li v hnh tng t nh GridLayout. Tuy nhin khc vi GridLayout kch thc cc i tng khng nht thit phi va vi 1 trn khung li m c th l 2, 3 hay nhiu hn ty theo cc rng buc m ta ch nh thng qua i tng GridBagConstraints. + Lp GridBagConstraints dn xut t lp Object. Lp GridBagConstraints dng ch nh rng buc cho nhng components trnh by trong khung cha container theo kiu GridBagLayout. gridx, gridy: v tr ca khung li v hnh m ta s a i tng con vo gridwidth, gridheight: kch thc hay vng trnh by cho i tng con. Insets: l mt bin i tng thuc lp Inset dng qui nh khong cch bin phn cch theo 4 chiu (trn, di, tri, phi). weightx, weighty: ch nh khong cch ln ra tng i ca cc i tng con vi nhau V d: import java.awt.*; public class GridBagLayoutDemo { public static void main(String arg[]) Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 71 { Frame f = new Frame("GridBagLayout Demo"); // Thiet lap layout manager // Tao doi tuong rang buoc cho cach trinh bay // GridBagLayout. GridBagLayout layout = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); f.setLayout(layout); // Tao ra 9 nut nhan String[] buttName = {"Mot", "Hai", "Ba", "Bon", "Nam", "Sau", "Bay", "Tam", "Chin"}; Button[] buttons = new Button[9]; for(int i=0;i<9;i++) { buttons[i] = new Button (buttName[i]); } // Rang buoc cac nut nhan cach nhau 2 pixel constraints.insets = new Insets(2,2,2,2); // Qui dinh cac nut nhan se thay doi kich thuoc // theo ca 2 chieu constraints.fill = GridBagConstraints.BOTH; // Rang buoc cho nut nhan thu 1 constraints.gridx = 1; constraints.gridy = 1; constraints.gridheight = 2; constraints.gridwidth = 1; layout.setConstraints(buttons[0], constraints); // Rang buoc cho nut nhan thu 2 constraints.gridx = 2; constraints.gridy = 1; constraints.gridheight = 1; constraints.gridwidth = 2; layout.setConstraints(buttons[1], constraints); // Rang buoc cho nut nhan thu 3 constraints.gridx = 2; constraints.gridy = 2; constraints.gridheight = 1; constraints.gridwidth = 1; layout.setConstraints(buttons[2], constraints); // Rang buoc cho nut nhan thu 4 constraints.gridx = 1; constraints.gridy = 3; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 72 constraints.gridheight = 1; constraints.gridwidth = 2; layout.setConstraints(buttons[3], constraints); // Rang buoc cho nut nhan thu 5 constraints.gridx = 3; constraints.gridy = 2; constraints.gridheight = 2; constraints.gridwidth = 1; layout.setConstraints(buttons[4], constraints); // Rang buoc cho nut nhan thu 6 constraints.gridx = 4; constraints.gridy = 1; constraints.gridheight = 3; constraints.gridwidth = 1; layout.setConstraints(buttons[5], constraints); // Tu nut thu 7 tro di khong can rang buoc // thay vi doi kich thuoc constraints.fill = GridBagConstraints.NONE; // Rang buoc cho nut nhan thu 7 constraints.gridx = 1; constraints.gridy = 4; constraints.gridheight = 1; constraints.gridwidth = 1; constraints.weightx = 1.0; layout.setConstraints(buttons[6], constraints); // Rang buoc cho nut nhan thu 8 constraints.gridx = 2; constraints.gridy = 5; constraints.gridheight = 1; constraints.gridwidth = 1; constraints.weightx = 2.0; layout.setConstraints(buttons[7], constraints); // Rang buoc cho nut nhan thu 9 constraints.gridx = 3; constraints.gridy = 6; constraints.gridheight = 1; constraints.gridwidth = 1; constraints.weightx = 3.0; layout.setConstraints(buttons[8], constraints); // Dua cac nut nhan khung chua chuong trinh for (int i=0;i<9;i++) f.add(buttons[i]); f.pack(); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 73 f.setVisible(true); } } Kt qu thc thi chng trnh:
- Null Layout Mt khung cha c trnh by theo kiu Null Layout c ngha l ngi lp trnh phi t lm tt c t vic qui nh kch thc ca khung cha, cng nh kch thc v v tr ca tng i tng component trong khung cha. thit lp cch trnh by l Null Layout cho mt container ta ch vic gi phng thc setLayout(null) vi tham s l null. Mt s phng thc ca lp tru tng Component dng nh v v qui nh kch thc ca component khi a chng vo khung cha trnh by theo kiu kiu t do: Public void setLocation(Point p) Public void setSize(Dimension p) Public void setBounds(Rectangle r) V d: MyButton.setSize(new Dimension(20, 10)); MyButton.setLocation(new Point(10, 10)); MyButton.setBounds(10, 10, 20, 10); // import java.awt.*; class NullLayoutDemo { public static void main(String args[]) { Frame fr = new Frame("NullLayout Demo"); fr.setLayout(null); Button buttOk = new Button("OK"); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 74 buttOk.setBounds(100, 150, 50, 30); Button buttCancel = new Button("Cancel"); buttCancel.setBounds(200, 150, 50, 30); Checkbox checkBut = new Checkbox("Check box", true); checkBut.setBounds(100, 50, 100, 20); List li = new List(); for (int i=0; i<5; i++) { li.add(Integer.toString(i)); } li.setBounds(200, 50, 50, 50); fr.add(buttOk); fr.add(buttCancel); fr.add(checkBut); fr.add(li); fr.setBounds(10, 10, 400, 200); fr.setVisible(true); } } Kt qu thc thi chng trnh:
f. Cc i tng khung cha Container Nh chng ta bit container l i tng khung cha c kh nng qun l v cha cc i tng (components) khc trong n. Cc components ch c th s dng c khi a n vo 1 i tng khung cha l container. Mi container thng gn vi mt LayoutManager (FlowLayout, BorderLayout, GridLayout, GridBagLayout, Null Layout) qui nh cch trnh by v b tr cc components trong mt container. Cc lai container trong java: Frame, Panel, Dialog, ScrollPanes. - Khung cha Frame java.lang.Object +--java.awt.Component Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 75 +--java.awt.Container +--java.awt.Window +--java.awt.Frame Khung cha Frame l mt ca s window hn hoi mc trn cng bao gm mt tiu u v mt ng bin (border) nh cc ng dng windows thng thng khc. Khung cha Frame thng c s dng to ra ca s chnh ca cc ng dng. Khung cha Panel c b qun l trnh by (LayoutManager) mc nh l FlowLayout. - Khung cha Panel java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Panel Khung cha Panel c b qun l trnh by (LayoutManager) mc nh l FlowLayout. i vi khung cha Panel th cc Panel c th lng vo nhau, v vy khung cha Panel thng c dng b tr cc nhm components bn trong mt khung cha khc. V d: import java.awt.*; public class PanelDemo extends Frame { private Button next, prev, first; private List li; public PanelDemo(String sTitle) { super(sTitle); next = new Button("Next >>"); first = new Button("First"); Panel southPanel = new Panel(); southPanel.add(next); southPanel.add(prev); southPanel.add(first); // BorderLayout.SOUTH: vng di this.add(southPanel, BorderLayout.SOUTH); Panel northPanel = new Panel(); northPanel.add(new Label("Make a Selection")); // BorderLayout.NORTH: vng trn this.add(northPanel, BorderLayout.NORTH); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 76 li = new List(); for(int i=0;i<10;i++) { li.add("Selection" + i); } this.add(li, BorderLayout.CENTER); } public static void main(String arg[]) { Container f = new PanelDemo("Panel Demo"); f.setSize(300, 200); f.setVisible(true); } } Kt qu thc thi chng trnh:
- Khung cha Dialog java.lang.Object +--java.awt.Component +--java.awt.Container +--java.awt.Window +--java.awt.Dialog Dialog l mt lp khung cha ta Frame v cn c gi l popup window. C hai loi dialog ph bin: Modal Dialog: s kha tt c cc ca s khc ca ng dng khi dialog dng ny cn hin th. Non-Modal Dialog: vn c th n cc ca s khc ca ng dng khi dialog dng ny hin th. Mt ca s dng Dialog lun lun phi gn vi mt ca s ng dng (Frame). to mt i tng khung cha Dialog ta c th dng mt trong cc constructor ca n: Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 77 public Dialog (Frame parentWindow, boolean isModal) public Dialog (Frame parentWindow, String title, boolean isModal) parentWindow: ca s cha title: tiu ca Dialog isModal: true -> l Dialog dng modal isModal: false -> l Dialog khng phi dng modal (hay non-modal)
6.3. X l s kin 6.3.1.M hnh x l s kin (Event-Handling Model) trn chng ta ch cp n vn thit k giao din chng trnh ng dng m cha cp n vn x l s kin. Nhng s kin c pht sinh khi ngi dng tng tc vi giao din chng trnh (GUI). Nhng tng tc thng gp nh: di chuyn, nhn chut, nhn mt nt nhn, chn mt MenuItem trong h thng thc n, nhp d liu trong mt vn bn, ng ca s ng dng, Khi c mt tng tc xy ra th mt s kin c gi n chng trnh. Thng tin v s kin thng c lu tr trong mt i tng dn xut t lp AWTEvent. Nhng kiu s kin trong gi java.awt.event c th dng cho c nhng component AWT v JFC. i vi th vin JFC th c thm nhng kiu s kin mi trong gi java.swing.event. Nhng lp s kin ca gi java.awt.event
C 3 yu t quan trng trong m hnh x l s kin: - Ngun pht sinh s kin (event source) - S kin (event object) - B lng nghe s kin (event listener) Ngun pht sinh s kin: l thnh phn ca giao din m ngi dng tc ng. S kin: Tm tt thng tin v x kin xy ra, bao gm tham chiu n ngun gc pht sinh s kin v thng tin s kin s gi n cho b lng nghe x l. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 78 B lng nghe: Mt b lng nghe l mt i tng ca mt lp hin thc mt hay nhiu interface ca gi java.awt.event hay java.swing.event (i vi nhng component trong th vin JFC). Khi c thng bo, b lng nghe nhn s kin v x l. Ngun pht sinh s kin phi cung cp nhng phng thc ng k hoc hy b mt b lng nghe. Ngun pht sinh s kin lun phi gn vi mt b lng nghe, v n s thng bo vi b lng nghe khi c s kin pht sinh . Nh vy ngi lp trnh cn lm hai vic: - To v ng k mt b lng nghe cho mt component trn GUI. - Ci t cc phng thc qun l v x l s kin Nhng interfaces lng nghe ca gi java.awt.event
Mt i tng Event-Listener lng nghe nhng s kin khc nhau pht sinh t cc components ca giao din chng trnh. Vi mi s kin khc nhau pht sinh th phng thc tng ng trong nhng Event-Listener s c gi thc hin. Mi interface Event-Listener gm mt hay nhiu cc phng thc m chng cn ci t trong cc lp hin thc (implements) interface . Nhng phng thc trong cc interface l tru tng v vy lp (b lng nghe) no hin thc cc interface th lng nghe s tr thnh cc lp tru tng. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 79 6.3.2.X l s kin chut Java cung cp hai intefaces lng nghe (b lng nghe s kin chut) l MouseListener v MouseMotionListener qun l v x l cc s kin lin quan n thit b chut. Nhng s kin chut c th by cho bt k component no trn GUI m dn xut t java.awt.component.
Cc phng thc ca interface MouseListener: - public void mousePressed(MouseEvent event): c gi khi mt nt chut c nhnv con tr chut trn component. - public void mouseClicked(MouseEvent event): c gi khi mt nt chut c nhn v nh trn component m khng di chuyn chut. - public void mouseReleased(MouseEvent event): c gi khi mt nt chut nh sa khi ko r. - public void mouseEntered(MouseEvent event): c gi khi con tr chut vo trong ng bin ca mt component. - public void mouseExited(MouseEvent event): c gi khi con tr chut ra khi ng bin ca mt component.
Cc phng thc ca interface MouseMotionListener: - public void mouseDragged(MouseEvent even ): phng thc ny c gi khi ngi dng nhn mt nt chut v ko trn mt component. - public void mouseMoved(MouseEvent event): phng thc ny c gi khi di chuyn chut trn component. Mi phng thc x l s kin chut c mt tham s MouseEvent cha thng tin v s kin chut pht sinh chng hn nh: ta x, y ni s kin chut xy ra. Nhng phng thc tng ng trong cc interfaces s t ng c gi khi chut tng tc vi mt component. bit c ngi dng nhn nt chut no, chng ta dng nhng phung thc, nhng hng s ca lp InputEvent (l lp cha ca lp MouseEvent). V d: Chng trnh tn MouseTracker bn di minh ha vic dng nhng phng thc ca cc interfaces MouseListener v MouseMotionListener by v x l cc s kin chut tng ng. import java.awt.*; import java.awt.event.*; public class MouseTracker extends Frame implements MouseListener, MouseMotionListener { private Label statusBar; // set up GUI and register mouse event handlers public MouseTracker() Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 80 { super( "Demonstrating Mouse Events" ); statusBar = new Label(); this.add( statusBar, BorderLayout.SOUTH ); // application listens to its own mouse events addMouseListener( this ); addMouseMotionListener( this ); setSize( 275, 100 ); setVisible( true ); } // MouseListener event handlers // handle event when mouse released immediately // after press public void mouseClicked( MouseEvent event ) { statusBar.setText( "Clicked at [" + event.getX() + ", " + event.getY() + "]" ); } // handle event when mouse pressed public void mousePressed( MouseEvent event ) { statusBar.setText( "Pressed at [" + event.getX() + ", " + event.getY() + "]" ); } // handle event when mouse released after dragging public void mouseReleased( MouseEvent event ) { statusBar.setText( "Released at [" + event.getX() + ", " + event.getY() + "]" ); } // handle event when mouse enters area public void mouseEntered( MouseEvent event ) { statusBar.setText( "Mouse in window" ); } // handle event when mouse exits area public void mouseExited( MouseEvent event ) { statusBar.setText( "Mouse outside window" ); } // MouseMotionListener event handlers // handle event when user drags mouse with button pressed public void mouseDragged( MouseEvent event ) { statusBar.setText( "Dragged at [" + event.getX() + ", " + event.getY() + "]" ); // handle event when user moves mouse Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 81 public void mouseMoved( MouseEvent event ) { statusBar.setText( "Moved at [" + event.getX() + ", " + event.getY() + "]" ); } // execute application public static void main( String args[] ) { MouseTracker application = new MouseTracker(); } } // end class MouseTracker
Kt qu thc thi chng trnh:
6.3.3.X l s kin bn phm x l s kin bn phm java h tr mt b lng nghe s kin l interface KeyListener. Mt s kin bn phm c pht sinh khi ngi dng nhn v nh mt phm trn bn phm. Mt lp hin thc KeyListener phi ci t cc phng thc keyPressed, keyReleased v keyTyped. Mi phng thc ny c mt tham s l mt i tng kiu KeyEvent. KeyEvent l lp con ca lp InputEvent. Cc phng thc ca interface KeyListener: - Phng thc keyPressed c gi khi mt phm bt k c nhn. - Phng thc keyTyped c gi thc hin khi ngi dng nhn mt phm khng phi phm hnh ng (nh phm mi tn, phm Home, End, Page Up, Page Down, cc phm chc nng nh: Num Lock, Print Screen, Scroll Lock, Caps Lock, Pause). - Phng thc keyReleased c gi thc hin khi nh phm nhn sau khi s kin keyPressed hoc keyTyped. V d: minh ha vic x l s kin chut thng qua cc phng thc ca interface KeyListener. Lp KeyDemo bn di hin thc interface KeyListener, v vy tt c 3 phng thc trong KeyListener phi c ci t trong chng trnh. // KeyDemo.java // Demonstrating keystroke events. // Java core packages import java.awt.*; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 82 import java.awt.event.*; public class KeyDemo extends Frame implements KeyListener { private String line1 = "", line2 = ""; private String line3 = ""; private TextArea textArea; // set up GUI public KeyDemo() { super( "Demonstrating Keystroke Events" ); // set up TextArea textArea = new TextArea( 10, 15 ); textArea.setText( "Press any key on the keyboard..." ); textArea.setEnabled( false ); this.add( textArea ); // allow frame to process Key events addKeyListener( this ); setSize( 350, 100 ); setVisible( true ); } // handle press of any key public void keyPressed( KeyEvent event ) { line1 = "Key pressed: " + event.getKeyText( event.getKeyCode() ); setLines2and3( event ); } // handle release of any key public void keyReleased( KeyEvent event ) { line1 = "Key released: " + event.getKeyText( event.getKeyCode() ); setLines2and3( event ); } // handle press of an action key public void keyTyped( KeyEvent event ) { line1 = "Key typed: " + event.getKeyChar(); setLines2and3( event ); } // set second and third lines of output private void setLines2and3( KeyEvent event ) { line2 = "This key is " + ( event.isActionKey() ? "" : "not " ) + "an action key"; String temp = event.getKeyModifiersText( event.getModifiers() ); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 83 line3 = "Modifier keys pressed: " + ( temp.equals( "" ) ? "none" : temp ); textArea.setText(line1+"\n"+line2+"\n"+ line3+"\n" ); } // execute application public static void main( String args[] ) { KeyDemo application = new KeyDemo(); } } // end class KeyDemo Kt qu thc thi chng trnh:
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 84 6.4. Cc v d minh ha V d 1: To b lng nghe bin c cho i tng khung cha Frame, v x l bin c ng ca s. import java.awt.*; import java.awt.event.*; public class WindowClosingDemo { public static void main(String args[]) { Frame f = new Frame ("WindowClosing Demo"); WindowCloser closer = new WindowCloser(); f.addWindowListener(closer); f.setBounds(10, 10, 300, 200); f.setVisible(true); } } import java.awt.event.*; class WindowCloser implements WindowListener { public void windowClosing(WindowEvent e) { System.out.println("windowClosing.."); System.exit(0); } public void windowActivated(WindowEvent e) { System.out.println("windowActivated..."); } public void windowClosed(WindowEvent e) { System.out.println("windowClosed..."); } public void windowDeactivated(WindowEvent e) { System.out.println("windowDeactivated..."); } public void windowDeiconified(WindowEvent e) { System.out.println("windowDeiconified..."); } public void windowIconified(WindowEvent e) { System.out.println("windowIconified..."); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 85 } public void windowOpened(WindowEvent e) { System.out.println("windowOpened..."); } } C th dng lp tru tng WindowAdapter to ra b lng nghe. public abstract class WindowAdapter extends Object implements WindowListener (WindowAdapter hin thc interface WindowListener nn lp o ny cng c 7 phng thc ging nh giao din WindowListener) import java.awt.event.*; class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("windowClosing.."); System.exit(0); } } V d 2: CheckboxGroup Demo import java.awt.*; public class CheckboxGroupDemo extends Frame { private Checkbox red, green, blue; private CheckboxGroup checkGroup; public CheckboxGroupDemo(String title) { super(title); checkGroup = new CheckboxGroup(); red = new Checkbox("Red", checkGroup, false); green = new Checkbox("Green", checkGroup, fals //add the checkboxes to the frame Panel north = new Panel(); north.add(red); north.add(green); north.add(blue); this.add(north, BorderLayout.NORTH); //register the event listener SetColor listener = new SetColor(this); red.addItemListener(listener); green.addItemListener(listener); blue.addItemListener(listener); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 86 } public static void main(String [] args) { Frame f = new CheckboxGroupDemo("CheckboxGroupDemo"); f.setSize(300,300); f.setVisible(true); } } // end of class import java.awt.*; import java.awt.event.*; public class SetColor implements ItemListener { private Frame pallette; private Color c; public SetColor(Frame c) { pallette = c; } public void itemStateChanged(ItemEvent e) { String item = (String) e.getItem(); int state = e.getStateChange(); if (item.equalsIgnoreCase("red")) c = new Color(255, 0, 0); if (item.equalsIgnoreCase("green")) c = new Color(0, 255, 0); if (item.equalsIgnoreCase("blue")) c = new Color(0, 0, 255); pallette.setBackground(c); } } // end of class Kt qu thc thi chng trnh:
V d 3: TextComponent import java.awt.*; class TextComponentDemo extends Frame Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 87 { private TextField textField; private TextArea textArea; private Button enter, clear; public TextComponentDemo (String title) { super(title); textArea = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY); textArea.setEditable(false); textField = new TextField(); enter = new Button("Enter"); clear = new Button("Clear"); //layout the GUI this.add(textArea, BorderLayout.CENTER); Panel southEast = new Panel(new BorderLayout()); southEast.add(enter, BorderLayout.EAST); southEast.add(clear, BorderLayout.WEST); Panel south = new Panel(new BorderLayout()); south.add(textField, BorderLayout.CENTER); south.add(southEast, BorderLayout.EAST); this.add(south, BorderLayout.SOUTH); //setup the event handling CreateList listener = new CreateList(textField, textArea); enter.addActionListener(listener); clear.addActionListener(listener); textField.addActionListener(listener); } public TextField getTextField() { return textField; } public static void main(String [] args) { TextComponentDemo f = new TextComponentDemo ("TextComponentDemo "); f.setSize(300,200); f.setVisible(true); f.getTextField().requestFocus(); } } import java.awt.*; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 88 import java.awt.event.*; public class CreateList implements ActionListener { private int counter = 0; private TextField source; private TextArea destination; public CreateList(TextField s, TextArea d) { source = s; destination = d; } public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (action.equalsIgnoreCase("Enter")) { String text = source.getText(); counter++; destination.append(counter + "." + text + "\n"); source.setText(""); } else if (action.equalsIgnoreCase("Clear")) destination.setText(""); counter = 0; } } } Kt qu thc thi chng trnh:
V d 4: ListDemo import java.awt.*; public class ListDemo extends Frame { private List li; private Label selected; public ListDemo(String title) { Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 89 super(title); li = new List(); li.add("Monday"); li.add("Tuesday"); li.add("Wednesday"); li.add("Thursday"); li.add("Friday"); li.add("Saturday"); li.add("Sunday"); selected = new Label("Double click a day:", Label.CENTER); this.setLayout(new BorderLayout()); this.add(selected , BorderLayout.NORTH); this.add(li, BorderLayout.CENTER); // Tao listener cho List ShowSelectionListener listener = new ShowSelectionListener(selected); li.addActionListener(listener); } public static void main(String args[]) { ListDemo f = new ListDemo("List Demo"); f.setBounds(10, 10, 300, 200); f.setVisible(true); } } import java.awt.*; import java.awt.event.*; class ShowSelectionListener implements ActionListener { private Label lab; public ShowSelectionListener(Label label_sel) { lab = label_sel; } public void actionPerformed(ActionEvent e) { // Tra ve Object ma Event da xuat hien // getSource la phuong thuc ke thua tu // java.util.EventObject Object source = e.getSource(); if (!(source instanceof List)) { return; } else { Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 90 List li = (List) source; String selected = li.getSelectedItem(); lab.setText(selected); } } } Kt qu thc thi chng trnh:
V d 5: Xy dng 1 lp khung cha Dialog dng hin th message ging nh hm MessageBox trn Windows. import java.awt.*; import java.awt.event.*; class DialogDemo { public static void main(String[] args) { createMenu(); } private static void createMenu() { // Tao Frame ung dung final Frame fr = new Frame(); fr.setLayout(new BorderLayout()); // Tao cac menu bar MenuBar menubar = new MenuBar(); Menu mTest = new Menu("Test"); MenuItem testDlg = new MenuItem("Test Dialog"); testDlg.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { MessageBox msgBox = new MessageBox(fr, "Here it is", "T/bao Dialog"); msgBox.show(); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 91 } }); mTest.add(testDlg); menubar.add(mTest); fr.setMenuBar(menubar); fr.setBounds(100, 100, 300, 200); fr.setVisible(true); fr.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } // end of createmenu() } // end of class import java.awt.*; import java.awt.event.*; public class MessageBox { Dialog msgBox; /* ---------------------------------------------------------------- // Contructor cua lop MessageBox // parentWindow: cua so cha // title: Tieu de cua Dialog // msg: chuoi thong bao -----------------------------------------------------------------*/ public MessageBox(Frame parentWindow, String msg, String title) { if (parentWindow == null) { Frame emptyWin = new Frame(); // Tao Modal Dialog (tham so thu 3:true) msgBox = new Dialog(emptyWin, title, true); } else { msgBox = new Dialog(parentWindow, title, true); } // Doi tuong nhan dung de trinh bay cau thong bao Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 92 Label Message = new Label(msg); // Thiet lap che do trinh bay layout cho cac doi tuong. msgBox.setLayout(new FlowLayout()); // Dua nhan thong bao Label vao khung chua Dialog msgBox.add(Message); // Dua nut nhan OK vao trong khung chua Dialog Button okButton = new Button("OK"); msgBox.add(okButton); // Khai bao kich thuoc cua cua so thong bao msgBox.setSize(200, 100); // Xu ly tinh huong khi nguoi dung nhan nut OK okButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { msgBox.setVisible(false); } } ); } public void show() { msgBox.show(); } } // end of class MessageBox Kt qu thc thi chng trnh:
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 93 CHNG 7 : X L NGOI L (EXCEPTION) 7.1. i tng Exception 7.1.1. Gii thiu chung v Exception Exception l mt loi li c bit. Li ny xut hin vo lc thc thi chng trnh. Cc trng thi khng bnh thng xy ra trong khi thi hnh chng trnh to ra cc exception. Nhng trng thi ny khng c bit trc trong khi ta ang xy dng chng trnh. Nu bn khng x l cc trng thi ny th chng trnh c th b kt thc t ngt. V d, vic chia cho 0 s to mt li trong chng trnh. Ngn ng Java cung cp c ch dng x l ngoi l rt hiu qu. Vic x l ny lm hn ch ti a trng hp h thng b hng (crash) hay h thng b ngt t ngt. Tnh nng ny lm cho Java tr thnh mt ngn ng lp trnh mnh.
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. Khi mt ngoi l xy ra, i tng (object) 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 mi trng runtime nh IllegalAccessException, EmptyStackException v.v c th to ra ngoi l. Chng trnh i khi c th t to ra ngoi l. Lp Throwable c Java cung cp l lp trn cng ca lp Exception (lp u tin trong cy tha k), lp ny l lp cha ca tt c cc ngoi l khc. 7.1.2. M hnh x l ngoi l Trong Java, m hnh x l ngoi l gim st vic thc thi m pht hin ngoi l. M hnh x l ngoi l ca Java c gi l catch and throw. Trong m hnh ny, khi mt ngoi l xy ra, ngoi l s b chn v chng trnh chuyn n mt khi x l ngoi l. Ngi lp trnh phi x l cc ngoi l khc nhau c th pht sinh trong chng trnh. Cc ngoi l phi c x l, hoc thot khi chng trnh khi n xy ra. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 94 7.2. Catch exception Khi try-catch c s dng thi hnh m hnh catch v throw ca vic x l ngoi l. Khi try cha mt tp lnh c th thi hnh c. Cc ngoi l c th b chn khi thi hnh tp lnh ny. Phng thc c kh nng to ra ngoi l c th c khai bo trong khi try. Mt hay nhiu khi catch c th theo sau mt khi try. Cc khi catch ny bt cc ngoi l c kh nng to ra trong trong khi try try { // on m c kh nng gy ra ngoi l } catch(Exception e1) { // Nu cc lnh trong khi try to ra ngoi l c loi e1, th thc hin //x l ngoi l nu khng chuyn xung khi 'catch' tip theo } catch(Exception e2) { // Nu cc lnh trong khi try to ra ngoi l c loi e2, th thc hin //x l ngoi l nu khng chuyn xung khi 'catch' tip theo
} catch(Exception eN) { // Nu cc lnh trong khi try to ra ngoi l c loi eN, th thc hin //x l ngoi l nu khng chuyn xung khi 'catch' tip theo } finally { // khi lnh nay lun c thc hin cho d ngoi l c xy ra hay khng. } V d: try { doFileProcessing(); // phng thc do ngi s dng nh ngha Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 95 displayResults(); } catch (Exeption e) // th hin ca ngoi l { System.err.println(Error : + e.toString()); e.printStackTrace(); }
y, e l i tng ca lp Exception. Chng ta c th s dng i tng ny in cc chi tit v ngoi l. Cc phng thc toString v printStackTrace c s dng m t cc ngoi l xy ra. Hnh sau ch ra kt xut ca phng thc printStackTrace() x l c ngoi l no, ta phi ch ra kiu ngoi l tng ng. catch(Exception e) Khi ngoi l khng bit thuc kiu no, chng ta c th s dng lp Exception bt ngoi l . Khi catch() bt gi bt c cc li xy ra trong khi thi hnh phng thc doFileProcessing hay display. Nu mt li xy ra trong khi thi hnh phng thc doFileProcessing(), lc phng thc displayResults() s khng bao gi c gi. Chng trnh s chuyn n thc hin khi catch. c nhiu lp x l li hn, nh l LookupException thay v mt i tng ngoi l chung (Exception e), li thc t c th l mt i tng thuc lp 'LookupException hay mt trong s nhng lp con ca n. Li s c truyn qua khi try catch cho ti khi gp catch ca n, nu khng tm thy chng trnh phi dng thc hin v thot.
Cc khi cha nhiu Catch
Nhiu khi catch x l cc loi ngoi l khc nhau mt cch c lp. Mt chng trnh cng c th cha cc khi try lng nhau. V d on m di y: try { statement 1; statement 2; try { Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 96 statement1; statement2; } catch(Exception e) // ca khi try trong {
} } catch(Exception e) // ca khi try ngoi { }
Khi s dng cc try lng nhau, khi try bn trong c thi hnh u tin. Bt k ngoi l no b chn trong khi try s b bt gi trong cc khi catch theo sau. Nu khi catch thch hp khng c tm thy th cc khi catch ca cc khi try bn ngoi s c xem xt. Nu khng, Java Runtime Environment x l cc ngoi l.
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. Khi finally thc hin tt c cc vic thu dn khi mt ngoi l xy ra. Khi ny c th c s dng kt hp vi khi try. Khi finally cha cc cu lnh thu hi ti nguyn v cho h thng hay lnh in ra cc cu thng bo. Cc lnh ny bao gm:
ng tp tin. ng ResultSet (c s dng trong chng trnh c s d liu). ng li cc kt ni c to trong c s d liu. V d: try { Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 97 doSomethingThatMightThrowAnException(); } finally { cleanup(); }
Phng thc cleanup() c gi nu phng thc doSomethingThatMightThrowAnException() gy ra ngoi l. Mt khc cleanup() cng c gi ngay khi khng c ngoi l no xy ra v thc hin tip phn sau khi lnh finally.
Khi finally l tu , khng bt buc. 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 7.3. Throw exception Cc ngoi l c th c to ra bng cch s dng t kho throw. T kha throw ch ra mt ngoi l va xy ra. Ton hng ca throw l mt i tng thuc lp c tha k t Throwable.
on lnh sau ch ra cch s dng ca lnh throw:
try { if (flag<0) { throw new MyException(); // user-defined } }
Mt phng thc c th to ra nhiu ngoi l. lm c iu ny ny, ta ch cn lit k danh sch cc ngoi l m phng thc c th to ra trong phn nh ngha phng thc. Gi Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 98 s rng phng thc x() gi phng thc y(). Phng thc y() to ra mt ngoi l nhng khng c x l. Trong trng hp ny, phng thc gi x() nn khai bo rng n c kh nng to ra ngoi l nh ngoi l ca phng thc c gi y(). Ta nn khai bo khi try catch trong phng thc x() m bo rng ngoi l khng c truyn cho cc phng thc m gi phng thc ny (phng thc gi x()).
on m sau minh ha cch s dng ca t kho throws to nhiu ngoi l:
public class Example { // Cc ngoi l cch nhau bi du phy public void exceptionExample() throws ExException, LookupException { try { // cc lnh } catch(ExException exmp) { } catch(LookupException lkpex) { } } }
Trong v d trn, phng thc exceptionExample c t kho throws. T kho ny c theo sau bi danh sch cc ngoi l m phng thc ny c th to ra Trong trng hp ny l ExException v LookupException. Hm x l ngoi l cho cc phng thc ny nn khai bo cc khi catch c th x l tt c cc ngoi l m cc phng c th gy ra. Lp Exception thc thi giao din Throwable v cung cp cc tnh nng lm vic vi ngoi l. N c ngha trong trng hp cc lp ngoi l c nh ngha bi ngi dng. lm iu ny, mt lp con ca lp Exception c to ra. u im ca vic tha k lp Exception l loi ngoi l mi ny c th c 'catch' c lp vi cc loi Throwable khc. V d:
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 99 class ArraySizeException extends NegativeArraySizeException { ArraySizeException() // constructor { super(You have passed an illegal array size); } } class ThrowDemo { int size, array[]; ThrowDemo(int s) { size=s; try { checkSize(); } catch(ArraySizeException e) { System.out.println(e); } } void checkSize() throws ArraySizeException { if (size < 0) throw new ArraySizeException(); else System.out.println(The array size is ok.); array = new int[3]; for (int i=0; i<3; i++) array[i] = i+1; } public static void main(String arg[]) { new ThrowDemo(Integer.parseInt(arg[0])); } } Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 100
Lp c nh ngha bi ngi dng ArraySizeException l lp con ca lp NegativeArraySizeException. Khi mt i tng c to t lp ny, thng bo v ngoi l c in ra. Phng thc checkSize() c gi to ra ngoi l ArraySizeException m c ch ra bi lnh throws. Kch thc ca mng c kim tra trong cu trc if. Nu kch thc l s m th i tng ca lp ArraySizeException c to. 7.4. Danh sch cc ngoi l Bng sau y lit k mt s ngoi l:
Ngoi l Lp cha ca th t phn cp ngoi l RuntimeException Lp c s cho nhiu ngoi l java.lang ArthmeticException Li v s hc, v d nh chia cho 0. IllegalAccessException Lp khng th truy cp. IllegalArgumentException i s khng hp l. ArrayIndexOutOfBoundsExeption Li trn mng. NullPointerException Khi truy cp i tng null. SecurityException C ch bo mt khng cho php thc hin. ClassNotFoundException Khng th np lp yu cu. NumberFormatException Vic chuyn i t chui sang s thc khng thnh cng. AWTException Ngoi l v AWT IOException Lp cha ca cc lp ngoi l I/O FileNotFoundException Khng th nh v tp tin EOFException Kt thc mt tp tin. NoSuchMethodException Phng thc yu cu khng tn ti. InterruptedException Khi mt lung b ngt. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 101 CHNG 8: XUT NHP TP TIN 8.1. Gii thiu chung Vic lu tr d liu trong cc bin chng trnh, cc mng c tnh cht tm thi v d liu s mt i khi bin ra khi tm nh hng ca n hoc khi chng trnh kt thc. Files gip cho cc chng trnh c th lu tr mt lng ln d liu, cng nh c th lu tr d liu trong mt thi gian di ngay c khi chng trnh kt thc. Trong chng ny chng ta s tm hiu lm th no cc chng trnh java c th to, c, ghi v x l cc files tun t v cc file truy cp ngu nhin thng qua mt s v d minh ha. X l files l mt vn ht sc c bn, quan trng m bt k mt ngn ng lp trnh no cng phi h tr nhng th vin, hm x l mt s thao tc c bn nht i vi kiu d liu file. Xl files l mt phn ca cng vic x l cc lung, gip cho mt chng trnh c th c, ghi d liu trong b nh, trn files v trao d liu thng qua cc kt ni trn mng. 8.2. Cc loi tp tin 8.2.1. Phn loi lung v tp tin Chng ny s cung cp cho chng ta nhng kin thc c bn v lung (streams) v files: - Th vin cc lp v lung trong java: lung byte, lung k t. - Xut nhp Console dng lung byte, lung k t. - Xut nhp files dng lung k t v lung byte. - Vn x l files truy cp ngu nhin dng lp RandomAccessFile. - Xl file v th mc dng lp File.
8.2.2.Khi nim lung Tt c nhng hot ng nhp/xut d liu (nhp d liu t bn phm, ly d liu t mng v, ghi d liu ra a, xut d liu ra mn hnh, my in, ) u c quy v mt khi nim gi l lung (stream). Lung l ni c th sn xut v tiu th thng tin. Lung thng c h thng xut nhp trong java gn kt vi mt thit b vt l. Tt c cc lung u c chung mt nguyn tc hot ng ngay c khi chng c gn kt vi cc thit b vt l khc nhau. V vy cng mt lp, phng thc xut nhp c th dng chung cho cc thit b vt l khc nhau. Chng hn cng mt phng thc c th dng ghi d liu ra console, ng thi cng c th dng ghi d liu xung mt file trn a. Java hin thc lung bng tp hp cc lp phn cp trong gi java.io. Java nh ngha hai kiu lung: byte v k t (phin bn gc ch nh ngha kiu lung byte, v sau lung k t c thm vo trong cc phin bn v sau). Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 102 Lung byte (hay lung da trn byte) h tr vic xut nhp d liu trn byte, thng c dng khi c ghi d liu nh phn. Lung k t c thit k h tr vic xut nhp d liu kiu k t (Unicode). Trong mt vi trng hp lung k t s dng hiu qu hn lung byte, nhng mc h thng th tt c nhng xut nhp u phi qui v byte. Lung k t h tr hiu qu ch i vi vic qun l, x l cc k t. a. Lung byte (Byte Streams) Cc lung byte c nh ngha dng hai lp phn cp. Mc trn cng l hai lp tru tng InputStream v OutputStream. InputStream nh ngha nhng c im chung cho nhng lung nhp byte. OutputStream m t cch x l ca cc lung xut byte. Cc lp con dn xut t hai lp InputStream v OutputStream s h tr chi tit tng ng vi vic c ghi d liu trn nhng thit b khc nhau. ng chong ngp vi hang lot rt nhiu cc lp khc nhau. ng qu lo lng, mi khi bn nm vng, s dng thnh tho mt lung byte no th bn d dng lm vic vi nhng lung cn li. Lp lung byte ngha BufferedInputStream Buffered input stream BufferedOutputStream Buffered output stream ByteArrayInputStream Input stream c d liu t mt mng byte ByteArrayOutputStream Output stream ghi d liu n mt mng byte DataInputStream Lung nhp c nhng phng thc c nhng kiu d liu chun trong java DataOutputStream Lung xut c nhng phng thc ghi nhng kiu d liu chun trong java FileInputStream Lung nhp cho php c d liu t file FileOutputStream Lung xut cho php ghi d liu xung file FilterInputStream Hin thc lp tru tng InputStream FilterOutputStream Hin thc lp tru tng OutputStream InputStream Lp tru tng, l lp cha ca tt c cc lp lung nhp kiu Byte OutputStream Lp tru tng, l lp cha ca tt c cc lp xut nhp kiu Byte PipedInputStream Lung nhp byte kiu ng (piped) thng phi c gn vi mt lung PipedOutputStream Lung nhp byte kiu ng (piped) thng phi c gn vi mt lung nhp kiu ng to nn mt kt ni trao i d liu kiu ng. PrintStream Lung xut c cha phng thc print() v println() Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 103 PushbackInputStream L mt lung nhp kiu Byte m h tr thao tc tr li (push back) v phc hi thao tc c mt byte (unread) RandomAccessFile H tr cc thao tc c, ghi i vi file truy cp ngu nhin. SequenceInputStream L mt lung nhp c to nn bng cch ni kt logic cc lung nhp khc. b. Lung k t (Character Streams) Cc lung k t c nh ngha dng hai lp phn cp. Mc trn cng l hai lp tru tng Reader v Writer. Lp Reader dng cho vic nhp d liu ca lung, lp Writer dng cho vic xut d liu cua lung. Nhng lp dn xut t Reader v Writer thao tc trn cc lung k t Unicode. Lp lung k t ngha BufferedReader Lung nhp k t c d liu vo mt vng m. BufferedWriter Lung xut k t ghi d liu ti mt vng m. CharArrayReader Lung nhp c d liu t mt mng k t CharArrayWriter Lung xut ghi d liu ti mt mng k t FileReader Lung nhp k t c d liu t file FileWriter Lung xut k t ghi d liu n file FilterReader Lp c d liu trung gian (lp tru tng) FilterWriter Lp xut trung gian tru tng InputStreamReader Lung nhp chuyn bytes thnh cc k t LineNumberReader Lung nhp m dng OutputStreamWriter Lung xut chuyn nhng k t thnh cc bytes PipedReader Lung c d liu bng c ch ng ng PipedWriter Lung ghi d liu bng c ch ng ng PrintWriter Lung ghi vn bn ra thit b xut (cha phng thc print() v println() ) PushbackReader Lung nhp cho php c v khi phc li d liu Reader Lp nhp d liu tru tng StringReader Lung nhp c d liu t chui StringWriter Lung xut ghi d liu ra chui Writer Lp ghi d liu tru tng
c. Nhng lung c nh ngha trc (The Predefined Streams) Tt c cc chng trnh vit bng java lun t ng import gi java.lang. Gi ny c nh ngha lp System, bao gm mt s c im ca mi trng run-time, n c ba bin lung c nh ngha trc l in, out v err, cc bin ny l cc fields c khai bo static trong lp System. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 104 a. System.out: lung xut chun, mc nh l console. System.out l mt i tng kiu PrintStream. b. System.in: lung nhp chun, mc nh l bn phm. System.in l mt i tng kiu InputStream. c. System.err: lung li chun, mc nh cng l console. System.err cng l mt i tng kiu PrintStream ging System.out.
8.2.3.S dng lung Byte Nh chng ta bit hai lp InputStream v OutputStream l hai siu lp (cha) i vi tt c nhng lp lung xut nhp kiu byte. Nhng phng thc trong hai siu lp ny nm ra cc li kiu IOException. Nhng phng thc nh ngha trong hai siu lp ny l c th dng trong cc lp con ca chng. V vy tp cc phng thc l tp ti tiu cc chc nng nhp xut m nhng lung nhp xut kiu byte c th s dng. Nhng phng thc nh ngha trong lp InputStream v OutputStream
Phng thc ngha InputStream int available( ) Tr v s lung bytes c th c c t lung nhp void close( ) ng lung nhp v gii phng ti nguyn h thng gn vi lung. Khng thnh cng s nm ra mt li IOException void mark(int numBytes) nh du v tr hin ti trong lung nhp boolean markSupported( ) Kim tra xem lung nhp c h tr phng thc mark() v reset() khng. int read( ) c byte tip theo t lung nhp int read(byte buffer[ ]) c buffer.length bytes v lu vo trong vng nh buffer. Kt qu tr v s bytes tht s c c int read(byte buffer[ ], int offset, int numBytes) c numBytes bytes bt u t a ch offset v lu vo trong vng nh buffer. Kt qu tr v s bytes tht s c c void reset( ) Nhy con tr n v tr c xc nh bi vic gi hm mark() ln sau cng. long skip(long numBytes) Nhy qua numBytes d liu t lung nhp OutputStream void close( ) ng lung xut v gii phng ti nguyn h thng gn vi lung. Khng thnh cng s nm ra mt li IOException void flush( ) p d liu t b m phi ghi ngay xung lung (nu c) void write(int b) Ghi byte d liu ch nh xung lung void write(byte buffer[ ]) Ghi buffer.length bytes d liu t mng ch nh xung lung Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 105 void write(byte buffer[ ], int offset, int numBytes) Ghi numBytes bytes d liu t v tr offset ca mng ch nh buffer xung lung
8.3. Nguyn tc c/ghi tp tin 8.3.1.c d liu t Console Trc y, khi Java mi ra i thc hin vic nhp d liu t Console ngi ta ch dng lung nhp byte. V sau th chng ta c th dng c lung byte v lung k t, nhng trong mt s trng hp thc t c d liu t Console ngi ta thch dng lung kiu k t hn, v l do n gin v d bo tr chng trnh. y vi mc ch minh ha chng ta dng lung byte thc hin vic nhp xut Console. V d: chng trnh minh ha vic c mt mng bytes t System.in Import java.io.*; class ReadBytes { public static void main(String args[]) throws IOException { byte data[] = new byte[100]; System.out.print("Enter some characters."); System.in.read(data); System.out.print("You entered: "); for(int i=0; i < data.length; i++) System.out.print((char) data[i]); } } 8.3.2.Xut d liu ra Console Tng t nh nhp d liu t Console, vi phin bn u tin ca java xut d liu ra Console t ch c th s dng lung byte. K t phin bn 1.1 (c thm lung k t), xut d liu ra Console c th s dng c lung k t v lung byte. Tuy nhin, cho n nay xut d liu ra Console thng ngi ta vn dng lung byte. Chng ta kh quen thuc vi phng thc print() v println(), dng xut d liu ra Console. Bn cnh chng ta cng c th dng phng thc write(). V d: minh ha s dng phng thc System.out.write() xut k t X ra Console import java.io.*; class WriteDemo { public static void main(String args[]) { Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 106 int b; b = 'X'; System.out.write(b); System.out.write('\n'); } } 8.3.3.c v ghi file dng lung Byte To mt lung Byte gn vi file ch nh dng FileInputStream v FileOutputStream. m mt file, n gin ch cn to mt i tng ca nhng lp ny, tn file cn m l thng s trong constructor. Khi file m, vic c v ghi d liu trn file c thc hin mt cch bnh thng thng qua cc phng thc cung cp trong lung. a. c d liu t file d. M mt file c d liu FileInputStream(String fileName) throws FileNotFoundException Nu file khng tn ti: th nm ra FileNotFoundException e. c d liu: dng phng thc read() int read( ) throws IOException: c tng byte t file v tr v gi tr ca byte c c. Tr v -1 khi ht file, v nm ra IOException khi c li c. f. ng file: dng phng thc close() void close( ) throws IOException: sau khi lm vic xong cn ng file gii phng ti nguyn h thng cp pht cho file. V d: /* Hin th ni dung ca mt file tn test.txt lu tiD:\test.txt */ import java.io.*; class ShowFile { public static void main(String args[]) throws IOException { int i; FileInputStream fin; try { fin = new FileInputStream(D:\\test.txt); } catch(FileNotFoundException exc) { System.out.println("File Not Found"); return; Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 107 } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("Usage: ShowFile File"); return; } // read bytes until EOF is encountered do { i = fin.read(); if(i != -1) System.out.print((char) i); } while(i != -1); fin.close(); } } b. Ghi d liu xung file M mt file ghi d liu FileOutputStream(String fileName) throws FileNotFoundException Nu file khng to c: th nm ra FileNotFoundException Ghi d liu xung: dng phng thc write() void write(int byteval) throws IOException: ghi mt byte xc nh bi tham s byteval xung file, v nm ra IOException khi c li ghi. ng file: dng phng thc close() void close( ) throws IOException: sau khi lm vic xong cn ng file gii phng ti nguyn h thng cp pht cho file. V d: copy ni dung mt file text n mt file text khc. /* Copy ni dung ca mt file text*/ import java.io.*; class CopyFile { public static void main(String args[])throws IOException { int i; FileInputStream fin; FileOutputStream fout; try { // open input file try { fin = new FileInputStream(D:\\source.txt); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 108 } catch(FileNotFoundException exc) { System.out.println("Input File Not Found"); return; } // open output file try { fout = new FileOutputStream(D:\\dest.txt); } catch(FileNotFoundException exc) { System.out.println("Error Opening Output File"); return; } } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("Usage: CopyFile From To"); return; } // Copy File try { do { i = fin.read(); if(i != -1) fout.write(i); } while(i != -1); } catch(IOException exc) { System.out.println("File Error"); } fin.close(); fout.close(); } } Kt qu thc thi chng trnh: chng trnh s copy ni dung ca file D:\source.txt v ghi vo mt file mi D:\dest.txt. 8.3.4.c v ghi d liu nh phn Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 109 Phn trn chng ta c v ghi cc bytes d liu l cc k t m ASCII. c v ghi nhng gi tr nh phn ca cc kiu d liu trong java, chng ta s dng DataInputStream v DataOutputStream. DataOutputStream: hin thc interface DataOuput. Interface DataOutput c cc phng thc cho php ghi tt c nhng kiu d liu c s ca java n lung (theo nh dng nh phn). Phng thc ngha void writeBoolean (boolean val) Ghi xung lung mt gi tr boolean c xc nh bi val. void writeByte (int val) Ghi xung lung mt byte c xc nh bi val. void writeChar (int val) Ghi xung lung mt Char c xc nh bi val. void writeDouble (double val) Ghi xung lung mt gi tr Double c xc nh bi val. void writeFloat (floatval) Ghi xung lung mt gi tr float c xc nh bi val. void writeInt (int val) Ghi xung lung mt gi tr int c xc nh bi val. void writeLong (long val) Ghi xung lung mt gi tr long c xc nh bi val. void writeShort (int val) Ghi xung lung mt gi tr short c xc nh bi val. Contructor: DataOutputStream(OutputStream outputStream) OutputStream: l lung xut d liu. ghi d liu ra file th i tng outputStream c th l FileOutputStream. DataInputStream: hin thc interface DataInput. Interface DataInput c cc phng thc cho php c tt c nhng kiu d liu c s ca java (theo nh dng nh phn).
Phng thc ngha boolean readBoolean( ) c mt gi tr boolean Byte readByte( ) c mt byte char readChar( ) c mt Char double readDouble( ) c mt gi tr Double float readFloat( ) c mt gi tr float int readInt( ) c mt gi tr int Long readLong( ) c mt gi tr long short readShort( ) c mt gi tr short Contructor: DataInputStream(InputStream inputStream) InputStream: l lung nhp d liu. d liu t file th i tng InputStream c th l FileInputStream. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 110 V d: dng DataOutputStream v DataInputStream ghi v c nhng kiu d liu khc nhau trn file. import java.io.*; class RWData { public static void main(String args[]) throws IOException { DataOutputStream dataOut; DataInputStream dataIn; int i = 10; double d = 1023.56; boolean b = true; try { dataOut = new DataOutputStream( new FileOutputStream("D:\\testdata")); } catch(IOException exc) { System.out.println("Cannot open file."); return; } try { System.out.println("Writing " + i); dataOut.writeInt(i); System.out.println("Writing " + d); dataOut.writeDouble(d); System.out.println("Writing " + b); dataOut.writeBoolean(b); System.out.println("Writing " + 12.2 * 7.4); dataOut.writeDouble(12.2 * 7.4); } catch(IOException exc) { System.out.println("Write error."); } dataOut.close(); System.out.println(); // Now, read them back. try { dataIn = new DataInputStream( Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 111 new FileInputStream("D:\\testdata")); } catch(IOException exc) { System.out.println("Cannot open file."); return; } try { i = dataIn.readInt(); System.out.println("Reading " + i); d = dataIn.readDouble(); System.out.println("Reading " + d); b = dataIn.readBoolean(); System.out.println("Reading " + b); d = dataIn.readDouble(); System.out.println("Reading " + d); } catch(IOException exc) { System.out.println("Read error."); } dataIn.close(); } } Kt qu thc thi chng trnh: D liu ghi xung file D:\\testdata
8.4.File truy cp ngu nhin (Random Access Files) Bn cnh vic x l xut nhp trn file theo kiu tun t thng qua cc lung, java cng h tr truy cp ngu nhin ni dung ca mt file no dng RandomAccessFile. RandomAccessFile khng dn xut t InputStream hay OutputStream m n hin thc cc interface DataInput, DataOutput (c nh ngha cc phng thc I/O c bn). RandomAccessFile h tr vn nh v con tr file bn trong mt file dng phng thc seek(long newPos). Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 112 V d: minh ha vic truy cp ngu nhin trn file. Chng trnh ghi 6 s kiu double xung file, ri c ln theo th t ngu nhin. import java.io.*; class RandomAccessDemo { public static void main(String args[]) throws IOException { double data[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25}; double d; RandomAccessFile raf; try { raf = new RandomAccessFile("D:\\random.dat", "rw"); } catch(FileNotFoundException exc) { System.out.println("Cannot open file."); Return // Write values to the file. for(int i=0; i < data.length; i++) { try { raf.writeDouble(data[i]); } catch(IOException exc) { System.out.println("Error writing to file."); return ; } } try { // Now, read back specific values raf.seek(0); // seek to first double d = raf.readDouble(); System.out.println("First value is " + d); raf.seek(8); // seek to second double d = raf.readDouble(); System.out.println("Second value is " + d); raf.seek(8 * 3); // seek to fourth double d = raf.readDouble(); Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 113 System.out.println("Fourth value is " + d); System.out.println(); // Now, read every other value. System.out.println("Here is every other value: "); for(int i=0; i < data.length; i+=2) { raf.seek(8 * i); // seek to ith double d = raf.readDouble(); System.out.print(d + " "); System.out.println("\n"); } catch(IOException exc) { System.out.println("Error seeking or reading."); } raf.close(); } } 8.5. S dng lung k t Chng ta tm hiu v s dng lung byte xut/nhp d liu. Tuy c th nhng trong mt s trng hp lung byte khng phi l cch l tng qun l xut nhp d liu kiu character, v vy java a ra kiu lung character phc v cho vic xut nhp d liu kiu character trn lung. Mc trn cng l hai lp tru tng Reader v Writer. Lp Reader dng cho vic nhp d liu ca lung, lp Writer dng cho vic xut d liu ca lung. Nhng lp dn xut t Reader v Writer thao tc trn cc lung k t Unicode. Nhng phng thc nh ngha trong lp tru tng Reader v Writer Phng thc ngha Reader abstract void close( ) ng lung void mark(int numChars) nh du v tr hin ti trn lung boolean markSupported( ) Kim tra xem lung c h tr thao tc nh du mark() khng? int read( ) c mt k t int read(char buffer[ ]) c buffer.length k t cho vo buffer abstract int read(char buffer[ ], int offset, int numChars) c numChars k t cho vo vng m buffer ti v tr buffer[offset] boolean ready( ) Kim tra xem lung c c c khng? void reset( ) Di con tr nhp n v tr nh du trc long skip(long numChars) B qua numChars ca lung nhp Writer abstract void close( ) ng lung xut. C li nm ra IOException Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 114 abstract void flush( ) Dn dp lung (buffer xut) void write(int ch) Ghi mt k t void write(byte buffer[ ]) Ghi mt mng cc k t abstract void write(char buffer[ ], int offset, int numChars) Ghi mt phn ca mng k t void write(String str) Ghi mt chui void write(String str, int offset, int numChars) Ghi mt phn ca mt chui k t Reader abstract void close( ) ng lung void mark(int numChars) nh du v tr hin ti trn lung boolean markSupported( ) Kim tra xem lung c h tr thao tc nh du mark() khng? int read( ) c mt k t int read(char buffer[ ]) c buffer.length k t cho vo buffer abstract int read(char buffer[ ], int offset, int numChars) c numChars k t cho vo vng m buffer ti v tr buffer[offset] boolean ready( ) Kim tra xem lung c c c khng? void reset( ) Di con tr nhp n v tr nh du trc long skip(long numChars) B qua numChars ca lung nhp Writer abstract void close( ) ng lung xut. C li nm ra IOException abstract void flush( ) Dn dp lung (buffer xut) void write(int ch) Ghi mt k t void write(byte buffer[ ]) Ghi mt mng cc k t abstract void write(char buffer[ ], int offset, int numChars) Ghi mt phn ca mng k t void write(String str) Ghi mt chui void write(String str, int offset, int numChars) Ghi mt phn ca mt chui k t
V d: Dng BufferedReader c chui k t t Console. Chng trnh kt thc khi gp chui c l chui stop import java.io.*; class ReadLines { public static void main(String args[]) throws IOException { Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 115 // create a BufferedReader using System.in BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; System.out.println("Nhap chuoi."); System.out.println("Nhap 'stop' ket thuc chuong trinh."); do { str = br.readLine(); System.out.println(str); } while(!str.equals("stop")); } } 8.5.1. Xut Console dng lung k t Trong ngn ng java, bn cnh vic dng System.out xut d liu ra Console (thng dng debug chng trnh), chng ta c th dng lung PrintWriter i vi cc chng trnh chuyn nghip. PrintWriter l mt trong nhng lp lung k t. Vic dng cc lp lung k t xut d liu ra Console thng c a chung hn. xut d liu ra Console dng PrintWriter cn thit phi ch nh System.out cho lung xut. V d: To i tng PrintWriter xut d liu ra Console PrintWriter pw = new PrintWriter(System.out, true); V d: minh ha dng PrintWriter xut d liu ra Console import java.io.*; public class PrintWriterDemo { public static void main(String args[]) { PrintWriter pw = new PrintWriter(System.out, true); int i = 10; double d = 123.67; double r = i+d pw.println("Using a PrintWriter."); pw.println(i); pw.println(d); pw.println(i + " + " + d + " = " + r); } } 8.5.2.c/ghi File dng lung k t Thng thng c/ghi file ngi ta thng dng lung byte, nhng i vi lung k t chng ta cng c th thc hin c. u im ca vic dng lung k t l chng thao tc trc tip trn cc k t Unicode. V vy lung k t l chn la tt nht khi cn lu nhng vn Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 116 bn Unicode. Hai lp lung thng dng cho vic c/ghi d liu k t xung file l FileReader v FileWriter. V d: c nhng dng vn bn nhp t bn phm v ghi chng xung file tn l test.txt. Vic c v ghi kt thc khi ngi dng nhp vo chui stop. import java.io.*; class KtoD { public static void main(String args[]) throws IOException { String str; FileWriter fw; BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try { fw = new FileWriter("D:\\test.txt"); } catch(IOException exc) { System.out.println("Khong the mo file."); return ; } System.out.println("Nhap ('stop' de ket thuc chuong trinh)."); do { System.out.print(": "); str = br.readLine(); if(str.compareTo("stop") == 0) break; str = str + "\r\n"; fw.write(str); } while(str.compareTo("stop") != 0); fw.close(); } } D liu ghi xung file:
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 117 V d: c v hin th ni dung ca file test.txt ln mn hnh. import java.io.*; class DtoS { public static void main(String args[]) throws Exception { FileReader fr = new FileReader("D:\\test.txt"); BufferedReader br = new BufferedReader(fr); String s; while((s = br.readLine()) != null) { System.out.println(s); } fr.close(); } } Ni dung ca file test.txt:
8.6. Lp File Lp File khng phc v cho vic nhp/xut d liu trn lung. Lp File thng c dng bit c cc thng tin chi tit v tp tin cng nh th mc (tn, ngy gi to, kch thc, ) java.lang.Object + java.io.File Cc Constructor: To i tng File t ng dn tuyt i public File(String pathname) v d: File f = new File(C:\\Java\\vd1.java); To i tng File t tn ng dn v tn tp tin tch bit public File(String parent, String child) v d: File f = new File(C:\\Java, vd1.java); To i tng File t mt i tng File khc public File(File parent, String child) Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 118 v d: File dir = new File (C:\\Java); File f = new File(dir, vd1.java); Mt s phng thc thng gp ca lp File (chi tit v cc phng thc c thm trong ti liu J2SE API Specification)
public String getName() Ly tn ca i tng File public String getPath() Ly ng dn ca tp tin public boolean isDirectory() Kim tra xem tp tin c phi Chng ny s cung cp cho chng ta nhng kin thc c bn v lung (streams) v files: - Th vin cc lp v lung trong java: lung byte, lung k t. - Xut nhp Console dng lung byte, lung k t. - Xut nhp files dng lung k t v lung byte. - Vn x l files truy cp ngu nhin dng lp RandomAccessFile. - Xl file v th mc dng lp File.
8.7. Khi nim lung Tt c nhng hot ng nhp/xut d liu (nhp d liu t bn phm, ly d liu t mng v, ghi d liu ra a, xut d liu ra mn hnh, my in, ) u c quy v mt khi nim gi l lung (stream). Lung l ni c th sn xut v tiu th thng tin. Lung thng c h thng xut nhp trong java gn kt vi mt thit b vt l. Tt c cc lung u c chung mt nguyn tc hot ng ngay c khi chng c gn kt vi cc thit b vt l khc nhau. V vy cng mt lp, phng thc xut nhp c th dng chung cho cc thit b vt l khc nhau. Chng hn cng mt phng thc c th dng ghi d liu ra console, ng thi cng c th dng ghi d liu xung mt file trn a. Java hin thc lung bng tp hp cc lp phn cp trong gi java.io. Java nh ngha hai kiu lung: byte v k t (phin bn gc ch nh ngha kiu lung byte, v sau lung k t c thm vo trong cc phin bn v sau). Lung byte (hay lung da trn byte) h tr vic xut nhp d liu trn byte, thng c dng khi c ghi d liu nh phn. Lung k t c thit k h tr vic xut nhp d liu kiu k t (Unicode). Trong mt vi trng hp lung k t s dng hiu qu hn lung byte, nhng mc h thng th tt c nhng xut nhp u phi qui v byte. Lung k t h tr hiu qu ch i vi vic qun l, x l cc k t.
8.7.1.Lung byte (Byte Streams) Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 119 Cc lung byte c nh ngha dng hai lp phn cp. Mc trn cng l hai lp tru tng InputStream v OutputStream. InputStream nh ngha nhng c im chung cho nhng lung nhp byte. OutputStream m t cch x l ca cc lung xut byte. Cc lp con dn xut t hai lp InputStream v OutputStream s h tr chi tit tng ng vi vic c ghi d liu trn nhng thit b khc nhau. ng chong ngp vi hang lot rt nhiu cc lp khc nhau. ng qu lo lng, mi khi bn nm vng, s dng thnh tho mt lung byte no th bn d dng lm vic vi nhng lung cn li. Lp lung byte ngha BufferedInputStream Buffered input stream BufferedOutputStream Buffered output stream ByteArrayInputStream Input stream c d liu t mt mng byte ByteArrayOutputStream Output stream ghi d liu n mt mng byte DataInputStream Lung nhp c nhng phng thc c nhng kiu d liu chun trong java DataOutputStream Lung xut c nhng phng thc ghi nhng kiu d liu chun trong java FileInputStream Lung nhp cho php c d liu t file FileOutputStream Lung xut cho php ghi d liu xung file FilterInputStream Hin thc lp tru tng InputStream FilterOutputStream Hin thc lp tru tng OutputStream InputStream Lp tru tng, l lp cha ca tt c cc lp lung nhp kiu Byte OutputStream Lp tru tng, l lp cha ca tt c cc lp xut nhp kiu Byte PipedInputStream Lung nhp byte kiu ng (piped) thng phi c gn vi mt lung PipedOutputStream Lung nhp byte kiu ng (piped) thng phi c gn vi mt lung nhp kiu ng to nn mt kt ni trao i d liu kiu ng. PrintStream Lung xut c cha phng thc print() v println() PushbackInputStream L mt lung nhp kiu Byte m h tr thao tc tr li (push back) v phc hi thao tc c mt byte (unread) RandomAccessFile H tr cc thao tc c, ghi i vi file truy cp ngu nhin. SequenceInputStream L mt lung nhp c to nn bng cch ni kt logic cc lung nhp khc.
8.7.2.Lung k t (Character Streams) Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 120 Cc lung k t c nh ngha dng hai lp phn cp. Mc trn cng l hai lp tru tng Reader v Writer. Lp Reader dng cho vic nhp d liu ca lung, lp Writer dng cho vic xut d liu cua lung. Nhng lp dn xut t Reader v Writer thao tc trn cc lung k t Unicode. Lp lung k t ngha BufferedReader Lung nhp k t c d liu vo mt vng m. BufferedWriter Lung xut k t ghi d liu ti mt vng m. CharArrayReader Lung nhp c d liu t mt mng k t CharArrayWriter Lung xut ghi d liu ti mt mng k t FileReader Lung nhp k t c d liu t file FileWriter Lung xut k t ghi d liu n file FilterReader Lp c d liu trung gian (lp tru tng) FilterWriter Lp xut trung gian tru tng InputStreamReader Lung nhp chuyn bytes thnh cc k t LineNumberReader Lung nhp m dng OutputStreamWriter Lung xut chuyn nhng k t thnh cc bytes PipedReader Lung c d liu bng c ch ng ng PipedWriter Lung ghi d liu bng c ch ng ng PrintWriter Lung ghi vn bn ra thit b xut (cha phng thc print() v println() ) PushbackReader Lung nhp cho php c v khi phc li d liu Reader Lp nhp d liu tru tng StringReader Lung nhp c d liu t chui StringWriter Lung xut ghi d liu ra chui Writer Lp ghi d liu tru tng
8.7.3. Nhng lung c nh ngha trc (The Predefined Streams) Tt c cc chng trnh vit bng java lun t ng import gi java.lang. Gi ny c nh ngha lp System, bao gm mt s c im ca mi trng run-time, n c ba bin lung c nh ngha trc l in, out v err, cc bin ny l cc fields c khai bo static trong lp System. g. System.out: lung xut chun, mc nh l console. System.out l mt i tng kiu PrintStream. h. System.in: lung nhp chun, mc nh l bn phm. System.in l mt i tng kiu InputStream. i. System.err: lung li chun, mc nh cng l console. System.out cng l mt i tng kiu PrintStream ging System.out. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 121 8.7.4. S dng lung Byte Nh chng ta bit hai lp InputStream v OutputStream l hai siu lp (cha) i vi tt c nhng lp lung xut nhp kiu byte. Nhng phng thc trong hai siu lp ny nm ra cc li kiu IOException. Nhng phng thc nh ngha trong hai siu lp ny l c th dng trong cc lp con ca chng. V vy tp cc phng thc l tp ti tiu cc chc nng nhp xut m nhng lung nhp xut kiu byte c th s dng. Nhng phng thc nh ngha trong lp InputStream v OutputStream
Phng thc ngha InputStream int available( ) Tr v s lung bytes c th c c t lung nhp void close( ) ng lung nhp v gii phng ti nguyn h thng gn vi lung. Khng thnh cng s nm ra mt li IOException void mark(int numBytes) nh du v tr hin ti trong lung nhp boolean markSupported( ) Kim tra xem lung nhp c h tr phng thc mark() v reset() khng. int read( ) c byte tip theo t lung nhp int read(byte buffer[ ]) c buffer.length bytes v lu vo trong vng nh buffer. Kt qu tr v s bytes tht s c c int read(byte buffer[ ], int offset, int numBytes) c numBytes bytes bt u t a ch offset v lu vo trong vng nh buffer. Kt qu tr v s bytes tht s c c void reset( ) Nhy con tr n v tr c xc nh bi vic gi hm mark() ln sau cng. long skip(long numBytes) Nhy qua numBytes d liu t lung nhp OutputStream void close( ) ng lung xut v gii phng ti nguyn h thng gn vi lung. Khng thnh cng s nm ra mt li IOException void flush( ) p d liu t b m phi ghi ngay xung lung (nu c) void write(int b) Ghi byte d liu ch nh xung lung void write(byte buffer[ ]) Ghi buffer.length bytes d liu t mng ch nh xung lung void write(byte buffer[ ], int offset, int numBytes) Ghi numBytes bytes d liu t v tr offset ca mng ch nh buffer xung lung l th mc khng? public boolean isFile() Kim tra xem tp tn c phi l mt file khng? public String[] list() Ly danh sch tn cc tp tin v th mc con ca i tng File ang xt v tr v trong mt mng. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 122 V d: import java.awt.*; import java.io.*; public class FileDemo { public static void main(String args[]) { Frame fr = new Frame ("File Demo"); fr.setBounds(10, 10, 300, 200); fr.setLayout(new BorderLayout()); Panel p = new Panel(new GridLayout(1,2)); List list_C = new List(); list_C.add("C:\\"); File driver_C = new File ("C:\\"); String[] dirs_C = driver_C.list(); for (int i=0;i<dirs_C.length;i++) { File f = new File ("C:\\" + dirs_C[i]); if (f.isDirectory()) list_C.add("<DIR>" + dirs_C[i]); else list_C.add(" " + dirs_C[i]); } List list_D = new List(); list_D.add("D:\\"); File driver_D = new File ("D:\\"); String[] dirs_D = driver_D.list(); for (int i=0;i<dirs_D.length;i++) { File f = new File ("D:\\" + dirs_D[i]); if (f.isDirectory()) list_D.add("<DIR>" + dirs_D[i]); else list_D.add(" " + dirs_D[i]); } p.add(list_C); p.add(list_D); fr.add(p, BorderLayout.CENTER); fr.setVisible(true); } } Kt qu Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 123
Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 124 Bi Tp 1. Thit k cc thnh phn v cc hnh ng khi mt khch hng thc hin mt giao dch ATM (Automatic Teller Machine). 2. Lit k nhng thuc tnh v nhng phng thc cn c v mt hnh a gic. 3. Hy vit mt on chng trnh in ra dng ch Welcome to the world of Java 4. Hy vit hai phng thc khi to tng minh cho mt lp dng tnh din tch hnh ch nht. Khi mt gi tr c truyn vo phng thc khi to, n cho rng di v chiu rng bng nhau v bng gi tr truyn vo. Lc , n s tnh din tch tng ng. Khi hai gi tr c truyn vo, n s tnh din tch hnh ch nht. 5. Vit mt chng trnh thc hin nhng vic sau y: a. Khai bo v gn gi tr u cho cc bin m v n l 100 v 200 tng ng. b. Theo cc iu kin: nu m bng 0, hin th kt qu tng ng. c. Nu m ln hn n , hin th kt qu tng ng. d. Kim tra gi tr n l chn hay l. 6. Vit mt chng trnh hin th tng cc bi s ca 7 nm gia 1 v 100. 7. Vit chng trnh cng by s hng ca dy sau: 1!+2!+3!. 8. Vit chng trnh thc hin cc yu cu sau: a. To mt lp im biu din mt im trong khng gian bao gm cc thuc tnh - Honh - Tung - Cao b. B sung cc phng thc sau cho lp - Phng thc khi to khng c tham s no. - Phng thc khi to nhn 3 tham s thc lm tham s - Phng thc nhp vo mt im t bn phm - Phng thc in thng tin mt im ra mn hnh c. Vit phng thc Main kim tra cc phng thc ci t cho lp Hng dn: Ta ca mt im c kiu gi tr l float 9. Xy dng lp Stack m phng mt Stack bao gm: - Hm to Stack(int n) khi to Stack c ti a n phn t - Phng thc isEmpty kim tra xem Stack c phn t no hay khng? Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 125 - Phng thc isFull kim tra xem Stack y hay cha? - Phng thc push thm mt phn t vo Stack - Phng thc pop ly mt phn t ra khi Stack 10. Xy dng lp MaTran cho thc hin cc php ton trn ma trn, bao gm: - Hm to ma MaTran(int sh, int sc) dng khi to mt ma trn c s hng l sh v s ct l sc. - Phng thc print in ma trn ra mn hnh - Phng thc nhap nhp ma trn t bn phm - Phng thc cong cng hai ma trn - Phng thc hieu thc hin php hiu hai ma trn - Phng thc doiDau i du cc phn t ca ma trn - Phng thc main kim tra ma trn trn 11. Xy dng Project a.To mt lp biu din phn s (c t v mu l cc s nguyn) gm cc thuc tnh - T s - Mu s b. B sung cc phng thc sau cho lp. - Phng thc khi to khng c tham s no, to phn s bng 0. - Phng thc khi to nhn 2 s nguyn lm tham s. - Phng thc khi to nhn mt i tng thuc chnh lp ny lm tham s. - Phng thc cng, tr, nhn, chia phn s ny vi mt phn s khc. - Phng thc in phn s ra mn hnh. - Phng thc rt gn phn s 3. Vit hm main kim tra cc phng thc to. Hng dn: - to phn s bng 0: t s =0, mu s =1 - Rt gn phn s + Tm USCLN ca t s v mu s + tuso = tuso/ USCLN + mauso = mauso/USCLN Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 126 private int USCLN(int a, int b){ while(a != b){ if(a > b) a = a-b; if(a < b) b = b-a; } return a; } 12. Xy dng lp Queue - Hm to Queue(int n) khi to Queue c ti a n phn t - Phng thc isEmpty kim tra xem Queue c phn t no hay khng? - Phng thc isFull kim tra xem Queue y hay cha? - Phng thc push thm mt phn t vo Queue. - Phng thc pop ly mt phn t ra khi Queue. 13. Xy dng mt lp biu din ng trn gm c cc thuc tnh: - Bn knh B sung cc phng thc sau cho lp: - Phng thc khi to khng c tham s no. - Phng thc khi to nhn mt i s thc lm tham s. - Phng thc khi to nhn mt i tng ca chnh lp ny lm tham s. - Phng thc tinhChuVi() tnh chu vi ca hnh trn. - Phng thc tinhDienTich() tnh din tch ca hnh trn. - Phng thc Nhp() cho php nhp bn knh . - Phng thc in() in bn knh, chu vi v din tch ca hnh trn ra mn hnh. - Thm thuc tnh Bn knh vo lp HinhTron va to ra trn. -Xy dng lp test kim tra lp va to 14. Xy dng lp hnh tr vi thuc tnh gm bn knh hnh trn, chiu cao hnh tr v cc phng thc thit lp. Sau tnh chu vi, din tch xung quanh, din tch ton phn v th tch ca hnh tr . Xy dng lp test thc hin: Nhp cc thng tin cho hnh tr t bn phm, hin th cc thng tin v kch thc, chu vi, din tch ca hnh tr ra mn hnh. 15. Xy dng lp Hnh Ch Nht bao gm cc thnh phn: - Chiu di. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 127 - Chiu rng. - Hai thuc tnh ch c l Chu vi v Din tch. - Hai thuc tnh bao gm c c/ghi l Chiu di v Chiu rng. B sung cc phng thc sau cho lp: - Phng thc khi to gm c hai tham s. - Phng thc khi to khng c tham s no. Xy dng lp test kim tra lp va to 16. Xy dng lp Hnh Vung bao gm cc thnh phn: cnh. - Hai thuc tnh ch c l Chu vi v Din tch. - Thuc tnh bao gm c c/ghi l Cnh. B sung cc phng thc sau cho lp: - Phng thc khi to gm c hai tham s. - Phng thc khi to khng c tham s no. Xy dng lp test kim tra lp va to 17. Xy dng lp MyMath gm cc phng thc sau: - Phng thc tnh GiaiThua(int n) tnh giai tha ca mt s nguyn N. - Phng thc tnh Tong_n(int n) tnh tng ca N s t nhin u tin - Phng thc tnh Mu(float a, int b) tnh ab - Phng thc tnh Tich(float a, float b) tnh tch a*b. - Phng thc tnh Thuong(float a, float b) tnh thng ca hai s a/b vi b khc 0. Xy dng lp test kim tra lp va to. 18. Cho mt dy cc hnh ch nht. Bng lp trnh hng i tng, hy vit chng trnh thc hin cc chc nng sau: - Nhp vo mt dy hnh ch nht - Tm v in ra hnh ch nht c chu vi ln nht v hnh ch nht c din tch ln nht Hng dn: Xy dng lp HCN c hai thuc tnh ch c l chiu di v chiu rng. 19. Xy dng lp ma trn gm c cc phng thc sau: - Phng thc khi to khng c tham s: khi to kch thc ma trn 2 x 2 - Phng thc khi to c hai tham s l hai s nguyn: s hng, s ct ca ma trn. - Phng thc khi to ly chnh i tng ca lp ma trn lm tham s. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 128 - Nhp: cho php nhp vo cc phn t ca ma trn - Cng(int n): Cng n vo gi tr ca tt c cc phn t ca ma trn - Cng(Matran mt): Cng hai ma trn c cng kch thc - tr(int n): tr gi tr ca tt c cc phn t i n n v - tr(Matran mt): Tr hai ma trn c cng kch thc Hng dn:Ma trn c 3 thnh phn d liu: s hng, s ct, mng hai chiu lu tr cc phn t ca ma trn. 20. Xy dng d n 1) Xy dng lp Person gm c cc thnh phn sau: - H v Tn - Ngy thng nm sinh - Qu qun V cc phng thc: - Phng thc khi to khng c tham s. - Phng thc khi to c 3 tham s. - Phng thc Nhp cho php nhp cc thng tin v H tn, ngy sinh, Qu qun ca ngi . - Phng thc HienThi() cho php hin th cc thng tin ca ngi ra mn hnh. 2) Xy dng lp SinhVien k tha t lp Person gm c cc thuc tnh sau: - Cc thuc tnh ca lp Person - M sinh vin - Lp V cc phng thc: - Phng thc khi to khng c tham s. - Phng thc khi to c 5 tham s. - Phng thc Nhp cho php nhp cc thng tin v H tn, ngy sinh, Qu qun, M Sinh vin, Lp ca sinh vin . - Phng thc HienThi cho php hin th cc thng tin ca sinh vin ra mn hnh. 21. Xy dng lp CngNhn k tha lp Person bi 1 gm c cc thuc tnh sau: - Cc thuc tnh ca lp Person Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 129 - H s lng - Lng c bn - Ph cp V cc phng thc: - Phng thc khi to khng c tham s - Phng thc khi to c 7 tham s - Phng thc Nhap() nhp cc thng tin ca cng nhn . - Phng thc TinhLuong() tnh lng ca cng nhn . - Phng thc hin th in ra: H Tn, Ngy sinh, Qu qun v lng ca cng nhn. H ng dn: Lng = H s lng * Lng c bn (1 + ph cp).
22. Vit chng trnh qun l nhn s v tnh lng cho nhn vin trong cng ty. 1) Qun l thng tin nhn vin (H tn, ngy sinh, a ch) 2) Tnh lng cho nhn vin. Bit trong cng ty c ba loi nhn vin v cch tnh lng nh sau: - Nhn vin sn xut: s sn phm*20 000 - Nhn vin cng nht: s ngy cng*50 000 - Nhn vin qun l : h s lng * lng c bn 23. Vit chng trnh nhn mt dng vn bn t ngi dng v hin th on vn bn ln mn hnh. 24. Vit chng trnh sao chp ni dng t mt tp tin ti mt tp tin khc. 25. Vit chng trnh truy cp ngu nhin tp tin, c giao din nh sau:
26. Cc bn ghi nn c lu tp tin .dat, v vy ngi dng truy cp chng sau ny. Lp trnh Hng i tng vi J ava Bin son: ThS. Trn Xun Thanh Trang 130
Ti liu tham kho
[1]. Gio trnh LT hng i tng 1 - Trng C Cng nghip 4 [2]. PGS.TS Trn nh Qu - KS. Nguyn Mnh Hng, Lp trnh hng i tng vi Java, dnh cho h o to T xa, Hc vin Cng ngh bu chnh Vin thng. [3]. TS. on Vn Ban, Lp tnh Java, NXB Khoa hc k thut. [4]. Quentin Charatan, JAVA IN TWO SEMESTERS, ISBN 0-07-709804-8, 2002 [5]. John Lewis I, JAVA SOFTWARE SOLUTION, Mc Graw Hill, 2002 [6]. Cay S.Horstman, CORE JAVA, Prentice Hall, 2003