Professional Documents
Culture Documents
H CH MINH
Bi ging:
Li ni u
Lp trnh l mt k nng rt cn thit cho sinh vin ngnh Cng ngh thng tin. Sau khi hc qua lp trnh cn bn vi ngn ng C, sinh vin s c tip cn vi mt phng php lp trnh theo t duy mi, gn vi th gii thc hn, ph hp vi cc d n phn mm ln, l lp trnh hng i tng. Ni dung mn hc ny bao gm nhng khi nim, m hnh v i tng v phng php lp trnh hng i tng bng ngn ng lp trnh Java. Cc c trng quan trng ca lp trnh hng i tng nh ng gi, k tha, a hnhv cc quan h lp; x l vo/ra, x l ngoi l, lp trnh lung x l v giao din s c th hin trong Java. Bi ging ny c bin son ch yu da vo hai quyn sch : Beginning Java Objects: From Concepts to Code, Second Edition, Apress, 2005 ca Jacquie Barker v Bi ging Lp trnh Hng i tng, Hc vin Cng ngh Bu chnh Vin thng ca Trn nh Qu v Nguyn Mnh Hng, Ngi son chn thnh cm n cc tc gi trn.
Mc lc
Chng 1. Tng quan v lp trnh hng i tng ................... 1
1.2 Phng php tip cn lp trnh hng i tng .......................... 3 1.3 Cc c trng ca lp trnh hng i tng ................................ 3
1.3.1 Tnh ng gi d liu.................................................................................. 3 1.3.2 Tnh k tha ................................................................................................ 4 1.3.3 Tnh a hnh ................................................................................................ 4
Chng 2.
2.1 c trng ca ngn ng Java .......................................................... 9 2.2 Kin trc chng trnh v c ch thc thi ca Java .................... 14 2.3 Cc kiu d liu c bn v bin ..................................................... 18
2.3.1 Kiu d liu c bn ............................................................................ 18 2.3.2 Bin ...................................................................................................... 19
2.3.2.1 Khai bo bin .........................................................................................19 2.3.2.2 Phm vi hot ng ca bin ..................................................................20 2.3.2.3 Khi to bin ..........................................................................................20 2.3.2.4 p kiu ....................................................................................................20
Chng 3.
i tng v lp ......................................................... 38
3.1 Phn r phn mm theo cch tip cn hng i tng ............. 38 3.2 Khi nim i tng ....................................................................... 39 3.3 Khi nim lp .................................................................................. 42 3.4 Khi nim ng gi ......................................................................... 43 3.5 Bin tham chiu ............................................................................... 44 3.6 Khi to i tng .......................................................................... 45
Chng 4.
4.1 Cng tc gia cc i tng ........................................................... 50 4.2 Thuc tnh........................................................................................ 51 4.3 Phng thc .................................................................................... 52
4.3.1 Khai bo phng thc ....................................................................... 52 4.3.2 Bin this ............................................................................................... 53 4.3.3 Gi phng thc ................................................................................ 53 4.3.4 Np chng phng thc .................................................................... 54 4.3.5 Phng thc xy dng....................................................................... 54 4.3.6 Che du thng tin ............................................................................... 56
Chng 5.
5.4 Lp tru tng ............................................................................... 70 5.5 Giao tip ........................................................................................... 73 5.6 Tnh cht tnh .................................................................................. 76 5.7 Kiu lit k ....................................................................................... 78 5.8 Case Study ....................................................................................... 83
Chng 6.
Tp i tng ............................................................. 95
6.1 Khi nim tp i tng................................................................. 95 6.2 Ba kiu tp i tng c bn ......................................................... 95 6.3 Mng ................................................................................................ 97 6.4 Cc loi tp i tng thng gp .............................................. 100
6.4.1 LinkedList ......................................................................................... 100 6.4.2 HashMap ........................................................................................... 102 6.4.3 TreeMap ............................................................................................ 104 6.4.4 HashSet.............................................................................................. 106 6.4.5 TreeSet .............................................................................................. 107
6.5 To kiu tp hp ........................................................................... 108 6.6 Phng thc tr v kiu tp hp ................................................. 110
Chng 7.
7.1 Gii thiu ngoi l ......................................................................... 113 7.2 C ch x l ngoi l ..................................................................... 115
7.2.1 Khi try ............................................................................................. 115 7.2.2 Khi catch ......................................................................................... 115 7.2.3 Khi finally ....................................................................................... 119
7.3 Bt cc ngoi l .............................................................................. 121 7.4 Phn cp lp ngoi l .................................................................... 126 7.5 Cc im cn lu thm v ngoi l ........................................... 129
7.5.1 Bt ngoi l tng qut ...................................................................... 129 7.5.2 Trnh bin dch Java yu cu phi c x l ngoi l..................... 129 7.5.3 Tn dng x l ngoi l lm r li pht sinh ............................ 131 7.5.4 try/catch lng nhau .......................................................................... 131 7.5.5 Kiu ngoi l do ngi dng nh ngha ........................................ 132
Chng 8.
Chng 9.
Hnh 7.6 Khi lnh try/catch trong trong phng thc methodY nhn bit ngoi l trong mc hin hnh ca chng gi. .......................................................................... 123 Hnh 7.7 Ngoi l thot khi p.methodY() v chuyn xung s.methodX() x l ...... 124 Hnh 7.8 NullPointerException thng qua chng gi c chuyn ti phng thc main. ........................................................................................................................... 125 Hnh 7.9 Nu ng dng b qua x l ngoi l, my o Java chm dt ng dng v bo co ngoi l ti ca ca s dng lnh cho ngi s dng quan st. ..................... 126 Hnh 7.10 Lp java.lang.Exception c nhiu lp con ................................................ 127 Hnh 7.11 Cy tha k ca kiu ngoi l java.sql.DataTruncation ............................ 127 Hnh 7.12 Kt qu demo ca NumberOfDigits.java .................................................. 135 Hnh 8.1 c d liu vo chng trnh. ..................................................................... 137 Hnh 8.2 Vit d liu t chng trnh. ....................................................................... 138 Hnh 8.3 Lung byte vo ra n gin ......................................................................... 139 Hnh 8.4 Cc thnh phn c t qui cch. .................................................................. 148 Hnh 9.1 Kt qu demo Frame ................................................................................... 167 Hnh 9.2 Kt qu demo Panel ..................................................................................... 168 Hnh 9.3 Kt qu demo Dialog ................................................................................... 169 Hnh 9.4 Kt qu demo Label..................................................................................... 170 Hnh 9.5 Kt qu demo Text ...................................................................................... 172 Hnh 9.6 Kt qu demo Button ................................................................................... 173 Hnh 9.7 Kt qu demo s kin .................................................................................. 179 Hnh 9.8 Kt qu demo Radio Button ........................................................................ 182 Hnh 9.9 Kt qu demo Choice Button ...................................................................... 184 Hnh 9.10 Kt qu demo Listbox ............................................................................... 186 Hnh 9.11 Kt qu demo Flow layout ........................................................................ 187 Hnh 9.12 Kt qu demo Grid layout ......................................................................... 188 Hnh 9.13 Kt qu demo Border layout..................................................................... 190 Hnh 9.14 Kt qu demo Gridbag layout.................................................................... 192 Hnh 9.15 Kt qu demo Null layout.......................................................................... 193 Hnh 9.16 Kt qu demo Applet ................................................................................. 195 Hnh 9.17 Kt qu demo Applet bng tnh ................................................................. 198 Hnh 9.18 Kt qu demo Applet c tham s .............................................................. 200 Hnh 9.19 Kt qu demo JButton ............................................................................... 202 Hnh 9.20 Kt qu demo gn cc i tng vo cc tng .......................................... 205 Hnh 9.21 Kt qu demo JMenu ................................................................................. 210
Hnh 9.22 Kt qu demo Case Study.......................................................................... 217 Hnh 10.1 Vng i ca lung ................................................................................... 220 Hnh 10.2 a lung vi Applet .................................................................................. 228
Thut ng vit tt
API CSDL CTDL GUI JDBC JFC JVM LIFO ODBC RDBMS SRS Application Programming Interface C s d liu Cu trc d liu Graphic User Interface Java DataBase Connectivity Java Foundation Class Java Virtual Machine Last in, First out Open Database Connectivity Relational Database Management Systems Student Registration System
Chng 1.
Ni dung chng ny nhm gii thiu mt cch tng quan v cch tip cn hng i tng. Ni dung trnh by bao gm: Gii thiu v cch tip cn ca lp trnh truyn thng. Gii thiu cch tip cn ca lp trnh hng i tng. S tru tng ha l c s ca pht trin phn mm hng i tng. Nu cc c trng ca lp trnh hng i tng. Xu hng hin nay ca lp trnh hng i tng.
chnh s gi n chng trnh con theo mt gii thut, hoc mt cu trc c xc nh trong chng trnh chnh. Cc ngn ng lp trnh cu trc ph bin l Pascal, C v C++. Ring C++ ngoi vic c c trng ca lp trnh cu trc do k tha t C, cn c c trng ca lp trnh hng i tng. Cho nn C++ cn c gi l ngn ng lp trnh na cu trc, na hng i tng. c trng c trng c bn nht ca lp trnh cu trc th hin mi quan h: Chng trnh = CTDL + Gii thut Trong : CTDL l cch t chc d liu, cch m t bi ton di dng ngn ng lp trnh Gii thut l mt quy trnh thc hin mt cng vic xc nh Mt CTDL ch ph hp vi mt s hn ch cc gii thut. Nu thay i CTDL th phi thay i gii thut cho ph hp. Mt gii thut thng phi i km vi mt CTDL nht nh. Trong chng trnh, gii thut c quan h ph thuc vo CTDL:
Tnh cht Mi chng trnh con c th c gi thc hin nhiu ln trong mt chng trnh chnh. Cc chng trnh con c th c gi n thc hin theo mt th t bt k, tu thuc vo gii thut trong chng trnh chnh m khng ph thuc vo th t khai bo ca cc chng trnh con. Cc ngn ng lp trnh cu trc cung cp mt s cu trc lnh iu khin chng trnh. u im Chng trnh sng sa, d hiu, d theo di. T duy gii thut r rng.
Nhc im Lp trnh cu trc khng h tr vic s dng li m ngun: Gii thut lun ph thuc cht ch vo CTDL, do , khi thay i CTDL, phi thay i gii thut, ngha l phi vit li chng trnh. Khng ph hp vi cc phn mm ln: t duy cu trc vi cc gii thut ch ph hp vi cc bi ton nh, nm trong phm vi mt m un ca chng trnh. Vi d n phn mm ln, lp trnh cu trc t ra khng hiu qu trong vic gii quyt mi quan h v m gia cc m un ca phn mm.
Vn Vn c bn ca lp trnh cu trc l bng cch no phn chia chng trnh chnh thnh cc chng trnh con cho ph hp vi yu cu, chc nng v mc ch ca mi bi ton.
Vt th sng. T di chuyn. Phn ng khi b kch thch. Vt th sng (nh ng vt). Khng c h thn kinh. C mn cellulose.
Sau khi phn lp n gin nh trn ta c th thm vi qui lut c cc loi ng vt c th hn cho n khi c mt s phn cp theo s tru tng t cao (nh) xung thp (y). S phn cp tru tng ca cc i tng t nhin c th hin nh hnh 1.1. Cc i tng t nhin
Cy
ng vt
Khong sn
ng vt c v
Chim
B st
Lng c
Cn trng
Ch
Kh
khn hn trong vic thit k, kim tra chng trnh, d li, to su liu, bo tr v m rng chng trnh sau ny. S tru tng ho s gip ngi phn tch h thng c c cc nt c trng ca h thng trong min (domain) bi ton, tp trung vo vn ca h thng d nh pht trin. Nh khi th hin mt ngi trong chng trnh, mu mt ca h c quan trng khng? V gien ? Lng ? S thch ? Cu tr li l bt k c tnh no ca ngi c th lin quan hay khng lin quan tu thuc vo h thng m ta nh pht trin l Chng trnh tnh lng Chng trnh tip th theo tui tc CSDL bnh nhn nhn khoa H thng theo di nhng k b truy n
Mt khi xc nh cc c trng quan trng ca mt tnh hung, ta cn chun b mt m hnh ho cho n. M hnh ho l x l nhm pht trin mt khun mu to ra mt th g ; v d nh bn thit k ngi nh, s mch in, mt khun bnh. Mt m hnh i tng ca h thng phn mm l mt mu nh vy. M hnh ho v tru tng ho lun i vi nhau v mt m hnh l s m t ho hay vt l ca tru tng; Trc khi m hnh vt g mt cch c hiu qu, ta phi xc nh cc chi tit cn thit ca ch th cn c m hnh.
Phng php ny c nhng u im rt ln: Lp trnh vin c th chia s vi nhau nhng thnh phn mnh xy dng cho nhiu ngi khc dng chung. Khi cn, lp trnh vin c th lp ghp cc thnh phn c sn khc nhau to thnh cc chng trnh c chc nng khc nhau. Tt c ch cn da trn cng ngh lp ghp thnh phn, tit kim c rt nhiu cng sc lp trnh. Trong xu hng lp trnh hng thnh phn, mt s phng php lp trnh khc ny sinh v ang pht trin mnh m: Lp trnh hng tc nhn (Agent-Oriented Programming) Lp trnh hng kha cnh (Aspect-Oriented Programming-AOP)
Cc phng php tip cn truyn thng: lp trnh tuyn tnh v lp trnh cu trc. Phng php tip cn hng i tng vi cc c trng c bn: ng gi d liu, tnh a hnh v s dng li m ngun. Lp trnh hng i tng trn nn tng l tru tng ho l c s lp trnh hin i. Hin nay, lp trnh hng thnh phn, lp trnh hng agent v lp trnh hng aspect tin ho t lp trnh hng i tng ang l xu hng pht trin mnh m.
BI TP
1. V mt s phn cp lp cho cc lp sau y: to, chui, tht b, nc gii khc, ph mt, th c th n, sn phm b sa, n, tri cy, u xanh, tht, sa, tht heo, rau mung, rau. 2. Nhng c im no ca tivi m chng cn thit c tru tng t gc nhn ca Mt khch hng? Mt k s thit k? Ngi bn? Nh sn xut?
Bn nn chn cc lnh vc m bn quan tm hay bn thng gp trong cng vic hng ngy. Gi s bn s vit mt chng trnh t ng vi chc nng ca bi ton. u tin vit mt trang giy m t yu cu ca chng trnh. on vn u tin m t tng qut h thng d nh. K n nu r yu cu chc nng m ngi s dng bnh thng m t h thng, trnh dng cc t k thut nh, H thng ny phi chy trn mi trng Windows NT, v dng giao thc TCP/IP . . .
Chng 2.
Trc khi tm hiu ngn ng Java ngi c cn bit v lch s hnh thnh ngn ng lp trnh ny. Java c khi u bi James Gosling v bn ng nghip Sun Microsystems nm 1991. Ban u ngn ng ny c gi l Oak (c ngha l cy si; do bn ngoi c quan ca ng Gosling c trng nhiu loi cy ny), h d nh ngn ng thay cho C++. Java c s dng ch yu trn mi trng mng, Internet v lp trnh Game trn thit b di ng. Khng nn ln ln Java vi JavaScript, hai ngn ng ch ging tn v loi c php nh C. Cng ty Sun Microsystems ang gi bn quyn v pht trin Java thng xuyn. Phin bn Java mi nht vo thng 08/2010: JDK 6.21. Phin bn d kin tip theo: Java SE 7 (cn gi l Dolphin), c bt u t thng 8 nm 2006 v d kin cng b vo nm 2010. Java c tm hiu trong chng ny nh sau: Kin trc tng qut mt chng trnh xy dng trn Java Cc ton t v cc CTDL c bn trn Java Cc cu trc lnh ca Java
Khng cho php a k tha (multi-inheritance) m s dng cc giao din (interface) Khng s dng lnh goto cng nh file header (.h). Loi b cu trc struct v union. Hng i tng Java l ngn ng lp trnh hon ton hng i tng: Mi thc th trong h thng u c coi l mt i tng, tc l mt th hin c th ca mt lp xc nh. Tt c cc chng trnh u phi nm trong mt lp nht nh. Khng th dng Java vit mt chc nng m khng thuc vo bt k mt lp no. Tc l Java khng cho php nh ngha d liu v hm t do trong chng trnh.
// Chng trnh C #include <stdio.h> main() { printf(Hello!); }
to ra
M nh phn ph thuc mi trng hot ng. Phin bn Solaris Phin bn Windows Phin bn Linux
c lp phn cng v h iu hnh i vi cc ngn ng lp trnh truyn thng nh C/C++, phng php bin dch c thc hin nh sau (Hnh 2.1): vi mi mt nn phn cng khc nhau, c mt trnh bin dch khc nhau bin dch m ngun chng trnh cho ph hp vi nn phn cng y. Do vy, khi chy trn mt nn phn cng khc, bt buc phi bin dch li m ngun.
// Chng trnh Java public class Hello { public static void main( String[ ] args) { System.out.println(Hello!); } }
to ra
M bytecode c lp mi trng hot ng. Hnh 2.2 Dch chng trnh Java i cc chng trnh vit bng Java, trnh bin dch javac s bin dch m ngun thnh dng m bytecode. Sau , khi chy chng trnh trn cc nn phn cng khc nhau, my o Java (JVM) dng trnh thng dch Java chuyn m bytecode thnh dng chy c trn cc mi trng tng ng. Do vy, khi thay i mi trng (phn cng hoc h iu hnh), khng phi bin dch li m bytecode. Hnh 2.2 minh ho qu trnh bin dch m ngun Java. My o Java l mt chng trnh c bit thng dch v thc hin m ngun Java. Khi chng trnh Java chy n s nm di s qun l ca my o ny, v my o th chu s qun l ca h iu hnh ca mt loi my tnh c th. Mo o s thng dch m bytecode thnh ngn ng my m my tnh c th hiu c. Nh vy s c nhiu
my o Java cho tng mi trng c th. Hnh 2.3 minh ho qu trnh thc thi ca m ngun Java. Do chng trnh Java phi chy di my o nn tc thc hin ca n hi chm hn cc chng trnh c bin dch v chy trc tip trn h iu hnh. Tuy nhin tc my tnh ngy cng cao th s chnh lch v tc khng ng k. Khi chuyn m bytecode t mi trng ny sang mi trng khc nh t Windows sang Linux th ta khng cn phi bin dch li chng trnh. Hnh 2.4 minh ho iu ny. M nh phn c bin dch vit bng C hay C++ chy trc tip trn mt kin trc phn cng c th (di s qun l ca h iu hnh)
My o Java chy trn mt kin trc phn cng c th (di s qun l ca h iu hnh)
Hnh 2.3 My o Java thc hin m bytecode c lp mi trng hot ng Mnh m Java l ngn ng yu cu cht ch v kiu d liu: Kiu d liu phi c khai bo tng minh. Java khng s dng con tr v cc php ton con tr. Java kim tra vic truy nhp n mng, chui khi thc thi m bo rng cc truy nhp khng ra ngoi gii hn kch thc mng.
Qu trnh cp pht, gii phng b nh cho bin c thc hin t ng, nh dch v thu rc nhng i tng khng cn s dng na. C ch by li ca Java gip n gin ha qu trnh x l li v hi phc sau li.
Hnh 2.4 Cng m bytecode c th c hiu bi hai my o Bo mt Java cung cp mt mi trng qun l thc thi chng trnh vi nhiu mc kim sot tnh an ton: mc th nht, d liu v cc phng thc c ng gi bn trong lp. Chng ch c truy xut thng qua cc giao din m lp cung cp. mc th hai, trnh bin dch kim sot m bo m l an ton, v tun theo cc nguyn tc ca Java. Mc th ba c m bo bi trnh thng dch. Chng kim tra xem m bytecode c m bo cc qui tc an ton trc khi thc thi. Mc th t kim sot vic np cc lp vo b nh gim st vic vi phm gii hn truy xut trc khi np vo h thng.
Phn tn Java c thit k h tr cc ng dng chy trn mng bng cc lp mng (java.net). Hn na, Java h tr nhiu nn chy khc nhau nn chng c s dng rng ri nh l cng c pht trin trn Internet, ni s dng nhiu nn khc nhau. a lung Chng trnh Java cung cp gii php a lung (multi threading) thc thi cc cng vic cng ng thi v ng b gia cc lung. Linh ng Java c thit k nh mt ngn ng ng p ng cho nhng mi trng m. Cc chng trnh Java cha rt nhiu thng tin thc thi nhm kim sot v truy nhp i tng lc chy. iu ny cho php kh nng lin kt ng m.
Khai bo lp
Hnh 2.5 Phn tch mt chng trnh Java n gin Mt tp tin cha m ngun Java c th c ba phn chnh: o Phn khai bo tn gi (khi) bng t kho package. o Phn khai bo th vin tham kho bng t kho import. o Phn khai bo ni dung lp bng t kho class. Khai bo package Package c dng ng gi cc lp trong chng trnh li vi nhau thnh mt khi. y l mt cch hu hiu lu tr cc lp gn ging nhau hoc c cng mt m un thnh mt khi thng nht. C php khai bo tn gi bng t kho package:
package <Tn gi>;
u im ca package: Cho php nhm cc lp vo vi nhau thnh cc n v nh hn. Vic thao tc trn cc n v khi s gn hn thao tc trn mt tp cc lp. Trnh vic xung t khi t tn lp. V cc lp khng cng gi c th t tn trng nhau. Khi s lng lp ca chng trnh qu ln ta c th trnh phi t tn khc nhau cho cc lp bng cch t chng vo cc gi khc nhau. Cho php bo v cc lp. Khi chng trnh ln, vic chia nh chng trnh thnh cc gi s thun li hn cho vic qun l v pht trin. Tn gi cn c dng nh danh lp trong ng dng. Lu : Dng lnh khai bo tn gi phi c t u tin trong tp tin m chng trnh. Ch c khai bo ti a mt tn gi i vi mi tp m ngun Java. Cc tp tin ca cc lp nm cng gi ng dng phi c lu trong cng mt th mc (tn th mc l tn gi) theo cu trc ca d n. Tn gi nn t theo ch thng v tn gi s l tn th mc tng ng trong a, trnh nhm ln vi tn cc tp tin l tn cc lp ca chng trnh. Khi khng nhm cc lp trong gi (do chng trnh n gin), th khng cn thit phi khai bo tn gi u tp tin. Khi lp gi mc nh khng c tn. Khai bo th vin Khai bo th vin ch ra nhng th vin c nh ngha sn m chng trnh s tham kho ti. C php khai bo th vin vi t kho import nh sau:
import <Tn th vin>;
Java chun cung cp mt s th vin nh sau: java.lang: cung cp cc hm thao tc trn cc kiu d liu c bn, x l li v ngoi l, x l vo ra trn cc thit b chun nh bn phm v mn hnh. java.applet: cung cp cc hm cho xy dng cc applet (s trnh by trong Chng 9). java.awt: cung cp cc hm cho xy dng cc ng dng ho vi cc thnh phn giao din multimedia (s trnh by trong Chng 9). java.io: cung cp cc hm x l vo/ra trn cc thit b chun v cc thit b ngoi vi (s trnh by trong Chng 8). java.util: cung cp cc hm tin ch trong x l lin quan n cc kiu d liu c cu trc nh ArrayList, HashMap, TreeMap, (s trnh by trong Chng 6)
Lu : Nu mun khai bo tham kho nhiu th vin, phi khai bo tham kho mi th vin vi mt t kho import. Nu ch tham kho mt vi lp trong mt th vin, nn ch r tham kho lp no, thay v phi khai bo tham kho c gi (bng k hiu *) v tham kho c gi s tng kch c tp tin class sau khi bin dch. Nu khng tham kho th vin no, khng cn thit phi khai bo cc tham kho vi t kho import. Khai bo lp Phn ny lun bt buc phi c i vi mt tp tin Java. Phn ny c dng nh sau:
<tnh cht> class <Tn lp> { }
Trong Java tn lp thng t theo kiu Pascal (cc k t u tin ca t l ch in) nh SimpleProgram, FirstClass,.. Lp c ba tnh cht c trng bi ba t kho: public: lp c th c truy cp t cc gi khc. Nu khng khai bo public th ngm nh lp ch c th c truy xut trong cng mt gi. final: khai bo lp hng, lp ny khng th to dn xut; Tc l khng c lp no k tha c t cc lp c tnh cht final. abstract: khai bo lp tru tng, lp ny cha cc phng thc tru tng. Khng th to cc th hin ca cc lp tru tng bng ton t new nh cc lp thng thng. Lu : Ch c tnh cht public hoc khng khai bo tnh cht (package) c th s dng cho lp. v lp ny c cng tn tp tin. V d nu tp tin l Xyz.java th phi c lp Xyz trong tp tin ny. Nu c nhiu hn mt lp public trong mt tp tin, trnh bin dch s bo li. s dng lp t mt gi khc, ta phi vit tn gi trc tn lp. V d chuong2.LopMinhHoa Ngoi ba phn c bn ca mt tp tin Java nh trn, c nhng iu ta cn phi bit nh sau: Ghi ch Java h tr ba kiu ghi ch: truyn thng, kt thc dng, v ghi ch su liu Java (Java documentation comments) Ghi ch truyn thng: ghi ch bt u bng /* kt thc l */ nh /* Gii phng trnh bc hai
ax2+bx+c=0 */ Ghi ch kt thc dng: ghi ch bt u bng // nh // Gii phng trnh bc hai // ax2+bx+c=0 Ghi ch su liu Java : ghi ch c to ra bi tin ch javadoc Phng thc main bt buc phi c vi mi chng trnh Java v l im bt u thc hin chng trnh, c php ca phng thc ny:
public static void main( String [ ] args) { // cc cu lnh }
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. 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. T kho static cho php main c gi ti m khng cn to ra mt th hin (instance) ca lp. 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. args l danh sch tham s cho chng trnh. V d sau minh ho cch s dng tham s
class PassArgument { public static void main(String args[ ]) { System.out.println(Danh sch tham s phng thc main nhn c:); System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); } }
Phng thc in ra mn hnh c th s dng System.out.println (in xong xung dng) v System.out.print(in khng xung dng) Thc thi ca Java Chng trnh Java c c son tho bng notepad trong Windows, vi trong Linux hay cc IDE nh eclipse, Netbean, Jcreator Pro, Jbuilder Nu chy trong ca s dng lnh ca Windows, ta c th bin dch chng trnh Java ra m bytecode nh sau: javac sourcecode_filename
v d: javac PassArgument.java javac Foo.java Bar.java Another.java hoc s dng *: javac *.java Nu bin dch thnh cng cc tp tin .class cha m bytecode chy m bytecode dng lnh sau: java bytecode_filename (b qua ui tp tin.class) v d java PassArgument s cho kt qu nh sau: y l danh sch tham s phng thc main nhn c A 123 B1 Ch khi chy trong mt IDE, vic bin dch v chy chng trnh Java c thc hin bng cch chn lnh trong menu.
2.3.2 Bin
2.3.2.1 Khai bo bin C php khai bo bin:
dataType varName;
Trong , dataType l kiu d liu ca bin, varName l tn bin. Trong Java, vic t tn bin phi tun theo cc quy tc sau: Ch c bt u bng mt k t (ch), hoc mt du gch di, hoc mt k t $ Khng c khong trng gia tn Bt u t k t th hai, c th dng cc k t (ch), ch s, du $, du gch di Khng trng vi cc t kho Dng lnh sau khng bin dch v public l mt t kho Java:
int public;
Trnh bin dch s bo li on lnh sau: not a statement int public; ^ ';' expected int public; ^ C phn bit ch hoa ch thng Cch t tn bin nn theo kiu camel (k t u tin l ch thng, cc k t u tin ca t k tip l ch in) nh
int grade; double averageGrade; String myPetRat; boolean weAreFinished;
Cc bin sau y l hp l:
int simple; int _under; int more$money_is_2much;
Chng 2: C bn ngn ng lp trnh Java int foo-bar; int plus+sign; int x@y; int dot.notation;
2.3.2.2 Phm vi hot ng ca bin Mt bin c phm vi hot ng trong ton b khi lnh m n c khai bo. Mt khi lnh bt u bng du { v kt thc bng du } Nu bin c khai bo trong mt cu trc lnh iu khin, bin c phm vi hot ng trong khi lnh tng ng. Nu bin c khai bo trong mt phng thc (khng nm trong khi lnh no), bin c phm vi hot ng trong phng thc tng ng: c th c s dng trong tt c cc khi lnh ca phng thc. Nu bin c khai bo trong mt lp (khng nm trong trong mt phng thc no), bin c phm vi hot ng trong ton b lp tng ng: c th c s dng trong tt c cc phng thc ca lp. 2.3.2.3 Khi to bin Khng nht thit phi gn gi tr cho bin khi n va c khai bo, nhng bin phi c gi tr xc nh khi chng ln u c s dng. V d sau hai bin nguyn c khai bo, bin foo c gn gi tr, bin bar th khng.
int foo; int bar; foo = 3; foo = foo + bar; // Dng lnh ny khng bin dch.
Trnh bin dch s bo li on lnh sau: variable bar might not have been initialized foo = foo + bar; ^ 2.3.2.4 p kiu V d, nhiu khi gp tnh hung cn cng mt bin c dng int vi mt bin c dng float. x l tnh hung ny, Java s dng tnh nng p kiu (type casting) ca C/C++. on m sau y thc hin php cng mt gi tr du phy ng vi mt gi tr nguyn.
float c = 35.8f; int b = (int)c + 1;
Trong Java c hai loi p kiu d liu: Ni rng (widening): qu trnh lm trn s t kiu d liu c kch thc nh hn sang kiu c kch thc ln hn. Kiu bin i ny khng lm mt thng tin. V d chuyn t int sang float. Chuyn kiu loi ny c th c thc hin ngm nh bi trnh bin dch. Thu hp (narrowwing): qu trnh lm trn s t kiu d liu c kch thc ln hn sang kiu c kch thc nh hn. Kiu bin i ny c th lm mt thng tin nh v d trn. Chuyn kiu loi ny khng th thc hin ngm nh bi trnh bin dch, ngi dng phi thc hin chuyn kiu tng minh. 2.3.2.5 Kiu String Kiu chui trong Java l String. Nu khai bo
string s = "foo"; // bo li.
Thng bo li cannot find symbol symbol: string ghp chui vi nhau hay chui vi s i nhau dng ton t + V d:
String x = "foo"; String y = "bar"; int no = 33; String z = x + y + "!" + no; // z c gn gi tr "foobar! 33" (gi tr ca x v y khng i)
gn chui rng
String s = "";
Ton t gn 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. Ton t + * / % ++ -+= M t Cng Tr Nhn Chia Ly s chia d, v d 10%3=1 Tng gi tr bin ln 1 Gim gi tr bin ln 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 %= 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.1 Cc ton t s hc Ton t Bit Cc ton t dng bit cho php ta thao tc trn tng bit ring bit trong cc kiu d liu nguyn thu.
Ton t ~ & |
M t Ph nh bit (NOT) Tr v gi tr ph nh ca mt bit. Ton t AND bit Tr v gi tr l 1 nu cc ton hng l 1 v 0 trong cc trng hp khc. Ton t OR bit Tr v gi tr l 1 nu mt trong cc ton hng l 1 v 0 trong cc trng hp khc.
>>
Dch sang phi bit Chuyn ton b cc bit 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 bit cn dch.
<<
Dch sang tri bit Chuyn ton b cc bit 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 bit cn dch. Bng 2.2 Cc ton t bit
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 (true hoc false). 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 So snh khc Kim tra s khc nhau ca hai ton hng. Ln hn Kim tra gi tr ca ton hng bn phi ln hn ton hng bn tri hay khng < Nh hn Kim tra gi tr ca ton hng bn phi c nh hn ton hng bn tri hay khng >= Ln hn hoc bng
Kim tra gi tr ca ton hng bn phi c ln hn hoc bng ton hng bn tri hay khng <= Nh hn hoc bng Kim tra gi tr ca ton hng bn phi c nh hn hoc bng ton hng bn tri hay khng. Bng 2.3 Cc ton t quan h. 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 true nu ch khi c hai ton t c gi tr true Hoc (OR) Tr v gi tr true nu t nht mt gi tr l true. XOR Tr v gi tr true nu v ch nu ch mt trong cc gi tr l true, cc trng hp cn li cho gi tr false ! Ton hng n t NOT. Chuyn gi tr t true sang false v ngc li. Bng 2.4 Cc ton t logic Cc ton t iu kin Ton t iu kin l mt loi ton t c bit v n bao gm ba thnh phn cu thnh biu thc iu kin. C php:
<biu thc 1> ? <biu thc 2> : <biu thc 3>;
biu thc 1: biu thc logic. Tr v gi tr true hoc false biu thc 2: l gi tr tr v nu <biu thc 1> xc nh l true biu thc 3: l gi tr tr v nu <biu thc 1> xc nh l false Ton t gn Ton t gn (=) dng gn mt gi tr vo mt bin v c th gn nhiu gi tr cho nhiu bin cng mt lc. V d on lnh sau gn mt gi tr cho bin var v gi tr ny li c gn cho nhiu bin trn mt dng lnh n.
int var = 20; int p,q,r,s; p=q=r=s=var;
Dng lnh cui cng c thc hin t phi qua tri. u tin gi tr bin var c gn cho s, sau gi tr ca s c gn cho r v c tip nh vy.
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 1 2 3 4 5 Ton t Cc ton t n nh +, -, ++, -Cc ton t s hc v cc ton t dch nh *, /, +, -, <<, >> Cc ton t quan h nh >, <, >=, <=, ==, != Cc ton t logic v bit nh &&, ||, &, |, ^ Cc ton t gn nh =, *=, /=, +=, -= Bng 2.5 Th t u tin cc ton t Thay i th t u tin thay i th t u tin trn mt biu thc, ta c th s dng du ngoc n (): Phn c gii hn trong ngoc n c thc hin trc. Nu 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. Trong phm vi mt cp ngoc n th quy tc th t u tin vn gi nguyn tc dng. V d:
int x = 1; int y = 2; int z = 3; int answer = ((8 * (y + z)) + y) * x;
S kt hp ca hai ton hng bi mt ton t hai ngi: x + 2 Mt bin v ton t mt ngi i km: i++ Biu thc trong cp du (): (x + 2) Biu thc c th l s kt hp ca cc biu thc khc c lng nhau trong cc cp (): ((((4/x) + y) * 7) + z). Kiu ca biu thc l kiu gi tr tr v sau khi lng gi biu thc V d 1 :
double x = 3.0 ; double y = 2.0 ; if ((x > 2.0) && (y != 4.0)) { }
biu thc (x > 2.0) && (y != 4.0) lng gi ti true, v vy biu thc ny c kiu boolean. V d 2 :
int x = 1 ; int y = 2 ; int z = 3 ; int answer = ((8 * (y + z)) + y) * x ;
Vng lp (loop)
Chng 2: C bn ngn ng lp trnh Java khi lnh 2; } iu kin: Biu thc boolean nh ton t so snh. khi lnh 1: Khi lnh c thc thi khi gi tr iu kin l true. khi lnh 2: Khi lnh c thc thi nu iu kin tr v gi tr false.
on chng trnh sau kim tra xem cc s c chia ht cho 5 hay khng. int num=10;
If (num%5 == 0) System.out.println (num + chia ht cho 5!); else System.out.println (num + khng chia ht cho 5!);
on chng trnh trn num c gn gi tr nguyn l 10. Trong cu lnh if-else iu kin num%5 tr v gi tr 0 v iu kin thc hin l true. Thng bo 10 chia ht cho 5 c in ra. Lu rng v ch c mt cu lnh c vit trong on if v else, bi vy khng cn thit phi c a vo du ngoc mc { v }.
ng c gi tr true.
break: T kho c s dng b qua tt c cc cu lnh sau v chuyn iu
Chng 2: C bn ngn ng lp trnh Java default: T kha tu chn c s dng ch r cc cu lnh no c thc hin ch
khi tt c cc trng hp nhn gi tr false. khi lnh mc nh: Khi 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 t 0 n 6, chng trnh s thng bo li nu nm ngoi phm vi trn. V d sau xt in ra ngy:
int day = 2; 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); }
on chng trnh sau tnh tng ca 5 s t nhin u tin dng cu trc while.
int a = 5, sum = 1; while (a >= 1) {
Chng 2: C bn ngn ng lp trnh Java sum +=a; a--; } System.out.println(The sum is +sum);
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 sum is 15
c thc hin khi iu kin nhn gi tr true. V d sau tnh tng ca 5 s t nhin u tin dng cu trc do-while.
int a = 1,sum = 0; do { sum += a; a++; } while (a <= 5); System.out.println(Sum of 1 to 5 is +sum);
Bin a c khi to vi gi tr 1, sau n va c dng lm bin chy (tng ln 1 sau mi ln lp) va c dng cng dn vo bin sum. Ti thi im kt thc, chng trnh s in ra Sum of 1 to 5 is 15.
Chng 2: C bn ngn ng lp trnh Java } khi lnh khi to: khi to gi tr ban u cho cc bin chy, cc lnh khi to c
phn cch nhau bi du phy v ch thc hin duy nht mt ln vo thi im bt u ca vng lp.
iu kin: Biu thc boolean; vng lp s tip tc cho n khi no iu kin c gi tr
false.
khi lnh thay i bin chy: cc cu lnh thay i gi tr ca bin chy. Cc lnh ny lun c thc hin sau mi ln thc hin khi lnh trong vng lp. Cc lnh phn bit
nhau bi du phy. on chng trnh sau hin thi tng ca 5 s u tin dng vng lp for.
int sum = 0; for (int i=1; i<=5; i++) sum += i; System.out.println(The sum 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 6, iu kin tr v gi tr false v vng lp kt thc. Thng bo: The sum is 15 c hin th. thot khi vng lp ta s dng lnh break. V d:
// x chy t 1 ti 4 ... for (int x = 1; x <= 4; x++) { // ... nhng khi x bng 3, th thot khi dng lp bng lnh break if (x == 3) break; System.out.println(x); } System.out.println("Lp kt thc");
Chng 2: C bn ngn ng lp trnh Java for (int x = 1; x <= 4; x++) { // ... nhng khi x bng 3, th thot khi dng lp bng lnh break if (x == 3) continue; System.out.println(x); } System.out.println("Lp kt thc");
S dng ghi ch thch hp trong cc trng hp sau: o Nu c cc on lnh no ghi ng o Canh l ghi ch cng vi khi lnh ca n o Ghi ch phi c ngha, khng nn pht biu li ni dung cu lnh, v d
// Khai bo x l s nguyn, v gn bng 3. int x = 3;
Cch t { v } c hai cch: o t { cui dng lnh bt u khi lnh. Mi } t dng ring, canh l vi k t u tin ca dng lnh bt u trong khi lnh, v d:
public class Test { public static void main(String[] args) { for (int i = 0; i < 3; i++) System.out.println(i); } }
o t { mi dng ring, canh l vi dng ngay trn n. Mi } t dng ring, canh l vi { tng ng, v d:
public class Test { public static void main(String[] args) { for (int i = 0; i < 3; i++) System.out.println(i); } }
C hai cch trn u c chp nhn, nhng cch u th gn hn v s dng rng ri hn. Du ngi lp trnh chn cch no th phi gi ng kiu trong xuyn sut d n phn mm ca mnh m bo tnh nht qun. t tn bin phi c ngha. Trnh t tn bin qu vn tt, kh hiu nh:
int grd;
Phi l
int grade;
mt gi thay th:
double avg3rdQtrROI;
Chng 2: C bn ngn ng lp trnh Java System.out.println (Din tch l + dientich); } else System.out.println (Cc tham s khng ng!); } }
Sau khi bin dch chng trnh trn c tn l RectangleDemo.java, ta chy t ca s dng lnh: >java RectangleDemo 10 20 S thu c kt qu: Chu vi l: 60 Din tch l: 200 Nu ch g ca s dng lnh: >java RectangleDemo Th s nhn c mt thng bo li: Cc tham s khng ng!
TNG KT CHNG 2
Ni dung chng ny trnh by cc ni dung c bn v c php ngn ng lp trnh Java: Tt c cc lnh ca Java phi c t chc vo trong mt lp nht nh. Tn tp tin m ngun phi trng vi tn lp. T kho class c dng khai bo tn lp Tn lp, tn phng thc, tn hng v tn bin trong Java phi tun theo quy tc t tn ca Java. ng dng Java c mt lp cha phng thc main. Cc tham s c th c truyn vo phng thc main nh cc tham s lnh (command line parameters). Java cung cp cc dng ton t: Cc ton t s hc Cc ton t bit Cc ton t quan h
BI TP
1. Vo website ca Sun: http://java.sun.com v tm hiu cc u im ca Java cha c cp ti trong chng ny. 2. Xem xt cc sn phm phn mm ca cc cng ty IBM, Oracle, Microsoft, v Apple c lin quan n ngn ng Java. 3. So snh Java v cc ngn ng lp trnh khc m bn bit? 4. Trong cc tn sau, tn no c th dng lm tn bin trong Java: _123 a$ 1abc class vi du $123 5. Mun lu gi mt bin s nguyn dng m c gi tr ln nht l mt triu th dng kiu d liu no l tit kim b nh nht? 6. Mun lu gi mt bin s nguyn m m c gi tr nh nht l m mt t th dng kiu d liu no l tit kim b nh nht? 7. Trong cu trc lnh if-else n (mt if v mt else) th c t nht mt khi lnh (ca if hoc ca else) c thc hin. ng hay sai? 8. Trong cu trc lnh switch-case, khi khng dng default th c t nht mt khi lnh c thc hin. ng hay sai? 9. Trong cu trc lnh while, khi lnh c thc hin t nht mt ln ngay c khi iu kin c gi tr false. ng hay sai? 10. Trong cu trc lnh do-while, khi lnh c thc hin t nht mt ln ngay c khi iu kin c gi tr false. ng hay sai?
11. Trong cu trc lnh for, khi lnh c thc hin t nht mt ln ngay c khi iu kin c gi tr false. ng hay sai? 12. Lng gi biu thc sau:
int a = 1; int b = 1; int c = 1; ((((c++ + --a) * b) != 2) && true)
13. Cho bit kt qu thu c khi thc hin on chng trnh sau?
class Me { public static void main(String args[]) { int sales = 820; int profit = 200; System.out.println((sale +profit)/10*5); } }
14. Cho bit on chng trnh sau thc hin vng lp bao nhiu ln v kt qu in ra l g?
class Me { public static void main(String args[]) { int i = 0; int sum = 0; do { sum += i; i++; } while(i <= 10); System.out.println(sum); } }
15. Cho bit on chng trnh sau thc hin vng lp bao nhiu ln v kt qu in ra l g?
class Me { public static void main(String args[]) { int i = 5; int sum = 0; do { sum += i; i++;
16. Cho bit hai on chng trnh sau in ra kt qu ging hay khc nhau?
class Me1{ public static void main(String args[]) { int i = 0; int sum = 0; for(i=0; i<5; i++) sum += i; System.out.println(sum); } }
v:
class Me2 { public static void main(String args[ ]) { int i = 0; int sum = 0; for( ; i<5; i++) sum += i; System.out.println(sum); } }
17. Vit chng trnh tnh tng cc s chn nm trong khong 1 n 100. 18. Vit chng trnh hin th tng cc bi s ca 7 nm gia 1 v 100. 19. Vit chng trnh tm giai tha ca n (n>0), n nhp t tham s dng lnh. 20. Vit chng trnh tm bi s chung nh nht ca m v n (m, n>0), m v n c nhp t tham s dng lnh. 21. Vit chng trnh tm c s chung ln nht ca m v n (m, n>0), m v n c nhp t tham s dng lnh. 22. Vit chng trnh tm s Fibonaci th n (n>2), n nhp t tham s dng lnh. Bit rng s Fibonaci c tnh theo cng thc: F(n) = F(n-1) + F(n-2) vi n>=2 v F(0) = F(1) = 1. 23. Vit chng trnh in ra s chn t 2 ti 10 bng cch dng a. Mt vng lp for v mt cu lnh continue b. Mt vng lp while v mt bin lm c hiu (variable as a flag).
Chng 3: i tng v lp
Chng 3.
i tng v lp
Ni dung chng ny nhm gii thiu: u im ca lp trnh hng i tng so snh vi lp trnh khng i tng truyn thng Dng lp c t d liu v cch c x ca i tng nh th no To i tng vo lc chy chng trnh nh th no Cch khai bo bin tham chiu ti i tng Cch bin tham chiu i tng trong b nh Mt kiu lp c bit gi l enum dng lit k cc gi tr nh sn m l min gi tr cho mt bin c bit
Hnh 3.1 Phn r ng dng t trn xung. Cch phn r nh vy th chc nng c ch u tin sau mi n d liu cn cho chc nng. D liu c gi qua li gia cc chc nng v khi c s thay i d liu ngoi mun th chng ta kh bit c ni xy qua. Hn na khi CTDL b thay i mt mun th c th cc mun khng hiu gy ra s gy h thng phn mm.
Chng 3: i tng v lp
Phn r phn mm theo cch tip cn hng i tng s khc phc cc nhc im ny nh sau: Thit k CTDL, sau mi ti chc nng h thng. D liu c bao bc bn trong i tng, nh vy CTDL ch c hiu bi i tng c cha d liu . ng k Sinh vin
Hnh 3.2 Gn ng dng t di ln. Nu CTDL ca i tng phi thay i sau khi ng dng c ci t th ch nh hng ti i tng . Mi i tng chu trch nhim cho vic bo m tnh ton vn ca d liu ca n.
Chng 3: i tng v lp
Hot ng ca i tng: l cc hnh ng m i tng c kh nng thc hin c. Trng thi hin ti ca i tng qui nh tnh cht c trng ca i tng. V d, nhn vin trong v d trn c trng thi l: Tn l Vinh Tui l 25 V tr lm vic l phng hnh chnh. Trong khi , trng thi ca chic xe trong ca hng l: Nhn hiu xe l Ford Mu sn xe l trng Gi bn xe l 5000$ Mi i tng s thc hin mt s hnh ng. V d, i tng xe hi c kh nng thc hin nhng hnh ng sau: Khi ng. Dng li. Chy. biu din i tng trong lp trnh hng i tng, ngi ta tru tng ho i tng to nn khi nim lp i tng. Tru tng ho i tng theo chc nng Tru tng ho i tng theo chc nng chnh l qu trnh m hnh ho phng thc ca lp da trn cc hnh ng ca cc i tng. Qu trnh ny c tin hnh nh sau: Tp hp tt c cc hnh ng c th c ca cc i tng. Nhm cc i tng c cc hot ng tng t nhau, loi b bt cc hot ng c bit, to thnh mt nhm chung. Mi nhm i tng xut mt lp tng ng. Cc hnh ng chung ca nhm i tng s cu thnh cc phng thc ca lp tng ng. V d, trong bi ton qun l ca hng bn t. Mi t c mt trong ca hng l mt i tng. Mc d mi chic xe c mt s c im khc nhau v nhn hiu, gi xe, mu sc nhng c chung cc hnh ng ca mt chic xe t l: C th khi ng my. C th chy. C th dng li. C th tt my.
Chng 3: i tng v lp
Ngoi ra, mt s t xe c th thc hin mt s hnh ng c bit nh: C th giu n pha C th t bt n pha C th t ng pht tn hiu bo ng. Tuy nhin, khng phi xe no cng thc hin c cc hnh ng ny. Cho nn ta loi b cc hnh ng c bit ca mt s xe, ch gi li cc hnh ng chung nht, m hnh thnh cc phng thc ca i tng xe t tng ng vi cc hnh ng chung nht ca cc xe t. Lp Xe t
Phng thc:
Khi ng xe Chy xe Dng xe Tt my Tru tng ho i tng theo d liu Tru tng ho i tng theo d liu chnh l qu trnh m hnh ho cc thuc tnh ca lp da trn cc thuc tnh ca cc i tng tng ng. Qu trnh ny c tin hnh nh sau: Tp hp tt c cc thuc tnh c th c ca cc i tng. Nhm cc i tng c cc thuc tnh tng t nhau, loi b bt cc thuc tnh c bit, to thnh mt nhm chung. Mi nhm i tng xut mt lp tng ng. Cc thuc tnh chung ca nhm i tng s cu thnh cc thuc tnh tng ng ca lp c xut. V d, trong bi ton qun l ca hng bn t. Mi t c mt trong ca hng l mt i tng. Mc d mi chic xe c mt s c im khc nhau v nhn hiu, gi xe, mu sc nhng c chung cc thuc tnh ca mt chic xe t l: Cc xe u c nhn hiu. Cc xe u c mu sc Cc xe u c gi bn Cc xe u c cng sut ng c Ngoi ra, mt s t xe c th c thm cc thuc tnh: C xe c th c dn nghe nhc C xe c th c mn hnh xem ti vi C xe c lp knh chng nng, chng n
Chng 3: i tng v lp
Tuy nhin, y l cc thuc tnh c bit ca mt s i tng xe, nn khng c xut thnh thuc tnh ca lp t. Do , ta m hnh lp t vi cc thuc tnh chung nht ca cc t. Lp Xe t
Thuc tnh:
Khi ng xe Chy xe Dng xe Tt my Lu : Mt lp c th c mt trong cc kh nng sau: Hoc ch c thuc tnh, khng c phng thc. Hoc ch c phng thc, khng c thuc tnh. Hoc c c thuc tnh v phng thc, trng hp ny l ph bin nht. c bit, lp khng c thuc tnh v phng thc no l cc lp tru tng. Cc lp ny khng c i tng tng ng. Lp v i tng Lp v i tng, mc d c mi lin h tng ng ln nhau, nhng bn cht li khc nhau: Lp l s tru tng ho ca cc i tng. Trong khi , i tng l mt th hin ca lp. i tng l mt thc th c th, c thc, tn ti trong h thng. Trong khi , lp l mt khi nim tru tng, ch tn ti dng khi nim m t cc c tnh chung ca mt s i tng. Tt c cc i tng thuc v cng mt lp c cng cc thuc tnh v cc phng thc. Mt lp l mt nguyn mu ca mt i tng. N xc nh cc hnh ng kh thi v cc thuc tnh cn thit cho mt nhm cc i tng c th. Ni chung, lp l khi nim tn ti khi pht trin h thng, mang tnh khi nim, tru tng. Trong khi , i tng l mt thc th c th tn ti khi h thng ang hot ng.
Chng 3: i tng v lp
Tnh lng nhn vin Khi , cch tnh lng cho nhn vin l khc nhau i vi mi ngi: <Tin lng> = <H s lng> * <Lng c bn> * <T l phn trm> Trong , t l phn trm l khc nhau cho mi phng ban, v d: Phng k hoch l 105% Phng hnh chnh l 100% Phng nhn s l 110% Khi , tu vo thuc tnh phng ban khc nhau m ta phi dng cng thc t l khc nhau tnh lng cho mi nhn vin. Tuy nhin, cch tnh c th ny l cng vic bn trong ca phng thc tnh tin lng ca lp Nhn vin. Vi mi ng dng, khi to mt i tng c th ca lp nhn vin, ta ch cn truyn cc tham s thuc tnh cho i tng, sau gi phng thc tnh tin lng cho i tng nhn vin , ta s bit c tin lng ca nhn vin. Cch gi phng thc tnh tin lng l hon ton ging nhau cho tt c cc i tng nhn vin ca vn phng. S ging nhau v cch s dng phng thc cho cc i tng ca cng mt lp, mc d bn trong phng thc c cc cch tnh ton khc nhau vi cc i tng khc nhau, c gi l tnh ng gi d liu ca lp trnh hng i tng. u im ca ng gi c trnh by trong Chng 1.
ngha rng x l mt tn hnh thc c dng ch ti mt gi tr nguyn c lu trong b nh my tnh. Chng ta khng quan tm ni b nh u. Bt c khi no ta mun truy xut gi tr nguyn , ta ch cn gi ti k hiu hnh thc x, v d:
if (x > 17) x = x + 5;
Trong ngn ng lp trnh hng i tng nh Java, chng ta c th nh ngha mt lp nh Student, v khai bo mt bin kiu Student nh sau:
Student y;
Chng 3: i tng v lp
ngha rng y l mt tn hnh thc c dng ch ti mt i tng Student (ngha l mt th hin ca lp Student) m c lu trong b nh my tnh. Chng ta khng quan tm ni b nh u. Bt c khi no ta mun truy xut thuc tnh hay phng thc ca i tng ny, ta ch cn gi ti k hiu hnh thc y v tn thuc tnh hay phng thc, v d:
if (y.registerForCouse()) System.out.println ("Accepted");
C s ging nhau gia y l Student v x l int trong minh ho trn. Ch bi v int l kiu nh ngha trc trong Java (v cc ngn ng khc), lp Student l kiu ngi dng nh ngha. V y tham chiu ti mt th hin (i tng) ca lp Student, nn y l bin tham chiu. Tri li cc bin thuc tm kiu c bn ca Javaint, double, float, byte, short, long, char, v booleankhng l bin tham chiu, ngha l chng khng tham chiu cc i tng.
i tng cha tht s c to trong b nh, ta ch to bin tham chiu y. Nu ta mun khi to i tng cho y tham chiu ti, dng lnh sau:
y = new Student();
i tng Student
y Hnh 3.3 S dng mt bin tham chiu ch ti i tng trong b nh. Nu ngi c quen thuc vi khi nim con tr trong ngn ng C v C++, mt bin tham chiu tng t nh bin con tr ch ti mt vng nh hay cha gi tr l a ch ni i tng c lu gi Tuy nhin bin tham chiu khng th p dng cc php ton s hc nh bin con tr.
Chng 3: i tng v lp
hiu hn v bin tham chiu ta xt cc on lnh sau: // on lnh 1 // Va khi to x va to mt i tng Student cho x tham chiu ti
Student x=new Student();
i tng Student
x // on lnh 2
Hnh 3.4 Hai i tng cng tham chiu ti cng mt i tng. // Va khi to x va to mt i tng Student cho x tham chiu ti
Student x=new Student();
// z v y cng tham chiu ti i tng Student th hai. Hnh 3.5 minh ho iu ny.
y = z;
i tng Student
i tng Student
Chng 3: i tng v lp
/* z v x cng tham chiu ti i tng Student th hai. i tng Student u tin khng cn b tham chiu tr thnh m ci. Hnh 3.6 minh ho iu ny. */
x= z;
i tng Student
i tng Student
Hnh 3.6 Chuyn x tham chiu ti Student th hai. // on lnh 4 // Va khi to x va to mt i tng Student cho x tham chiu ti
Student x=new Student();
/* x gi khng ch ti mt i tng Student no c do b gn null. i tng Student khng cn b tham chiu tr thnh m ci. Hnh 3.7 minh ho iu ny. */
x= null;
i tng Student
Chng 3: i tng v lp
gii quyt cc trng hp i tng khng c bin no tham chiu nh trn, my o Java to ra c ch thu rc (garbage collection) nh sau:
Cng vic thu rc xy ra khi ng dng cn t b nh t do hoc khi my o Java rnh. V vy trong mt thi im no cc i tng m ci vn cn trong b nh nhng ta khng th truy xut chng.
Runtime.getRuntime().gc();
Nu mun thu rc xy ra ngay lp tc th gi phng thc sau: Thu rc s c cp k hn trong phn 10.4
TNG KT CHNG 3
Trong chng ny cc vn sau c trnh by: Mt i tng l s tru tng ho phn mm ca mt i tng vt l hay khi nim trong th gii, . Mt lp l khun mu cho to ra i tng. c bit mt lp nh ngha d liu hay thuc tnh m mt i tng c, v cch c x/dch v m i tng thc hin, cn gi l phng thc/hot ng ca i tng. Mt i tng l th hin ca lp. Lp l kiu ngi dng nh ngha. S dng kiu lit k nh th no
BI TP
1. Trong s cc nhn nh sau, ci no ng, ci no sai: a. i tng l mt thc th c th, tn ti thc t trong cc ng dng. b. i tng l mt th hin c th ca lp. c. Lp l mt khi nim tru tng dng biu din cc i tng. d. Lp l mt s tru tng ho ca i tng. e. Lp v i tng c bn cht ging nhau. f. Tru tng ho i tng theo chc nng to ra cc thuc tnh ca lp. g. Tru tng ho i tng theo chc nng to ra cc phng thc ca lp. h. Tru tng ho i tng theo d liu to ra cc thuc tnh ca lp. i. Tru tng ho i tng theo d liu to ra cc phng thc ca lp. j. K tha cho php hn ch s trng lp m ngun. k. K tha cho php tng kh nng s dng li m ngun. l. ng gi hn ch kh nng truy nhp d liu. m. ng gi hn ch vic phi sa i m ngun. n. a hnh cho php thc hin cng mt thao tc trn nhiu i tng khc nhau.
Chng 3: i tng v lp
2. Trong cc khai bo lp sau, khai bo no l ng: a) class myClass b) Class myClass c) public class MyClass d) Public class MyClass 3. C phi Mu th thch hp cho vic to lp tru tng ho khi nim ny hay khng ? 4. Lit k tt c cc thuc tnh v hnh ng ca i tng Xe t. xut lp Car. 5. Lit k tt c cc thuc tnh v hnh ng ca i tng lp Bus. 6. T hai lp Car v Bus ca 2 bi trn. xut mt lp Engine cho hai lp trn k tha, trnh trng lp d liu gia hai lp Car v Bus. 7. Xy dng thuc tnh ca cc lp sau o Classroom o Departments o Student o Professor Vit chng trnh to i tng ca cc lp trn.
Chng 4.
Ni dung chng ny nhm gii thiu: S dng phng thc c t cch hnh x ca i tng. i tng cng b phng thc ca n nh l dch v ti i tng khc v vic yu cu s phc v c thc hin nh th no i tng bo tr v bo m tnh ton vn d liu ca n nh th no thng qua c ch du thng tin Cch to phng thc xy dng khi to i tng ban u
Mt i tng Transcript m bo ngi sinh vin ny hc cc mn hc cn thit cho mn hc ang ng k. Mt s kin bn ngoi tc ng vo h thng yu cu cc i tng ni chuyn vi nhau Mt Student (sinh vin) Mt DegreeProgram (chng trnh hc)
Hnh 4.1 Cc i tng trong h thng phi cng tc vi nhau hon tt s mnh SRS
Tnh cht: cc thuc tnh v phng thc ca lp c cc tnh cht c c trng bi cc t kho sau: o public: c th c truy cp t bn ngoi lp nh ngha. o protected: ch c truy cp t lp nh ngha v cc lp k tha t lp . o private: ch c truy cp trong phm vi bn thn lp nh ngha. o khng khai bo: ngm nh l package, ch c truy cp t cng package o static: c dng chung cho mt th hin ca lp, c th c truy cp trc tip bng <tn lp>.<tn thuc tnh> m khng cn khi to mt th hin ca lp. (phn ny c bn k hn trong 5.6) o abstract: nh ngha mt thuc tnh tru tng. Thuc tnh ny khng th truy nhp trong lp nhng c th b nh ngha chng cc lp k tha. o final: mt thuc tnh hng, khng b nh ngha chng cc lp k tha. o native: dng cho phng thc khi ci t ph thuc mi trng trong mt ngn ng khc, nh C hay hp ng.
o synchronized: dng cho phng thc ti hn, nhm ngn cc tc ng ca cc i tng khc khi phng thc ang c thc hin. Kiu d liu: c th l cc kiu d liu c bn sn c ca Java, c th l cc lp do ngi dng t nh ngha. Tn thuc tnh: c t tn theo quy tc t tn bin ca Java. Thng thng tn thuc tnh t theo kiu camel nh name, studentId, courseLoad. nh ngha lp Person sau c hai thuc tnh name, v age.
class Person { public String name; public int age; }
Tnh cht: c trng bi cc t kho tng t nh tnh cht ca thuc tnh. Kiu tr v: Kiu d liu tr v ca phng thc, c th l kiu d liu sn c ca Java hoc l kiu do ngi dng t nh ngha. Tn phng thc: tun theo qui tc t tn bin ca Java. Thng thng tn phng thc t theo kiu camel nh registerForCourse, printTranscript. Cc ngoi l: l mt i tng c bit c to ra khi chng trnh gp li. Java s tr li cho chng trnh ngoi l ny theo t kho throws. Cc ngoi l, nu c, c phn cch nhau bi du phy. Cc tham s: cc tham s ca phng thc, c lit k theo cp <kiu tham s> <tn tham s>, cc tham s c phn bit bi du phy. Di y l bng tm tt cch truy cp cho cc thnh vin ca lp (Y l c truy cp) Tnh cht private protected public (khng khai bo) Lp Y Y Y Y Y Y Y Y Y Y Y Lp con Gi Bt k u
on lnh sau m t vic khai bo phng thc show() hin th thng tin c nhn ca lp Person.
class Person { public String name; public int age; public void show() { System.out.println( name + is + age + years old!); } }
Ta ch n hm xy dng ca lp, hm ny c hai bin cc b l name v age, trng vi cc bin ca lp. Do , trong phm vi hm ny, bin this.name v this.age s ch cc bin ca lp, cn cc bin name v age s ch cc bin cc b ca hm.
Chng 4: Tng tc gia cc i tng package chuong4; class PersonDemo { public static void main(String args[]) { Person myPerson = new Person(Minh, 21); myPerson.show(); } }
Chng 4: Tng tc gia cc i tng public int age; // Phng thc xy dng khng tham s public Person() { name = ; age = 0; } // Phng thc xy dng c hai tham s public Person(String name, int age) { this.name = name; this.age = age; } public void show() { if (name.equals()) System.out.println( name is empty); else System.out.println( name + is + age + years old!); } } public class TestPerson { public static void main( String args[]) { // gi phng thc xy dng khng tham s Person p1 = new Person(); p1.show(); // gi phng thc xy dng c tham s Person p2 = new Person(Tam, 31 ); p2.show(); } }
Trong nh ngha lp Student, hai thuc tnh name, ssn v phng thc moneyOwed ch c thy bn trong lp cn phng thc allBillsPaid c th c thy t bn ngoi cung cp cch truy nhp thuc tnh loi private t bn ngoi lp, cp phng thc get/set c ngh nh sau:
public class Student { private String name; // Bn ngoi dng phng thc c (get) gi tr thuc tnh name
Chng 4: Tng tc gia cc i tng public String getName() { return name; } // Bn ngoi dng phng thc ghi (set) gi tr thuc tnh name public void setName(String newName) { name = newName; } //. } public class TestStudent { public static void main( String args[]) { Student s = new Student (); s.setName(Huong); System.out.println( Name : + s.getName(); } }
Cho mt i tng c kiu Course, ta yu cu i tng kiu Student nhn thng ip ny v xc nhn sinh vin ny hon tt mn hc v nhn mt im u. Vi lp Course:
boolean register(Student s)
Cho mt tham chiu s ti mt i tng Student, ta yu cu i tng Course nhn thng ip lm bt c iu g cn thit xem xt s ng k hc ca sinh vin s. Ta mong ch Course tr v true hay false bo hiu ng k thnh cng hay tht bi. Hnh 4.2 phn nh trao i thng ip gia mt i tng c kiu Course v mt i tng s kiu Student. ng mi tn lin tc th hin thng ip c truyn thng qua li triu hi phng thc; ng mi tn t qung th hin gi tr tr v t phng thc. Cc bc th t trong s c din gii nh sau 1. i tng c kiu Course nhn mt thng ip
c.register(s);
vi s l mt i tng Student. i tng c quyt nh chnh thc liu s nn hay khng nn cho php c ng k, c gi thng ip s.successfullyCompleted(c2) ti s vi c2 th hin mt tham chiu ti mt i tng khc c kiu Course m l mn hc cn hc trc c. Lu c th khng c hay c mt hay nhiu c2 nh vy. 2. s tr li cho c l true ch rng s hon tt c2. 3. c thuyt phc rng s p ng iu kin cn cho kho hc, c hon tt cng vic ng k cho sinh vin s bng cch gi gi tr true ti ni yu cu phc v.
Hnh 4.2 Thng ip c truyn qua li gia cc i tng Course v Student V d ny tng i n gin; trong thc t c phi ni chuyn vi cc i tng khc nh: Mt i tng Classroom (phng m t chc mn hc ny chc chn rng cn ch cho sinh vin s) Mt i tng DegreeProgram ( m bo rng kho hc ng k ph hp vi sinh vin s)
c.register(s)
Hnh 4.3 Ngi yu cu ch thy chi tit bn ngoi ca vic trao i thng ip. S u nhim
Nu c yu cu ti i tng A lm g v n phin n, A yu cu s tr gip t mt i tng khc l B th vic ny gi l s u nhim (delegation) bi A ti B. S u nhim xy ra gia cc i tng th thng thng trong sut vi i tng c yu cu u tin. Xt v d trc, i tng c kiu Course u nhim mt phn cng vic ng k kho hc ca i tng s kiu Student cho s khi c yu cu s kim tra xem hon tt cc kho hc bt buc hay khng. T gc nhn ca ngi pht ra yu cu ng k ban u c.register(s);iu ny dng nh l mt tng tc gin n, ngha l ngi yu cu i hi c ng k mt sinh vin v n thc hin iu ny! Tt c cng vic chi tit m c thc hin th b che y vi ngi yu cu (xem hnh 4.3).
TNG KT CHNG 4
Trong chng ny cc vn sau c trnh by: Cch to v s dng phng thc nh th no. Cc i tng thng cng tc vi nhau thc hin mt chc nng h thng nh ng k mn hc cho sinh vin. i tng A c th lin lc vi i tng B nu A c tham chiu ti B. Cc lp che du c tnh ca chng nh th no. To phng thc truy xut get/set cung cp vic truy xut cc thuc tnh private ca i tng. Cch to phng thc xy dng Np chng cho php to nhiu phng thc cng tn v cch to cc hm xy dng khc nhau.
BI TP
1. Cho lp Book c cc thuc tnh sau:
Author author; String title; int noOfPages; boolean fiction;
vit cc phng thc get/set cho mi thuc tnh ny v bin dch lp Book trn. 2. Cho on m chng trnh nh sau:
Student s; Professor p; boolean b; String x = "Math"; s.setMajor(x); if (!s.hasAdvisor())
c tnh -thuc tnh v phng thc- no c hm cho lp Student v Professor qua on lnh trn? Hy xc nh Kh nng truy cp ca tng c tnh Cc c tnh c khai bo nh th no 3. M rng lp Student v Professor trong bi tp 6 ca chng 3 nh sau:
Bao gm phng thc get/set cho mi thuc tnh. C cc phng thc xy dng cho mi lp. To phng thc
public void printAllAttributes() hin th tt c thuc tnh nh sau Student Name: John Smith Student ID: 123-45-6789
Ri thay i phng thc main ca s dng phng thc xy dng cho tng kiu i tng. 4. on lnh sau y c g sai:
public class Building { private String address; public int numberOfFloors; void GetnumberOfFloors() { return numberOfFloors; } private void SetNoOfFloors(float n) { NumberOfFloors = n; } public void display() { System.out.println("Address: " + address); System.out.println("No. of Floors: " + numberOfFloors); }
Chng 5.
Ni dung chng ny nhm gii thiu: Cc loi quan h khc nhau gia cc lp xc nh cc i tng lin kt nh th no trong thi gian chy chng trnh. Tnh tha k gip to lp mi bng cch nu cc c im khc so vi lp c sn. Cc qui lut cho nhng g c th v khng th lm khi to cc lp con qua tnh tha k. Cc phng thc xy dng c to nh th n Kh nng truy xut cc c trng qua tnh tha k.
5.1 Kt hp v lin kt
Quan h gia cc lp l s kt hp (association).Trong h thng SRS c vi kt hp: Lp Student c quan h ng k hc vi lp Course. Lp Professor c quan h dy vi lp Course. Lp DegreeProgram c quan h bao gm vi lp Course. Mt lin kt (link) l quan h gia hai hay nhiu i tng. Xt quan h mt Student ng k mt Course, ta c cc lin kt sau: Tm (mt i tng loi Student) ng k mn Mng my tnh (mt i tng loi Course). Sn (mt i tng loi Student) ng k mn Lp trnh Agent (mt i tng loi Course). H (mt i tng loi Student) ng k mn Mng my tnh (mt i tng loi Course ging nh i tng m Tm ng k hc). Nh vy ta c th tm tt nh sau: Mt kt hp l mt quan h tim nng gia cc i tng ca cc lp. Mt lin kt l quan h thc s gia cc i tng ca cc lp. Hu ht kt hp l gia hai lp khc nhau, gi l kt hp hai ngi (binary association). Mt kt hp mt ngi (unary association) l gia cc th hin ca cng mt lp, v d Mt Course l mn hc bt buc phi hon tt trc mt Course khc. Mt Person c quan h v/chng vi mt Person khc. Kt hp c s ngi cao hn c th xy ra nh kt hp ba ngi (ternary association) bao gm ba lp. V d nh: mt Student hc mt Course c dy bi mt Professor (hnh 5.1).
Ta c th phn r kt hp c nhiu ngi thnh nhiu kt hp hai ngi. V d ta th hin kt hp ba ngi hnh 5.1 thnh cc kt hp hai ngi nh sau (hnh 5.2): Student tham d Course. Professor ging dy Course. Professor dy Student.
dy
tham d
Professor
ging dy
Course
Hnh 5.2 Mt th hin tng ng bng ba kt hp hai ngi S lin kt (multiplicity) Cho mt kt hp gia A v B, s lin kt hm s i tng kiu A c th kt hp vi mt i tng kiu B. C ba loi s lin kt: mt-mt, mt-nhiu v nhiu-nhiu. Cc v d sau minh ho loi lin kt: Mt i tng Student ch c mt i tng Transcript, y l lin kt mt-mt. Mt i tng Professor c th hng dn nhiu Student, nhng mt i tng Student ch c mt Professor hng dn, y l lin kt mt-nhiu. Mt i tng Student tham d nhiu Course, mt Course dy cho nhiu Student, y l lin kt nhiu-nhiu
Ngoi quan h lin kt, gia cc lp cn c cc dng quan h c bn nh sau: Khi qut ha (Generalization): mi quan h gia mt lp c cc c trng mang tnh khi qut cao hn v mt lp c tnh cht c bit hn. Mi quan h khi qut ha chnh l s k tha ca mt lp t lp khc. V d lp Person c khi qut ho cao hn lp Student v Employee, ngc li hai lp Student v Employee c tnh cht c bit hn lp Person. Quan h cng hp (Aggregation): dng quan h m t mt lp A l mt phn ca lp B v lp A c th tn ti c lp. V d lp Student l mt phn ca lp Class v lp Student c th tn ti c lp. Quan h gp (Composition): biu din mt quan h kiu tng th-b phn. Lp A c quan h gp vi lp B nu lp A l mt phn ca lp B v s tn ti ca i tng lp B iu khin s tn ti ca i tng lp A. V d lp Country l tng th v lp Province l b phn. Lp Province l mt phn ca lp Country. Quan h ph thuc (Dependency): mi quan h ph thuc gia hai lp i tng: mt lp i tng A c tnh c lp v mt lp i tng B ph thuc vo A; mt s thay i ca A s nh hng n lp ph thuc B. V d mt i tng ca lp Order (ho n) ph thuc vo i tng DiscountPolicy (Chnh sch chit khu).
5.2 K tha
S k tha c s dng khi mun to mt lp mi t mt lp bit. Khi , tt c cc thuc tnh v phng thc ca lp c u tr thnh thuc tnh v phng thc ca lp mi. Lp c c gi l lp cha, lp mi c gi l lp con. Khai bo lp k tha
<thuc tnh> <tn lp con> extends <tn lp cha> { .. }
Khi , on chng trnh ca chng trnh EmployeeDemo1 vn in ra dng thng bo Minh is 21 years old! v khi i tng myEmployee gi n phng thc show() c k tha t lp Person.
package chuong4; class EmployeeDemo1 { public static void main(String args[]) { Employee myEmployee = new Employee(Minh, 21, 300f); myEmployee.show(); } }
Quy tc truy nhp trong k tha Cc quy tc ny quy nh kh nng truy nhp ca lp con i vi cc thuc tnh v phng thc ca lp cha: private: ch c truy nhp trong phm vi lp cha, lp con khng truy nhp c. Tt c cc lp ngoi lp cha u khng truy nhp c. protected: lp con c th truy nhp c. Tt c cc lp khng k tha t lp cha u khng truy nhp c. final: lp con c th s dng nhng khng th khai bo ghi c (ch ng vi phng thc). public: lp con c th s dng v np chng c. Tt c cc lp bn ngoi u s dng c.
5.3 a hnh
a hnh l vic triu gi n cc phng thc np chng ca i tng ( hc ti phn IV ca chng 4). Khi mt phng thc np chng c gi, chng trnh s da vo kiu cc tham s v kiu tr v gi phng thc ca i tng cho ph hp. Chng trnh Operator minh ho vic khai bo nhiu hm add() cng hai s hoc cng hai chui k t.
package chuong5; public class Operator { // Cng hai s nguyn public int add(int x, int y) { return (x + y); }
Chng 5: Quan h gia cc i tng // Cng hai s thc public float add(float x, float y) { return (x + y); } // Cng hai chui k t public String add(String a, String b) { return (a + b); } public static void main(String args[]) { Operator myOperator = new Operator(); System.out.println(The (5+19) is + myOperator.add(5, 19)); System.out.println(The (\ab\ + \cd\) is \ + myOperator.add(ab, cd) + \); } }
Chng trnh s hin th ra hai dng thng bo: The (5+19) is 24 The (ab + cd) is abcd Trong lp Operator c hai phng thc cng tn v cng c hai tham s u vo l add(). Khi chng trnh thc thi lnh myOperator.add(5, 19), chng trnh s t i chiu cc kiu tham s, thy 5 v 19 c dng gn vi kiu int nht, nn phng thc add(int, int) s c gi v tr v gi tr l 24. Khi chng trnh thc thi lnh myOperator.add(ab, cd), chng trnh s t i chiu cc kiu tham s, thy ab v cd c dng gn vi kiu String nht, nn phng thc add(String, String) s c gi v tr v gi tr l abcd. Lu : Khi gi hm vi cc kiu d liu khc vi cc hm c khai bo, s c s chuyn i kiu ngm nh din ra. Khi khng th thc hin chuyn i kiu ngm nh, Java s pht sinh mt thng bo li. Chng hn, trong chng trnh Operator, nu ta thc thi lnh myOperator.add(4.0f, 5) c dng add(float, int), chng trnh s chuyn ngm nh s nguyn 5 thnh float (chuyn t kiu int sang float thuc din ni rng kiu, l kiu chuyn ngm nh
trong Java) c th s dng dng c khai bo add(float, float) v kt qu s l 9.0f. Nu ta thc thi lnh myOperator.add(ab, 5) c dng add(String, int), v int khng th chuyn ngm nh thnh String nn lnh ny s pht sinh li. trnh li ny, phi chuyn i kiu tng minh cho s 5 thnh kiu String bng mt trong cc cch sau:
myOperator.add(ab, (new Int(5)).toString()); myOperator.add(ab, 5 + );
Java s dng kt ni sau (late-binding) h tr tnh a hnh. Ngha l quyt nh phng thc no c gi s b tr hon cho ti lc chy. Tnh cht ny l ghi (overriding) phng thc. Ghi phng thc Phng thc ca lp con c cng tn v c im nh phng thc ca lp cha ( c cng danh sch tham s v c cng kiu tr v). Khi phng thc ghi c triu hi t lp con, ta lun c phin bn phng thc lp con c thc hin. Xt chng trnh Override sau:
package chuong5; class A { int i, j; A(int a, int b) { i = a; j = b; } // hin th i v j void show() { System.out.println("i and j: " + i + " " + j); } } class B extends A { int k; B(int a, int b, int c) { super(a, b); k = c; }
Chng 5: Quan h gia cc i tng // hin th k phng thc ny ghi show() ca A void show() { System.out.println("k: " + k); } } public class Override { public static void main(String args[]) { B subOb = new B(1, 2, 3); subOb.show(); // this calls show() in B } }
Kt qu chng trnh: k: 3 Ghi phng thc xy dng Trong phn 4.3.5 ta xem xt phng thc xy dng; trong chng ny do tnh cht k tha m phng thc xy dng c thm cc c tnh sau: Khi mt lp con dn xut t lp cha, nu lp con khng c phng thc xy dng nhng lp cha c phng thc xy dng khng tham s th phng thc xy dng ny s c gi. V d:
package chuong5; class LopCha { LopCha() { System.out.println("Khi to lp cha"); } } class LopCon extends LopCha { } public class TestConstruction1 { public static void main(String args[]) {
Kt qu chng trnh: Khi to lp cha Nu lp con c phng thc xy dng v trong phng thc ny n s dng phng thc xy dng ca lp cha th lnh super c s dng. V d:
package chuong5; class LopCha { LopCha() { System.out.println("Khi to lp cha"); } } class LopCon extends LopCha { LopCon() { super(); System.out.println("Khi to lp con"); } } public class TestConstruction2 { public static void main(String args[]) { LopCon c = new LopCon(); } }
Lu : super phi l lnh u tin ca phng thc xy dng lp con. Nu lp cha ch c mt phng thc xy dng c tham s v lp con s dng li phng thc xy dng ny bng lnh super th phi truyn cho n ng tham s, nu khng s c li. V d:
package chuong5; class LopCha { LopCha( int i) { System.out.println("Gi tri i : +i); } } class LopCon extends LopCha { LopCon() { super(); System.out.println("Khi to lp con"); } } public class TestConstruction3 { public static void main(String args[]) { LopCon c = new LopCon(); } }
Chng 5: Quan h gia cc i tng LopCon() { super(3); System.out.println("Khi to lp con"); } } public class TestConstruction3 { public static void main(String args[]) { LopCon c = new LopCon(); } }
Kt qu chng trnh: Gi tr i : 3 Khi to lp con Nu lp cha c phng thc xy dng khng tham s v phng thc xy dng c tham s th lp con mc nh s dng phng thc xy dng khng tham s vi lnh super(). Nu mun phng thc xy dng c tham s th phi truyn cho n ng tham s mt cch tng minh trong lp con nh v d TestConstruction3.
Khai bo lp tru tng Lp tru tng c khi bo nh cch khai bo cc lp thng thng, ngoi tr c thm t kho abstract trong phn tnh cht:
[public] abstract class <Tn lp> { . }
Tnh cht: mc nh l public. Tn lp: tun th theo quy tc t tn lp thng thng ca Java. Lu : Lp tru tng cng c th k tha mt lp khc, nhng lp cha cng phi l mt lp tru tng. (Khai bo k tha thng qua t kho extends nh khai bo k tha thng thng). Khai bo phng thc ca lp tru tng
[public] abstract <kiu d liu tr v> <Tn phng thc> ([<cc tham s>]) [throws <cc ngoi l>];
Tnh cht: tnh cht ca mt phng thc tru tng ca lp tru tng lun l public. Nu khng khai bo tng minh th gi tr mc nh cng l public. Kiu d liu tr v: c th l cc kiu c bn ca Java, cng c th l kiu do ngi dng t nh ngha (kiu i tng). Tn phng thc: tun th theo quy tc t tn phng thc ca lp Cc tham s: nu c th mi tham s c xc nh bng mt cp <kiu tham s> <tn tham s>. Cc tham s c phn cch nhau bi du phy. Cc ngoi l: nu c th mi ngoi l c phn cch nhau bi du phy. Lu : Tnh cht ca phng thc tru tng khng c l private hay static. V phng thc tru tng ch c khai bo chi tit (np chng) trong cc lp dn xut (lp k tha) ca lp tru tng. Do , nu phng thc l private th khng th np chng, nu phng thc l static th khng th thay i trong lp dn xut. Phng thc tru tng ch c khai bo di dng khun mu nn khng c cp du { } v kt thc bng du ; on lnh sau khai bo hai phng thc ca lp tru tng Animal: Phng thc getName() tr v tn loi ng vt, d cha bit tn c th loi no nhng kiu tr v l String. Phng thc getFeet() tr v s chn ca loi ng vt, cng cha bit c th l bao nhiu chn nhng kiu tr v l int.
abstract class Animal { abstract String getName(); abstract int getFeet();
S dng lp tru tng Lp tru tng c s dng thng qua cc lp dn xut ca n. V ch c cc lp dn xut mi ci t c th cc phng thc c khai bo trong lp tru tng. on lnh sau khai bo lp v lp Bird k tha t lp Animal. Lp Bird ci t chi tit hai phng thc c khai bo trong lp Animal: phng thc getName() s tr v tn loi l Bird; phng thc getFeet() tr v s chn ca loi chim l 2.
public class Bird extends Animal { // Tr v tn loi chim public String getName() { return Bird; } // Tr v s chn ca loi chim public int getFeet() { return 2; } }
on lnh sau khai bo lp Cat cng k tha t lp Animal. Lp ny ci t chi tit hai phng thc c khai bo trong lp Animal: phng thc getName() s tr v tn loi l Cat; phng thc getFeet() tr v s chn ca loi mo l 4.
public class Cat extends Animal { // Tr v tn loi mo public String getName() { return Cat; } // Tr v s chn ca loi mo public int getFeet() { return 4; }
Chng trnh ny s hin th hai dng thng bo: The Bird has 2 feets The Cat has 4 feets
Tnh cht: tnh cht ca mt giao tip lun l public. Nu khng khai bo tng minh th gi tr mc nh cng l public. Tn giao tip: tun th theo quy tc t tn bin ca java. Danh sch cc giao tip: danh sch cc giao tip cha c nh ngha k tha, cc giao tip cha c phn cch nhau bi du phy. (Phn trong ngoc vung [ ] l tu chn).
Lu : mt giao tip ch c th k tha t cc giao tip khc m khng th c k tha t cc lp sn c. Khai bo phng thc ca giao tip
[public] <kiu gi tr tr v> <Tn phng thc> ([<cc tham s>]) [throws <danh sch ngoi l>];
Tnh cht: tnh cht ca mt thuc tnh hay phng thc ca giao tip lun l public. Nu khng khai bo tng minh th gi tr mc nh cng l public. i vi thuc tnh, th lun phi thm l hng (final) v tnh (static). Kiu gi tr tr v: c th l cc kiu c bn ca Java, cng c th l kiu do ngi dng t nh ngha (kiu i tng). Tn phng thc: tun th theo quy tc t tn phng thc ca lp Cc tham s: nu c th mi tham s c xc nh bng mt cp <kiu tham s> <tn tham s>. Cc tham s c phn cch nhau bi du phy. Cc ngoi l: nu c th mi ngoi l c phn cch nhau bi du phy. Lu : Cc phng thc ca giao tip ch c khai bo di dng mu m khng c ci t chi tit (c du ; ngay sau khai bo v khng c phn ci t trong du { }). Phn ci t chi tit ca cc phng thc ch c thc hin trong cc lp s dng giao tip . Cc thuc tnh ca giao tip lun c tnh cht l final, static v public. Do , cn gn gi tr khi u ngay khi khai bo thuc tnh ca giao tip. on lnh sau minh ho vic khai bo mt thuc tnh v mt phng thc ca giao tip Product, thuc tnh lu nhn hiu ca nh sn xut sn phm; phng thc dng truy xut gi bn ca sn phm.
public interface Product { public static final String MARK = Adidas; public float getCost(); }
S dng giao tip V giao tip ch c khai bo di dng cc phng thc mu v cc thuc tnh hng nn vic s dng giao tip phi thng qua mt lp c ci t giao tip . Vic khai bo mt lp c ci t giao tip c thc hin thng qua t kho implements nh sau:
<tnh cht> class <tn lp> implements <cc giao tip> { . }
Cc giao tip: mt lp c th ci t nhiu giao tip. Cc giao tip c phn cch nhau bi du phy. Khi , lp phi ci t c th tt c cc phng thc ca tt c cc giao tip m n s dng. Lu : Mt phng thc c khai bo trong giao tip phi c ci t c th trong lp c ci t giao tip nhng khng c php khai bo chng. Ngha l s lng cc tham s ca phng thc trong giao tip phi c gi nguyn khi ci t c th trong lp. Chng trnh Shoe minh ho vic ci t mt Shoe thc hin giao tip Product vi cc thuc tnh v phng thc c nh ngha.
package chuong5; public class Shoe implements Product { // Ci t phng thc c khai bo trong giao tip public float getCost() { return 10f; } // Phng thc truy nhp nhn hiu sn phm public String getMark() { return MARK; } // Phng thc main public static void main(String args[]) { Shoe myShoe = new Shoe(); System.out.println(This shoe is + myShoe.getMark() + having a cost of $ + myShoe.getCost()); } }
Chng trnh s in ra dng: This shoe is Adidas having a cost of $10. Hm getMark() s tr v nhn hiu ca sn phm, l thuc tnh c khai bo trong giao tip. Hm getCost() l ci t ring ca lp Shoe i vi phng thc c khai bo trong giao tip Product m n s dng, ci t ny tr v gi tr 10 i vi lp Shoe.
Mi ln chng ta gi incrementEnrollment i vi mt Student, nhng ngi khc s c hng li, bi v tt c h u chia s gi tr totalStudents. chng minh iu ny, hy yu cu mi i tng Student bo co v tng s ghi danh:
s1.reportTotalEnrollment(); s2.reportTotalEnrollment(); s3.reportTotalEnrollment();
y l kt qu xut ra: Total Enrollment: 3 Total Enrollment: 3 Total Enrollment: 3 Ging nh thuc tnh tnh, phng thc tnh lin quan n tt c i tng ca lp v v bn cht n thuc lp ch khng thuc tng i tng. nh ngha lp Student sau c ba phng thc tnh s dng bin tnh totalStudents getTotalStudents, setTotalStudents, v reportTotalEnrollment:
public class Student { private static int totalStudents; // phng thc xy dng... public Student(...) { // // t ng tng s sinh vin mi ln to mt i tng Student. totalStudents++; } // ba phng thc tnh sau y thuc v bn cht ca lp Student public static int getTotalStudents() { return totalStudents; } public static void setTotalStudents(int x) { totalStudents = x; } public static int reportTotalEnrollment() { System.out.println("Total Enrollment: " + getTotalStudents()); } // }
v kt qu l ging nhau. Tuy nhin khi s dng phng thc tnh, ta cn ch n im hn ch ca n: phng thc tnh khng c php truy xut n cc c tnh khng tnh (nonstatic) ca lp cha n. Xt v d sau: ta to phng thc tnh print cho lp Student m truy xut n phng thc khng tnh getName.
public class Student { private static int totalStudents; // public static int getTotalStudents() { return totalStudents; } // public static void print() { System.out.println(getName() + " is one of " + getTotalStudents() + "students."); } } }
Trnh bin dch s bo li: non-static method getName() cannot be referenced from a static context L do l c tnh (thuc tnh hay phng thc) khng tnh thuc v i tng ca lp, do chng ch tn ti khi i tng c to ra. Khi phng thc tnh dng c tnh khng tnh th c th c tnh khng tnh cha c.
Kiu lit k l loi lp n gin bao gm Ch c mt thuc tnh nh value c kiu c bn:
private final type value;
Mt danh sch lit k gi tr c th c cho thuc tnh c biu din theo dng danh sch cc cp tn hnh thc(gi tr) cch nhau bi du ,
symbolicName1(value1), symbolicName2(value2), symbolicNameN(valueN);
Nhn xt rng phng thc xy dng ca kiu lit k khng c khai bo l public v n khng c gi t bn ngoi, n ch dng bn trong kiu lit k ny. Mt phng thc truy nhp value() c gi t bn ngoi ly gi tr ca thuc tnh. Kt hp li dng mu tng qut cho vic khai bo mt kiu lit k nh sau:
public enum EnumName { symbolicName1(value1), symbolicName2(value2), symbolicNameN(valueN); private final type value; EnumName(type v) { value = v; } public type value() { return value; } }
Chng 5: Quan h gia cc i tng public void display() { // tn dng phng thc value() ca Major System.out.println(name + is a + major.value() + major.); } }
Kt qu chng trnh: Fred Schnurd is a Computer Science major. Vi tn hnh thc Major.CS i din cho chui Computer Science. iu ny c c do li gi ti value() trong phng thc display() ca Student. Nu ta thay i display() nh sau:
public void display() { // in ra major trc tip System.out.println(name + is a + major + major.); }
Th tn hnh thc ca kiu lit k Major c in ra Fred Schnurd is a CS major. Lu : ta khng th gn bt k gi tr no khc hn 5 gi tr nh ngha trong kiu lit k Major cho thuc tnh major. Nu vi phm Java s bo li lc bin dch.
Kt qu xut ra : A 4.0
Lp Person l lp k tha t lp Human: C hai thuc tnh l name v age c dng private Cc phng thc truy nhp cc thuc tnh name (getName() v setName(String)) v age (getAge() v setAge(int)). Ci t chng phng thc show() k tha t lp tru tng Human. y l ni dung tp tin Person.java.
package chuong5; class Person extends Human { private String name; private int age; // Phng thc xy dng khng c tham s public Person() { super();
Chng 5: Quan h gia cc i tng name = ; age = 0; } // Phng thc xy dng c tham s public Person(String name, int age) { this.name = name; this.age = age; } // Phng thc truy nhp thuc tnh name public String getName() { return name; } public void setName(String name) { this.name = name; } // Phng thc truy nhp thuc tnh age public int getAge() { return age; } public void setAge(int age) { this.age = age; } // Khai bo np chng public void show() { System.out.println( name + is + age + years old!); } }
Lp Employee l lp k tha t lp Person: C thm thuc tnh l salary cng c dng private ng gi d liu v cn cc phng thc truy nhp get/set. Lp ny ci t li phng thc show().
C thm hai phng thc addSalary() v addSalary(float) tnh tng lng cho nhn vin: phng thc addSalary() tng lng theo t l mc nh l 10% (khng cn tham s), phng thc addSalary(float) tng theo gi tr c th a vo (cn tham s). Sau y l ni dung tp tin Employee.java
package chuong5; class Employee extends Person { private float salary; // Phng thc xy dng khng c tham s public Employee() { super(); salary = 0f; } // Phng thc xy dng c tham s public Employee(String name, int age, float salary) { super(name, age); this.salary = salary; } /* Phng thc truy nhp thuc tnh salarry */ public float getSalary() { return salary; } public void setSalary(float salary) { this.salary = salary; } // Khai bo np chng public void show() { System.out.println( getName() + is + getAge() + years old having a salary of $ + salary + /month!); }
Chng 5: Quan h gia cc i tng /* Phng thc tng lng */ public void addSalary() { salary *= 1.1f; } public void addSalary(float addition) { salary += addition; } }
Lu : Trong phng thc np chng show() ca lp Employee, ta phi dng cc phng thc public c k tha t lp Person l getName() v getAge() truy nhp n thuc tnh name v age m khng th truy xut trc tip. Chng trnh CaseStudy5 cha hm main chy minh ho vic s dng cc lp Person v Employee. y l ni dung ca tp tin CaseStudy5.java
package chuong5; public class CaseStudy5 { public static void main(String args[]) { // S dng lp Person Person myPerson = new Person(Vinh, 25); myPerson.show(); // S dng lp Employee Employee myEmployee = new Employee(Sn, 25, 300f); myEmployee.show(); // Tng lng theo mc nh myEmployee.addSalary(); myEmployee.show(); // Tng lng ln $50 myEmployee.addSalary(50f); myEmployee.show(); } }
Dng th nht in ra dng thng bo theo phng thc show() ca lp Person. Dng th hai cng hin th thng bo theo phng thc show() ca lp Employee c khai bo np chng. Dng th ba hin th thng bo sau khi tng lng theo mc nh (10%) t 300$ ln 330$. Dng th t hin th thng bo sau khi tng lng thm mt ln na vi lng tng l 50$ t 330$ ln 380$.
TNG KT CHNG 5
Trong chng ny cc vn sau c trnh by: Mt s kt hp m t mi quan h gia cc lp, ngha l mi quan h tim nng gia cc i tng ca hai lp, trong khi mt lin kt m t mt quan h thc s gia hai i tng ca cc lp . Xt s kt hp gia lp X v Y, multiplicity l l s i tng kiu X lin kt ti mt i tng kiu Y v ngc li; c th l 1:1, 1:m, v m:m. Trong tt c trng hp s tham gia ca i tng hai u mi quan h c th l tu thch hoc bt buc. Nh th no to lp mi t lp ang c qua tnh tha k, v iu g nn v khng nn khi to lp mi. Hn na chng ta c th m rng lp cha v chuyn bit n bng vic thm vo cc c trng hay ghi phng thc. S phn cp lp pht trin theo thi gian nh th no, v iu g ta c th lm trnh cc hiu ng xu ti ng dng khi s phn cp lp thay i theo yu cu thc t. Vi iu phc tp ca hm xy dng lin quan ti tnh tha k.
BI TP
1. Nu mi quan h? Dc s Toa thuc Toa thuc Thuc 2. Cho cc v d minh ho cc dng quan h c bn. 3. Trong cc khai bo phng thc ca mt lp (khng tru tng) sau, khai bo no l ng:
Chng 5: Quan h gia cc i tng a. String getName{return name;} b. String getName(){return name;} c. String getName(){return name;}; d. String getName();
4. Trong cc khai bo phng thc tru tng ca mt lp tru tng sau, khai bo no l ng:
a. abstract String getName{return name;} b. abstract String getName(){return name;} c. abstract String getName(){return name;}; d. abstract String getName();
7. Trong cc khai bo k tha giao tip sau, gi s Ainterface v Binterface l cc giao tip c sn, khai bo no l ng:
a. public interface MyInterface extends Ainterface{} b. public interface MyInterface Extends Ainterface{} c. public interface MyInterface extends Ainterface, Binterface{} d. public interface MyInterface extends Ainterface, extends Binterface{}
8. Trong cc khai bo mt lp s dng giao tip sau, gi s Ainterface v Binterface l cc giao tip c sn, khai bo no l ng:
a. public class MyClass extends Ainterface{} b. public class MyClass implements Ainterface{} c. public class MyClass implements Ainterface, Binterface{} d. public class MyClass implements Ainterface, implements Binterface{}
Chng 5: Quan h gia cc i tng // Khai bo lp s dng giao tip public class MyClass implements MyInterface { }
10. Khi , lp MyClass ch c duy nht mt phng thc ci t chi tit phng thc show ca giao tip MyInterface. Trong cc cch ci t sau, cch no l ng:
a. public int show(String a){ System.out.println(a);} b. public void show(){ System.out.println(Show!);} c. public void show(String a){ System.out.println(a);} d. public void show(String a, String b){ System.out.println(a+b);}
11. Xt on chng trnh ci t php ton cng vi cc s hng c kiu khc nhau:
public class MyOperator { public static int add(int a, int b) { return a+b; } public static float add(float a, float b) { return a+b; } public static double add(double a, double b) { return a+b; } public static String add(String a, String b) { return a+b; } }
12. Cng vi lp MyOperator trong bi 9, khi ta gi lnh MyOperator.add(5.0d, 100f), chng trnh s gi phng thc no?
a. add(int, int) b. add(float, float) c. add(double, double) d. add(String, String)
13. Cng vi lp MyOperator trong bi 9, khi ta gi lnh MyOperator.add(abcd, 100f), chng trnh s gi phng thc no?
a. add(int, int) b. add(float, float) c. add(double, double) d. add(String, String) e. Thng bo li
14. V s khc nhau gia lp v giao tip trong Java, nhng nhn nh no sau y l ng: a. Lp c k tha ti a t mt lp khc, giao tip c th k tha t nhiu giao tip khc. b. Lp c th k tha t giao tip, nhng giao tip khng k tha t cc lp. c. Thuc tnh ca lp c th c tnh cht bt k, thuc tnh ca giao tip phi l hng s v tnh. d. Phng thc ca lp c th c ci t chi tit, phng thc ca giao tip ch c khai bo dng khun mu. 15. Xt on chng trnh khai bo hai lp k tha nhau nh sau:
public class Person { public void show() { System.out.println(This is a person!); } }
v:
public class Employee extends Person { public void show(int x) { System.out.println(This is the employee + x); } }
a. This is a person!.
b. This is the employee 0. c. Thng bo li. d. Khng hin th g c. 16. Cng vi hai lp Person v Employee trong bi 13. on chng trnh sau s hin th thng bo no?
public class Demo2 { public static void main(String args[]) { Employee myEmployee = new Employee(); myEmployee.show(10); } }
a. This is a person!. b. This is the employee 10. c. Thng bo li. d. Khng hin th g c. 17. Vit mt chng trnh khai bo mt lp Rectangle. Lp ny c hai thuc tnh cc b l chiu rng v chiu di ca hnh. Vit hai phng thc xy dng tng minh cho lp ny: Mt khi to vi mt tham s kiu int, khi , chiu rng v chiu di c thit lp thnh gi tr tham s a vo (hnh vung). Mt khi to vi hai tham s kiu int tng ng l chiu rng v chiu di. 18. Vit mt giao tip khai bo cc php ton cng hai s, cng hai xu, cng xu v s. Sau vit mt lp ci t giao tip . 19. Vit mt lp tru tng v cc hnh phng, trong khai bo cc phng thc tnh chu vi v din tch ca hnh. Sau vit ba lp k tha t lp tru tng l: lp hnh vung, lp hnh ch nht v lp hnh trn. T thit lp cc thuc tnh cc b cn thit cho mi lp con v khai bo np chng hai phng thc ban u trong mi lp con. 20. Xt bi 3 ca chng 1 hy nu cc mi quan h ca cc lp trong h thng xut. 21. Xt lp FeatureFilm c cc phng thc nh sau:
public void update(Actor a, String title) public void update(Actor a, Actor b, String title) public void update(String topic, String title)
23. To lp FeatureFilm ca bi trc kim tra cc phng thc. To lp Actor rng nh sau:
public class Actor { }
C bao nhiu phng thc Fuel m bn lp nhn din? Hy lit k chng. 25. Xt cc lp FarmAnimal, Horse, v Cow:
public class FarmAnimal { private String name; public String getName() { return name; } public void setName(String n) { name = n; } public void makeSound() { System.out.println(getName() + " makes a sound ..."); } } public class Cow extends FarmAnimal { public void makeSound() { System.out.println(getName() + " goes Moooooo ..."); } } public class Horse extends FarmAnimal { public void setName(String n) { super.setName(n + " [a Horse]"); } }
on lnh sau s in ra cu g?
Cow c = new Cow(); Horse h = new Horse();
26. To cc kiu lit k sau Kiu lit k Weekday i din by ngy trong tun c kiu String.
Kiu lit k SolarSystem i din 9 hnh tinh trong h mt tri: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, v Pluto. h tr kiu lit k ny hy khai bo lp Planet c tnh cht sau: mt thuc tnh kiu String cha tn hnh tinh, mt phng thc xy dng c tn hnh tinh nh tham s v mt phng thc toString tr v chui "Planet: planetName".
Chng 6: Tp i tng
Chng 6.
Tp i tng
Ni dung chng ny nhm gii thiu: Thao tc trn mng Thuc tnh ca ba kiu tp hp thng thng : danh sch c th t, b, t in. Tp hp gip m hnh cc vn rt phc tp trong th gii thc K thut thit k cc kiu tp hp ring
Bin x lc ny cha xc nh. K tip ta dng ton t new triu hi phng thc xy dng ca kiu tp hp .
X = new CollectionType<elementType>();
V d:
ArrayList<Student> x; // ArrayList l mt trong cc kiu tp hp c sn x = new ArrayList<Student>();
Chng 6: Tp i tng
Khi mt phn t b xo t mt tp hp
L trng t ng b bt li Hnh 6.1 Hu ht tp hp t ng co li khi mt phn t b ly ra Mt t in (dictionary), hay mt bn (map), dng lu tng tham chiu i tng cng vi mt kho tm kim duy nht (unique lookup key) ca i tng sau kho ny c dng truy xut nhanh chng i tng ny. Kho thng c to ra da trn mt hay nhiu gi tr thuc tnh ca i tng.V d, m sinh vin l kho ca ca Student v gi tr ny l duy nht cho mi Student (hnh 6.2). Vi lp Java l t in nh HashMap, Hashtable, v TreeMap. Tham chiu
Kho
i tng
Hnh 6.2 Dng kho truy cp trc tip i tng trong tp hp t in Mt b (set) l mt tp hp khng sp th t, ngha rng khng th truy xut mt phn t ca b bng v tr ca n trong b k t khi n c thm vo. B khng cho php cc phn t ging nhau. V d nu ta to mt b tham chiu cc i tng Student v mt tham chiu ti mt i tng c trong b th mt
Chng 6: Tp i tng
tham chiu th hai ti cng i tng khng th c thm vo b; b s l i yu cu thm ny. Nhng i vi danh sch c th t hay t in ta c th lm iu ny nh hnh 6.3. Vi lp Java l b nh HashSet v TreeSet.
Hnh 6.3 Cc tp hp khng phi l b cho php nhiu tham chiu ti cng mt i tng.
6.3 Mng
Mng l kiu n gin ca danh sch c th t Khai bo mt bin tham chiu ti mt kiu tp hp:
datatype[] x;
v d:
int[] x; // khai bo bin y nh l mt tham chiu ti mt mng lu tr 20 i tng Student Student[] y = new Student[20];
hay
// khai bo mt mng cha 3 gi tr kiu double double[] data = new double[3]; // gn 4.7cho phn t u tin (th zero) data[0] = 4.7; // ly gi tr phn t cui cng double temp = data[2];
Chng 6: Tp i tng String[] names = new String[5]; names[0] = "Steve"; names[1] = "Jacquie"; names[2] = "Chloe"; names[3] = "Shylow"; names[4] = "Baby Grode";
hay
Student s = new Student("Fred"); studentBody[0] = s; // s dng li s s = new Student("Mary"); studentBody[1] = s;
Kt qu xut ra: Herbie Klem James Chp ni dung ca ArrayList vo mt mng Xt v d to mt ArrayList tn l students v thm vo 3 i tng Student
ArrayList<Student> students = new ArrayList<Student>(); students.add(new Student("Herbie")); students.add(new Student("Klemmie")); students.add(new Student("James"));
Cui cng ta kim tra ni dung 2 mng xem c ging nhau khng
System.out.println("The ArrayList contains the following students:"); for (Student s : students) System.out.println(s.getName()); System.out.println(); System.out.println("The array contains the following students:"); for (int i = 0; i < copyOfStudents.length; i++) System.out.println(copyOfStudents[i].getName());
Chng 6: Tp i tng
y l kt qu: The ArrayList contains the following students: Herbie Klemmie James The array contains the following students: Herbie Klemmie James
Chng 6: Tp i tng
// thm phn t cui link.addLast("c"); System.out.println("The contents of array is " + link); System.out.println("The size of an linkedlist is " + link.size()); // thm phn t th ba link.add(2, "j"); System.out.println("The contents of array is " + link); System.out.println("The size of an linkedlist is " + link.size()); // thm phn t th hai link.add(1, "t"); System.out.println("The contents of array is " + link); System.out.println("The size of an linkedlist is " + link.size()); // xo phn t th t link.remove(3); System.out.println("The contents of array is " + link); System.out.println("The size of an linkedlist is " + link.size()); } }
y l kt qu: The contents of array is [a, b, 10] The size of an linkedlist is 3 The contents of array is[20, a, b, 10] The size of an linkedlist is 4 The contents of array is [20, a, b, 10, c] The size of an linkedlist is 5 The contents of array is [20, a, j, b, 10, c] The size of an linkedlist is 6 The contents of array is [20, t, a, j, b, 10, c] The size of an linkedlist is 7 The contents of array is [20, t, a, b, 10, c]
Chng 6: Tp i tng
6.4.2 HashMap
L kiu tp hp t in, HashMap cho php truy xut trc tip ti mt i tng bng kho duy nht ca n. C hai kho v i tng c th thuc bt c kiu no. Xt chng trnh HashMapExample sau y:
package chuong6; public class Student { private String idNo; private String name; public Student(String i, String n) { idNo = i; name = n; } public String getName() { return name; } public String getIdNo() { return idNo; } } import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { /* khi to tp hp students c kiu HashMap vi String l kiu kho v Student l kiu gi tr */ HashMap<String, Student> students = new HashMap<String, Student>(); // to 3 Student Student s1 = new Student("12345-12", "Fred"); Student s2 = new Student("98765-00", "Barney"); Student s3 = new Student("71024-91", "Wilma"); // chn 3 Student vo students, dng idNo nh kho students.put(s1.getIdNo(), s1);
Chng 6: Tp i tng students.put(s2.getIdNo(), s2); students.put(s3.getIdNo(), s3); // ly Student theo mt ID c bit. String id = "98765-00"; System.out.println("Let's try to retrieve a Student with ID = " + id); Student x = students.get(id); // nu gi tr tr v v bi get khc null th ta tm thy mt Student ... if (x != null) System.out.println("Found! Name = " + x.getName()); else // khng c Student no nh vy System.out.println("Invalid ID: " + id); System.out.println(); // th mt ID khng hp l id = "00000-00"; System.out.println("Let's try to retrieve a Student with ID = " + id); x = students.get(id); if (x != null) System.out.println("Found! Name = " + x.getName()); else System.out.println("Invalid ID: " + id); System.out.println(); System.out.println("Here are all of the students:"); System.out.println(); // duyt HashMap ny x l tt c Student. for (Student s : students.values()) { System.out.println("ID: " + s.getIdNo()); System.out.println("Name: " + s.getName()); System.out.println(); } } }
Chng 6: Tp i tng
Kt qu xut ra: Let's try to retrieve a Student with ID = 98765-00 Found! Name = Barney Let's try to retrieve a Student with ID = 00000-00 Invalid ID: 00000-00 Here are all of the students: ID: 12345-12 Name: Fred ID: 98765-00 Name: Barney ID: 71024-91 Name: Wilma
6.4.3 TreeMap
L kiu tp hp t in khc trong Java. TreeMap tng t nh HashMap, vi mt im khc bit sau: Khi ta duyt qua TreeMap, i tng c truy xut ti theo th t tng dn. Khi ta duyt qua HashMap, khng g m bo rng cc phn t c truy xut theo th t xc nh trc. Xt chng trnh TreeHash sau y:
package chuong6; import java.util.*; public class TreeHash { public static void main(String[] args) { /* khi to 2 tp hp, mt HashMap v mt TreeMap vi String l kiu kho v l kiu i tng */ HashMap<String, String> h = new HashMap<String, String>(); TreeMap<String, String> t = new TreeMap<String, String>(); // chn vi chui vo HashMap, chui chn va l kho va l gi tr h.put("FISH", "FISH"); h.put("DOG", "DOG"); h.put("CAT", "CAT");
Chng 6: Tp i tng h.put("ZEBRA", "ZEBRA"); h.put("RAT", "RAT"); // chn chui ging nh vy theo cng th t vo TreeMap t.put("FISH", "FISH"); t.put("DOG", "DOG"); t.put("CAT", "CAT"); t.put("ZEBRA", "ZEBRA"); t.put("RAT", "RAT"); // duyt qua HashMap ly tt c chui ... System.out.println("Retrieving from the HashMap:"); for (String s : h.values()) System.out.println(s); System.out.println(); // ... v ri duyt qua TreeMap System.out.println("Retrieving from the TreeMap:"); for (String s : t.values()) System.out.println(s); } }
Kt qu xut ra: Retrieving from the HashMap: ZEBRA CAT FISH DOG RAT Retrieving from the TreeMap: CAT DOG FISH RAT
Chng 6: Tp i tng
ZEBRA
6.4.4 HashSet
y l kiu b dng bng bm (hash table) lu tr. Bng bm l CTDL lu thng tin bng vic nh x kho ca tng phn t d liu vo mt v tr hay ch mc ca mng. Chng trnh NamsSet sau y minh ho HashSet:
package chuong6; import java.util.*; public class NamesSet { public static void main(String args[]) { HashSet objSet = new HashSet(); // thm 5 phn t vo bng bm objSet.add("Patrick"); objSet.add("Bill"); objSet.add("Gene"); objSet.add("Daniel"); objSet.add("Claire"); System.out.println("Size of the set : " + objSet.size()); // in cc phn t ca bng bm System.out.println("Contents of the set :"); System.out.println(objSet); System.out.println("\nContents of the set after adding 2 elements :"); objSet.add("Rubio"); objSet.add("Yang Sun"); System.out.println(objSet); System.out.println("Size of the set : " + objSet.size()); } }
Chng 6: Tp i tng
Kt qu xut ra: Contents of the set : [Bill, Gene, Claire, Patrick, Daniel] Size of the set : 5 Contents of the set after adding 2 elements : [Bill, Gene, Claire, Patrick, Yang Sun, Daniel, Rubio] Size of the set : 7
6.4.5 TreeSet
Kiu b dng mt cy (tree) lu d liu. Trong cy cc i tng c sp xp theo th t tng dn v vy truy xut i tng nhanh hn. Chng trnh TreeDemo sau y minh ho TreeSet:
package chuong6; import java.util.*; class TreeDemo { public static void main(String[] args) { TreeSet objTree = new TreeSet(); // thm cc phn t vo cy objTree.add(beta); objTree.add(gama); objTree.add(tera); objTree.add(alpha); objTree.add(penta); System.out.println(Automatically sorted contents of the Tree : \n + objTree); } }
Kt qu xut ra: Automatically sorted contents of the Tree : [alpha, beta, gama, penta, tera]
Chng 6: Tp i tng
6.5 To kiu tp hp
6.5.1 M rng mt lp tp hp c sn
minh ho chng ta m rng lp ArrayList to mt lp tp hp MyIntCollection. Ngoi cc c tnh ArrayList, MyIntCollection c th lu gi gi tr int nh nht v ln nht trong tp hp ca n. Lp MyIntCollection minh ho iu ny.
import java.util.ArrayList; public class MyIntCollection extends ArrayList<Integer> { /* Tha hng tt c thuc tnh v phng thc ca ArrayList v c thm 2 thuc tnh lu gi gi tr int nh nht v ln nht trong tp hp v thuc tnh tng s phn t */ private int smallestInt; private int largestInt; private int total; // Thay th phng thc xy dng public MyIntCollection() { super(); // khi to total. total = 0; } // Ghi phng thc add() t ArrayList. public boolean add(int i) { // Nu ln u thm phn t th phi gn i cho smallest v largest if (this.isEmpty()) { smallestInt = i; largestInt = i; } else { // cc ln thm sau phi xc nh li smallest v largest if (i < smallestInt) smallestInt = i; if (i > largestInt) largestInt = i; } // tng total cho vic thm phn t total+=i;
Chng 6: Tp i tng /* Chn gi tr i vo tp hp, ta khng cn bit chn nh th no do ta gi phng thc add ca ArrayList */ return super.add(i); } public int getSmallestInt() { return smallestInt; } public int getLargestInt() { return largestInt; } public double getAverage() { // p kiu int thnh double trnh vic thu hp gi tr khi chia return ((double) total) / ((double) this.size()); } }
Chng 6: Tp i tng /* v khng tha k phng thc size() na, ta to mt phng thc size() mi */ public int size() { // U NHIM! return numbers.size(); } /* v khng tha k phng thc add() na, ta khng th ghi n, ta to mt phng thc add() mi */ public boolean add(int i) { // U NHIM cho tp hp c bao bc if (numbers.isEmpty()) { smallestInt = i; largestInt = i; } else { if (i < smallestInt) smallestInt = i; if (i > largestInt) largestInt = i; } total+=i; // U NHIM cho tp hp c bao bc thm phn t return numbers.add(i); } public int getSmallestInt() { return smallestInt; } public int getLargestInt() { return largestInt; } public double getAverage() { return ((double) total)/this.size()); } }
Chng 6: Tp i tng public class Course { private ArrayList<Student> enrolledStudents; /* phng thc tr v mt tham chiu ti ton b tp hp cha ton b Students c ng k Course */ public boolean enroll( Student s) { // nu s tho iu kin ng k mn hc ny enrolledStudents.add( s); } public ArrayList<Student> getRegisteredStudents() { return enrolledStudents; } }
TNG KT CHNG 6
Trong chng ny cc vn sau c trnh by: Tp hp l cc kiu i tng c bit dng tham chiu ti cc i tng khc. Hu ht cc ngn ng lp trnh hng i tng u h tr 3 kiu tp hp: o Danh sch c th t o B
Chng 6: Tp i tng
o T in Mng l kiu tp hp n gin m c vi hn ch, nhng Java cng c cc kiu tp hp nhiu tnh nng hn nh ArrayList, HashMap, TreeMap, C th to cc kiu tp hp ring bit bng cch m rng cc lp tp hp c sn hoc to mt lp c thuc tnh l tp hp nh ngha trc. Phng thc c th tr v l mt tp hp.
BI TP
1. Tru tng ho mt vn nh sau: mt quyn sch l tp hp cc chng, chng l tp hp cc trang. Phc ho cc lp Book, Chapter, v Page : To bt k thuc tnh no m ta ngh l cn thit, hy tn dng tp hp nh l thuc tnh ca lp To cc phng thc cho lp Chapter cho vic thm trang v xc nh mt chng c bao nhiu trang. To cc phng thc cho lp Book cho vic thm chng v xc nh quyn sch c bao nhiu chng, v s trang cho quyn sch (gi s dng s u nhim-delegation), v xut ra bng ni dung ca sch. 2. Vit mt chng trnh minh ho cc lp va to. 3. Kiu tp hp no danh sch c th t, danh sch c th t c sp xp, b, v t inc th dng tru tng ho cc vn sau ? Hy gii thch. Danh mc thit b my tnh Cc l bi trn tay ngi chi Cc cuc gi ti b phn h tr k thut c lu li 4. H thng sinh vin ng k mn hc cn loi tp hp g? 5. H thng cn theo di toa thuc bnh nhn cn loi tp hp g? 6. Loi tp hp no cn thit cho bi tp 3 chng 1 7. Thay i lp MyIntCollection thm phng thc printSortedContents nhm in ni dung ca tp hp trong mt th t c sp xp.
Chng 7: X l ngoi l
Chng 7.
X l ngoi l
Ni dung chng ny nhm gii thiu: Ngoi l (exception) l g ? M t c ch x l ngoi l v bt ngoi l nh th no qua cch s dng cc khi try, catch v finally Vic bt ngoi l din ra nh th no Hiu c phn cp ngoi l trong Java Cc vn lu thm khi x l ngoi l
Chng 7: X l ngoi l
/* nhng dng ny gy li trong thi gian chy v ta gi phng thc ca i tng khng tn ti. */ s2.setName(Mary); } }
on lnh trn s bin dch m khng c li, nhng nu chng ta thc hin chng trnh ny, my o Java s bo co cc li chy thi gian sau y: Exception in thread main java.lang.NullPointerException at Problem.main(Problem.java:22) Chng ta hm li thi gian chy (c th phc hi) trong Java l trng hp ngoi l, v my o Java bo co rng mt li thi gian chy pht sinh hnh ng nm ra mt ngoi l (throwing an exception). Vi v d trn my o Java nm NullPointerException trn dng 22 ca lp Problem:
s2.setName(Mary); // dng 22
Mt NullPointerException pht sinh bt c khi no chng ta c gng gi mt phng thc trn mt tham kho i tng (nh s2, trong v d trn) c gi tr null hay bt c khi no chng ta c gng ni chuyn vi mt i tng khng tn ti. My o Java
M bytecode c np vo my o
Hnh 7.1 Khi my o Java nm mt ngoi l, nh pht ra mt pho thng bo cho ng dng mt vn pht sinh. Khi my o Java nm mt ngoi l, nh th my o bn ra mt pho hiu thng bo cho mt ng dng bit c mt ci g sai, cung cp cho ng dng mt c hi phc hi v chy tip (xem hnh 7.1). Thng qua k thut x l cc trng hp
Chng 7: X l ngoi l
ngoi l, chng ta c th thit k cc ng dng n c th d on v phc hi t trng hp ngoi l trong thi gian chy.
7.2 C ch x l ngoi l
7.2.1 Khi try
Ta dng khi lnh try bao cc lnh c th to li. iu ny gip vic bt li thun tin v tp trung hn. Chng trnh trn c sa cha nh sau:
package chuong7; public class Problem2 { public static void main(String[] args) { Student s1 = null; Student s2 = null; s1 = new Student(); // thm lnh try bao bc khi lnh gy li try { s1.setName("Fred"); s2.setName("Mary"); } //
Trc khi bin dch, khi try phi c theo sau t nht mt khi catch hay khi finally.
Chng 7: X l ngoi l } //
C nhiu loi ngoi l khc nhau c xy dng trong cc ngn ng Java, mi mt loi c nh ngha bi mt lp c nh ngha trc v tt c chng bt ngun t mt lp gc l Exception. Ty thuc vo loi trng hp ngoi l chng ta mun bt, chng ta c th import gi th vin; tuy nhin NullPointerException c trong gi java.lang. Chng trnh trn thm khi lnh catch nh sau:
package chuong7; public class Problem3 { public static void main(String[] args) { Student s1 = null; Student s2 = null; //to i tng v cho s1 tham chiu ti nhng qun lm iu ny cho s2 s1 = new Student(); // thm lnh try bao bc khi lnh gy li try { s1.setName("Fred"); s2.setName("Mary"); } /* kt thc khi try bt u cc khi catch (3 khi) */ catch (ArithmeticException e) { // m phc hi cho mt ngoi l kiu ArithmeticException ... } catch (NullPointerException e2) { // m phc hi cho mt ngoi l kiu NullPointerException ... System.out.println("Qun khi to tt c sinh vin!"); } catch (ArrayIndexOutOfBoundsException e3) { /* m phc hi cho mt ngoi l kiu ArrayIndexOutOfBoundsException */ } } }
Lu rng on m trong khi lnh try ny khng nm ArithmeticExceptions hay ArrayIndexOutOfBoundsExceptions; chng c thm vo cho bao gm cho mc ch minh ho.
Chng 7: X l ngoi l
i vi vic x l ngoi l, c hai con ng thc hin lnh. Nu l cc lnh trong try khng c li th tt c cc khi catch c b qua, v thc hin chng trnh vn tip tc ngay sau khi catch cui cng nh minh ha trong hnh 7.2.
Hnh 7.2 Nu khng c ngoi l c nm ra trong khi try, tt c cc khi catch c b qua. Nu mt ngoi l c nm ra bi my o Java trong khi thc hin khi lnh try, vic thc hin khi try phi chm dt ngay lp tc ngay dng ngoi l xy ra. My o Java sau xem xt cc cc lnh catch theo th t t trn xung di tm kim mt kiu ngoi l ging nh loi ngoi l c nm. Nu tm thy, my o Java thc thi khi catch ny; trong trng hp c nhiu lnh catch so khp , ch catch u tin c thc hin. Sau , vic thc hin tip tc sau lnh catch cui cng. iu ny c minh ha trong hnh 7.3. Nu khng c lnh catch no c tm thy, ngoi l c cho l cn t do, v trong trng hp ca v d trc thng bo li: Exception in thread "main" java.lang.NullPointerException at Problem.main(Problem.java: ...)
Chng 7: X l ngoi l
Hnh 7.3 Nu mt ngoi l pht sinh, khi catch u tin chn bt, nu c, c thc thi, v phn cn li c b qua. Xt chng trnh Problem4 sau:
package chuong7; public class Problem4 { public static void main(String[] args) { Student s1 = null; Student s2 = null; s1 = new Student(); //... System.out.println("We're about to enter the try block ..."); try { System.out.println("We're about to call s1.setName(...)"); s1.setName("Fred"); System.out.println("We're about to call s2.setName(...)"); s2.setName("Mary"); System.out.println("We've reached the end of the try block ..."); } catch (ArithmeticException e) { System.out.println("Executing the first catch block ..."); } catch (NullPointerException e2) {
Chng 7: X l ngoi l System.out.println("Executing the second catch block ..."); } catch (ArrayIndexOutOfBoundsException e3) { System.out.println("Executing the third catch block ..."); } System.out.println("We're past the last catch block ..."); } }
Chng trnh xut ra mn hnh: We're about to enter the try block ... We're about to call s1.setName(...) We're about to call s2.setName(...) Executing the second catch block ... We're past the last catch block ...
Chng 7: X l ngoi l } catch (NullPointerException e2) { System.out.println("Executing the second catch block ..."); } catch (ArrayIndexOutOfBoundsException e3) { System.out.println("Executing the third catch block ..."); } finally { System.out.println("Executing the finally block ..."); } System.out.println("We're past the last catch block ..."); } }
Chng trnh xut ra mn hnh: We're about to enter the try block ... We're about to call s1.setName(...) We're about to call s2.setName(...) Executing the second catch block ... Executing the finally block ... We're past the last catch block ... Mt bin th cui cng ca chng trnh Problemx l n nm ra NullPointerException, nhng khng c lnh catch no thch hp:
package chuong7; public class Problem6 { public static void main(String[] args) { Student s1 = null; Student s2 = null; s1 = new Student(); System.out.println("We're about to enter the try block ..."); try { System.out.println("We're about to call s1.setName(...)"); s1.setName("Fred"); System.out.println("We're about to call s2.setName(...)"); s2.setName("Mary"); System.out.println("We've reached the end of the try block ...");
Chng 7: X l ngoi l } // khng bt NullPointerException. catch (ArithmeticException e) { System.out.println("Executing first catch block ..."); } catch (ArrayIndexOutOfBoundsException e2) { System.out.println("Executing second catch block ..."); } finally { System.out.println("Executing finally block ..."); } System.out.println("We're past the last catch block ..."); } }
Chng trnh xut ra mn hnh: We're about to enter the try block ... We're about to call s1.setName(...) We're about to call s2.setName(...) Executing the finally block ... Nhn xt rng chng trnh khng thc hin cu lnh: System.out.println("We're past the last catch block ..."); Bi v ngoi l khng b bt gy ra khi lnh m xy ra ngoi l - trong trng hp ny l phng thc main kt thc bt bnh thng. Nh vy d trng hp no xy ra trong khi lnh try/catch, khi finally nu c lun thc hin. Ta c th b qua khi catch nu c khi finally:
// Cc khi catch khng cn thit nu c khi finally. try { ... } finally { ... }
7.3 Bt cc ngoi l
Nu phng thc c mt ngoi l pht sinh nhng khng nm bt c ngoi l th ni gi (client code) phng thc c c hi bt ngoi l . Xem xt 3 lp sau:
public class MainProgram { public static void main(String[] args) { Student s = new Student();
Chng 7: X l ngoi l s.methodX(); } } public class Student { // b qua chi tit. public void methodX() { Professor p = new Professor(); p.methodY(); } } public class Professor { // b qua chi tit. public void methodY() { // b qua chi tit. } }
Khi my o Java thc hin MainProgram, phng thc main gi s.methodX(), m n s gi p.methodY(); iu ny to mt chng (stack) lc chy chng trnh nh hnh 7.4. Chng gi hot ng theo c ch LIFO. V vy, khi methodY kt thc thc hin, quyn kim sot thc hin tr li cho methodX, methodY c y ra nh hnh 7.5. By gi chng ta hy gi nh rng NullPointerException c nm trong khi thc hin methodY. Nu c khi lnh try/catch thch hp bt ngoi l ny trong methodY th NullPointerException c x l nh sau:
public class Professor { // b qua chi tit public void methodY() { try { ... } catch (NullPointerException e) { ... } } }
Chng 7: X l ngoi l
Hnh 7.4 My o Java theo di vic th t cc phng thc c gi bng cch to chng gi (call stack).
Hnh 7.5 Khi mt phng thc chm dt, n b ly ra khi chng. Sau c Student v MainProgram khng nhn bit nhng ngoi l c nm t Proffessor. T gc nhn ca chng gi, nhn bit ca cc ngoi l c cha trong phm vi mc hin hnh ca chng, nh minh ha trong hnh 7.6
Hnh 7.6 Khi lnh try/catch trong trong phng thc methodY nhn bit ngoi l trong mc hin hnh ca chng gi. Gi s methodY khng bt ngoi l NullPointerExceptions:
public class Professor { // b qua chi tit. public void methodY() { // Ngoi l NullPointerException c nm y nhng khng b bt // } }
Chng 7: X l ngoi l
Nu NullPointerException c nm trong khi thc hin phin bn ny ca methodY, n s i xung mt mc ca chng gi ti methodX ca lp sinh vin, l ni gi p.methodY(). Nu m methodX ca lp Student c khi try/catch thch hp nh sau:
public class Student { // b qua chi tit. public void methodX() { Professor p = new Professor(); // X l ngoi l y. try { p.methodY(); } catch (NullPointerException e) { ... } } }
Th x l ngoi l trong methodX s x l, v MainProgram khng bit rng c mt ngoi l c nm ra. iu ny c minh ha trong hnh 7.7
Chng 7: X l ngoi l //----------------------------public class MainProgram { public static void main(String[] args) { Student s = new Student(); // x l ngoi l y. try { s.methodX(); } catch (NullPointerException e) { ... } } }
Trong trng hp ny, ngoi l NullPointerException c nm trong methodY s thng qua chng gi chuyn ti phng thc main, ni c x l ngoi l nh hnh 7.8. Trong trng hp ny, ngi s dng ng dng ny l khng bit rng c mt ngoi l xy ra.
Hnh 7.8 NullPointerException thng qua chng gi c chuyn ti phng thc main. Mt minh ho cui cng, chng ta hy gi nh rng ngay c phng thc main b qua x l ngoi l. Nu mt NullPointerException pht sinh trong methodY, chng ta nhn thy du vt chng (stack trace) xut hin trong ca s lnh: java PSExample Exception in thread "main" java.lang.NullPointerException at Professor.methodY(Professor.java: ...) at Student.methodX(Student.java: ...) at MainProgram.main(MainProgram.java: ...) T mi trng ca chng gi, tnh hung ny c th hin trong hnh 7.9 Bt c khi no du vt chng pht sinh t mt ngoi l, ni u tin chng ta nn xem xt chn on v sa cha vn l dng m c bo co u tin trong du vt chng. Nu kim tra dng ny, ta khng th hiu ti sao ngoi l pht sinh, ta nhn
Chng 7: X l ngoi l
sang mc th hai trong du vt chng, sau th ba, v nh vy, cho n khi chng ta nhn xa trong lch s cuc gi xc nh l do ti sao li pht sinh.
Hnh 7.9 Nu ng dng b qua x l ngoi l, my o Java chm dt ng dng v bo co ngoi l ti ca ca s dng lnh cho ngi s dng quan st.
Chng 7: X l ngoi l
Hnh 7.10 Lp java.lang.Exception c nhiu lp con ng i tha k ny c minh ho trong hnh 7.11
Hnh 7.11 Cy tha k ca kiu ngoi l java.sql.DataTruncation on m sau y trnh by mt cch chng ta vit try /catch x l DataTruncation (v cc loi khc lin quan n CSDL). Lu rng chng ta cn phi bao gm ch th
import java.sql.*;
Chng 7: X l ngoi l // try { // vit d liu vo CSDL } catch (DataTruncation e1) { // bt kiu ngoi l c th nht } catch (SQLWarning e2) { //ri t c th hn ... } catch (SQLException e3) { // tng qut hn... }
Bng sau y lit k mt s ngoi l thng gp: Ngoi l RuntimeException ArthmeticException IllegalAccessException IllegalArgumentException Lp cha ca th t phn cp ngoi l Lp c s cho nhiu ngoi l java.lang Trng thi li v s, v d nh chia cho 0 Lp khng th truy cp Phng thc nhn mt i s khng hp l
ArrayIndexOutOfBoundsExeption Kch thc ca mng ln hn 0 hay ln hn kch thc tht s ca mng NullPointerException SecurityException ClassNotFoundException NumberFormatException AWTException IOException FileNotFoundException EOFException NoSuchMethodException InterruptedException SQLException Khi mun truy cp i tng null Vic thit lp c ch bo mt khng c hot ng Khng th np lp yu cu Vic chuyn i khng thnh cng t chui sang s thc Ngoi l v AWT Lp cha ca cc ngoi l I/O Khng th nh v tp tin Kt thc mt tp tin Phng thc yu cu khng tn ti Khi mt lung b ngt Khi giao tip CSDL c li Bng 7.1 Danh sch mt s ngoi l
Chng 7: X l ngoi l
y khng phi l cch lm tt v c th cc li do ngoi l sinh ra s tim n cc tc hi m ta khng lng ht khi tip tc ng dng. Ta c th bt ngoi l khi c cch x l ngoi l ring, v d:
public class Example { public static void main(String[] args) { try { // } catch (Exception e) { /* gi phng thc tnh ca lp MyExceptionHandler do ngi vit ng dng to */ MyExceptionHandler.handleException(e); } } }
Chng 7: X l ngoi l
Trnh bin dch s bo cc li sau: Unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown Trong trng hp ny, ta c hai cch khc phc: 1. Bao khi truy cp tp tin trong try v c catch bt ngoi l v x l:
import java.io.FileNotFoundException; public class FileIOExample { public static void main(String[] args) { try { // m gi m v c tp tin; while (cha ti cui tp tin) { c dng k tip t tp tin; // ... } } catch (FileNotFoundException e) { ...} } }
Chng 7: X l ngoi l
Kt qu xut ra: Error opening file Foo.dat (The system cannot find the file specified) Phng thc printStackTrace() c th s dng xut ra du vt chng trong ca s dng lnh (nh rng du vt chng ch xy ra t ng nu ta khng x l ngoi l):
try { // m tp tin Foo.dat khng tn ti... } catch (FileNotFoundException e) { e.printStackTrace(); }
Chng 7: X l ngoi l throw new MissingValueException(this, "A student's name cannot be blank"); else name = n; } // ... }
Trnh bin dch pht ra li ti lnh gi phng thc setName ca i tng s do ta bao gm lnh throws MissingValueException cho phng thc ny Unreported exception MissingValueException; must be caught or declared to be thrown s.setName(name); Trnh bin dch Java phi bt kiu ngoi l ny trong on m gi! Ngha l ta phi t setName trong khi try, v theo sau l khi catch thch hp:
public class Example { public static void main(String[] args) { // m gi. String name = c gi tr t GUI; Student s = new Student(); try { s.setName(name); } catch (MissingValueException e) { System.out.println(e.getMessage()); System.out.println("ID of affected student: " + e.getStudent().getSsn());
Chng 7: X l ngoi l } //
Trong khi catch, ta li dng va phng thc tha k getMessage v phng thc getStudent ca lp MissingvalueException xut ra kt qu nh sau: A student's name cannot be blank ID of affected student: 123-45-6789
Chng 7: X l ngoi l int num = Integer.parseInt(args[0]); System.out.println(args[0].length()); } catch (NumberFormatException e) { System.out.println("\nEnter only numbers!"); } } }
TNG KT CHNG 7
Trong chng ny cc vn sau c trnh by: Bt c khi no mt li xut hin trong khi thi hnh chng trnh, ngha l mt ngoi l xut hin. Mi ngoi l pht sinh ra phi b bt gi, nu khng ng dng s b ngt. Java s dng cc khi try v catch x l cc ngoi l. Cc cu lnh trong khi try chn ngoi l cn khi catch x l ngoi l. Cc khi cha nhiu catch c th c s dng x l cc kiu ngoi l khc nhau. Khi finally khai bo cc cu lnh lun c thc hin d ngoi l c xy ra hay khng. T kho throws lit k cc ngoi l m phng thc chn. T kho throw ch ra mt ngoi l va xut hin. C ch x l ngoi l v bt ngoi l qua chng gi. Ngoi l do ngi dng nh ngha. Nm nhiu kiu ngoi l cho mt phng thc nh th no.
Chng 7: X l ngoi l
BI TP
1. Vit chng trnh ArraySize to mng 5 s. Vit lnh truy xut phn t th 6;
khi ngi dng nhp vo gi tr khng phi l s. Hy bt ngoi l thch hp v in thng bo li.
Chng 8: X l vo/ra
Chng 8.
X l vo/ra
Ni dung chng ny nhm gii thiu: cp n cc khi nim v lung v cc kiu lung Vic qut d liu vo qua scanner v t qui cch d liu vo v xut ra bng formatting. M t vo ra trong ch dng lnh Lm vic vi CSDL qua JDBC
Hnh 8.1 c d liu vo chng trnh. Lung x l tt c d liu t c bn n i tng. Ngun d liu (data source) v ni n ca d liu ca hai hnh trn c th l bt c ci g gi, pht ra, hay x l d liu. C th l tp tin, chng trnh khc, thit b ngoi vi, mng, hay network socket. Lp java.lang.System nh ngha cc lung nhp v xut chun. chng l cc lp chnh ca cc lung byte m Java cung cp. Ta cng s dng cc lung xut xut d liu v hin th kt qu trn mn hnh. Lung vo ra bao gm: Lp System.out: Lung xut chun dng hin th kt qu trn mn hnh. Lp System.in: Lung nhp chun thng n t bn phm v c dng c cc k t d liu. Lp System.err: y l lung li chun.
Chng 8: X l vo/ra
Cc lp InputStream v OutputStream cung cp nhiu kh nng vo ra khc nhau. C hai lp ny c cc lp con thc hin vo ra thng qua cc vng m b nh, cc tp tin v ng dn. Cc lp con ca lp InputStream thc hin u vo, trong khi cc lp con ca lp OutputStream thc hin kt xut.
Hnh 8.2 Vit d liu t chng trnh. Trong phn k tip ta s dng lung c bn nht , lung byte minh ho cc thao tc thng thng. Ta s dng tp tin xanadu.txt c ni dung nh sau:
In Xanadu did Kubla Khan A stately pleasure-dome decree: Where Alph, the sacred river, ran Through caverns measureless to man Down to a sunless sea.
Chng 8: X l vo/ra int c; // c n khi cui tp tin while ((c = in.read()) != -1) out.write(c); } finally { if (in != null) in.close(); if (out != null) out.close(); } } }
read(b)
S nguyn d
write(b)
n Lung ra
Hnh 8.3 Lung byte vo ra n gin Nhn xt rng read() tr v gi tr int. Nu lung vo l chui cc byte ti sao read() khng tr v byte? S dng int nh l kiu tr v cho php read() dng -1 bo hiu n cui lung. Ch : o Lun ng lung khi khng cn dng na.
byte ch dng cho vic vo ra c bn nht. Nhng ti sao ta dng lung byte cho minh ho u tin. L do rng cc kiu lung khc c xy dng trn lung byte.
8.1.3 Lung k t
Java lu tr k t theo m Unicode. Lung vo ra k t ng dch bng m ny ti/t b k t a phng (local character set). Tt c lp lung k t c dn xut t Reader v Writer. Nh lung byte, ta c lung k t chuyn dng cho vo ra tp tin: FileReader and FileWriter. Chng trnh CopyCharacters minh ho cc lp ny.
package chuong8; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyCharacters { public static void main(String[] args) throws IOException { FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader("xanadu.txt"); outputStream = new FileWriter("characteroutput.txt"); int c; while ((c = inputStream.read()) != -1) outputStream.write(c); } finally { if (inputStream != null) inputStream.close(); if (outputStream != null) outputStream.close(); } } }
Nhn xt rng trong CopyCharacters bin c cha gi tr k t 16 bit; cn CopyBytes bin c cha gi tr k t 8 bit.
Chng 8: X l vo/ra
Lung k t thng bao ly lung byte. Lung k t dng lung byte thc hin vo ra cp vt l, cn cng vic cn li ca n l x l vic dch gia k t v byte. V d FileReader dng FileInputStream, trong khi FileWriter dng FileOutputStream.
8.1.4 Lung b m
Hu ht cc v d m ta xt n gi u dng vo ra khng b m (unbuffered I/O). Ngha rng mi ln c hoc vit u c x l trc tip bi h iu hnh. iu ny khng kinh t v mi yu cu nh vy thng to nn truy xut a, hoc vi hnh ng tng i tn km chi ph. khc phc, Java gii thiu lung vo ra dng b m. Lung vo dng b m c d liu t mt vng b nh, b m, vic lp y b m ch thc hin khi b m rng ( c c ht). Tng t lung xut dng b m ghi d liu vo b m. Vic ghi ti ni cha thc s ch thc hin khi b m y. Khi x l dng d liu c du kt thc dng, thng thng "\r\n", hoc "\r", hoc "\n" th ta dng vo ra hng dng (line-oriented I/O). lm iu ny, ta dng BufferedReader v PrintWriter. Chng trnh c th chuyn lung khng b m thnh lung c b m bng cch dng bao bc nh trong CopyLines.
package chuong8; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.IOException; public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream = new PrintWriter(new FileWriter("characteroutput.txt")); String l; while ((l = inputStream.readLine()) != null) outputStream.println(l); } finally {
readLine tr v mt dng vn bn, println chn du kt thc dng ph hp vi h iu hnh hin thi. C th du kt thc dng chn vo khc vi du kt thc dng c dng cho tp tin nhp vo. C bn lung vo ra dng b m bao bc lung khng b m: BufferedInputStream v BufferedOutputStream to lung byte c b m, BufferedReader v BufferedWriter to lung k t c b m. i khi ta cn ghi b m ra ni cha ngay lp tc m khng cn ch n y. Khi vic xut b m (flush the buffer) c thc hin bng phng thc flush. C hai lung vo ra dng b m trc tip (khng cn bao bc) x l trn mng: Lp ByteArrayInputStream : to lung u vo t b nh m. N l mng cc byte. Lp ByteArrayOutputStream : to ra lung xut trn mt mng cc byte. Lp ny cung cp cc phng thc toByteArrray() v toString(). Chng c dng chuyn i lung thnh mt mng byte hay i tng chui. Lp ny cung cp hai phng thc xy dng. Mt chp nhn mt i s s nguyn dng n nh mng byte kt xut theo mt kch c ban u. v th hai khng chp nhn i s no, v thit lp m kt xut vi kch thc mc nh. Lp ny cung cp vi phng thc b sung, khng c khai bo trong OutputStream: reset() : thit lp li kt xut vng m nhm cho php tin trnh ghi khi ng li ti u vng m. size() : tr v s byte hin ti c ghi ti vng m. writeto() :ghi ni dung ca vng m kt xut ra lung xut ch nh. thc hin, n chp nhn mt i tng ca lp OutputStream lm i s. Chng trnh ByteExam minh ho cho cch s dng hai lp trn:
package chuong8; import java.lang.System; import java.io.*;
Chng 8: X l vo/ra public class ByteExam { public static void main(String args[]) throws IOException { ByteArrayOutputStream os =new ByteArrayOutputStream(); String s ="Welcome to Byte Array Input Output classes"; // Vit tng k t ca chui s vo os for(int i=0; i<s.length( );i++) os.write(s.charAt(i)) ; System.out.println("Output Stream is:" + os); System.out.println("Size of output stream is:"+ os.size()); ByteArrayInputStream in; in = new ByteArraylnputStream(os.toByteArray()); // s byte cn li c th c c t lung nhp ByteArraylnputStream int ib = in.available(); System.out.println("Input Stream has :" + ib + "available bytes"); byte ibuf[] = new byte[ib]; int byrd = in.read(ibuf, 0, ib); System.out.println("Number of Bytes read are :" + byrd); System.out.println("They are: " + new String(ibuf)); } }
Kt qu chng trnh nh sau: Output Stream is:Welcome to Byte Array Input Outputclasses Size of output stream is:41 Input Stream has : 41 available bytes Number of Bytes read are :41 They are: Welcome to Byte Array Input Output classes
Chng 8: X l vo/ra
Thng thng mt Scanner dng khong trng phn bit cc t (k t khong trng bao gm khong trng, tab, du kt thc dng). xem scanning lm vic nh th no, ta hy xem chng trnh ScanXan c tng k t trong xanadu.txt v in chng theo tng dng.
import java.io.*; import java.util.Scanner; public class ScanXan { public static void main(String[] args) throws IOException { Scanner s = null; try { s = new Scanner(new BufferedReader(new FileReader("xanadu.txt"))); while (s.hasNext()) System.out.println(s.next()); } finally { if (s != null) s.close(); } } }
Nhn xt rng mc du scanner khng l lung d liu, ta cng cn ng n. Kt qu ca chng trnh: In Xanadu did Kubla Khan A stately pleasure-dome ... ScanXan xem tt c t nhp vo c kiu String. Ngoi ra Scanner cng h tr cc kiu d liu c bn (tr char), cng nh BigInteger v BigDecimal. Gi tr kiu s dng rt
Chng 8: X l vo/ra
nhiu du phn cch. Thng dng nh kiu bn a ca M (US locale), Scanner c chnh xc chui "32,767" nh l s nguyn. Chng trnh ScanSum c mt danh sch cc gi tr double v tnh tng chng:
package chuong8; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.Scanner; import java.util.Locale; public class ScanSum { public static void main(String[] args) throws IOException { Scanner s = null; double sum = 0; try { s = new Scanner( new BufferedReader(new FileReader("usnumbers.txt"))); s.useLocale(Locale.US); while (s.hasNext()) if (s.hasNextDouble()) sum += s.nextDouble(); else s.next(); } finally { s.close(); } System.out.println(sum); } }
Chng 8: X l vo/ra
Chui kt qu l 1032778.74159 Tu theo qui c ca locale, du . c th l du khc. Do System.out l mt i tng PrintStream v lp khng cung cp cch thc ghi locale mc nh. Ta ch c th ghi locale cho ton b chng trnh bng formatting.
8.2.2 Formatting
i tng lung thc hin vic formatting c kiu l PrintWriter, lp lung k t, v PrintStream, lp lung byte. C hai mc formatting: 1. print v println t qui cch tng gi tr theo cch tiu chun. print hay println xut ra tng gi tr sau khi chuyn kiu bng phng thc toString. Xem lp Root sau:
public class Root { public static void main(String[] args) { int i = 2; double r = Math.sqrt(i); System.out.print("Cn bc hai ca "); System.out.print(i); System.out.print(" l "); System.out.print(r); System.out.println("."); i = 5; r = Math.sqrt(i); System.out.println("Cn bc hai ca " + i + " l " + r + "."); } }
Chng 8: X l vo/ra
2. format t qui cch hu nh bt k gi tr s da trn chui c qui cch vi nhiu la chn. Phng thc ny trong lp java.util.Formatter c c php sau:
format (String format, Object... args)
Phng thc ny hu nh ging ht vi printf () ca PrintStream. Cc tham s args s c hin th trong kt qu theo cc ch th c t trong chui nh dng trong tham s u tin. Xt chng trnh Root2 thay th cho Root. Root2 t quy cch hai gi tr:
public class Root2 { public static void main(String[] args) { int i = 2; double r = Math.sqrt(i); System.out.format("Cn bc hai ca %d l %f.%n", i, r); } }
Kt qu xut ra: Cn bc hai ca 2 l 1.414214 Tt c c t qui cch bt u vi % v kt thc bng 1 hay 2 k t chuyn i. Cc k t chuyn i thng gp:
d t qui cch gi tr nguyn nh loi thp phn. f t qui cch gi tr du chm ng (float) nh loi thp phn. n xut du kt thc dng. x t qui cch gi tr nguyn nh loi thp lc phn. s t qui cch bt k gi tr no nh l mt chui. tB t qui cch s nguyn l tn thng theo kiu bn a.
Ch : Ngoi tr %% v %n tt c c t qui cch phi c tham s i km; Nu khng mt ngoi l pht sinh. Trong ngn ng Java, \n pht ra k t linefeed (\u000A). Khng nn dng \n xung dng. Ta nn dng %n xung dng cho ph hp vi mi trng thc hin. c t qui cch c th c thm nhiu thnh phn tu bin kt qu xut ra. Lp Format sau y minh ho thm cc tu bin.
public class Format {
Chng 8: X l vo/ra public static void main(String[] args) { System.out.format("%f, %1$+020.10f %n", Math.PI); } }
Kt qu : 3.141593, +00000003.1415926536 Hnh sau y m t cc la chn thm. % Bt u c t qui cch 1$ Ch mc tham s +0 C 20 Chiu rng .10 chnh xc f Chuyn i
Hnh 8.4 Cc thnh phn c t qui cch. ngha cc thnh phn ny nh sau:
chnh xc: vi du chm ng gi tr ny xc nh s cc k s sau phn thp phn. Vi chuyn i chui (%s) gi tr ny xc nh chiu rng, kt qu b ct phi nu khng ch. Chiu rng: chiu rng ti thiu, khong trng c thm vo bn tri nu cn thit. C: trong v d trn + xc nh s lun c du, v 0 l k t chn vo. C khc bao gm - (chn vo bn phi) v , (qui cch s du phn cch phn nghn). Ch mc tham s cho php so khp tng minh mt tham s xc nh. c t < hm dng li tham s trc, v d nh:
System.out.format("%f, %<+020.10f %n", Math.PI);
Gi tr tr v -1 bo hiu kt thc vic nhp. V gi tr kiu byte chim 8 bit u tin ca mt gi tr int 32-bit nn gi tr thc s s khng bao gi c du. s dng nhp chun ny nh l lung k t, ta phi bao System.in trong InputStreamReader.
InputStreamReader cin = new InputStreamReader(System.in);
Nh tho lun phn trc, cc lp bao b m cung cp vic truyn lung byte hiu qu. Trong v d BufferedReaderApp, ta bao System.in vi InputStreamReader v sau bao th hin ny vi BufferedReader. Ta dng phng thc readLine() trong BufferedReader c mt dng nhp vo thay v vng lp nhn tng k t. K thut ny cng loi b vic chuyn t int ti char.
package chuong8; import java.io.*; public class BufferedReaderApp { public static void main (String arg[]) { // System.in m theo mc nh. // Bao mt lung reader mi c kh nng 16 bit. InputStreamReader reader = new InputStreamReader (System.in); // Bao reader vi mt reader c b m.
Chng 8: X l vo/ra BufferedReader buf_in = new BufferedReader (reader); // Bao mt lung writer mi c kh nng 16 bit. OutputStreamWriter writer = new OutputStreamWriter (System.out); PrintWriter print_writer = new PrintWriter (writer, true); String str = "q"; try { /* c nguyn dng. Kim tra chui nhp l "quit" thot ra vng lp */ do { // c vn bn t bn phm str = buf_in.readLine (); // Xut ngc vn bn ra console. print_writer.println ("echo " + str); } while (!str.toLowerCase ().equals ("q") ); } catch (IOException e) { System.out.println ("IO exception = " + e ); } } }
Mt v d kt qu chng trnh: My input from the keyboard echo My input from the keyboard More of my input echo More of my input q echo q c c gi tr s t bn phm i hi phi c cc gi tr nh chui v sau chuyn i chng thnh cc kiu c bn. V d on m sau c mt s nguyn nh l chui v sau chuyn thnh gi tr s nguyn.
InputStreamReader reader = new InputStreamReader (System.in); BufferedReader buf_reader = new BufferedReader (reader);
Chng 8: X l vo/ra try { String s = buf_reader.readLine (); // c s nh chui // Ct khong trng ng sau trc khi chuyn kiu. tmp = Integer.parseInt (s.trim ()); System.out.println (" echo = " + tmp); } catch (IOException ioe) { System.out.println ("IO exception = " + ioe); }
Chng trnh PrintWriterApp di y xut chui, cc kiu d liu c bn, v bao cc lung c kh nng nhiu hn. u tin chng ta bao i tng System.out, lung 8 bit, vi mt OutputStreamWriter c c lung 16-bit. Tuy nhin lp OutputStreamWriter ch c vi phng thc, v vy ta bao i tng OutputStreamWriter bng PrintWriter, m n cung cp y cc phng thc print() v println() cho vic in chui v cc kiu d liu c bn.
package chuong8; import java.io.*; public class PrintWriterApp { public static void main (String arg[]) { OutputStreamWriter writer = new OutputStreamWriter (System.out); // Tham s th hai l true autoflush. PrintWriter print_writer = new PrintWriter (writer,true); print_writer.println ("Text output with PrintWriter."); print_writer.println ("Primitives converted to strings:"); boolean a_boolean = false; byte a_byte = 114; short a_short = 1211; int an_int = 1234567; long a_long = 987654321; float a_float = 983.6f; double a_double = -4.297e-15; print_writer.println (a_boolean); print_writer.println (a_byte); print_writer.println (a_short);
Chng 8: X l vo/ra print_writer.println (an_int); print_writer.println (a_long); print_writer.println (a_float); print_writer.println (a_double); // PrintWriter khng nm ra IOExceptions m a ra checkError () if( print_writer.checkError ()) System.out.println ("An output error occurred!" ); } }
Kt qu xut ra: Text output with PrintWriter. Primitives converted to strings: false 114 1211 1234567 987654321 983.6 -4.297E-15 Lu rng vi lp lung bao bc (wrapper) bao gm mt b m thu thp d liu cho n khi n y v sau ton d liu trong b m c gi n ch ca n trong mt ln. iu ny hiu qu hn gi mi mt byte mi ln v chi ph lin quan n vic chuyn giao. bo m rng d liu c y ra khi b m ngay lp tc ta dng phng thc flush. Vi c hai PrintStream v PrintWriter, ta c ty chn autoflush. Chng trnh FormatWriteApp minh ho dng Formatter gi cc gi tr s to qui cch ti console.
package chuong8; import java.io.*; import java.util.*;
Chng 8: X l vo/ra public class FormatWriteApp { public static void main (String arg[]) { // Gi kt xut t qui cch ti lung System.out. Formatter formatter = new Formatter ((OutputStream)System.out); formatter.format ("Text output with Formatter. %n"); formatter.format ("Primitives converted to strings: %n"); boolean a_boolean = false; byte a_byte = 114; short a_short = 1211; int an_int = 1234567; long a_long = 987654321; float a_float = 983.6f; double a_double = -4.297e-15; formatter.format ("boolean = %9b %n", a_boolean); formatter.format ("byte formatter.format ("int formatter.format ("long = %9d %n", a_byte); = %9d %n", an_int); = %9d %n", a_long); formatter.format ("short = %9d %n", a_short);
formatter.format ("float = %9.3f %n", a_float); formatter.format ("double = %9.2e %n", a_double); formatter.flush (); formatter.close (); } }
Kt xut chng trnh: Text output with Formatter. Primitives converted to strings: boolean = byte = short = int false 114 1211
= 1234567
long = 987654321
Chng 8: X l vo/ra
Chng 8: X l vo/ra do { char [ ] newPassword1 = c.readPassword("Enter your new password: "); char [ ] newPassword2 = c.readPassword("Enter new password again: "); noMatch = ! Arrays.equals(newPassword1, newPassword2); if (noMatch) c.format("Passwords don't match. Try again.%n"); else { change(login, newPassword1); c.format("Password for %s changed.%n", login); } Arrays.fill(newPassword1, ' '); Arrays.fill(newPassword2, ' '); } while (noMatch); } Arrays.fill(oldPassword, ' '); } // gi lp phng thc kim tra. static boolean verify(String login, char[] password) { return true; } // gi lp phng thc thay i. static void change(String login, char[ ] password) { } }
Chng trnh ny thc hin: C gng ly i tng Console. Nu i tng khng c, hy b. Gi Console.readLine nhc v c tn ng nhp ca ngi dng. Gi Console.readPassword nhc v c mt khu hin hnh. Kim tra ngi dng c quyn thay i mt khu. Lp li cc bc sau cho n khi ngi dng nhp mt khu hai ln: a. Console.readPassword gi hai ln nhc cho v c mt mt khu mi. b. Nu ngi dng nhp vo cng mt mt khu c hai ln, gi change thay i n. Ghi ln c hai mt khu vi cc khong trng. c. Ghi ln cc mt khu c vi khong trng.
Chng 8: X l vo/ra
Dng Scanner cho nhp t Console on lnh sau minh ho vic c gi tr nguyn t bn phm:
Scanner scanner = new Scanner (System.in); int i = scanner.nextInt ();
i vi mi kiu c bn c phng thc nextXxx() tr v gi tr ca kiu tng ng. Nu chui khng th chuyn c nh kiu , th x l ngoi l InputMismatchException xut hin. Chng trnh ScanConsoleApp minh ho vic c int, float, v double t bn phm.
package chuong8; import java.io.*; import java.util.*; public class ScanConsoleApp { public static void main (String arg[]) { // To m scanner c t bn phm Scanner scanner = new Scanner (System.in); try { System.out.printf ("Input int (e.g. %4d): ",3501); int int_val = scanner.nextInt (); System.out.println (" You entered " + int_val +"\n"); System.out.printf ("Input float (e.g. %5.2f): ", 2.43); float float_val = scanner.nextFloat (); System.out.println (" You entered " + float_val +"\n"); System.out.printf ("Input double (e.g. %6.3e): ",4.943e15); double double_val = scanner.nextDouble (); System.out.println (" You entered " + double_val +"\n"); } catch (InputMismatchException e) { System.out.println ("Mismatch exception:" + e ); } } }
Chng 8: X l vo/ra
You entered 23431 Input float (e.g. 2.43): 1.2343 You entered 1.2343 Input double (e.g. 4.943e+15): -2.34e4 You entered -23400.0 C mt s phng thc khc hu ch trong lp Scanner nh skip() nhy qua u vo, findInLine () tm kim cc chui con. useDelimiter() ch ra mt du phn cch t khc (different token separator). V d ta mun du phn cch t l du phy theo sau l khong trng, dng lnh:
s.useDelimiter(",\\s*");
Chng 8: X l vo/ra
CallableStatement biu din mt th tc c lu tr. C th c s dng thc thi cc th tc c lu tr trong mt RDBMS c h tr chng. ResultSet - biu din mt tp kt qu trong CSDL to ra bi vic s dng mt cu lnh SQL l SELECT. SQLException - mt lp x l li ngoi l cha cc li truy cp CSDL. C nhiu loi JDBC driver, nhng y ta ch quan tm n loi m SUN khuyn co s dng v pht trin. y l loi c vit thun ty bng Java v l loi hiu qu nht. Chng cho php kt ni trc tip vo CSDL, cung cp kt qu ti u v cho php lp trnh vin thc hin cc chc nng ty thuc vo CSDL. iu ny to ra tnh c ng cao nht l khi ta cn thay i CSDL bn di mt ng dng. Loi driver ny thng c dng cho cc ng dng phn tn cao. 8.4.2 MySQL v Java MySQL l h qun tr CSDL m ngun m ph bin nht th gii v c cc nh pht trin rt a chung trong qu trnh pht trin ng dng. MySQL min ph hon ton nn ta c th ti v MySQL t trang ch www.mysql.com. 8.4.2.1 Ci t Connector/J - JDBC Driver ca MySQL Sau khi ci MySQL ln my, bc k tip ta ci t Connector/J - JDBC Driver ca MySQL. JDBC Driver ca MySQL c th ly v a ch http://dev.mysql.com/downloads/connector/j. File ti v s l mt file .zip hoc .gz. Sau khi gii nn ta s c mt file c tn tng t nh sau: mysql-connector-java5.1.13.rar. Hy chp file ny vo th mc %JAVA_HOME%/jre/lib/ext trn h thng ca ta. V d:
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext
Chng 8: X l vo/ra
8.4.2.2 Kim tra Connector/J Chng ta to ra mt chng trnh Java nh kim tra xem chng ta ci t ng JDBC driver ca MySQL cha. Nu chng trnh chy thnh cng th ngha l trnh iu khin JDBC sn sng cho cc tc v phc tp hn. Ta to ra mt file Connect.java vi on m sau:
package chuong8; import java.sql.*; public class Connect { public static void main (String[] args) { Connection conn = null; try { String userName = root; String password = localhost; String url = jdbc:mysql://127.0.0.1:3306/mysql; // ng k/Np driver Class.forName (com.mysql.jdbc.Driver).newInstance (); // Thit lp kt ni n CSDL conn = DriverManager.getConnection (url, userName, password); System.out.println (Da ket noi CSDL); // Gi cu lnh SQL v x l kt qu thu v } catch (Exception e) { System.err.println (Khong ket noi duoc); } finally { if (conn != null) { try { conn.close (); System.out.println (Dong ket noi); } catch (Exception e) { /* bo qua loi luc dong CSDL */ } } } }
Chng 8: X l vo/ra }
Trc ht bin dch file ny ra m bytecode nhng chy n, ta cn ch m bo MySQL ang chy. Nu ta ci t MySQL n ch chy khi ta gi th ta hy bt MySQL vi cu lnh mysqld-nt --console hay nu ta ci chng trnh qun tr CSDL ny di hnh thc mt dch v th ta c th g net start mysql trong shell Run trong Windows. on m trn s dng cp tn ngi s dng v mt khu l root/localhost vi CSDL l mysql. Nu kt ni thnh cng, ta s thy mt mn hnh nh di y xut hin. Da ket noi CSDL Dong ket noi 8.4.2.3 Thc hin cc cu truy vn thc hin cu lnh SQL trong mt ng dng c s dng JDBC, ta hy to ra mt i tng Statement t i tng Connection ca ta. i tng ny cha mt kt ni n n CSDL. Cc i tng Statement h tr phng thc executeUpdate() a vo cc cu truy vn thc hin chc nng thay i CSDL v khng tr li tp kt qu, v phng thc executeQuery() to ra cc cu truy vn cho php tr li tp kt qu. minh ha kt qu x l d liu chng ta s dng mt bng, animal, bng ny ha 1 ct id cha s nguyn v 2 ct cha cc chui, name v category. Cu lnh MySQL to bng ny trng nh sau:
CREATE TABLE animal( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), name CHAR(40), category CHAR(40) )
Ct id c thuc tnh AUTO_INCREMENT tc l gi tr ca n t ng tng thm m khng cn chng ta trc tip can thip, v MySQL t ng gn cc gi tr ni tip nhau 1, 2, 3, mi khi c 1 bn ghi c b sung vo bng. Thc hin cu truy vn khng tr li tp kt qu u tin chng ta to ra mt i tng Statement t i tng Connection, v sau s dng chng to ra v cung cp gi tr cho bng animal. DROP TABLE, CREATE TABLE, UPDATE, DELETE v INSERT u l cc cu lnh thc hin vic thay i CSDL, cho nn phng thc executeUpdate() l phng thc thch hp thc thi chng. Phng thc ny tr li mt s nguyn ch s lng hng trong CSDL
Chng 8: X l vo/ra
b tc ng sau khi thc hin cu truy vn. Trong v d di y, s nguyn ny c gn vo bin count:
Statement s = conn.createStatement (); int count; s.executeUpdate (DROP TABLE IF EXISTS animal); s.executeUpdate ( CREATE TABLE animal ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + PRIMARY KEY (id), + name CHAR(40), category CHAR(40))); count = s.executeUpdate (INSERT INTO animal (name, category) VALUES (snake, reptile), (frog, amphibian), (tuna, fish), (racoon, mammal)); s.close(); System.out.println (count + dong da duoc tao ra);
y, bin count c s dng bo li s lng hng m cu lnh INSERT b sung vo bng animal. Mt i tng Statement c th s dng to ra nhiu cu truy vn. Khi thc hin xong cc thao tc trn CSDL, ta hy gi phng thc close() xa i tng v gii phng tt c cc ti nguyn lin kt n n. Nu nh ta mun bit cu lnh SQL c tr li tp kt qu hay khng (v d nh khi ngi s dng nhp cu lnh vo trng nhp liu ca form), bn c th dng phng thc execute() ca i tng Statement. Phng thc ny tr li true nu cu lnh c tr li tp kt qu. Trong trng hp , i tng ResultSet c th c thu hi thng qua phng thc getResultSet() v s lng hng c tc ng c th bit c thng qua phng thc getUpdateCount():
Statement unknownSQL = con.createStatement(); If (unknownSQL.execute(sqlString)) { ResultSet rs = unknownSQL.getResultSet(); // hin th kt qu } else System.out.println(Cac dong da cap nhat: + unknownSQL.getUpdateCount());
Thc thi cc cu truy vn c tr li mt tp kt qu Cc cu lnh truy vn c tr li tp kt qu l cc cu lnh gip chng ta ly ra d liu t CSDL di mt dng thc no . V d cu lnh SELECT ly thng tin t mt CSDL v th khi ta dng phng thc executeQuery(). Sau khi gi phng thc
Chng 8: X l vo/ra
ny, ta hy to ra mt i tng ResultSet v s dng n lp li cc thao tc d liu trn cc hng m cu truy vn tr v. V d sau cho thy cch s dng phng thc ny ly thng tin t bng animal v:
Statement s = conn.createStatement (); s.executeQuery (SELECT id, name, category FROM animal); ResultSet rs = s.getResultSet (); count = 0; while (rs.next ()) { int idVal = rs.getInt (id); String nameVal = rs.getString (name); String catVal = rs.getString (category); System.out.println ( id = + idVal + , name = + nameVal + , category = + catVal); ++count; }
Phng thc executeQuery() khng tr li s nguyn m s hng m n tc ng, do vy nu ta mun bit mt tp kt qu cha bao nhiu hng th ta cn t mnh m ly khi ta thc thi thao tc ly d liu trn tng hng. ly c cc gi tr ca ct trn tng hng, th ta hy gi cc phng thc getXXX(),trong XXX i din cho kiu gi tr ca ct. Chng hn, cc phng thc getInt() v getString() c s dng trong v d trn tr li cc gi tr chui v s nguyn. Nh trnh by, cc phng thc ny c th c gi bng cch s dng tn ca mt ct nm trong tp kt qu. Ta cng c th ly cc gi tr v t v tr ca chng. i vi tp kt qu ly v t cu truy vn SELECT trong v d trn, id, name, v category nm cc v tr ct 1, 2 v 3 v do vy c th ly v theo cch sau:
int idVal = rs.getInt (1); String nameVal = rs.getString (2); String catVal = rs.getString (3);
Cc i tng ResultSet, cng nh cc i tng Statement, nn c ng li khi ta dng xong chng. kim tra xem liu gi tr ca mt ct no c l NULL hay khng, ta hy gi phng thc wasNull() ca i tng cha tp kt qu sau khi ly gi tr v. V d, ta c th kim tra gi tr NULL nm trong ct name nh sau:
String nameVal = rs.getString (name);
S dng k t gi ch Thnh thong ta cn xy dng mt cu truy vn vi cc gi tr c cha cc k t cn c x l c bit. V d, trong cc cu truy vn, cc gi tr dng chui c vit bn trong cc du trch dn n, nhng bt c k t trch dn n no nm trong chnh chui u cn phi c bin thnh du trch dn kp hoc phi c chuyn v (escaped) bng k t \ trnh to ra cc cu SQL hot ng sai mc ch. Trong trng hp ny, cch d dng hn c l ta hy JDBC x l vn chuyn v ny cho ta, ch khng nn t mnh lm ly. lm c iu , ta hy to ra mt kiu lnh khc (mt lnh PreparedStatement), tham chiu n cc gi tr d liu nm trong chui truy vn di hnh thc cc k t gi ch (placeholders). Sau bo cho JDBC bit lin kt cc gi tr d liu vo cc k t gi ch ny v n s x l mt cch t ng bt c mt k t c bit no. Gi s ta c hai bin c tn l nameVal v catVal dng cha cc gi tr s chn vo trong bng animal. lm c iu m khng cn quan tm n vic liu cc bin c cha cc k t c bit hay khng, ta hy to ra mt cu truy vn kiu nh th ny:
PreparedStatement s; s = conn.prepareStatement ( INSERT INTO animal (name, category) VALUES(?,?)); s.setString (1, nameVal); s.setString (2, catVal); int count = s.executeUpdate (); s.close (); System.out.println (count + dong da duoc chen);
Cc k t ? nm trong chui truy vn ng vai tr l cc k t gi ch--cc k t nh du c bit nhm xc nh ni cc gi tr d liu cn c t vo . Phng thc setString() nhn thng tin v v tr ca k t gi ch v mt gi tr dng chui ri gn kt gi tr vo k t gi ch thch hp, thc thi bt c thao tc chuyn v no cn thit. Phng thc m ta s dng gn kt mt gi tr ty thuc vo kiu d liu. V d, setString() gn gi tr dng chui v setInt() gn cc gi tr dng s nguyn. X l li Nu ta mun by li, hy thc thi cc thao tc JDBC bn trong khi try v s dng mt b x l li ngoi l hin th thng tin v nguyn nhn gy ra vn c th xut hin. JDBC cung cp cc phng thc getMessage() v getErrorCode() m khi li xut hin ta c th s dng bit c thng bo li v m li dng s. V d sau c
Chng 8: X l vo/ra
tnh dng mt cu truy vn mc li. Khi thc thi, phng thc executeQuery() s khng th x l c v pht sinh mt li ngoi l. Li ny s c thu v thng qua khi catch, trong khi ny ta c th cha m lnh x l li hay ch n gin l hin th thng bo li v m li:
try { Statement s = conn.createStatement (); s.executeQuery(XYZ); // to ra cu truy vn khng hp l s.close(); } catch( SQLException e) { System.err.println (Thong bao loi: + e.getMessage()); System.err.println (Ma loi: + e.getErrorCode()); }
TNG KT CHNG 8
Trong chng ny cc vn sau c trnh by: Th no l lung d liu C ba lung d liu: byte, k t v c b m. i tng scanner qut lung d liu vo v chuyn thnh cc d liu vi kiu xc nh t qui cch d liu xut ra bng formatting. M t vo ra trong ch dng lnh qua hai c ch: qua lung chun v i tng Console Th no l JDBC Lm vic vi CSDL MySQL
BI TP
1. in cc t thch hp vo cc cu sau: a. ---------- l cc dn ng (pipelines) gi v nhn thng tin trong cc chng trnh Java. b. ----------- l lung li chun. c. Phng thc ------------- c cc byte d liu t mt lung. d. -------------- lu gi d liu tm thi trc khi nhp/xut ti ch (destination). e. Phng thc ------------ x sch lung. f. Nhp/xut mng byte s dng cc lp ------------ v --------------------2. Vit mt chng trnh nhn mt dy k t ring l, cch nhau bi khong trng t
Chng 8: X l vo/ra
ca s dng lnh ri ni chng vi nhau thnh mt t, v d nh sau: java Glue B A N A N A th chng trnh xut ra: BANANA vi khng c khong trng 3. Vit mt chng trnh nhn mt cu t dng lnh v xut ra kt qu thng k cu ny, v d nh sau: java SentenceStatistics this is my sample sentence th chng trnh xut ra: number of words: 5 longest word(s): sentence length of longest word(s): 8 shortest word(s): is my length of shortest word(s): 2 cho n gin khng dng bt k du ngt (punctuation) trong cu. 4. Vit chng trnh xut ra d liu t bng animal.
Chng 9.
Ni dung chng ny nhm gii thiu: Lp trnh giao din vi cc i tng c bn v vi cc i tng multimedia. Lp trnh giao din vi HTML&Applet Lp trnh giao din vi SWING
9.1.1.1 Frame Frame l mt i tng c th dng mt cch c lp, hoc c gn vo mt i tng khc nh mt i tng conponent bnh thng. Thng thng, Frame c dng nh mt ca s ca mt chng trnh c lp. Cc phng thc c bn ca lp Frame: Frame(): khi to khng tham s. Frame(String): khi to vi tham s l dng tiu ca frame.
setSize(int, int): nh kch c ca frame, tham s tng ng l chiu rng v chiu cao ca frame. setVisible(boolean): cho php frame xut hin hay n i trn mn hnh. setTitle(String)/getTitle(): truy nhp thuc tnh dng tiu ca frame. setResizable(boolean): thit lp thuc tnh cho php thay i kch c frame. setIconImage(Image): thit lp nh icon gc trn (biu tng) ca frame. Chng trnh FrameDemo minh ho vic s dng mt i tng ca lp Frame.
package chuong9; import java.awt.*; public class FrameDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(This is my Frame!); myFrame.setSize(300,150); // nh kch c frame myFrame.setVisible(true); // Hin th frame } }
Hnh 9.1 Kt qu demo Frame 9.1.1.2 Panel Panel cng l mt dang khung cha, nhng kh n gin. Panel ch dng nhm cc i tng giao din vi nhau. Thng thng, panel c dng trong mt ca s ca Frame hoc mt ng dng khc. Cc phng thc c bn ca lp Panel, ngoi cc phng thc chung ca container: Panel(): Khi to khng tham s. Chng trnh PanelDemo minh ho vic s dng mt Panel trong mt Frame.
package chuong9; import java.awt.*; public class PanelDemo { public static void main(String[] args) {
Chng 9: Lp trnh giao din // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has a panel!); myFrame.setSize(300,150); // nh kch c frame Panel myPanel = new Panel();// Khai bo panel myFrame.add(myPanel); // Thm panel vo frame myFrame.setVisible(true); // Hin th frame } }
Hnh 9.2 Kt qu demo Panel 9.1.1.3 Dialog Dialog l mt i tng ca s con ca mt ca s chng trnh chnh. Do vy, Dialog ch c s dng km vi mt Frame. C hai dng Dialog: Modal: khi hin ca s dialog, cc ca s khc ca chng trnh s b kho li, khng thao tc c, ch thao tc c trn ca s dialog. Non-modal: khng kho cc ca s khc. Khi dialog xut hin, ngi dng vn c th chuyn sang thao tc trn cc ca s khc, nu cn. Cc phng thc c bn ca lp Dialog: Dialog(Frame, boolean): Khi to dialog, tham s th nht l frame cha dialog, tham s th hai xc nh dialog c l modal hay khng. Dialog(Frame, String, boolean): Khi to dialog, thm tham s th hai l dng tiu ca dialog. setVisible(boolean): Thit lp trng thi hin th hoc n dialog trn mn hnh. setSize(int, int): nh kch c cho dialog, cc tham s tng ng l chiu rng v chiu cao ca dialog. setTitle(String)/getTitle(): Truy nhp thuc tnh dng tiu ca dialog. setResizable(boolean): Thit lp thuc tnh cho php thay i kch c ca dialog. setLayout(Layout): Thit lp ch hin th cc i tng cha trong dialog. Chng trnh DialogDemo minh ho vic thm mt dialog (ang rng, cha c i tng thnh phn no) vo mt frame.
Chng 9: Lp trnh giao din package chuong9; import java.awt.*; public class DialogDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has a dialog!); myFrame.setSize(300,150); // nh kch c frame // Khai bo v khi to dialog Dialog myDialog = new Dialog(myFrame, An empty dialog!, true); myDialog.setSize(300,150); // nh kch c dialog myDialog.setVisible(true); // Hin th dialog } }
Chng 9: Lp trnh giao din package chuong9; import java.awt.*; public class LabelDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has a label!); myFrame.setSize(300,150); // nh kch c frame // Khai bo v khi to label Label myLabel = new Label(); myLabel.setText(This is a label!);//Gn ni dung vn bn myLabel.setAlignment(Label.CENTER);// Cn l gia myFrame.add(myLabel); // Gn label vo frame myFrame.setVisible(true); // Hin th frame } }
Hnh 9.4 Kt qu demo Label 9.1.2.2 TextField v TextArea y l hai i tng dng biu din vn bn v ngi dng c th thay i ni dung vn bn cha trong chng. im khc bit l TextField ch cho php mt dng vn bn, trong khi TextArea cho php cha nhiu dng vn bn. Cc phng thc chung ca hai lp ny: setText(String)/getText(): Truy nhp thuc tnh ni dung vn bn cha trong . getSelectedText(): Tr v chui vn bn c bi en (nh du chn) trong . getSelectedStart(): Tr v v tr k t u trong vng c nh du chn (tnh t 0). getSelectedEnd(): Tr v v tr k t cui trong vng c nh du chn (tnh t 0). selectAll(): nh du chn ton vn bn. setEditable(boolean): Xc nh vng vn bn c th edit c hay khng. Cc phng thc khc ca lp TextField: TextField(): Khi to mt vn bn rng.
TextField(int): Khi to mt vn bn rng, rng xc nh bi tham s vo. TextField(String): Khi to mt vn bn c ni dung xc nh bi tham s u vo. TextField(String, int): Khi to vi ni dung c sn, rng xc nh. setEchoChar(char)/getEchoChar(): Truy nhp thuc tnh l k t thay th vn bn trong . Thuc tnh ny c dng khi ta cn che du thng tin vn bn, v d, g mt khu ca chng trnh. getColums(): Tr v rng ca vn bn. Cc phng thc khc ca lp TextArea: TextArea(): Khi to mt vng vn bn rng. TextArea(int, int): Khi to mt vng vn bn rng, kch c (s dng, s ct) xc nh bi tham s vo. TextArea(String): Khi to mt vng vn bn c ni dung xc nh bi tham s u vo. TextArea(String, int, int): Khi to vng vn bn vi ni dung c sn, rng xc nh. appendText(String): Thm mt on vn bn vo cui on vn bn trong vng. insertText(String, int): Chn mt on vn bn vo v tr xc nh (tham s th hai) ca vng vn bn. replaceText(String, int, int): Thay th mt on vn bn trong vng, nh du bng v tr bt u v v tr kt thc (tham s th hai v th ba), bng mt on vn bn mi (tham s th nht). getRows()/getColums(): Tr v s dng/ct ca vng vn bn. Chng trnh TextDemo minh ho vic t cc i tng vn bn v vng vn bn vo mt frame.
package chuong9; import java.awt.*; public class TextDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has some texts!); myFrame.setSize(300,150); // nh kch c frame
// Khai bo v khi to textField TextField myTextField = new TextField(A text field!); myFrame.add(myTextField); // Gn vo frame // Khai bo v khi to textArea TextArea myTextArea = new TextArea(5, 40); String str=The TextFields columns is: +myTextField.getColumns(); str += The TextAreas size is: + myTextArea.getRows() + * + myTextArea.getColumns(); myTextArea.setText(str); // Thit lp ni dung myFrame.add(myTextArea); // Gn vo frame myFrame.setVisible(true); // Hin th frame } }
Hnh 9.5 Kt qu demo Text 9.1.2.3 Button Button l i tng nt lnh, dng thc hin mt nhim v xc nh. Cc phng thc c bn ca nt nhn: Button(String): Khi to nt nhn vi tn xc nh trn nt. setLabel(String)/getLabel(): Truy nhp tn ca nt nhn. Chng trnh ButtonDemo minh ho vic to mt nt nhn trong mt frame.
package chuong9; import java.awt.*; public class ButtonDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has a button!); myFrame.setSize(300,150); // nh kch c frame // Khai bo v khi to button
Chng 9: Lp trnh giao din Button myButton = new Button(Click!); myFrame.add(myButton); // Gn vo frame myFrame.setVisible(true); // Hin th frame } }
Hnh 9.6 Kt qu demo Button Tuy nhin, khi click vo nt nhn ny, khng xy ra iu gi c. L do l chng ta cha ci t vic x l s kin cho nt nhn. Phn sau s trnh by vic x l s kin cho cc i tng.
9.1.3 X l s kin
Khi mi i tng component c to n c kh nng pht ra s kin khi ngi dng giao tip vi n. Ngi lp trnh phi xc nh vic phn ng nh th no vi mt s s kin cn quan tm sinh ra t i tng ny. K thut ny gi l x l s kin. Hai bc x l s kin : 1. To mt i tng listenner c th nghe v phn ng vi cc kiu s kin c bit t i tng component. V d phn ng ti vic click mt Button m pht ra ActionEvents, ta phi to mt ActionListener m c kh nng lng ghe v phn ng ti ActionEvents. 2. Ta phi ng k i tng listenner vi i tng component ny. Khi x l s kin, xc nh s kin pht sinh t component no, ta dng phng thc getSource():
<Kiu component> <i tng s kin>.getSource();
Cc kiu s kin c bn ActionEvent: xut hin khi mt nt b click vo, mt danh sch (list) c chn, mt menu c chn. ComponentEvent: xut hin khi mt component b thay i kch c, v tr, trng thi. FocusEvent: xut hin khi mt component c hoc mt focus. ItemEvent: xut hin khi mt menu item c chn hoc b, khi checkbox hoc list item c click vo. WindowEvent: xut hin khi mt ca s c m ra, kch hot, ng li hoc thot ra.
TextEvent: xut hin khi gi tr vn bn ca cc i tng TextField v TextArea b thay i. MouseEvent: xut hin khi chut c click, di chuyn qua, nhn xung v th ra. KeyEvent: xut hin khi c u vo t bn phm. Cc giao tip c ci t x l cc s kin trn: ActionListener. ComponentListener FocusListener ItemListener WindowListener TextListener MouseListener v MouseMotionListener KeyListener Cch to v ng k Listeners Trc ht ta tm hiu cch khai bo lp trong c tn nh sau:
public class OuterClass { // Khai bo thuc tnh ca lp ngoi, b qua chi tit // Khai bo lp trong trong thn ca lp ngoi. class InnerClass { // Khai bo thuc tnh v phng thc ca lp trong, b qua chi tit. } // Kt thc lp trong public void someMethodOfOuterClass() { /* Ta c th to mt i tng kiu InnerClass bn trong ca bt k phng thc OuterClass. Nu InnerClass c tham chiu t bt k ni no khc trong ng dng th trnh bin dch s bo li "symbol not found" */ InnerClass x = new InnerClass(); } }
Ch : khi bin dch c hai tp tin c to ra: OuterClass.class v OuterClass$InnerClass.class. Trong vic to v ng k Listener ta dng k thut lp trong khng tn (anonymous inner class). Lp trong khng tn v bn cht ging nh lp trong c tn nhng ngoi
tr vic khng c tn. to lp lp Listener in hnh nh ActionListener ta phi thc hin mt giao din ActionListener. Giao din ny c mt phng thc actionPerformed c tiu nh sau:
void actionPerformed(ActionEvent e)
Phng thc ny s phn ng ti vic nghe mt ActionEvent. Ta to mt lp trong khng tn da theo c php lp trong c tn: u tin to mt i tng kiu ActionListener
ActionListener l = new ActionListener();
Tuy nhin v ActionListener l mt giao din nn khng th to i tng kiu ActionListener trc tip. Ci m ta cn l to mt i tng ca lp X no m thc hin giao din ActionListener:
ActionListener l = new X();
vi X c khai bo nh sau:
class X implements ActionListener { // Phi nh ngha phng thc actionPerformed ca ActionListener public void actionPerformed(ActionEvent e) { // chi tit b qua } }
Nhn xt du ; sau } ca cu lnh phc tp ny. Bnh thng khng c du ; sau } nhng y l trng hp c bit ; kt thc cu lnh n bt u vi
ActionListener l = ....
Lp WindowListener Khi chy mt ng dng GUI, ta click vo gc trn bn phi ca ca s, ca s ng li nhng chng trnh vn cn chy, v vn chim ti nguyn h thng. kt thc chng trnh hon ton ta cn thc hin: To mt WindowListener v ng k cho ca s chng trnh. To lnh cho phng thc windowClosing ca WindowListener ng chng trnh System.exit(0).
exit(int status) l phng thc tnh ca lp System kt thc tng minh my
o Java. M 0 tr v bo hiu khng c li. Cc chng trnh chy ch dng lnh n lung th khng cn c lnh System.exit(0). Ch : WindowListener c 7 phng thc, thng thng ta ch quan tm n windowClosing, nn thng s c on lnh sau:
WindowListener w = new WindowListener() { public void windowClosing(WindowEvent e) { //. System.exit(0); } // cc phng thc sau c nh ngha nhng khng lm g public void windowOpened(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } };
tng ng:
MouseListener m = new MouseAdapter() { public void mouseClicked (MouseEvent e) { // b qua chi tit } };
Nhn xt rng mi giao din XxxListener c mt lp XxxAdapter tng ng ch tr ActionListener khng c ActionAdapter v ActionListener ch c mt phng thc l actionPerformed. Chng trnh EventDemo ci t mt ng dng hon chnh, bao gm: Hai nhn tiu cho hai vn bn. Hai vn bn, nhp s liu vo. Bn nt nhn tng ng thc hin cc thao tc nhn, chia, cng, tr cc s liu nhp t hai vn bn. Thm mt nt nhn, khi click vo s thot khi chng trnh (chng trnh kt thc).
package chuong9; import java.awt.*; import java.awt.event.*; public class EventDemo extends Frame implements ActionListener { Label lbl1, lbl2, lblKq; TextField txt1, txt2;
Chng 9: Lp trnh giao din Button btnCong, btnTru, btnNhan, btnChia, btnThoat; public EventDemo() { super(Event demo!); this.setLayout(new GridLayout(6,2)); //Ch hin th 6 dng, 2 ct lbl1 = new Label(So thu nhat:); // Nhn s th nht this.add(lbl1); txt1 = new TextField(); // vn bn s th nht this.add(txt1); lbl2 = new Label(So thu hai:); // Nhn s th hai this.add(lbl2); txt2 = new TextField(); // vn bn s th hai this.add(txt2); lblKq = new Label(); // Nhn kt qu this.add(lblKq); this.add(new Label()); // Cc nt nhn btnCong = new Button(Cong); // Nt cng btnCong.addActionListener(this); // Bt s kin this.add(btnCong); btnTru = new Button(Tru); // Nt tr btnTru.addActionListener(this); this.add(btnTru); btnNhan = new Button(Nhan); // Nt nhn btnNhan.addActionListener(this); this.add(btnNhan); btnChia = new Button(Chia); // Nt chia btnChia.addActionListener(this); this.add(btnChia); btnThoat = new Button(Thoat); // Nt thot btnThoat.addActionListener(this); this.add(btnThoat); // Phng thc bt s kin click vo nt ng frame this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });
Chng 9: Lp trnh giao din } // Phng thc x l s kin nt c nhn public void actionPerformed(ActionEvent ae) { try { float x = Float.parseFloat(txt1.getText()); float y = Float.parseFloat(txt2.getText()); float kq = 0; if (ae.getSource() == btnCong) // Cng hai s kq = x + y; if (ae.getSource() == btnTru) // Tr hai s kq = x - y; if (ae.getSource() == btnNhan) // Nhan hai s kq = x*y; if ((ae.getSource() == btnChia) && (y != 0)) // Chia hai s kq = x/y; lblKq.setText(Ket qua la: + String.valueOf(kq)); } catch (Exception ex) { lblKq.setText(Nhap sai); return; } if (ae.getSource() == btnThoat) // Thot khi chng trnh System.exit(0); // Thay i ni dung kt qu } public static void main(String[] args) { // Khai bo i tng demo EventDemo myFrame = new EventDemo(); myFrame.setSize(300,150); // nh kch c frame myFrame.setVisible(true); // Hin th frame } }
Chng 9: Lp trnh giao din // Ch hin th 3 dng, 1 ct this.setLayout(new GridLayout(3,1)); CheckboxGroup cbxg = new CheckboxGroup(); // Nhm radio cbxRed = new Checkbox(Red, cbxg, true); // Nt red cbxRed.addItemListener(this); // Bt s kin this.add(cbxRed); cbxBlue = new Checkbox(Blue, cbxg, false);// Nt blue cbxBlue.addItemListener(this); // Bt s kin this.add(cbxBlue); cbxGreen = new Checkbox(Green, cbxg, false);// Nt green cbxGreen.addItemListener(this); // Bt s kin this.add(cbxGreen); // Phng thc bt s kin click vo nt ng frame this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } // Phng thc x l s kin thay i trng thi nt public void itemStateChanged(ItemEvent ie) { if(ie.getStateChange() == ItemEvent.SELECTED) { String item = (String)ie.getItem(); if (item.equals("Red")) { // i mu red cbxRed.setBackground(Color.red); cbxBlue.setBackground(Color.white); cbxGreen.setBackground(Color.white); } if (item.equals("Blue")) { // i mu blue cbxRed.setBackground(Color.white); cbxBlue.setBackground(Color.blue); cbxGreen.setBackground(Color.white); } if (item.equals("Green")) { // i mu green cbxRed.setBackground(Color.white);
Chng 9: Lp trnh giao din cbxBlue.setBackground(Color.white); cbxGreen.setBackground(Color.green); } this.repaint(); // V li mu nn } } public static void main(String[] args) { // Khai bo i tng demo RadioDemo myFrame = new RadioDemo(); myFrame.setSize(300,150); // nh kch c frame myFrame.setVisible(true); // Hin th frame } }
9.2.2 La chn
Choice l i tng menu s xung, hin th mt danh sch cc item v cho php ngi dng chn mt trong s cc item (tng t i tng dropdown list ca window). Cc phng thc c bn ca lp Choice: Choice(): khi to i tng choice. addItem(String): thm mt item vo danh sch la chn. remove(int): xo item v tr th i trong danh sch (bt u l v tr 0). removeAll(): xo ton b item trong danh sch chn. select(int)/select(String): chn mt item theo s th t hoc theo tn. getSelectedIndex(): tr v ch s ca item c chn. getSelectedItem(): tr v tn ca item c chn. getItem(int): tr v tn ca item tng ng vi s th t a vo. X l s kin thay i trng thi nt chn: Kiu s kin: ItemEvent Ci t giao tip: ItemListener Phng thc x l: itemStateChange(ItemEvent) Chng trnh ChoiceDemo thay i mu nn theo phn t trong la chn c chn.
package chuong9; import java.awt.*; import java.awt.event.*; public class ChoiceDemo extends Frame implements ItemListener { Choice myChoice; public ChoiceDemo() { super(Choice demo!); myChoice = new Choice(); // Khi to myChoice.addItem(Red); // Thm item red myChoice.addItem(Blue); // Thm item blue myChoice.addItem(Green); // Thm item green myChoice.addItemListener(this); // Bt s kin this.add(myChoice); // Gn vo frame // Phng thc bt s kin click vo nt ng frame this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } // Phng thc x l s kin thay i trng thi item public void itemStateChanged(ItemEvent ie) { if (ie.getStateChange() == ItemEvent.SELECTED) { String item = (String)ie.getItem(); if(item.equals(Red)) // i mu red this.setBackground(Color.red); if(item.equals(Blue)) // i mu blue this.setBackground(Color.blue); if(item.equals(Green)) // i mu green this.setBackground(Color.green); this.repaint(); // V li mu nn } } public static void main(String[] args) {
Chng 9: Lp trnh giao din // Khai bo i tng demo ChoiceDemo myFrame = new ChoiceDemo(); myFrame.setSize(300,150); // nh kch c frame myFrame.setVisible(true); // Hin th frame } }
Chng trnh ListDemo minh ho vic s dng i tng list vi kh nng a chn. Mi khi thay i item c chn, mt thng bo cc mu c chn s hin ra.
package chuong9; import java.awt.*; import java.awt.event.*; public class ListDemo extends Frame implements ItemListener { List myList; Label lbl; public ListDemo() { super(List demo!); // Khi to list a chn, ch nhn c mt dng myList = new List(1, true); myList.setSize(300,150); // Thm cc item l cc loi mu sc myList.add(White); myList.add(Red); myList.add(Orange); myList.add(Green); myList.add(Yellow); myList.add(Blue); myList.add(Black); myList.addItemListener(this); // Bt s kin this.setLayout(new GridLayout(2, 1)); this.add(myList); // Gn vo frame lbl = new Label(); // Khi to nhn this.add(lbl); // Gn vo frame // Phng thc bt s kin click vo nt ng frame this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); } // Phng thc x l s kin thay i trng thi item public void itemStateChanged(ItemEvent ie) {
Chng 9: Lp trnh giao din if ((ie.getStateChange() == ItemEvent.SELECTED) || (ie.getStateChange() == ItemEvent.DESELECTED)) { String kq = Cac mau duoc chon:; String[] items = myList.getSelectedItems(); for(int i=0; i<items.length; i++) kq += items[i] + , ; lbl.setText(kq); } } public static void main(String[] args) { // Khai bo i tng demo ListDemo myFrame = new ListDemo(); myFrame.setSize(300,150); // nh kch c frame myFrame.setVisible(true); // Hin th frame } }
FlowLayout(): khi to i tng trnh by. FlowLayout(int): khi to i tng trnh by vi cch cn l xc nh. FlowLayout(int, int, int): khi to vi ba tham s: Th nht l cch cn l, th hai l khong cch gia hai dng (chiu cao), th ba l khong cch gia hai i tng (chiu ngang). Tham s cn l c th nhn mt trong ba gi tr: FlowLayout.LEFT: cn l tri, l gi tr mc nh. FlowLayout.CENTER: cn l gia. FlowLayout.RIGHT: cn l phi. Chng trnh FlowLayoutDemo minh ho cch trnh by flow layout: To ra mt dy 10 nt nhn v gn vo mt frame theo kiu flow layout.
package chuong9; import java.awt.*; public class FlowLayoutDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has somes buttons!); myFrame.setSize(300,150); // nh kch c frame myFrame.setLayout(new FlowLayout( ));// Thit lp cch trnh by // Khai bo v khi to button for(int i=0; i<10; i++) myFrame.add(new Button(Click+i));// Gn vo frame myFrame.setVisible(true); // Hin th frame } }
GridLayout(int, int): khi to mt i tng trnh by. Hai tham s u vo ln lt l s hng v s ct ca grid trnh by. GridLayout(int, int, int, int): khi to mt i tng trnh by, hai tham s u xc nh s hng v s ct trnh by. Hai tham s sau xc nh khong cch gia cc dng v cc ct ca bng. Lu : khi s lng i tng c chn nhiu hn vo frame, ta mun chng trnh t tnh s hng, hoc t tnh s ct hin th, th ta tham s tng ng l 0. V d:
setLayout(new GridLayout(3,0));
s c nh s ct l 2, s dng l mm do theo s cc i tng trong frame. Chng trnh GridLayoutDemo minh ho cch trnh by grid layout: to ra mt dy 10 nt nhn v gn vo mt frame theo kiu grid layout.
package chuong9; import java.awt.*; public class GridLayoutDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has somes buttons!); myFrame.setSize(300,150); // nh kch c frame myFrame.setLayout(new GridLayout(0,2));// Thit lp cch trnh by // Khai bo v khi to button for(int i=0; i<10; i++) myFrame.add(new Button(Click+i));// Gn vo frame myFrame.setVisible(true); // Hin th frame } }
V d:
myFrame.add(Center, new Button(Click));
s gn vo vng trung tm ca myFrame mt nt nhn c tn l Click. Lu : Cch trnh by border lun chia frame thnh 5 vng xc nh. Nu gn nhiu i tng vo cng mt vng, ch c i tng gn sau l nhn thy c. Nu mun trong mt vng cha c nhiu i tng, ta c th gn vo mi vng mt Panel. Sau trong panel, ta chn cch trnh by ring cho panel v gn cc i tng vo panel. Chng trnh BorderLayoutDemo minh ho cch trnh by border: ta s gn vo nm vng ca frame nm nt nhn khc nhau.
package chuong9; import java.awt.*; public class BorderLayoutDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has somes buttons!); myFrame.setSize(300,150); // nh kch c frame myFrame.setLayout(new BorderLayout()); // nh cch trnh by
Chng 9: Lp trnh giao din // Khai bo v khi to button myFrame.add(West, new Button(West)); // Gn vo vng west myFrame.add(East, new Button(East)); // Gn vo vng east myFrame.add(North, new Button(North)); // Gn vo vng north myFrame.add(South, new Button(South)); // Gn vo vng south // Gn vo vng center myFrame.add(Center, new Button(Center)); myFrame.setVisible(true); // Hin th frame } }
GridBagConstraints.HORIZONAL: i tng c chiu rng kn vng n chim GridBagConstraints.BOTH: i tng c chiu cao v chiu rng ph kn vng n chim.
ipadx/ipady: nh n v tng gim kch thc ca i tng khi khung cha b thay i kch thc (theo chiu X v chiu Y). insets: xc nh khong cch gia cc cell theo bn hng: trn, di, tri, phi. anchor: xc nh v tr neo i tng khi kch thc khung cha thay i. Bao gm: NORTH, NORTHEAST, NORTHWEST, EAST, SOUTH, SOUTHEAST, SOUTHWEST. weightx/weighty: nh khong cch ln ra tng i gia cc i tng vi nhau. Chng trnh GridBagLayoutDemo minh ho cch trnh by GridBag: To ra ba nt nhn trong frame, mi nt c mt s rng buc khc nhau v kch thc v v tr.
package chuong9; import java.awt.*; public class GridBagLayoutDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has somes buttons!); myFrame.setSize(300,150); // nh kch c frame GridBagLayout layout = new GridBagLayout(); myFrame.setLayout(layout); // nh cch trnh by // Khai bo i tng rng buc GridBagConstraints cts = new GridBagConstraints(); cts.fill = GridBagConstraints.BOTH; // Button1: v tr (1,1), kch thc (1,1) Button btn1 = new Button(Click1); cts.gridx = 1; cts.gridy = 1; cts.gridheight = 1; cts.gridwidth = 1; layout.setConstraints(btn1, cts); // nh rng buc myFrame.add(btn1); // Gn vo frame // Button2: v tr (2,2), kch thc (1,1)
Chng 9: Lp trnh giao din Button btn2 = new Button(Click2); cts.gridx = 2; cts.gridy = 2; cts.gridheight = 1; cts.gridwidth = 1; layout.setConstraints(btn2, cts); // nh rng buc myFrame.add(btn2); // Gn vo frame // Button3: v tr (3,3), kch thc (1,1) Button btn3 = new Button(Click3); cts.gridx = 3; cts.gridy = 3; cts.gridheight = 1; cts.gridwidth = 1; layout.setConstraints(btn3, cts); // nh rng buc myFrame.add(btn3); // Gn vo frame myFrame.setVisible(true); // Hin th frame } }
Chng trnh NullLayoutDemo minh ho cch trnh by t do Null layout: to ra hai nt nhn v gn vo frame theo hai cch khc nhau.
package chuong9; import java.awt.*; public class NullLayoutDemo { public static void main(String[] args) { // Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has somes buttons!); myFrame.setSize(300,150); // nh kch c frame myFrame.setLayout(null); // nh cch trnh by // Button1: v tr (10,30), kch thc (100,40) Button btn1 = new Button(Click1); btn1.setSize(100, 40); btn1.setLocation(new Point(10, 30)); myFrame.add(btn1); // Gn vo frame // Button2: v tr (70,120), kch thc (50,20) Button btn2 = new Button(Click2); btn2.setBounds(70, 120, 50, 20); myFrame.add(btn2); // Gn vo frame myFrame.setVisible(true); // Hin th frame } }
9.4 Applet
Applet l mt chng trnh Java c th chy trong cc trnh duyt web c h tr Java. Tt c cc applet u l cc lp con ca lp Applet. to applet, ta cn import hai gi sau:
import java.applet.*; import java.awt.*;
Cc phng thc c bn ca mt applet: init(): Khi to cc tham s, nu c, ca applet. start(): Applet bt u hot ng. stop(): Chm dt hot ng ca applet. destroy(): Thc hin cc thao tc dn dp trc khi thot khi applet. Lu : Khng phi tt c cc applet u phi ci t y 4 phng thc c bn trn. Applet cn c th ci t mt s phng thc tu chn (khng bt buc) sau: paint(Graphics): phng thc v cc i tng giao din bn trong applet. Cc thao tc v ny c thc hin bi i tng ho Graphics (l tham s u vo). repaint(): dng v li cc i tng trong applet. Phng thc ny s t ng gi phng thc update(). update(Graphics): phng thc ny c gi sau khi thc hin phng thc paint nhm tng hiu qu v. Phng ny s t ng gi phng thc paint(). Chng trnh SimpleApplet ci t mt applet n gin, mi phng thc s in ra thng bo rng applet ang trong thi im tng ng.
package chuong9; import java.awt.*; import java.applet.*; public class SimpleApplet extends Applet { private StringBuffer buffer; // Chui thng bo public void init() { // Khi to buffer = new StringBuffer(); addBuffer(initializing);
Chng 9: Lp trnh giao din } public void start() { // Kch hot addBuffer(starting); } public void stop() { // Dng addBuffer(stopping); } public void destroy() { // Thot addBuffer(unloading); } private void addBuffer(String newBuffer) { buffer.append(newBuffer); // Thm thng bo repaint(); } public void paint(Graphics g) { g.drawString(buffer.toString(), 5, 15); // Hin thng bo } }
Trong : Tn applet l tn file m ngun bin dch thnh file chy c ui .class ca Java. Chiu rng v chiu cao l kch thc ca vng trn trang html m applet s c t vo. V d, trong trang myHtml.htm c cha ni dung nh sau:
<HTML> <HEAD> <TITLE> A simple applet </TITLE> </HEAD> <BODY> This is the output of applet: <APPLET CODE = SimpleApplet.class WIDTH=200 HEIGHT=20> </APPLET> </BODY> </HTML>
s nhng applet c nh ngha trong chng trnh SimpleApplet vo mt vng c kch thc 200*20 trong trang myHtml. By gi, ta c th kim nghim chng trnh applet ca mnh bng cch m trang myHtml trn cc trnh duyt thng thng. Chng trnh AppletDemo ci t mt applet c chc nng tng t nh chng trnh EventDemo, thc hin cc thao tc tnh ton c bn trn hai s. Ngoi tr vic y l mt applet, nn c th chy trn mt trang HTML.
package chuong9; import java.awt.*; import java.awt.event.*; import java.applet.*; public class AppletDemo extends Applet implements ActionListener { Label lbl1, lbl2, lblKq; TextField txt1, txt2; Button btnCong, btnTru, btnNhan, btnChia, btnThoat; public void init() { this.setLayout(new GridLayout(6,2)); //Ch hin th 6 dng, 2 ct lbl1 = new Label(So thu nhat:); // Nhn s th nht
Chng 9: Lp trnh giao din this.add(lbl1); txt1 = new TextField(); // vn bn s th nht this.add(txt1); lbl2 = new Label(So thu hai:); // Nhn s th hai this.add(lbl2); txt2 = new TextField(); // vn bn s th hai this.add(txt2); lblKq = new Label(); // Nhn kt qu this.add(lblKq); this.add(new Label()); // Cc nt nhn btnCong = new Button(Cong); // Nt cng btnCong.addActionListener(this); // Bt s kin this.add(btnCong); btnTru = new Button(Tru); // Nt tr btnTru.addActionListener(this); this.add(btnTru); btnNhan = new Button(Nhan); // Nt nhn btnNhan.addActionListener(this); this.add(btnNhan); btnChia = new Button(Chia); // Nt chia btnChia.addActionListener(this); this.add(btnChia); btnThoat = new Button(Thoat); // Nt thot btnThoat.addActionListener(this); this.add(btnThoat); } // Phng thc x l s kin nt c nhn public void actionPerformed(ActionEvent ae) { float x = Float.parseFloat(txt1.getText()); float y = Float.parseFloat(txt2.getText()); float kq = 0; if(ae.getSource() == btnCong) // Cng hai s kq = x + y; if(ae.getSource() == btnTru) // Tr hai s
Chng 9: Lp trnh giao din kq = x - y; if(ae.getSource() == btnNhan) // Nhn hai s kq = x*y; if (ae.getSource() == btnChia) // Chia hai s if (y != 0) kq = x / y; else { lblKq.setText("So chia bang 0"); return; } if(ae.getSource() == btnThoat) // Thot khi chng trnh System.exit(0); // Thay i ni dung kt qu lblKq.setText(Ket qua la: + String.valueOf(kq)); repaint(); // V li cc i tng } }
Hnh 9.17 Kt qu demo Applet bng tnh Lu : s khc nhau gia mt application v mt applet: Application l mt ng dng Java c lp, n c th chy c lp trn my o Java. Trong khi , applet ch chy c khi nhng trong mt trang html, chy nh vo cc trnh duyt web c h tr Java. Application chy da vo hm main(). Trong khi , applet khng c hm main(). hin th cc thng bo, application dng System.out.println(). Trong khi , applet dng phng thc drawString() ca lp Graphics.
Khi , trong m ngun ca applet, ta dng phng thc getParameter() c gi tr cc tham s c truyn vo:
getParameter(Tn_bin);
Chng trnh ParamDemo minh ho vic truyn tham s cho mt applet: Applet m phng giao din tm kim: mt nhn hng dn, mt vn bn v mt nt nhn. Tu vo ngn ng m nhn v nt nhn c gi tr text khc nhau. Bin ngn ng l mt tham s truyn t trnh duyt vo. (y l m phng giao din, c ch tm kim khng hot ng).
package chuong9; import java.awt.*; import java.applet.*; public class ParamDemo extends Applet { Label lbl; TextField txt; Button btn; public void init() { this.setLayout(new GridLayout(2,2)); //Ch hin th 2 dng, 2 ct String langue = getParameter(langue);// Loi ngn ng if (langue.equals(vn)) { // Ting Vit lbl = new Label(Nhap tu khoa); // Nhn s th nht btn = new Button(Tim kiem); // Nt cng } else if (langue.equals(fr)) { // Ting Php lbl = new Label(Tapez des mots); btn = new Button(Chercher); } else { // Ting Anh, mc nh lbl = new Label(Enter keys);
Chng 9: Lp trnh giao din btn = new Button(Search); } txt = new TextField(); this.add(lbl); this.add(txt); this.add(btn); } }
Hnh 9.18 Kt qu demo Applet c tham s Ta c th thay th value ca param bng cc gi tr vn, fr v en thy c cc ch ngn ng khc nhau c hin th trong applet.
9.5 SWING
Swing l th vin lp trnh m rng ca Java. N m rng cc i tng giao din ho c bn ca Java. Swing cn c gi l th vin JFC. Khi mun s dng cc i tng ho ca th vin ny, ta phi khai bo ch th:
import javax.swing.*;
Chng 9: Lp trnh giao din // Gi s ta c file nh myImage trong cng th mc ImageIcon myIcon = new ImageIcon(myImage.gif); // Button1: c nn l nh JButton btn1 = new JButton(Back Image, myIcon); // Gn tooltip cho nt btn1.setToolTipText(Buttons background is an image); myFrame.getContentPane().add(btn1); // Gn vo frame // Button2: c bin l nh JButton btn2 = new JButton(Border Image); // Gn tooltip cho nt btn2.setToolTipText(Buttons border is an image); btn2.setBorder(new MatteBorder(10,10,10,10, myIcon)); myFrame.getContentPane().add(btn2); // Gn vo frame myFrame.setVisible(true); // Hin th frame } }
Hnh 9.19 Kt qu demo JButton Trong chng trnh ny, c dng lnh gn cc i tng vo frame bng cch getContentPane(). y l phng thc m rng cho cc i tng khung cha container. S m rng ny s c trnh by chi tit trong phn tip theo.
V d:
JFrame myFrame = new JFrame(My JFrame); myFrame.getContentPane().add(Center, new JButton(Test));
s gn mt nt nhn c nhn Test vo tng Content ca khung cha myFrame. Chng trnh JFrameDemo minh ho vic gn cc i tng vo cc tng khc nhau: Gn mt nt nhn vo tng ContentPane. Gn mt thanh Menubar c cha mt menu File vo tng MenubarPane.
package chuong9; import javax.swing.*; import java.awt.event.*; public class JFrameDemo extends JFrame implements ActionListener {
Chng 9: Lp trnh giao din private JMenuBar myBar; private JMenu myMenu; public JFrameDemo() { super("JFrame demo"); JButton btn = new JButton("My Button"); this.getContentPane().add("Center", btn); //Gn nt nhn vo tng ContentPane myBar = new JMenuBar(); myMenu = new JMenu("File"); myBar.add(myMenu); // Gn menubar vo tng MenubarPane this.setJMenuBar(myBar); setItemMenu("Open", "open"); setItemMenu("New", "new"); myMenu.add(new JSeparator()); setItemMenu("Save", "save"); setItemMenu("Save as", "saveas"); myMenu.add(new JSeparator()); myMenu.add(new JSeparator()); setItemMenu("Exit", "exit"); // Phng thc bt s kin click vo nt ng frame this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } private void setItemMenu(String label, String command) { JMenuItem item = new JMenuItem(label); item.addActionListener(this); item.setActionCommand(command); myMenu.add(item);
Chng 9: Lp trnh giao din } // Phng thc x l s kin public void actionPerformed(ActionEvent ae) { JMenuItem item = (JMenuItem) ae.getSource(); String cmd = item.getActionCommand(); if (cmd.equals("exit")) { System.exit(0); } else { JOptionPane.showMessageDialog(this, cmd + " was selected."); } } public static void main(String[] args) { JFrameDemo myFrame = new JFrameDemo(); myFrame.setSize(300, 150); // nh kch c frame myFrame.setVisible(true); // Hin th frame } }
Java cung cp trnh n trong th vin AWT v cc tnh nng nng cao trong SWING. Sau y ta xem xt trnh n mt cch chi tit trong SWING.
Hnh 9.20 Kt qu demo gn cc i tng vo cc tng JMenu Trnh n c dng trn cc thanh cng c ca cc ca s hoc l popup menu xut hin khi ta click chut phi vo mt i tng. Cc thnh phn cn bn ca trnh n: Menubar: thanh trnh n Menu: trnh n xung PopupMenu: trnh n xut hin khi click chut phi. MenuItem: cc mc chn ca trnh n.
JMenubar JMenubar l thanh cng c dng cha cc trnh n JMenu. Cc phng thc c bn ca lp JMenubar: JMenubar(): khi to mt thanh cng c cho trnh n add(JMenu): thm mt trnh n Menu ln menubar. t mt menubar ln mt JFrame, ta gi phng thc ca JFrame:
<i tng JFrame>.setJMenuBar(<i tng menubar>);
JMenu Trnh n JMenu l i tng s s xung khi click chut ln i tng hin th ca JMenu. JMenu cn c gi l menu con ca mt thanh trnh n. Cc phng thc c bn ca lp JMenu: JMenu(String): khi to mt JMenu, vi tn xc nh. add(MenuItem): thm mt MenuItem vo JMenu add(JMenu): thm mt menu con vo JMenu c, dng khi mun to menu c nhiu mc. addSeparator(): thm mt ng phn vng vo menu ( nhm cc item vi nhau). X l s kin ca lp JMenu: Kiu s kin: ActionEvent Giao tip ci t: ActionListener Phng thc x l: actionPerformed(ActionEvent); MenuItem JMenuItem l i tng item trong cc trnh n JMenu. Mi item, khi c click vo s c tc dng nh mt nt lnh. Cc phng thc c bn ca lp MenuItem: MenuItem(String): khi to mt item. CheckboxJMenuItem(String): khi to mt item c mc chn nh checkbox. getState(): tr v trng thi ca item. Ch dng cho item c mc chn. enable(): cho php item hot ng (l ch mc nh). disable(): khng cho php item hot ng (lm m item i). X l s kin ca lp MenuItem: Kiu s kin: ActionEvent Giao tip ci t: ActionListener Phng thc x l: actionPerformed(ActionEvent); Chng trnh JMenuDemo minh ho vic s dng cc loi menu: To mt JFrame
To mt JPanel v gn vo JFrame To mt ActionListener cho JPanel To mt JMenubar ca JFrame Trn JMenubar, to mt JMenu File v Edit. Khi click vo s s xung mt menu vi cc item: New, Open, Save, Save As, Exit, v Cut, Copy, Paste tng ng To mt JMenuPopup trn JPanel Khi click chut phi vo JPanel, s s ra mt JMenuPopup gm cc item: Open v Colors. Khi chn Colors mt JMenu cha mt nhm Button xut hin. Khi chn mu th JPanel s i mu Khi click chut vo item no trn cc menu, mt thng bo s hin th tn ca item va c chn. Chng trnh kt thc khi click vo item Exit hoc ng ca s.
package chuong9; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JMenuDemo { public static void main(String[] args) { JFrame frame = new JFrame("Menu Demo"); final JPanel panel = new JPanel(); frame.add(panel); ActionListener listener = new MenuItemActionListener(panel); JMenu file = new JMenu("File"); file.setMnemonic('F'); file.add(menuItem("New", listener, "new", 'N', KeyEvent.VK_N)); file.add(menuItem("Open...", listener, "open", 'O', KeyEvent.VK_O)); file.add(menuItem("Save", listener, "save", 'S', KeyEvent.VK_S)); file.add(menuItem("Save As...", listener, "saveas", 'A', KeyEvent.VK_A)); file.addSeparator(); file.add(menuItem("Exit", listener, "exit", 'E', KeyEvent.VK_E)); JMenu edit = new JMenu("Edit");
Chng 9: Lp trnh giao din edit.setMnemonic('E'); edit.add(menuItem("Cut", listener, "cut", 0, KeyEvent.VK_X)); edit.add(menuItem("Copy", listener, "copy", 'C', KeyEvent.VK_C)); edit.add(menuItem("Paste", listener, "paste", 0, KeyEvent.VK_V)); JMenuBar menubar = new JMenuBar(); menubar.add(file); menubar.add(edit); frame.setJMenuBar(menubar); // to poppup final JPopupMenu popup = new JPopupMenu(); popup.add(menuItem("Open...", listener, "open", 0, 0)); popup.addSeparator(); // Thm mt ng phn cch gia cc item JMenu colors = new JMenu("Colors"); // To mt submenu popup.add(colors); // to nhm radio ButtonGroup colorgroup = new ButtonGroup(); colors.add(radioItem("Red", listener, "color(red)", colorgroup)); colors.add(radioItem("Green", listener, "color(green)", colorgroup)); colors.add(radioItem("Blue", listener, "color(blue)", colorgroup)); // Kt thc ng dng khi click ng ca s frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); panel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { // Nu click chut phi if (e.getButton()==3) popup.show((Component)e.getSource(), e.getX(), e.getY()); } }); // Thm n ti popup menu
Chng 9: Lp trnh giao din frame.setSize(450, 300); frame.setVisible(true); } public static JMenuItem menuItem(String label, ActionListener listener, String command, int mnemonic, int acceleratorKey) { JMenuItem item = new JMenuItem(label); item.addActionListener(listener); item.setActionCommand(command); if (mnemonic != 0) item.setMnemonic((char) mnemonic); if (acceleratorKey != 0) item.setAccelerator(KeyStroke.getKeyStroke(acceleratorKey, java.awt.Event.CTRL_MASK)); return item; } public static JMenuItem radioItem(String label, ActionListener listener, String command, ButtonGroup mutExGroup) { JMenuItem item = new JRadioButtonMenuItem(label); item.addActionListener(listener); item.setActionCommand(command); mutExGroup.add(item); return item; } public static class MenuItemActionListener implements ActionListener { Component parent; public MenuItemActionListener(Component parent) { this.parent = parent; } public void actionPerformed(ActionEvent e) { JMenuItem item = (JMenuItem) e.getSource(); String cmd = item.getActionCommand(); if (cmd.equals("exit")) System.exit(0); else if (cmd.equals("color(red)")) this.parent.setBackground(Color.red); else
Chng 9: Lp trnh giao din if (cmd.equals("color(blue)")) this.parent.setBackground(Color.blue); else if (cmd.equals("color(green)")) this.parent.setBackground(Color.green); else JOptionPane.showMessageDialog(parent, cmd + " was selected."); } } }
Hnh 9.21 Kt qu demo JMenu Lu : V cc i tng m rng ca th vin JFC c b sung kh nhiu tnh nng, c bit l cc tnh nng ho, do , cc i tng ny c nhc im l rt cng knh. V l do nng ti, cho nn hin nay, cc i tng ca th vin JFC vn t c ph bin trong cc ng dng applet.
i vi Panel, ta cng dng GridLayout. V c 10 nt nhn s v cc nt nhn ton t: nt cng, nt nhn, nt chia, nt tr, nt cn bc hai, nt phy thp phn, nt bng, nt lu tha, nt nghch o, nt reset. Nn s to thnh 4 dng, 5 ct: mi dng gm c 3 nt s v hai nt chc nng: o Dng 1: cc nt 7, 8, 9, cng, reset (C). o Dng 2: cc nt 4, 5, 6, tr, lu tha. o Dng 3: cc nt 1, 2, 3, nhn, nghch o. o Dng 4: cc nt 0, thp phn, nt bng, nt chia, nt cn bc hai. Vi cc nt s v nt thp phn, khi click vo nt th k t tng ng c hin ln trn label. Vi cc nt chc nng, khi click vo th thc hin php ton v hin kt qu ra mn hnh, nu c. Khi click vo nt bng (kt qu) th hin kt qu trn label. Chng trnh CalculatorDemo ci t chi tit chng trnh ny.
package chuong9; import java.awt.*; import java.awt.event.*; import java.lang.Math; public class CalculatorDemo extends Frame implements ActionListener { private boolean operatorState; // Trng thi ca php ton private int operator; // Ton t thc hin private float oldIterator; // S hng trc private Label lbl; private Panel pnl; private Button btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnPoint, btnReset, btnAdd, btnSub, btnMul, btnDiv, btnPow, btnSqrt, btnRev, btnResult; public CalculatorDemo() { super(Java Calculator); this.setSize(250, 250); this.setResizable(false); // Khng cho thay i size this.setLayout(null); // Thit lp layout lbl = new Label("0"); // Nhn kt qu lbl.setAlignment(2);
Chng 9: Lp trnh giao din lbl.setSize(240, 30); lbl.setLocation(5, 25); this.add(lbl); Panel pnl = new Panel(); // Panel cha cc nt pnl.setSize(240, 190); pnl.setLocation(5, 55); pnl.setLayout(new GridLayout(4, 5)); // Thit lp layout this.add(pnl); btn7 = new Button(7); // Nt s 7 btn7.addActionListener(this); // Bt s kin click chut pnl.add(btn7); // Gn vo panel btn8 = new Button(8); // Nt s 8 btn8.addActionListener(this); pnl.add(btn8); btn9 = new Button(9); // Nt s 9 btn9.addActionListener(this); pnl.add(btn9); btnAdd = new Button(+); // Nt php ton cng btnAdd.addActionListener(this); pnl.add(btnAdd); btnReset = new Button(C); // Nt reset btnReset.addActionListener(this); pnl.add(btnReset); btn4 = new Button(4); // Nt s 4 btn4.addActionListener(this); pnl.add(btn4); btn5 = new Button(5); // Nt s 5 btn5.addActionListener(this); pnl.add(btn5); btn6 = new Button(6); // Nt s 6 btn6.addActionListener(this); pnl.add(btn6); btnSub = new Button(-); // Nt php ton tr btnSub.addActionListener(this); pnl.add(btnSub); btnPow = new Button(x^y); // Nt php ton lu tha
Chng 9: Lp trnh giao din btnPow.addActionListener(this); pnl.add(btnPow); btn1 = new Button(1); // Nt s 1 btn1.addActionListener(this); pnl.add(btn1); btn2 = new Button(2); // Nt s 2 btn2.addActionListener(this); pnl.add(btn2); btn3 = new Button(3); // Nt s 3 btn3.addActionListener(this); pnl.add(btn3); btnMul = new Button(*); // Nt php ton nhn btnMul.addActionListener(this); pnl.add(btnMul); btnRev = new Button(1/x); // Nt php ton nghch o btnRev.addActionListener(this); pnl.add(btnRev); btn0 = new Button(0); // Nt s 0 btn0.addActionListener(this); pnl.add(btn0); btnPoint = new Button(.); // Nt du thp phn btnPoint.addActionListener(this); pnl.add(btnPoint); btnResult = new Button(=); // Nt kt qu btnResult.addActionListener(this); pnl.add(btnResult); btnDiv = new Button(/); // Nt php ton chia btnDiv.addActionListener(this); pnl.add(btnDiv); btnSqrt = new Button(Sqrt); // Nt php ton cn bc hai btnSqrt.addActionListener(this); pnl.add(btnSqrt); operatorState = true; operator = -1; oldIterator = 0; this.addWindowListener(new WindowAdapter() {
Chng 9: Lp trnh giao din public void windowClosing(WindowEvent e) { System.exit(0); } }); } // Phng thc x l s kin public void actionPerformed(ActionEvent ae) { float result; float newIterator = Float.parseFloat(lbl.getText()); if(ae.getSource() == btnResult) { switch(operator) { case 0: result = oldIterator + newIterator; lbl.setText(String.valueOf(result)); break; case 1: result = oldIterator - newIterator; lbl.setText(String.valueOf(result)); break; case 2: result = oldIterator * newIterator; lbl.setText(String.valueOf(result)); break; case 3: if(newIterator != 0) { result = oldIterator/newIterator; lbl.setText(String.valueOf(result)); } break; case 4:result = (float)Math.pow(oldIterator, newIterator); lbl.setText(String.valueOf(result)); break; } operator = -1; operatorState = true; return; } if(ae.getSource() == btnRev) { newIterator = Float.parseFloat(lbl.getText()); if(newIterator != 0) {
Chng 9: Lp trnh giao din result = (float)1/newIterator; lbl.setText(String.valueOf(result)); } operator = -1; operatorState = true; return; } if(ae.getSource() == btnSqrt) { newIterator = Float.parseFloat(lbl.getText()); if(newIterator >= 0) { result = (float)Math.sqrt(newIterator); lbl.setText(String.valueOf(result)); } operator = -1; operatorState = true; return; } if(ae.getSource() == btnPoint) { lbl.setText(lbl.getText() + .); return; } if(ae.getSource() == btnAdd) { operator = 0; operatorState = true; oldIterator = Float.parseFloat(lbl.getText()); return; } if(ae.getSource() == btnSub) { operator = 1; operatorState = true; oldIterator = Float.parseFloat(lbl.getText()); return; } if(ae.getSource() == btnMul) { operator = 2; operatorState = true; oldIterator = Float.parseFloat(lbl.getText());
Chng 9: Lp trnh giao din return; } if(ae.getSource() == btnDiv) { operator = 3; operatorState = true; oldIterator = Float.parseFloat(lbl.getText()); return; } if(ae.getSource() == btnPow) { operator = 4; operatorState = true; oldIterator = Float.parseFloat(lbl.getText()); return; } if(ae.getSource() == btnReset) { operator = -1; operatorState = true; oldIterator = 0; lbl.setText("0"); return; } // Trng hp click vo nt s if(operatorState) { // Bt u s mi lbl.setText(ae.getActionCommand()); operatorState = false; } else // G tip s c lbl.setText(lbl.getText() + ae.getActionCommand()); } public static void main(String[] args) { // Khai bo v khi to frame CalculatorDemo myFrame = new CalculatorDemo(); myFrame.setVisible(true); // Hin th frame }
TNG KT CHNG 9
Ni dung chng ny trnh by phng php lp trnh giao din vi cc i tng trong th vin chun AWT ca Java: Cc i tng c chc nng lm vt cha cho cc i tng giao din: Frame, Panel, Dialog. Cc i tng l thnh phn giao din: Label, Button, TextField, TextArea, Checkbox, List, Menu. Phng php nm bt v x l cc s kin c th ca tng i tng giao din. Cc phng php trnh by trn cc vt cha: FlowLayout, GridLayout, BorderLayout, GridBagLayout, NullLayout. Gii thiu mt phng php lp trnh giao din Java c nhng trong cc trang web, l lp trnh applet: Cch to ra mt applet vi cc phng thc c bn. Cch nhng mt applet vo mt trang web. Cch kim nghim mt applet sau khi nhng vo trang web bng cc trnh duyt. Ngoi ra, chng ny cng gii thiu cch s dng th vin cc i tng ho m rng JFC ca Java. Cc i tng ca th vin JFC c chc nng hon ton tng t cc i tng tng ng trong th vin chun AWT. Ngoi ra, chng cn c b sung thm mt s kh nng ho cao cp.
BI TP
1. Vit chng trnh thay i mu nn ca frame theo la chn ca ngi dng: To ra cc nt nhn c tn theo cc mu: Blue, Cyan, Gray, Green, Magenta, Orange, Pink, Red, White, Yellow.
Khi click chut vo nt no, mu nn ca frame s i theo mu . 2. Vit chng trnh thay i mu nn trong bi 1 bng vn bn. To ra mt vn bn duy nht, khi ngi dng g vo mt trong s cc mu trong bi 1 v g enter, mu nn ca frame s i theo mu . Nu ngi dng g sai mu, khng lm g c. 3. Vit chng trnh thay i mu nn trong bi 1 bng nt chn radio. To mt nhm cc nt radio tng ng vi cc loi mu. Khi mu no c chn, mu nn ca frame s thay i theo mu . 4. Vit chng trnh thay i mu nn trong bi 1 bng danh sch chn list. To mt List c cc item tng ng vi cc loi mu. Khi mu no c chn, mu nn ca frame s thay i theo mu . 5. Vit chng trnh thay i mu nn trong bi 1 bng menu. To mt menubar, trn c gn mt menu tn l color, khi click chut vo mune color, s s xung cc mu tng ng trong bi 1. Khi mu no c chn, mu nn ca frame s thay i theo mu .
6. Vit chng trnh thay i mu nn trong bi 1 bng menu popup. To mt menu
popup trong frame, khi click chut phi ln frame, s hin ra menu gm cc mu tng ng trong bi 1. Khi mu no c chn, mu nn ca frame s thay i theo mu .
7. Vit li cc chng trnh trong cc bi tp 1 n 6 di dng applet v nhng
Chng 10.
Lung x l
Ni dung chng ny nhm gii thiu: nh ngha mt lung Hiu c vng i ca lung To v qun l lung Gii thch thit lp lung u tin nh th no M t a lung M t mt lung ngm Gii thch c s cn thit ca s ng b Gii thch vai tr ca cc phng thc wait(), notify() v notifyAll(). M t mt iu kin b tc (deadlock condition) M t c ch thu rc
Waiting: i khi mt lung chuyn sang trng thi ch i trong khi mt lung khc thc hin nhim v. Lung ch i chuyn v trng thi thc hin khi ch khi mt lung khc pht tn hiu ti n tip tc thc hin. Timed waiting: mt lung Runnable c th nhp trng thi ch i hn gi trong mt khong thi gian nht nh. Mt lung trong qu trnh chuyn i trnng thi ch ny v trng thi Runnable khi m khong thi gian ht hn hoc khi cc s kin n i xy ra. Terminated: mt lung Runnable i vo trng thi chm dt khi n hon thnh nhim v ca mnh.
Cc lung c th c to ra bng hai cch: Trnh by lp nh l mt lp con ca lp lung, ni m phng thc run() ca lp lung cn c ghi , v d:
class Mydemo extends Thread { public void run() { //thc thi } }
Kt qu chng trnh trn The current Thread is :Thread[main,5,main] The thread is now named: Thread[MyJavaThread,5,main] 0 1 2 Trong kt qu xut ra trn
[main,5,main]
Nhm lung m n ph thuc Quyn u tin c t bi JVM Tn ca lung Lp lung c vi phng thc xy dng, hai trong s cc phng thc xy dng c cp n di y:
public Thread(String threadname) public Thread()
Cu trc mt lung vi tn l threadname Cu trc mt lung vi tn Thread v i km mt s; ly v d, Thread-1, Thread-2, Chng trnh bt u thc thi lung vi vic gi phng thc start(), m phng thc ny ph thuc vo lp lung. Phng thc ny, ln lt, vin dn phng thc run(), ni m phng thc nh ngha tc v c thc thi. Phng thc ny c th vit ln lp con ca lp lung, hoc vi mt i tng Runnable. Chng trnh ChildThread minh ho vic to lung con:
package chuong10; class ChildThread extends Thread { public static void main(String args[]) { ChildThread Objex = new ChildThread(); Objex.create(); System.out.println("This is the main thread"); } public void create() { Thread Objth = new Thread(this);
Chng 10: Lung x l Objth.start(); } public void run() { for (int i = 0; i< 3; i++) { try { System.out.println("This is the child thread"); Thread.sleep(500); } catch (InterruptedException e) { } } } }
Kt qu chng trnh trn This is the child thread This is the main thread This is the child thread This is the child thread
khc thc hin. Bng 10.1 Cc phng thc ca mt lp lung Cc nguyn nhn lm lung khng chy: Lung khng c u tin cao Lung i vo trng thi ng khi dng phng thc sleep() Lung i vo trng thi ch khi dng phng thc wait() Lung nhng quyn chim hu CPU khi dng yield() N b ngn chn khi thc hin vic nhp xut Chng trnh ThreadTest sau minh ho cch s dng vi phng thc ca lung
package chuong10; public class ThreadTest implements Runnable { Thread t; public ThreadTest() { System.out.println(Thread.currentThread().getName()); t = new Thread(this); t.setName("My Thread"); t.start(); } public void run() { System.out.println(Thread.currentThread().getName()); System.out.println(Thread.activeCount()); System.out.println(t.isAlive()); } public static void main(String args[]) { new ThreadTest(); } }
Chng 10: Lung x l setPriority(Thread.activeCount()); } public void run() { try { Thread.sleep(sleep); System.out.println("Name getPriority()); } catch(InterruptedException e) { System.out.println(e.getMessage()); } } } "+ getName()+" Priority = "+
Kt qu chng trnh nh sau: Name Thread-2 Priority = 3 Name Thread-0 Priority = 1 Name Thread-1 Priority = 2
Chng 10: Lung x l Objth1 = new Thread(this); Objth1.start(); Objth2 = new Thread(this); Objth2.setDaemon(true); } public void run() { System.out.println(Thread.activeCount()); System.out.println(Objth1.isDaemon()); System.out.println(Objth2.isDaemon()); } public static void main(String args[]) { new TestDaemon(); } }
Chng 10: Lung x l public void init() { t = new Thread(this); t.start(); } public void paint(Graphics g) { g.drawString(" i = "+i,30,30); } public void run(){ for(i = 1;i<=20;i++) { try { repaint(); Thread.sleep(500); } catch(InterruptedException e) { System.out.println(e.getMessage()); } } } }
Hnh 10.2 a lung vi Applet Trong chng trnh ny, chng ta to ra mt Applet c gi l MyApplet, v thc thi giao din Runnable cung cp kh nng a lung cho applet. Sau , chng ta to ra mt th hin cho lp lung, vi th hin applet hin thi nh l mt tham s khi to. Ri th ta cho lung thc hin bng phng thc start(). Mn hnh s xut ra s t 1 n 20 vi thi gian tr l 500 miligiy gia mi s bng phng thc sleep(). Kt qu chng trnh nh hnh 10.2.
y, tgroup ch ra nhm lung lung cha, str l tn ca nhm lung ang c to ra. Mt s cc phng thc trong nhm lung c cho nh sau:
public synchronized int activeCount()
Tr v tn ca nhm lung
public final ThreadGroup getParent()
Tr v cha ca nhm lung Chng trnh sau y to ra hai nhm lung, mi nhm c hai lung minh ha cch s dng nhm lung:
package chuong10; class NewThread extends Thread { boolean suspendFlag; NewThread(String threadname, ThreadGroup tgOb) { super(tgOb, threadname); System.out.println("New thread: " + this); suspendFlag = false; start(); }
Chng 10: Lung x l public void run() { try { for (int i = 5; i > 0; i--) { System.out.println(getName() + ": " + i); Thread.sleep(1000); synchronized (this) { while (suspendFlag) wait(); } } } catch (Exception e) { System.out.println("Exception in " + getName()); } System.out.println(getName() + " exiting."); } void mysuspend() { suspendFlag = true; } synchronized void myresume() { suspendFlag = false; notify(); } } class ThreadGroupDemo { public static void main(String args[]) { ThreadGroup groupA = new ThreadGroup("Group A"); ThreadGroup groupB = new ThreadGroup("Group B"); NewThread ob1 = new NewThread("One", groupA); NewThread ob2 = new NewThread("Two", groupA); NewThread ob3 = new NewThread("Three", groupB); NewThread ob4 = new NewThread("Four", groupB); System.out.format("%nHere is output from list():"); groupA.list(); groupB.list(); System.out.println(); System.out.println("Suspending Group A"); Thread tga[] = new Thread[groupA.activeCount()];
// Chp tt c cc lung trong nhm lung A vo mng lung. groupA.enumerate(tga); for (int i = 0; i < tga.length; i++) ((NewThread) tga[i]).mysuspend(); // treo tng lung try { Thread.sleep(4000); } catch (InterruptedException e) { System.out.println("Main thread interrupted."); } System.out.println("Resuming Group A"); for (int i = 0; i < tga.length; i++) // khi ng li tng lung trong mng lung ((NewThread) tga[i]).myresume(); // Ch cc lung kt thc try { System.out.println("Waiting for threads to finish."); ob1.join(); ob2.join(); ob3.join(); ob4.join(); } catch (Exception e) { System.out.println("Exception in Main thread"); } System.out.println("Main thread exiting."); } }
Kt qu chng trnh nh sau: New thread: Thread[One,5,Group A] New thread: Thread[Two,5,Group A] New thread: Thread[Three,5,Group B] New thread: Thread[Four,5,Group B] Here is output from list():Four: 5
Two: 5 Three: 5 One: 5 java.lang.ThreadGroup[name=Group A,maxpri=10] Thread[One,5,Group A] Thread[Two,5,Group A] java.lang.ThreadGroup[name=Group B,maxpri=10] Thread[Three,5,Group B] Thread[Four,5,Group B] Suspending Group A Four: 4 Three: 4 Four: 3 Three: 3 Four: 2 Three: 2 Three: 1 Four: 1 Resuming Group A Two: 4 Waiting for threads to finish. One: 4 Four exiting. Two: 3 Three exiting. One: 3 Two: 2 One: 2 Two: 1 One: 1 Two exiting. One exiting. Main thread exiting.
10.3.2 S ng b lung
Trong khi ang lm vic vi nhiu lung, c th nhiu hn mt lung mun thm nhp cng mt bin ti cng thi im. Ly v d, mt lung c th c gng c d liu, trong khi lung khc c gng thay i d liu. Trong trng hp ny, d liu c th b sai lc. Trong nhng trng hp ny, ta cn cho php mt lung hon thnh trn vn tc v ca n (thay i gi tr), v ri th cho php cc lung k tip thc thi. Khi hai hoc nhiu hn cc lung cn thm nhp n mt ti nguyn c chia s, ta cn chc chn rng ti nguyn s c s dng ch bi mt lung ti mt thi im. Tin trnh ny c gi l s ng b (synchronization). Java cung cp c ch ng b bo cho h thng t mt kha ln mt ti nguyn c bit. Mu cht ca s ng b ha l khi nim monitor (s gim st). Mt monitor xem nh l mt hp nh ch cha mt lung ti mt thi im. Tt c cc lung khc c gng thm nhp vo monitor s b tr hon, cho n khi lung bn trong monitor thot ra. Cc lung khc c bo ch i monitor. Nu cn thit lung c monitor c th thm nhp tr li cng monitor .
10.3.3 M ng b
Tt c cc i tng trong Java c lin kt vi cc monitor ca ring n. i vi mt lung i vo monitor ca mt i tng, ta s dng t kha synchronized trc mt phng thc. Khi mt lung ang c thc thi trong phm vi mt phng thc ng b, bt k lung khc hoc phng thc ng b khc c gng gi n trong cng th hin s phi i. Chng trnh Sync chng minh s lm vic ca t kha synchronized (s ng b). y, lp Target c mt phng thc display() (hin th) m phng thc ny ly mt tham s kiu int. S ny c hin th theo dng < s s>. Phng thc Thread.sleep(1000) tm dng lung hin ti sau khi phng thc display() c gi. Phng thc xy dng ca lp Source ly mt tham chiu n mt i tng t ca lp Target, v mt bin s nguyn. y, mt lung mi c to ra. Lung ny gi phng thc run() ca i tng t. Lp chnh Synch to i tng ca lp Target, v ba i tng ca lp Source. i tng target c truyn cho mi i tng Source. Phng thc join() lm lung gi i cho n khi vic lung kt thc.
package chuong10; class Target { synchronized void display(int num) { System.out.print("< "+num); try {
Chng 10: Lung x l Thread.sleep(1000); } catch(InterruptedException e) { System.out.println("Interrupted"); } System.out.println( + num+ ">"); } } class Source implements Runnable { int number; Target target; Thread t; public Source(Target targ,int n) { target = targ; number = n; t = new Thread(this); t.start(); } public void run(){ target.display(number); } } public class Sync { public static void main(String args[]){ Target target = new Target(); int digit = 10; Source s1 = new Source(target,digit++); Source s2 = new Source(target,digit++); Source s3 = new Source(target,digit++); try { s1.t.join(); s2.t.join(); s3.t.join(); } catch(InterruptedException e) { System.out.println("Interrupted"); }
Kt qu hin th nh sau <10 10> <12 12> <11 11> Trong chng trnh trn, c mt dy s ng nhp c hin th bi display(). iu ny c ngha l vic thm nhp b hn ch mt lung ti mi thi im. Nu ta b t kha synchronized t trc phng thc display() ca lp Target, tt c lung trn c th cng lc gi cng phng thc, trn cng i tng. iu kin ny c bit n nh l tnh trng tranh ua (race condition). Trong trng hp ny, vic xut ra ngoi s nh sau <10<11<12 10> 12> 11>
y, object l mt tham chiu n i tng c ng b. Mt khi ng b bo m rng n gi n cc phng thc (m l thnh phn ca i tng) ch sau khi lung hin hnh c thm nhp thnh cng vo monitor ca i tng.
Chng 10: Lung x l SourceSynchBlock s1 = new SourceSynchBlock (target,digit++); SourceSynchBlock s2 = new SourceSynchBlock (target,digit++); SourceSynchBlock s3 = new SourceSynchBlock (target,digit++); try { s1.t.join(); s2.t.join(); s3.t.join(); } catch(InterruptedException e){ System.out.println("Interrupted"); } } }
y, t kha synchronized khng hiu chnh phng thc display(). T kha ny c s dng trong phng thc run() ca lp TargetSynchBlock. Kt qu xut ra mn hnh nh sau: <10 10> <11 11> <12 12> S khng thun li ca cc phng thc ng b Ngi lp trnh thng vit cc chng trnh trn cc n th lung. Tt nhin cc trng thi ny chc chn khng li ch cho a lung. Ly v d, lng khng tn dng vic thc thi ca trnh bin dch. Trnh bin dch Java t Sun khng cha nhiu phng thc ng b. Cc phng thc ng b khng thc thi tt nh l cc phng thc khng ng b. Cc phng thc ny chm hn t ba n bn ln so vi cc phng thc tng ng khng ng b. Trong trng thi ni m vic thc thi l c gii hn, cc phng thc ng b b ngn chn.
Phng thc notify() nh thc hay thng bo cho lung u tin m gi phng thc wait(). Phng thc notifyAll() nh thc hay thng bo tt c cc lung m gi phng thc wait(). Khi tt c lung i vo trng thi sleep, lung c quyn u tin cao nht s chy u tin. Chng trnh Dining biu th cho vic s dng cc phng thc notify() v wait():
package chuong10; class ChopStick { boolean available; ChopStick() { available = true; } public synchronized void takeup(int philo_num, String side) { while (!available) { try { System.out.println("Philosopher is waiting for the + side+ chopstick"); wait(); } catch (InterruptedException e) { } } System.out.println("Philosopher is taking up the + side+ chopstick"); available = false; } public synchronized void putdown(int philo_num, String side) { System.out.println("Philosopher "+ philo_num + " is putting down the " + side+ " chopstick"); available = true; notify(); } } class Philosopher extends Thread { ChopStick left, right; int philo_num; Philosopher(int num, ChopStick chop1, ChopStick chop2) {
Chng 10: Lung x l philo_num = num; left = chop1; right = chop2; } public void eat() { left.takeup(philo_num+ 1, "left"); right.takeup(philo_num+ 1, "right"); System.out.println("Philosopher " + (philo_num + 1) + " is eating"); } public void think() { left.putdown(philo_num+ 1, "left"); right.putdown(philo_num+ 1, "right"); System.out.println("Philosopher " + (philo_num + 1) + " is thinking"); } public void run() { while (true) { eat(); try { sleep(1000); } catch (InterruptedException e) { } think(); try { sleep(1000); } catch (InterruptedException e) { } } } } public class Dining { static ChopStick[] chopsticks = new ChopStick[5]; static Philosopher[] philos = new Philosopher[5]; public static void main(String args[]) { for (int count = 0; count <= 4; count++) { chopsticks[count] = new ChopStick(); }
Chng 10: Lung x l for (int count = 0; count <= 4; count++) philos[count] = new Philosopher(count, chopsticks[count], chopsticks[(count + 1) % 5]); for (int count = 0; count <= 4; count++) { philos[count].start(); } } }
Kt qu xut ra mn hnh nh sau: Philosopher 1 is taking up the left chopstick Philosopher 1 is taking up the right chopstick Philosopher 1 is eating Philosopher 3 is taking up the left chopstick Philosopher 3 is taking up the right chopstick Philosopher 3 is eating Philosopher 5 is taking up the left chopstick Philosopher 5 is waiting for the right chopstick Philosopher 2 is waiting for the left chopstick Philosopher 4 is waiting for the left chopstick Philosopher 1 is putting down the left chopstick Philosopher 1 is putting down the right chopstick Philosopher 1 is thinking Philosopher 3 is putting down the left chopstick Philosopher 3 is putting down the right chopstick Philosopher 3 is thinking .
10.3.6 S b tt
Mt s b tt (deadlock) xy ra khi hai lung c mt ph thuc vng trn mt cp i tng ng b. V d, khi mt lung thm nhp vo monitor trn i tng ObjA, v mt lung khc thm nhp vo monitor trn i tng ObjB. Nu lung trong ObjA c gng gi bt k phng thc ng b trn ObjB, mt b tt xy ra. Kh g li mt b tt bi n him khi xy ra.
Chng 10: Lung x l Thread.sleep(10); } catch (InterruptedException e) { } System.out.println("Thread 2: Waiting for lock 1..."); synchronized (l1) { System.out.println("Thread 2: Holding lock 2 & 1..."); } } } } }
Kt qu ca chng trnh ny c hin th nh sau: Thread 1: Holding lock 1... Thread 2: Holding lock 2... Thread 2: Waiting for lock 1... Thread 1: Waiting for lock 2.. Nh kt qu xut ra, sau khi c kha 1, lung t1 b treo li ch i tng l2 m i tng ny c gi bi lung t2 v n s khng bao gi c nh ra, bi v t2 cng b treo li ch i tng l1 m i tng ny c gi bi t1. V vy, khng lung no c th di chuyn tip. T phi nhn Ctrl-C dng chng trnh.
10.4 Thu rc
Thu rc (garbage collection) ci to hoc lm trng b nh dnh cho cc i tng m cc chng khng c s dng trong thi gian di. Trong ngn ng lp trnh hng i tng khc nh C++, lp trnh vin phi t gii phng b nh. Cn Java t ng tin trnh thu rc gii quyt vn ny. Mt i tng tr nn thch hp cho s thu rc nu khng c tham chiu n n, hoc nu n ng k rng. S thu rc thc thi nh l mt lung ring bit c quyn u tin thp. Ta c th vin dn mt phng thc gc() ca mt i tng kiu Runtime vin dn s thu rc. Ta c th chy phng thc thu rc, nhng khng bo m rng n s thu rc ngay lp tc. Tham chiu khng phi l mc tiu thu rc; ch cc i tng mi c thu rc. V d:
Object a = new Object();
y, s l sai khi ni rng b l mt i tng. N ch l mt i tng tham chiu. Trong on m trn mc d a c gn l null, nhng i tng c to ra bi
new Object() khng th c thu rc, bi v n vn cn c mt tham chiu (b) n n.
Tuy nhin, trong v d cho di y, gi nh rng khng c tham chiu n i tng th n tr nn thch hp cho thu rc.
Object a = new Object(); a = null;
Mt v d khc:
Object m = new Object(); Object m = null;
By gi, i tng u tin c th c thu rc do m ang ang tham chiu ti i tng khc. Chng trnh GCTest minh ho cho thu rc.
package chuong10; public class GCTest { final int CAPACITY = 50000; void eatMemory() { int[] intArray = new int[CAPACITY]; for (int i = 0; i < CAPACITY; i++) intArray[i] = i; } public static void main(String[] args) { GCTest gct = new GCTest(); // to i tng kiu Runtime Runtime r = Runtime.getRuntime(); // xc nh kch thc b nh trng
Chng 10: Lung x l System.out.println("free memory before creating array: " + r.freeMemory()); // cp pht b nh gct.eatMemory(); // xc nh kch thc b nh trng sau khi cp pht System.out.println("free memory after creating array: " + r.freeMemory()); // thu rc ri kim tra b nh trng r.gc(); System.out.println("free memory after running gc(): r.freeMemory()); } } "+
Kt qu xut ra mn hnh ca chng trnh trn nh sau: free memory before creating array: 16047416 free memory after creating array: 15847400 free memory after running gc(): 16103664
TNG KT CHNG 10
Mt lung l n v nh nht ca on m thc thi c m mt tc v ring bit. a lung gi cho thi gian ri l nh nht. iu ny cho php ta vit cc chng trnh c kh nng s dng ti a CPU. Lung bt u thc thi sau khi phng thc start() c gi Lp trnh vin, my o Java, hoc h iu hnh bo m rng CPU c chia s gia cc lung. C hai loi lung trong mt chng trnh Java: Lung ngi dng Lung ngm. Mt nhm lung dng qun l mt nhm cc lung. ng b cho php ch mt lung thm nhp mt ti nguyn c chia s ti mt thi im.
trnh kim sot vng, Java bao gm mt thit k tt trong tin trnh k thut truyn thng s dng cc phng thc wait(), notify() v notifyAll() Mt b tt xy ra khi hai lung c mt ph thuc xoay vng trn mt phn ca cc i tng ng b Thu rc l mt tin trnh nh b nh c nh v cc i tng m khng s dng trong thi gian di, c th ci to hoc lm rnh b nh.
BI TP
1. Kim tra li s hiu bit a. Mt ng dng c th cha ng nhiu lung b. Cc lung con c to ra t lung chnh ng/Sai ng/Sai
c. Mi lung trong mt chng trnh Java c ng k mt quyn u tin m my o Java c th thay i. ng/Sai d. Phng thc____________ c th tm thi ngng vic thc thi lung e. Mc nh, mt lung c mt quyn u tin ________ mt hng s ca _______ f. _________ lung c dng cho cc lung nn, cung cp dch v cho lung khc. g. Trong lung ng b, mt __________ l mt i tng m c s dng nh l mt kha ring bit ln nhau. h. ___________ thng thc thi bi mt vng lp m c s dng lp li vic kim tra mt s iu kin. 2. Vit mt chng trnh m hin th mt s m li tng giy cho n khng, nh hnh sau:
Ban u, s 300 s c hin th. Gi tr s c gim dn cho n 1 n khi ngoi gi tr 0. Gi tr s c tr li 300 mt ln na gim n tr thnh 0. 3. Vit mt chng trnh hin th nh hnh di y:
To ba lung v mt lung chnh trong main. Thc thi mi lung nh mt chng trnh thc thi. Khi chng trnh kt thc, cc cu lnh thot cho mi lung s c hin th. S dng k thut nm bt li.
Tham kho
[1] Jacquie Barker, Beginning Java Objects: From Concepts to Code, Second Edition, Apress, 2005 [2] Trn nh Qu v Nguyn Mnh Hng, Bi ging Lp trnh Hng i tng, Hc vin Cng ngh Bu chnh Vin thng [3] Gio trnh Aptech Java Simplified I [4] Introduction to File Input and Output, http://www.seas.upenn.edu/~cis1xx/resources/java/fileIO/introToFileIO.html [5] http://vi.wikipedia.org/wiki/Java(ngn_ng_lp_trnh) [6] Nhp mn Java vi JDBC v MySQL, http://www.aptech.vn/news/laptrinhvien/612/ [7] Menu Demo, http://www.java2s.com/Code/Java/Swing-JFC/MenuDemo.htm [8] Link List Example in Java, http://www.roseindia.net/java/beginners/linked-listdemo.shtml [9] ThreadGroup Sample in Java, http://www.javasamples.com/showtutorial.php?tutorialid=233 [10] Java Thread Deadlock Demo Program, http://www.herongyang.com/Java-Tools/jstack-Java-Thread-Deadlock-DemoProgram.html [11] Java Runtime class - Invoke the Java garbage collector, http://www.devdaily.com/java/edu/pj/pj010008 [12] Overloading, Overriding, Runtime Types and Object Orientation - Overloading Methods, http://www.janeg.ca/scjp/overload/overloadingMethods.html [13] http://www.congdongjava.com [14] Trnh Thanh Bnh, Trng Anh Hong, Nguyn Vit H, Kim chng giao thc tng tc gia cc thnh phn trong chng trnh a lung s dng lp trnh hng kha cnh, Tp ch thng tin, khoa hc cng ngh ca B thng tin truyn thng, 112010, trang 37