You are on page 1of 260

HC VIN CNG NGH BU CHNH VIN THNG

C S TI TP. H CH MINH






Bi ging:

L
L

P
P
T
T
R
R

N
N
H
H
H
H

N
N
G
G

I
I
T
T

N
N
G
G


Ti liu dng cho h i hc ngnh Cng Ngh Thng Tin
c Hi ng khoa hc khoa
Thng qua ngy 18/09/2010








Bin son :Ths. Bi Cng Giao


LU HNH NI B
Tp. H Ch Minh Nm 2010
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.1 Phng php tip cn ca lp trnh truyn thng ......................... 1
1.1.1 Lp trnh tuyn tnh ............................................................................. 1
1.1.2 Lp trnh cu trc ................................................................................ 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
1.4 Tru tng ha ................................................................................. 4
1.4.1 T chc tru tng theo s phn cp lp ......................................... 4
1.4.2 Tru tng ha c s ca pht trin phn mm ........................... 5
1.5 Xu hng pht trin ca lp trnh hng i tng ..................... 6
1.5.1 Lp trnh hng thnh phn (Component-oriented programming-
COP) ................................................................................................................ 6
1.5.2 Lp trnh hng tc nhn ................................................................... 7
1.5.3 Lp trnh hng kha cnh ................................................................. 7
Chng 2. C bn ngn ng lp trnh Java ................................. 9
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
2.4 Cc ton t v biu thc ................................................................. 21
2.4.1 Cc ton t .......................................................................................... 21
2.4.2 Biu thc ............................................................................................. 25
2.5 Cc cu trc lnh ............................................................................ 26
2.5.1 Lnh if-else .......................................................................................... 26
2.5.2 Lnh switch-case ................................................................................ 27
2.5.3 Vng lp while .................................................................................... 28
2.5.4 Vng lp do-while ............................................................................... 29
2.5.5 Vng lp for ........................................................................................ 29
2.6 Phong cch lp trnh ....................................................................... 31
2.7 Case Study ....................................................................................... 33
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. Tng tc gia cc i tng.................................... 50
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
4.4 Truyn thng ip gia cc i tng .......................................... 57
Chng 5. Quan h gia cc i tng ....................................... 61
5.1 Kt hp v lin kt .......................................................................... 61
5.2 K tha ............................................................................................ 63
5.3 a hnh ............................................................................................. 64
5.4 Lp tru tng ............................................................................... 71
5.5 Giao tip ........................................................................................... 74
5.6 Tnh cht tnh .................................................................................. 76
5.7 Kiu lit k ....................................................................................... 79
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. X l ngoi l ............................................................ 113
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
7.5.6 Nm nhiu kiu ngoi l .................................................................. 134
7.6 Case Study ..................................................................................... 134
Chng 8. X l vo/ra .............................................................. 137
8.1 Lung vo/ra ................................................................................. 137
8.1.1 Gii thiu lung vo/ra .................................................................... 137
8.1.2 Lung byte ........................................................................................ 138
8.1.3 Lung k t ....................................................................................... 140
8.1.4 Lung b m ................................................................................... 141
8.2 Scanning v Formatting ............................................................... 143
8.2.1 Scanning ............................................................................................ 143
8.2.2 Formatting ........................................................................................ 146
8.3 Vo ra t ch dng lnh .......................................................... 148
8.3.1 Vo ra qua lung chun .................................................................. 148
8.3.2 Vo ra qua Console .......................................................................... 154
8.4 Lm vic vi CSDL ....................................................................... 157
8.4.1 JDBC ................................................................................................. 157
8.4.1.1 Gii thiu JDBC .................................................................................. 157
8.4.1.2 Kin trc JDBC ................................................................................... 157
8.4.2 MySQL v Java ................................................................................ 158
8.4.2.1 Ci t Connector/J - JDBC Driver ca MySQL ............................ 158
8.4.2.2 Kim tra Connector/J .......................................................................... 159
8.4.2.3 Thc hin cc cu truy vn ................................................................. 160
Chng 9. Lp trnh giao din ................................................... 166
9.1 Giao din vi cc i tng c bn ............................................. 166
9.1.1 Cc i tng container c bn ...................................................... 166
9.1.1.1 Frame .................................................................................................... 166
9.1.1.2 Panel ...................................................................................................... 167
9.1.1.3 Dialog .................................................................................................... 168
9.1.2 Cc i tng component c bn ................................................... 169
9.1.2.1 Label ..................................................................................................... 169
9.1.2.2 TextField v TextArea ........................................................................ 170
9.1.2.3 Button ................................................................................................... 172
9.1.3 X l s kin ..................................................................................... 173
9.2 Giao din vi cc i tng Multimedia ..................................... 180
9.2.1 nh du v nt chn .................................................................. 180
9.2.2 La chn ........................................................................................... 182
9.2.3 Danh sch .......................................................................................... 184
9.3 Cc k thut trnh by .................................................................. 186
9.3.1 Trnh by Flow Layout .................................................................... 186
9.3.2 Trnh by Grid Layout .................................................................... 187
9.3.3 Trnh by Border Layout ................................................................ 189
9.3.4 Trnh by GridBag Layout ............................................................. 190
9.3.5 Trnh by Null Layout ..................................................................... 192
9.4 Applet ............................................................................................. 193
9.4.1 Cu trc ca mt Applet ................................................................. 194
9.4.2 S dng Applet ................................................................................. 195
9.4.3 Truyn tham s cho Applet ............................................................. 199
9.5 SWING ........................................................................................... 200
9.5.1 M rng cc i tng component ................................................. 201
9.5.2 M rng cc i tng container ................................................... 202
9.6 Case Study ..................................................................................... 210
Chng 10. Lung x l .............................................................. 219
10.1 Gii thiu lung ........................................................................... 219
10.2 To v qun l lung .................................................................. 220
10.2.1 To lung ........................................................................................ 220
10.2.2 Phng thc ca lp lung ........................................................... 223
10.2.3 Quyn u tin ca lung ................................................................ 225
10.2.4 Lung ngm .................................................................................... 226
10.2.5 a lung vi Applet ....................................................................... 227
10.3 Nhm lung ................................................................................. 229
10.3.1 Gii thiu nhm lung ................................................................... 229
10.3.2 S ng b lung ............................................................................ 233
10.3.3 M ng b ..................................................................................... 233
10.3.4 S dng khi ng b .................................................................... 235
10.3.5 K thut i thng bo ............................................................... 237
10.3.6 S b tt .......................................................................................... 240
10.4 Thu rc ......................................................................................... 242
Tham kho ...................................................................................... 247
Danh sch hnh

Hnh 1.1 S phn cp tru tng ca cc i tng t nhin. .................................. 5
Hnh 2.1 Cch bin dch truyn thng .......................................................................... 10
Hnh 2.2 Dch chng trnh Java .................................................................................. 11
Hnh 2.3 My o Java thc hin m bytecode c lp mi trng hot ng ............. 12
Hnh 2.4 Cng m bytecode c th c hiu bi hai my o ..................................... 13
Hnh 2.5 Phn tch mt chng trnh Java n gin .................................................... 14
Hnh 3.1 Phn r ng dng t trn xung. ................................................................... 38
Hnh 3.2 Gn ng dng t di ln. ............................................................................. 39
Hnh 3.3 S dng mt bin tham chiu ch ti i tng trong b nh. ................. 45
Hnh 3.4 Hai bin tham chiu ti cng mt i tng. ................................................ 46
Hnh 3.5 Chuyn y tham chiu ti Student th hai. ..................................................... 46
Hnh 3.6 Chuyn x tham chiu ti Student th hai. ..................................................... 47
Hnh 3.7 i tng Student m ci. ............................................................................. 47
Hnh 4.1 Cc i tng trong h thng phi cng tc vi nhau hon tt s mnh
SRS ............................................................................................................................... 51
Hnh 4.2 Thng ip c truyn qua li gia cc i tng Course v Student ....... 58
Hnh 4.3 Ngi yu cu ch thy chi tit bn ngoi ca vic trao i thng ip. ...... 58
Hnh 5.1 Kt hp ba ngi ............................................................................................. 62
Hnh 5.2 Mt th hin tng ng bng ba kt hp hai ngi .................................... 62
Hnh 6.1 Hu ht tp hp t ng co li khi mt phn t b ly ra .............................. 96
Hnh 6.2 Dng kho truy cp trc tip i tng trong tp hp t in ................. 96
Hnh 6.3 Cc tp hp khng phi l b cho php nhiu tham chiu ti cng mt i
tng. ............................................................................................................................ 97
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. .................................................................................. 114
Hnh 7.2 Nu khng c ngoi l c nm ra trong khi try, tt c cc khi catch c
b qua. ........................................................................................................................ 117
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. ................................................................................ 118
Hnh 7.4 My o Java theo di vic th t cc phng thc c gi bng cch to
chng gi (call stack). ................................................................................................. 123
Hnh 7.5 Khi mt phng thc chm dt, n b ly ra khi chng. .......................... 123
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 .......................................................................... 216
Hnh 10.1 Vng i ca lung ................................................................................... 220
Hnh 10.2 a lung vi Applet .................................................................................. 228
Danh sch bng

Bng 2.1 Cc ton t s hc ......................................................................................... 22
Bng 2.2 Cc ton t bit ............................................................................................... 23
Bng 2.3 Cc ton t quan h. ...................................................................................... 24
Bng 2.4 Cc ton t logic ........................................................................................... 24
Bng 2.5 Th t u tin cc ton t ............................................................................. 25
Bng 4.1 Phm vi truy cp ca cc thnh vin ca lp ................................................ 52
Bng 7.1 Danh sch mt s ngoi l .......................................................................... 128
Bng 10.1 Cc phng thc ca mt lp lung ......................................................... 224

Thut ng vit tt

API Application Programming Interface
CSDL C s d liu
CTDL Cu trc d liu
GUI Graphic User Interface
JDBC Java DataBase Connectivity
JFC Java Foundation Class
JVM Java Virtual Machine
LIFO Last in, First out
ODBC Open Database Connectivity
RDBMS Relational Database Management Systems
SRS Student Registration System




Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 1 --------------------------------------
Chng 1. Tng quan v lp trnh hng i tng

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.
1.1 Phng php tip cn ca lp trnh truyn thng
Lp trnh truyn thng tri qua hai giai on:
Giai on s khai, khi khi nim lp trnh mi ra i, l lp trnh tuyn tnh.
Giai on tip theo, l lp trnh hng cu trc.
1.1.1 Lp trnh tuyn tnh
c trng c bn ca lp trnh tuyn tnh l t duy theo li tun t. Chng trnh s
c thc hin tun t t u n cui, lnh ny k tip lnh kia cho n khi kt thc
chng trnh.
c trng
Lp trnh tuyn tnh c hai c trng:
n gin: chng trnh c tin hnh n gin theo li tun t, khng phc
tp.
n lung: ch c mt lung (thread) cng vic duy nht, v cc cng vic
c thc hin tun t trong lung .
Tnh cht
u im: Do tnh n gin, lp trnh tuyn tnh c u im l chng trnh n
gin, d hiu. Lp trnh tuyn tnh c ng dng cho cc chng trnh n gin.
Nhc im: Vi cc ng dng phc tp, ngi ta khng th dng lp trnh
tuyn tnh gii quyt.
Ngy nay, lp trnh tuyn tnh ch tn ti trong phm vi cc m un nh nht ca cc
phng php lp trnh khc. V d trong mt chng trnh con ca lp trnh cu trc,
cc lnh cng c thc hin theo tun t t u n cui chng trnh con.
1.1.2 Lp trnh cu trc
Trong lp trnh hng cu trc, chng trnh chnh c chia nh thnh cc chng
trnh con v mi chng trnh con thc hin mt cng vic xc nh. Chng trnh
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 2 --------------------------------------
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
Trong chng trnh, gii thut c quan h ph thuc vo CTDL:
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.
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.
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 3 --------------------------------------
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.
1.2 Phng php tip cn lp trnh hng i tng
Xut pht t hai hn ch chnh ca phng php lp trnh cu trc:
Khng qun l c s thay i d liu khi c nhiu chng trnh cng thay
i mt bin chung. Vn ny c bit nghim trng khi cc ng dng ngy cng
ln, ngi ta khng th kim sot c s truy nhp n cc bin d liu chung.
Khng tit kim c ti nguyn con ngi: Gii thut gn lin vi CTDL, nu
thay i CTDL, s phi thay i gii thut, v do , phi vit li m chng trnh
t u.
khc phc c hai hn ch ny khi gii quyt cc bi ton ln, ngi ta xy dng
mt phng php tip cn mi, l phng php lp trnh hng i tng, vi hai mc
ch chnh:
ng gi d liu hn ch s truy nhp t do vo d liu, khng qun l
c.
Cho php s dng li m ngun, hn ch vic phi vit li m t u cho cc
chng trnh.
Ngn ng lp trnh hng i tng ph bin hin nay l Java v C++. Tuy nhin,
C++ mc d cng c nhng c trng c bn ca lp trnh hng i tng nhng vn
khng phi l ngn ng lp trnh thun hng i tng. Java tht s l mt ngn ng
lp trnh thun hng i tng.
1.3 Cc c trng ca lp trnh hng i tng
1.3.1 Tnh ng gi d liu
D liu lun c t chc thnh cc thuc tnh ca lp i tng. Vic truy nhp n
d liu phi thng qua cc phng thc ca i tng lp.
Trong mt i tng, d liu hay thao tc hay c hai c th l ring (private) hoc
chung (public) ca i tng . Thao tc hay d liu ring l thuc v i tng
ch c truy cp bi cc thnh phn ca i tng, iu ny ngha l thao tc hay d
liu ring khng th truy cp bi cc phn khc ca chng trnh tn ti ngoi i
tng. Khi thao tc hay d liu l chung, cc phn khc ca chng trnh c th truy
cp n mc d n c nh ngha trong mt i tng. Cc thnh phn chung ca
mt i tng dng cung cp mt giao din c iu khin cho cc thnh thnh ring
ca i tng.
C ch ng gi (encapsulation) l phng thc tt thc hin c ch che du thng
tin so vi cc ngn ng lp trnh cu trc.
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 4 --------------------------------------
1.3.2 Tnh k tha
Cho php s dng li m ngun. Cc lp i tng c th k tha (inheritance) t cc
lp i tng khc. Khi , trong cc lp k tha, c th s dng cc phng thc
hot ng ca cc lp b k tha, m khng cn phi nh ngha li.
Vic cho php s dng li m ngun c thc hin thng qua c ch k tha trong
lp trnh hng i tng. Theo :
Cc lp c th c k tha nhau tn dng cc thuc tnh, cc phng thc
ca nhau.
Trong lp dn xut (lp k tha) c th s dng li cc phng thc ca lp c
s (lp b lp khc k tha) m khng cn thit phi ci t li m ngun.
Ngay c khi lp dn xut nh ngha li cc phng thc cho mnh, lp c s
cng khng b nh hng v khng phi sa li bt k mt on m ngun no.
1.3.3 Tnh a hnh
Kh nng cho mt thng ip c th thay i cch thc hin ca n theo lp c th
ca i tng nhn thng ip. Khi mt lp dn xut c to ra, n c th thay i
cch thc hin cc phng thc no m n tha hng t lp c s ca n. Mt
thng ip khi c gi n mt i tng ca lp c s, s dng phng thc
nh ngha cho n trong lp c s. Nu mt lp dn xut nh ngha li mt phng
thc tha hng t lp c s ca n th mt thng ip c cng tn vi phng thc
ny, khi c gi ti mt i tng ca lp dn xut s gi phng thc nh ngha
cho lp dn xut.
Nh vy a hnh (polymorphism) l kh nng cho php gi cng mt thng ip n
nhng i tng khc nhau c cng chung mt c im, ni cch khc thng ip
c gi i khng cn bit thc th nhn thuc lp no, ch bit rng tp hp cc thc
th nhn c chung mt tnh cht no . Chng hn, thng ip v hnh c gi n
c hai i tng hnh hp v hnh trn. Trong hai i tng ny u c chung phng
thc v hnh, tuy nhin tu theo thi im m i tng nhn thng ip, hnh tng
ng s c v ln.
1.4 Tru tng ha
1.4.1 T chc tru tng theo s phn cp lp
Thm ch mc d no con ngi gii s tru tng cc khi nim nh bn ng
i v cnh quan, vn cn s lng rt ln cc cng vic tru tng ho ring l m
chng ta thng gp trong cuc sng. i ph s phc tp ny con ngi phi sp
xp thng tin mt cch c h thng theo cc tiu chun no ; X l ny gi l s
phn lp (classification).
V d nh khoa hc phn cp theo lp tt c i tng t nhin thuc v ng vt,
hoc cy, hoc khong sn. c phn l ng vt, n phi tho iu kin sau:
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 5 --------------------------------------
Vt th sng.
T di chuyn.
Phn ng khi b kch thch.
Qui lut cho mt i tng l cy th hi khc:
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.

Hnh 1.1 S phn cp tru tng ca cc i tng t nhin.
1.4.2 Tru tng ha c s ca pht trin phn mm
Khi ghi nhn cc yu cu cho mt d n phn mm, chng ta thng bt u bng
cch thu thp thng tin chi tit v tnh hnh thc t m trn h thng s hot ng.
Nhng chi tit ny thng l mt s tng hp ca
Thng tin t nhng ngi s dng h thng c chng ta phng vn.
Nhng hot ng m chng ta quan st t nghip v hng ngy ca ngi s
dng h thng.
K n chng ta phi chn lc ra nhng chi tit no lin quan ti mc ch s dng h
thng. Vic ny l cn thit v chng ta khng th t ng ho tt c h thng nghip
v bng phn mm! Vic bao gm qu nhiu chi tit s lm h thng phc tp v kh
Cc i tng t nhin
Cy
ng vt
Khong sn
ng vt
c v
C Chim B st Lng c Cn trng
Ch B Kh
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 6 --------------------------------------
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.
1.5 Xu hng pht trin ca lp trnh hng i tng
1.5.1 Lp trnh hng thnh phn (Component-oriented programming-COP)
Xut pht t lp trnh hng i tng, t duy lp trnh hng thnh phn theo
tng:
Gii quyt bi ton bng cch xy dng mt tp cc thnh phn (component) c
tnh c lp tng i vi nhau. Mi thnh phn m nhim mt phn cng vic
nht nh.
Sau , ngi ta ghp cc thnh phn vi nhau thu c mt phn mm tho
mn mt tp cc yu cu xc nh.
Vi lp trnh hng thnh phn, ngi ta c th tin hnh lp trnh theo phng php
sau:
Xy dng mt th vin cc thnh phn, mi thnh phn thc hin mt cng
vic xc nh.
Khi cn pht trin mt phn mm c th, ngi ta ch cn chn nhng thnh
phn c sn trong th vin ghp li vi nhau. Ngi lp trnh ch phi pht trin
thm cc thnh phn mnh cn m cha c trong th vin.
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 7 --------------------------------------
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)
1.5.2 Lp trnh hng tc nhn
Lp trnh hng agent c th xem l mt mc tru tng cao hn ca lp trnh hng
thnh phn.
Trong , cc agent l cc thnh phn c kh nng hot ng c lp, t ch hon
thnh cng vic ca mnh. Hn na, cc agent c kh nng ch ng lin lc vi cc
agent khc c th phi hp, cng tc hay cnh tranh nhau hon thnh nhim v.
Lp trnh hng agent c hai c trng c bn:
Th nht l kh nng t ch ca mi agent hon thnh nhim v ring ca
n.
Th hai l tnh t chc x hi gia cc agent, cho php cc agent phi hp,
cng tc, cnh tranh nhau hon thnh nhim v chung ca ton h thng.
1.5.3 Lp trnh hng kha cnh
Phng php lp trnh hng kha cnh l phng php lp trnh pht trin t duy tch
bit cc mi quan tm khc nhau thnh cc m un khc nhau. y, mt mi quan
tm thng khng phi mt chc nng nghip v c th v c th ng gi m l mt
kha cnh (thuc tnh) chung m nhiu m un phn mm trong cng h thng nn c,
v d lu vt thao tc v li (error logging).
Vi AOP, chng ta c th ci t cc mi quan tm chung ct ngang h thng bng cc
m un c bit gi l aspect thay v dn tri chng trn cc m un nghip v lin
quan. Cc aspect sau c t kt hp vi cc m un nghip v khc bng qu
trnh gi l an (weaving) bng b bin dch c bit.
AspectJ l mt cng c AOP cho ngn ng lp trnh Java. Trnh bin dch AspectJ s
an xen chng trnh Java chnh vi cc aspect thnh cc tp tin bytecode chy trn
my o Java.
TNG KT CHNG 1
Ni dung chng 1 trnh by cc vn tng quan lin quan n phng php tip
cn hng i tng trong lp trnh:
Chng 1: Tng quan v lp trnh hng i tng
Bin son : Bi Cng Giao --------------------------------------- 8 --------------------------------------
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 kht,
ph mt, th c th n ung, 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?
3. Chn mt bi ton m bn mun m hnh ho t cch tip cn hng i tng.
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: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 9 --------------------------------------
Chng 2. C bn ngn ng lp trnh Java

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.
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
2.1 c trng ca ngn ng Java
Java c nhng c trng c bn sau:
n gin
Hng i tng
c lp phn cng v h iu hnh
Mnh m
Bo mt
Phn tn
a lung
Linh ng
n gin
Nhng ngi thit k mong mun pht trin mt ngn ng d hc v quen thuc vi
a s ngi lp trnh. Do vy Java loi b cc c trng phc tp ca C v C++ nh:
Loi b thao tc con tr, thao tc nh ngha chng ton t (operator
overloading)
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.
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 10 --------------------------------------
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.

Hnh 2.1 Cch bin dch truyn thng
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
// Chng trnh C
#include <stdio.h>
main() {
printf(Hello!);
}
M ngun vit trn
C ph thuc mi
trng hot ng.
Trnh bin dch
C cho Solaris
Trnh bin dch
C cho Windows
Trnh bin dch
C cho Linux
Phin bn Solaris Phin bn Windows Phin bn Linux
to ra
M nh phn ph
thuc mi
trng hot
ng.
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 11 --------------------------------------
y. Do vy, khi chy trn mt nn phn cng khc, bt buc phi bin dch li m
ngun.

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.
// Chng trnh Java
public class Hello {
public static void main( String[ ] args) {
System.out.println(Hello!);
}
}
M ngun Java c
lp mi trng hot
ng.
Trnh bin dch
Java cho Solaris
Trnh bin dch
Java cho Windows
Trnh bin dch
Java cho Linux
M bytecode c lp
mi trng hot ng.
to ra
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 12 --------------------------------------
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.


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.
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)
M bytecode c lp mi
trng hot ng chy di
s qun l ca my o
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 13 --------------------------------------
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.
My o Java ph thuc
mi trng hot ng
B
My o Java ph thuc
mi trng hot ng
A
A B
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 14 --------------------------------------
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.
2.2 Kin trc chng trnh v c ch thc thi ca Java
Dng c bn ca mt tp tin m ngun Java c cu trc nh hnh 2.5 sau :

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>;
// Mt chng trnh Java n gin
package packageName;
import java.awt.*;

class ClassName {
int i; // khai bo thuc tnh
public void methodName() {
statements; // lnh thc hin
}
}
y l dng
ghi ch
Khai bo lp Khai bo phng
thc
Khai bo tn gi,
nu c
Khai bo tn th
vin sn c, nu
cn dng
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 15 --------------------------------------
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)
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 16 --------------------------------------
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
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 17 --------------------------------------
ax
2
+bx+c=0 */
Ghi ch kt thc dng: ghi ch bt u bng // nh
// Gii phng trnh bc hai
// ax
2
+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
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 18 --------------------------------------
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 Cc kiu d liu c bn v bin
2.3.1 Kiu d liu c bn
byte: Dng lu d liu kiu s nguyn c kch thc mt byte (8 bit). Phm vi
biu din gi tr t -128 n 127. Gi tr mc nh l 0.
char: Dng lu d liu kiu k t hoc s nguyn khng m c kch thc 2 byte
(16 bit). Phm vi biu din gi tr t \u0000 n \uFFFF. Gi tr mc nh l 0.
boolean: Dng lu d liu ch c hai trng thi ng hoc sai ( ln ch c 1
bit). Phm vi biu din gi tr l true, false. Gi tr mc nh l false.
short: Dng lu d liu c kiu s nguyn, kch c 2 byte (16 bit). Phm vi biu
din gi tr t - 32768 n 32767. Gi tr mc nh l 0.
int: Dng lu d liu c kiu s nguyn, kch c 4 byte (32 bit). Phm vi biu
din gi tr t -2,147,483,648 n 2,147,483,647. Gi tr mc nh l 0.
float: Dng lu d liu c kiu s thc, kch c 4 byte (32 bit). Gi tr mc nh
l 0.0f.
double: Dng lu d liu c kiu s thc c kch thc ln n 8 byte. Gi tr
mc nh l 0.00d.
long: Dng lu d liu c kiu s nguyn c kch thc ln n 8 byte. Gi tr
mc nh l 0l.
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 19 --------------------------------------
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;
Cc bin sau y khng hp l:
int 1bad;
int number#sign;
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 20 --------------------------------------
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;
u tin gi tr du phy ng c c i thnh gi tr nguyn 35. Sau n c
cng vi 1 v kt qu l gi tr 36 c lu vo b.
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 21 --------------------------------------
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 = "";
gn gi tr null (cha c gn gi tr ln no)
String s = null;
2.4 Cc ton t v biu thc
2.4.1 Cc ton t
Java cung cp cc dng ton t sau:
Ton t s hc
Ton t bit
Ton t quan h
Ton t logic
Ton t iu kin
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 22 --------------------------------------
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.

Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 23 --------------------------------------
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.
^ Ton t Exclusive OR bit
Tr v gi tr l 1 nu ch mt trong cc ton hng l 1 v tr 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
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 24 --------------------------------------
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.
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 25 --------------------------------------
Th t u tin ca cc ton t
Cc biu thc c vit ra ni chung gm nhiu ton t. Th t u tin quyt nh trt
t thc hin cc ton t trn cc biu thc. Bng di y lit k th t thc hin cc
ton t trong Java
Th t Ton t
1 Cc ton t n nh +, -, ++, --
2 Cc ton t s hc v cc ton t dch nh *, /, +, -, <<, >>
3 Cc ton t quan h nh >, <, >=, <=, ==, !=
4 Cc ton t logic v bit nh &&, ||, &, |, ^
5 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 c lng gi nh sau:
((8 * (y + z)) + y) * x
((8 * 5) + y) * x
(40 + y) * x
42 * x
42
2.4.2 Biu thc
Mt biu thc n gin trong Java l
Hng: 7, false
Mt k t: A, 3
Mt chui: foo, Java
Tn ca bin: myString, x
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 26 --------------------------------------
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 ;

biu thc ((8 * (y + z)) + y) * x lng gi ti 4, v vy biu thc ny c kiu int.
2.5 Cc cu trc lnh
Java cung cp hai loi cu trc iu khin:
iu khin r nhnh
if-else
swich-case
Vng lp (loop)
while
do-while
for
2.5.1 Lnh if-else
Lnh if-else kim tra gi tr dng boolean ca iu kin. Nu gi tr iu kin l true
th ch c khi lnh sau if s c thc hin, nu l false th ch c khi lnh sau else
c thc hin.
C php:
if (iu kin) {
khi lnh 1;
} else {
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 27 --------------------------------------
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 }.
2.5.2 Lnh switch-case
Khi lnh switch-case c th c s dng thay th cu lnh if-else trong trng hp
mt biu thc cho ra nhiu kt qu.
C php:
swich (biu thc) {
case gi tr 1: khi lnh 1;
break;
case gi tr 2: khi lnh 2;
break;

case gi tr N: khi lnh N;
break;
default: khi lnh mc nh;
}

biu thc : Bin cha mt gi tr xc nh.
gi tr 1, gi tr 2, . gi tr N: Cc gi tr hng s ph hp vi gi tr trn biu thc.
khi lnh 1, khi lnh 1 khi lnh N: Khi lnh c thc thi khi trng hp tng
ng c gi tr true.
break: T kho c s dng b qua tt c cc cu lnh sau v chuyn iu
khin ti cu trc sau switch.
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 28 --------------------------------------
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 lnh s hin th Tuesday.
2.5.3 Vng lp while
Vng lp while thc thi khi lnh khi iu kin vn l true v dng li khi iu kin
thc thi nhn gi tr false. C php:
while(iu kin) {
khi lnh;
}
iu kin: c gi tr boolean; vng lp s tip tc cho nu iu kin vn c gi tr true.
khi lnh: Khi lnh c thc hin nu iu kin nhn gi tr true
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
Bin son : Bi Cng Giao --------------------------------------- 29 --------------------------------------
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
2.5.4 Vng lp do-while
Vng lp do-while thc thi khi lnh khi m iu kin l true, tng t nh vng lp
while, ngoi tr do-while thc hin lnh t nht mt ln ngay c khi iu kin l false.
C php:
do {
khi lnh;
} while(iu kin);

iu kin: Biu thc boolean; vng lp s tip tc khi m iu kin vn c gi tr true.
khi lnh: Khi lnh lun c thc hin ln th nht, t vng lp th hai, chng
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.
2.5.5 Vng lp for
Vng lp for cung cp mt dng kt hp tt c cc c im chung ca tt c cc loi
vng lp: gi tr khi to ca bin chy, iu kin dng ca vng lp v lnh thay i
gi tr ca bin chy.
C php:
for(khi lnh khi to; iu kin; khi lnh thay i bin chy) {
khi lnh;
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 30 --------------------------------------
}
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");

Kt qu ca on lnh:

1
2
Lp kt thc

quay li vng lp ta s dng lnh continue. V d:
// x chy t 1 ti 4 ...
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 31 --------------------------------------
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");
Kt qu ca on lnh trn:

1
2
4
Lp kt thc

2.6 Phong cch lp trnh
Ngi lp trnh gii th chng trnh vit phi cho d c, sao cho nhng ngi lp
trnh chung d theo di v bo tr. Phong cch lp trnh sau y gip to nn cc
chng trnh sng sa:
Canh l cho tng khi lnh, v d:
public class IndentationExample {
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
System.out.print(i);
if ((i == 2) || (i == 4)) {
if (i == 2)
System.out.print("Two ");
else
System.out.print("Four ");
System.out.println("is an even number");
} else if ((i == 1) || (i == 3)) {
if (i == 1)
System.out.print("One ");
else
System.out.print("Three ");
System.out.println("is an odd number");
}
}
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 32 --------------------------------------
}
}

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;
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 33 --------------------------------------
Phi l
int grade;
Trnh t tn qu di, nh:
double averageThirdQuarterReturnOnInvestment;
mt gi thay th:
double avg3rdQtrROI;
2.7 Case Study
By gi, p dng cc ni dung hc trong chng ny vit mt chng trnh tnh
chu vi v din tch ca mt hnh ch nht c kch thc x,y vi yu cu:
Kch thc x, y nhp t tham s dng lnh.
Phi kim tra x, y l cc s nguyn dng hay khng trc khi tnh ton.
In kt qu tnh ton ra mn hnh.
y l chng trnh thc hin bi ton ny.

package chuong2;
class RectangleDemo {
public static void main(String args[]) {
// khai bo cc bin lu gi kch thc ca hnh ch nht
int x = 0, y = 0;

// c cc kch thc t tham s dng lnh
nu truyn hai tham s th mi tnh tip */
if (args.length >= 2) {
//chuyn kiu t String sang integer
x = Integer.parseInt(args[0]);
y = Integer.parseInt(args[1]);
}

/*Tnh chu vi v din tch hnh ch nht
nu c hai tham s u dng th mi tnh */
if (x>0 && y>0) {
// tnh chu vi
int chuvi = 2*(x + y);
System.out.println (Chu vi l + chuvi);
// tnh din tch
int dientich = x*y;
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 34 --------------------------------------
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
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 35 --------------------------------------
- Cc ton t logic
- Ton t u kin
- Ton t gn
Java cung cp cc cu trc iu khin lnh:
- if-else
- switch
- for
- while
- do while
Mt vi qui tc lm chng trnh sng sa.
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?
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 36 --------------------------------------
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++;
Chng 2: C bn ngn ng lp trnh Java
Bin son : Bi Cng Giao --------------------------------------- 37 --------------------------------------
} while(i < 5);
System.out.println(sum);
}
}
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;
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
Bin son : Bi Cng Giao --------------------------------------- 38 --------------------------------------
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
Thu rc b nh
3.1 Phn r phn mm theo cch tip cn hng i tng
Nh cp phn 1.1.2, i vi lp trnh theo hng chc nng ta phn r phn
mm t trn xung (top down), sau khi cc chc nng c th cc nt l c hon
thnh chng c gn kt li ra ng dng hon chnh theo hng t di ln. V d
nh h thng chng trnh ng k sinh vin SRS c minh ho bng hnh 3.1 v 3.2
nh sau:

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.
ng k Sinh vin
Hin th danh
sch kho hc
Sinh vin chn
kho hc
Kim tra Sinh vin c
iu kin ng k

Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 39 --------------------------------------
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 .

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.
3.2 Khi nim i tng
Trong lp trnh hng i tng, tt c cc thc th trong h thng u c coi l cc
i tng c th. i tng l mt thc th hot ng khi chng trnh ang chy.
V d:
1. Trong bi ton qun l bun bn xe hi ca mt ca hng kinh doanh, mi chic xe
ang c mt trong ca hng c coi l mt i tng. Chng hn, mt chic xe
nhn hiu Ford, mu trng, gi 5000$ l mt i tng.
2. Trong bi ton qun l nhn vin ca mt vn phng, mi nhn vin trong vn
phng c coi l mt i tng. Chng hn, nhn vin tn l Vinh, 25 tui lm
phng hnh chnh l mt i tng.
Mt i tng l mt thc th ang tn ti trong h thng v c xc nh bng ba
yu t:
nh danh i tng: xc nh duy nht cho mi i tng trong h thng,
nhm phn bit cc i tng vi nhau.
Trng thi ca i tng: l s t hp ca cc gi tr ca cc thuc tnh m i
tng ang c.
ng k Sinh vin
Hin th danh sch
kho hc
Sinh vin chn
kho hc
Kim tra Sinh vin c
iu kin ng k

Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 40 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 41 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 42 --------------------------------------
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:
Nhn hiu xe
Mu xe
Gi xe
Cng sut xe (m lc)
3.3 Khi nim lp
Trong lp trnh hng i tng, i tng l mt thc th c th, tn ti trong h
thng. Trong khi , lp l mt khi nim tru tng, dng ch mt tp hp cc i
tng c mt trong h thng.
V d:
1. Trong bi ton qun l bun bn xe hi ca mt ca hng kinh doanh, mi
chic xe ang c mt trong ca hng c coi l mt i tng. Nhng khi
nim Xe hi l mt lp i tng dng ch tt c cc loi xe hi ca ca
hng.
2. Trong bi ton qun l nhn vin ca mt vn phng, mi nhn vin trong vn
phng c coi l mt i tng. Nhng khi nim Nhn vin l mt lp i
tng dng ch chung chung cc nhn vin ca vn phng.
Lu :
o Lp l mt khi nim, mang tnh tru tng, dng biu din mt tp cc i
tng.
o i tng l mt th hin c th ca lp, l mt thc th tn ti trong h thng.
Lp c dng biu din i tng, cho nn lp cng c thuc tnh v phng
thc:
Thuc tnh ca lp tng ng vi thuc tnh ca cc i tng.
Phng thc ca lp tng ng vi cc hnh ng ca i tng.
V d, lp xe t c m t bng cc thuc tnh v phng thc:
Lp Xe t
Thuc tnh:
Nhn hiu xe
Mu xe
Gi xe
Cng sut xe (m lc)
Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 43 --------------------------------------
Phng thc:
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.
3.4 Khi nim ng gi
ng gi l c ch gp thuc tnh v phng thc ca mt i tng trong mt t
chc duy nht.
Xt v d bi ton qun l nhn vin vn phng vi lp Nhn vin nh sau:
Lp Nhn vin
Thuc tnh:
Tn
Ngy sinh
Gii tnh
Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 44 --------------------------------------
Phng ban
H s lng
Phng thc:
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.
3.5 Bin tham chiu
Trong ngn ng lp trnh C, khai bo bin
int x;
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
Bin son : Bi Cng Giao --------------------------------------- 45 --------------------------------------
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.
3.6 Khi to i tng
Khi khai bo bin nh
Student y;
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();
Hnh 3.3 minh ho iu ny.

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.
i tng
Student
y
Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 46 --------------------------------------
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();
// x v y cng tham chiu ti mt i tng Student. Hnh 3.4 minh ho iu ny.
Student y = x;

Hnh 3.4 Hai bin tham chiu ti cng mt i tng.
// on lnh 2
// Va khi to x va to mt i tng Student cho x tham chiu ti
Student x=new Student();
// x v y cng tham chiu ti mt i tng Student
Student y = x;
Student z=new Student();
// z v y cng tham chiu ti i tng Student th hai. Hnh 3.5 minh ho iu ny.
y = z;

Hnh 3.5 Chuyn y tham chiu ti Student th hai.

i tng
Student
x y
i tng
Student
z
i tng
Student
x
y
Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 47 --------------------------------------
// on lnh 3
// Va khi to x va to mt i tng Student cho x tham chiu ti
Student x=new Student();
// Va khi to z va to mt i tng Student cho z tham chiu ti
Student z=new Student();
/* 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;

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;

Hnh 3.7 i tng Student m ci.
i tng
Student
x
i tng
Student
x
i tng
Student
z
Chng 3: i tng v lp
Bin son : Bi Cng Giao --------------------------------------- 48 --------------------------------------
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.
Nu mun thu rc xy ra ngay lp tc th gi phng thc sau:
Runtime.getRuntime().gc();
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
Bin son : Bi Cng Giao --------------------------------------- 49 --------------------------------------
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: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 50 --------------------------------------
Chng 4. Tng tc gia cc i tng

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
4.1 Cng tc gia cc i tng
Qui trnh pht trin phn mm hng i tng bao gm bn bc c bn:
1. Thit lp ng cc yu cu chc nng v s mnh tng qut ca mt ng dng.
2. Thit lp cc lp thch hp bao gm CTDL, cch c x v mi quan h vi lp
khc.
3. To s lng cc th hin i tng t cc lp ny tho mn cc yu cu v
s mnh ca ng dng..
4. Thit lp mi trng hot ng ca i tng sn sng phn ng vi cc s
kin kch hot t bn ngoi
Xt h thng ng k sinh vin SRS c mi trng hot ng nh sau:
Vic click chut vo mt nt (button) trn giao din ca ng dng SRS hm
rng sinh vin mun ng k mt kho hc.
Nhn thng tin t mt h thng t ng khc nh SRS nhn danh sch sinh
vin ng tin t h thng thu cc
Ngay khi mt s kin kch hot c nhn bit t h thng hng i tng,
cc i tng thch hp phn ng v thc hin cc dch v ca chnh n hay
yu cu cc dch v ca cc i tng khc trong dy chuyn phn ng, cho
n khi t c mc ch. V d yu cu ng k kho hc ca sinh lin quan
n nhiu i tng nh hnh 4.1
Cc i tng trong s tng tc ny:
Mt i tng Student (tru tng ho ca mt sinh vin tht)
Mt i tng DegreeProgram m bo rng kho hc ng k ph hp vi
sinh vin ny.
Mt i tng Course m bo cn ch cho sinh vin ng k mn hc ny.
Mt i tng Classroom th hin phng hc t chc mn hc v kim tra kh
nng cha ca n.
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 51 --------------------------------------
Mt i tng Transcript m bo ngi sinh vin ny hc cc mn hc
cn thit cho mn hc ang ng k.

Hnh 4.1 Cc i tng trong h thng phi cng tc vi nhau hon tt s mnh
SRS
4.2 Thuc tnh
Khai bo thuc tnh ca lp:
<tnh cht> <kiu d liu> <tn thuc tnh>;
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.
Mt
DegreeProgram
(chng trnh hc)
Mt Student
(sinh vin)
Mt
Transcript
(bn im)
Mt Class
(lp hc)
Mt Course
(mn hc)
Click chut
trong giao
din ng dng
Mt s kin bn ngoi tc ng vo h
thng yu cu cc i tng ni chuyn
vi nhau
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 52 --------------------------------------
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;
}
4.3 Phng thc
4.3.1 Khai bo phng thc
<tnh cht> <kiu tr v> <tn phng thc> ([<cc tham s>]) [throws <cc ngoi
l>] {

}
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 Lp Lp con Gi Bt k u
private Y
protected Y Y Y
public Y Y Y Y
(khng khai bo) Y Y Y
Bng 4.1 Phm vi truy cp ca cc thnh vin ca lp
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 53 --------------------------------------
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!);
}
}
4.3.2 Bin this
Bin this l mt bin n c bit lun tn ti trong cc lp Java: mt lp c ng mt
bin n this. Bin ny c s dng trong khi chy v n tr n bn thn i tng
ang th hin lp . Bin this thng c s dng trong cc hm xy dng ca lp.
on ln sau khai bo mt lp Person hon ton ging vi lp Person c khai
bo trc, nhng ch khc l c dng bin this trong hm xy dng ca lp.
class Person {
public String name;
public int age;
// Phng thc xy dng
public Person(String name, int age) {
this.name = name;
this.age = 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.
4.3.3 Gi phng thc
Chng trnh PersonDemo minh ho cch dng lp Person m chng ta va nh
ngha. Chng trnh ny s to ra mt i tng myPerson ca lp Person vi cc
thuc tnh c gi tr khi to: name = Minh v age = 21. Sau , chng trnh s
dng phng thc show() ca i tng myPerson in ra dng thng bo :
Minh is 21 years old!.

Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 54 --------------------------------------
package chuong4;
class PersonDemo {
public static void main(String args[]) {
Person myPerson = new Person(Minh, 21);
myPerson.show();
}
}
4.3.4 Np chng phng thc
Java cho php trong cng mt lp, c th khai bo nhiu phng thc c cng tn
nhng khc nhau v tnh cht; khi ta gi y l np chng (overloading) phng
thc. Xt chi tit hn th cc phng thc ny:
Hoc danh sch cc tham s khc nhau
Hoc kiu tr v khc nhau
Hoc kt hp hai iu kin trn.
Nu khng, Java s khng phn bit c chng. V d nu trong cng mt lp:
// hp l
public int add(int x, int y){}
public float add(float x, int y){}
// khng hp l
public int add(int x, int y){}
public int add(int x, int y){}
4.3.5 Phng thc xy dng
Phng thc xy dng (constructor) ca lp c dng khi to mt th hin c th
ca mt lp, ngha l gn cc gi tr khi u cho cc thuc tnh, nu c, v to ra mt
i tng c th.
Lu :
Phng thc xy dng phi c tn trng vi tn ca lp
Phng thc xy dng khng c gi tr tr v
Phng thc xy dng c tnh cht public hoc package (khng khai bo kiu truy
nhp)
C th c nhiu phng thc xy dng ca cng mt lp
Chng trnh sau minh ho hai phng thc xy dng ca lp Person

package chuong4;
class Person {
public String name;
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 55 --------------------------------------
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();
}
}

Kt qu chng trnh:

name is empty
Tam is 31 years old!

Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 56 --------------------------------------
4.3.6 Che du thng tin
Lp che du thng tin ca n bn ngoi khng th thy bng tnh cht private cho
thuc tnh v phng thc. V d nh ngha lp Student sau :
public class Student {
// vi thuc tnh
private String name;
private String ssn;
private double totalLoans, tuitionOwed;

public void printStudentInfo() {
// Truy xut thuc tnh ca lp Student
System.out.println("Name: " + name);
System.out.println("Student ID: " + ssn);
}
public boolean allBillsPaid() {
boolean answer = false;
// Truy xut phng thc ca lp Student
double amt = moneyOwed();
if (amt == 0.0)
answer = true;
else
answer = false;
return answer;
}
private double moneyOwed() {
return totalLoans + tuitionOwed;
}
}

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
Bin son : Bi Cng Giao --------------------------------------- 57 --------------------------------------
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();
}
}
4.4 Truyn thng ip gia cc i tng
Chng ta xt mt v d truyn thng ip gia hai i tng c kiu nh ngha l
Student v Course v cc phng thc sau.
Vi lp Student
boolean successfullyCompleted(Course c)
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);
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 58 --------------------------------------
c.register(s)
true
i tng c
(mt Course)
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)






Hnh 4.3 Ngi yu cu ch thy chi tit bn ngoi ca vic trao i thng ip.
S u nhim
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 59 --------------------------------------
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())
Chng 4: Tng tc gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 60 --------------------------------------
b = s.designateAdvisor(p);
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: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 61 --------------------------------------
Chng 5. Quan h gia cc i tng

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.
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
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.
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 62 --------------------------------------
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.

Hnh 5.1 Kt hp ba ngi











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.
Student
Professor Course
dy
tham d
ging dy
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 63 --------------------------------------
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> {
..
}

on lnh sau minh ho vic to mt lp Employee c k tha t lp Person
c xy dng.
classs Employee extends Person {
public float salary;

// Phng thc xy dng
public Employee(String name, int age, float salary) {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 64 --------------------------------------
super(name, age);
this.salary = salary;
}
}
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
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 65 --------------------------------------
public int add(int x, int y) {
return (x + y);
}

Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 66 --------------------------------------
// 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
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 67 --------------------------------------
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 Integer(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
Bin son : Bi Cng Giao --------------------------------------- 68 --------------------------------------
// 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[]) {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 69 --------------------------------------
LopCon c = new LopCon();
}
}

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();
}
}

Kt qu chng trnh:

Khi to lp cha
Khi to lp con
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 70 --------------------------------------
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 trnh s c li ti lnh super() v ta phi iu chnh chng trnh nh sau:

package chuong5;
class LopCha {
LopCha( int i) {
System.out.println("Gi tri i : +i);
}
}

class LopCon extends LopCha {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 71 --------------------------------------
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.
5.4 Lp tru tng
Lp tru tng l mt dng lp c bit, trong c phng thc ch c khai bo
dng khun mu (template) m khng c ci t chi tit. Vic ci t chi tit cc
phng thc ch c thc hin cc lp con k tha lp tru tng .
Lp tru tng c s dng khi mun nh ngha mt lp m khng th bit v nh
ngha ngay c vi phng thc ca n.
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.
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 72 --------------------------------------
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();
public void show() {
System.out.println(Show me);
}
}
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.
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 73 --------------------------------------
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 AnimalDemo s dng li hai lp Bird v Cat nh ngha.

package chuong5;
public class AnimalDemo {
public static void main(String args[]) {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 74 --------------------------------------
Bird myBird = new Bird();
System.out.println(The + myBird.getName() + has + myBird.getFeet() +
feets);
Cat myCat = new Cat();
System.out.println(The + myCat.getName() + has + myCat.getFeet() +
feets);
}
}

Chng trnh ny s hin th hai dng thng bo:

The Bird has 2 feets
The Cat has 4 feets

5.5 Giao tip
Nhm trnh nhng nhp nhng ca tnh cht a k tha ca C++, Java khng cho php
k tha trc tip t nhiu hn mt lp cha. Ngha l Java khng cho php a k tha
trc tip, nhng cho php ci t nhiu giao tip (Interface) c th tha hng thm
cc thuc tnh v phng thc ca cc giao tip .
Khai bo giao tip
[public] interface <Tn giao tip> [extends <danh sch giao tip>] {

}
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).
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 75 --------------------------------------
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> {
.
}
Tnh cht v tn lp c s dng nh trong khai bo lp thng thng.
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 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 76 --------------------------------------
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.
5.6 Tnh cht tnh
C nhng trng hp m ta mun tt c cc i tng thuc mt lp chia s mt gi
tr ca mt bin c th thay v phi tng i tng duy tr bn sao ca chnh mnh ca
bin nh l mt thuc tnh. Ngn ng Java p ng nhu cu ny thng qua cc
thuc tnh tnh (static) c lin quan n tt c i tng ca lp hn l vi cc c
nhn i tng ring l.
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 77 --------------------------------------
Xt nh ngha lp Student sau:

public class Student {
private static int totalStudents;
// .
public int getTotalStudents() {
return totalStudents;
}
public void setTotalStudents(int x) {
totalStudents = x;
}
public int reportTotalEnrollment() {
System.out.println("Total Enrollment: " + getTotalStudents());
}
public void incrementEnrollment() {
setTotalStudents(getTotalStudents() + 1);
}
}

Khi on lnh sau to cc i tng ca lp Student:
// to ba sinh vin, tng s ghi danh mi ln cho mi sinh vin
Student s1 = new Student();
s1.incrementEnrollment();
// ...
Student s2 = new Student();
s2.incrementEnrollment();
// ...
Student s3 = new Student();
s3.incrementEnrollment();
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
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 78 --------------------------------------
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());
}
//
}

Ta c th gi cc phng thc tnh ny qua tn lp
Student.reportTotalEnrollment();
Hoc qua tn i tng ca lp
s.reportTotalEnrollment();
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)
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 79 --------------------------------------
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.
5.7 Kiu lit k
Kiu lit k (Enumeration) cha mt danh sch cc gi tr nh sn v l min gi tr
cho bin hay thuc tnh c bit. Kiu ny do ngi dng nh ngha c dng nh sau:
public enum EnumName { }
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);
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 80 --------------------------------------
Mt phng thc xy dng dng to thuc tnh value c dng:
EnumName(type v) {
value = v;
}
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;
}
}

Xt mt v d sau: c 5 khoa m sinh vin c th theo hc, tn khoa kiu String:

// Major.java
public enum Major {
Math(Mathematics),
Bio(Biology),
Chem(Chemistry),
CS(Computer Science),
PhysEd(Physical Education);
/* Do vy kiu ca thuc tnh value, kiu ca tham s chuyn ti phng thc
xy dng Major, v kiu tr v ca phng thc value() tt c l String */
private final String value;
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 81 --------------------------------------
Major(String v) {
value = v;
}
public String value() {
return value;
}
}

By gi ta c nh ngha lp Student c s dng kiu lit k trn

public class Student {
private String name;
private Major major;
//
public Student(String name, Major major) {
this.setName(name);
this.setMajor(major);
}
public void setName(String n) {
name = n;
}
public void setMajor(Major m) {
major = m;
}
//
public void display() {
// tn dng phng thc value() ca Major
System.out.println(name + is a + major.value() + major.);
}
}

Sau y l chng trnh minh ho cch dng kiu lit k Major:

package chuong5;
public class EnumExample {
public static void main(String[] args) {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 82 --------------------------------------
/* To i tng Student v dng kiu lit k Major gn mt trong 5
gi tr hp l cho thuc tnh major ca i tng ny, Major.CS hm
mt gi tr nh vy */
Student s = new Student(Fred Schnurd, Major.CS);
s.display();
}
}

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.
Mt v d khc v kiu lit k Grade :

public enum Grade {
// cc gi tr l hng s kiu double
A(4.0),
B(3.0),
C(2.0),
D(1.0),
F(0.0);
// thuc tnh value c kiu double.
private final double value;
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 83 --------------------------------------
Grade(double v) { // tham s kiu double.
value = v;
}
public double value() { // tr v kiu double
return value;
}
}

Chng trnh minh ho cch dng kiu lit k Grade:

public class GradeDemo {
public static void main(String[] args) {
Grade grade;
grade = Grade.A;
System.out.println(grade);
System.out.println(grade.value());
}
}
Kt qu xut ra :

A
4.0

5.8 Case Study
Trong phn ny, chng ta s vit mt chng trnh qun l nhn vin ca mt cng ty.
Bao gm cc lp chnh:
Lp Human l mt lp tru tng, ch c mt phng thc duy nht l show().
Lp Person l lp k tha t lp Human, c hai thuc tnh l name v age. ng
gi d liu cc thuc tnh ny c dng private v cc phng thc truy nhp chng
(get v set). Ngoi ra lp ny cn ci t phng thc show() k tha t lp tru
tng Human.
Lp Employee l lp k tha t lp Person, c thm thuc tnh l salary. Thuc
tnh ny 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(). Hn na, lp Employee cn
c thm hai phng thc addSalary() v addSalary(float) tnh tng lng cho
nhn vin: mt phng thc tng lng theo t l mc nh l 10% (khng cn
tham s), v mt phng thc tng theo gi tr c th a vo (cn tham s).
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 84 --------------------------------------
Cc phn tip theo s trnh by phn ci t chi tit cho cc lp ny.
Lp Human l mt lp tru tng, ch c mt phng thc duy nht l show().
y l ni dung tp tin Human.java.
package chuong5;
abstract class Human {
abstract void show();
}

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();
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;
}
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 85 --------------------------------------
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;
}
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 86 --------------------------------------

// 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!);
}

/* 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
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 87 --------------------------------------

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();
}
}
Chng trnh s hin th ni dung nh sau:

Vinh is 25 years old!
Sn is 25 years old having a salary of $300/month!
Sn is 25 years old having a salary of $330/month!
Sn is 25 years old having a salary of $380/month!

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$.
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 88 --------------------------------------
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.
Ti sao a tha k c th gy rc ri cho vic din gii ngn ng hng i tng.
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:
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();
5. Trong cc khai bo mt giao tip sau, khai bo no l ng:
a. public abstract MyInterface{}
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 89 --------------------------------------
b. public class MyInterface{}
c. public interface MyInterface{}
d. public interface MyInterface();
6. Trong cc khai bo k tha lp sau, gi s Aclass v Bclass l cc lp c sn, khai
bo no l ng:
a. public class MyClass extends Aclass{}
b. public class MyClass Extends Aclass{}
c. public class MyClass extends Aclass, Bclass{}
d. public class MyClass extends Aclass, extends Bclass{}
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{}
9. Xt on chng trnh ci t mt lp s dng mt giao tip sau:
public interface MyInterface {
public void show(String a);
}
// Khai bo lp s dng giao tip
public class MyClass implements MyInterface {

}
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);}
10. Xt on chng trnh ci t php ton cng vi cc s hng c kiu khc nhau:
public class MyOperator {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 90 --------------------------------------
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;
}
}
Khi ta gi lnh MyOperator.add(-5, 100), 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
11. 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)
e. Thng bo li
12. 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
13. 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.
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 91 --------------------------------------
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.
14. 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);
}
}
Khi , on chng trnh sau s hin th thng bo no?
public class Demo1 {
public static void main(String args[]) {
Employee myEmployee = new Employee();
myEmployee.show();
}
}
a. This is a person!.
b. This is the employee 0.
c. Thng bo li.
d. Khng hin th g c.
15. Cng vi hai lp Person v Employee trong bi trn. 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);
}
}
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 92 --------------------------------------
a. This is a person!.
b. This is the employee 10.
c. Thng bo li.
d. Khng hin th g c.
16. 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.
17. Vit mt giao tip khai bo cc php ton cng hai s, cng hai chui, cng chui
v s. Sau vit mt lp ci t giao tip .
18. 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.
19. Xt bi 3 ca chng 1 hy nu cc mi quan h ca cc lp trong h thng
xut.
20. 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)
Cc phng thc no sau y l hp l khi c thm vo lp FeatureFilm ?
public boolean update(String category, String theater)
public boolean update(String title, Actor a)
public void update(Actor b, Actor a, String title)
public void update(Actor a, Actor b)
21. To lp FeatureFilm ca bi trc kim tra cc phng thc. To lp Actor
rng nh sau:
public class Actor { }
22. Xc nh phng thc no np chng, ghi ca bn lp sauVehicle,
Automobile, Truck, v SportsCar:

public class Vehicle {
String name;
public void fuel(String fuelType) {
// b qua chi tit ...
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 93 --------------------------------------
}
public boolean fuel(String fuelType, int amount) {
// b qua chi tit ...
}
}

public class Automobile extends Vehicle {
public void fuel(String fuelType, String timeFueled) {
// b qua chi tit ...
}

public boolean fuel(String fuelType, int amount) {
// ...
}
}

public class Truck extends Vehicle {
public void fuel(String fuelType) {
// ...
}
}

public class SportsCar extends Automobile {
public void fuel(String fuelType) {
// ...
}

public void fuel(String fuelType, String timeFueled) {
// ...
}
}

C bao nhiu phng thc Fuel m bn lp nhn din? Hy lit k chng.
23. Xt cc lp FarmAnimal, Horse, v Cow:
public class FarmAnimal {
private String name;
public String getName() {
Chng 5: Quan h gia cc i tng
Bin son : Bi Cng Giao --------------------------------------- 94 --------------------------------------
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();
c.setName("Elsie");
h.setName("Mr. Ed");
c.makeSound();
h.makeSound();
24. 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
Bin son : Bi Cng Giao --------------------------------------- 95 --------------------------------------
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
6.1 Khi nim tp i tng
Tp i tng dng tp hp cc i tng c cng tnh cht no qun l
chng nh l mt nhm v thao tc trn chng chung vi nhau, v cng c th truy cp
n tng i tng khi cn thit.
V d:
Mt gio s c th lt qua tt c cc i tng sinh vin ng k mt kha hc
m gio s ging dy vo im cui k.
H thng ng k sinh vin duyt qua tt c i tng kho hc trc khi cho m
hay hu kho hc v khng sinh vin ng k
Khai bo mt bin tham chiu ti mt kiu tp hp:
CollectionType<elementType> x;
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>();
6.2 Ba kiu tp i tng c bn
Danh sch c th t (ordered list): kiu tp hp cho php chn cc phn t vo v
tr c sp th t v sau truy xut chng theo cng th t . Cc i tng c
bit c th truy xut theo v tr ca chng trong danh sch (v d chng c th ly
theo th t u tin, cui cng hay th n).
Hu ht cc kiu tp hp-bao gm danh sch c th t- khng cn gn kh nng
cha lc khi to ban u. Tp hp t ng m rng khi thm vo phn t v khi
phn t b ly ra tp hp t ng kht li nh hnh 6.1.
Vi lp Java l danh sch c th t nh: ArrayList, LinkedList, Stack,Vector.
Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 96 --------------------------------------




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.







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

Kho
Tham chiu
i tng
Dng kho truy
xut chnh xc i
tng trong t in
Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 97 --------------------------------------
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];
Khi to ni dung mng chui
String[] names = { "Steve", "Jacquie", "Chloe", "Shylow", "Baby Grode" };
Mt cch khc (di hn)
Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 98 --------------------------------------
String[] names = new String[5];
names[0] = "Steve";
names[1] = "Jacquie";
names[2] = "Chloe";
names[3] = "Shylow";
names[4] = "Baby Grode";
Thao tc trn mng i tng
studentBody[0] = new Student("Fred");
studentBody[1] = new Student("Mary");
hay
Student s = new Student("Fred");
studentBody[0] = s;

// s dng li s
s = new Student("Mary");
studentBody[1] = s;
ArrayList
y l kiu tp hp mng m rng
Xt chng trnh ArrayListExample sau:

package 6;
import java.util.*;
public class ArrayListExample {
public static void main(String[] args) {
// khi to tp hp students
ArrayList<Student> students = new ArrayList<Student>();
// to vi i tng Student
Student a = new Student("Herbie");
Student b = new Student("Klem");
Student c = new Student("James");

// lu tham chiu ba Student ny vo trong tp hp
students.add(a);
students.add(b);
students.add(c);

// ... duyt tp hp ny in tn sinh vin
Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 99 --------------------------------------
for (Student s : students)
System.out.println(s.getName());
}
}

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"));

K n to mt mng kiu Student c kch thc bng mng students
Student[] copyOfStudents = new Student[students.size()];

chp ni dng students vo copyOfStudents ta gi phng thc toArray trn
students
students.toArray(copyOfStudents);

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
Bin son : Bi Cng Giao --------------------------------------- 100 --------------------------------------
y l kt qu:

The ArrayList contains the following students:
Herbie
Klemmie
James
The array contains the following students:
Herbie
Klemmie
James

6.4 Cc loi tp i tng thng gp
6.4.1 LinkedList
L mt danh sch m mi phn t c mt lin kt ti phn t k tip.
C danh sch lin kt tuyn tnh v danh sch lin kt tuyn tnh quay vng. Danh
sch lin kt tuyn tnh kt thc mt im no cn danh sch lin kt tuyn tnh
quay vng c phn t cui cng ch ti phn t u tin to mt chu trnh.
Chng trnh LinkListDemo sau y minh ho danh sch lin kt:

package chuong6;
import java.util.*;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList link = new LinkedList();

// thm vo 3 phn t khc kiu
link.add("a");
link.add("b");
link.add(new Integer(10));
System.out.println("The contents of array is " + link);
System.out.println("The size of an linkedlist is " + link.size());

// thm phn t u
link.addFirst(new Integer(20));
System.out.println("The contents of array is" + link);
System.out.println("The size of an linkedlist is " + link.size());
Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 101 --------------------------------------

// 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
Bin son : Bi Cng Giao --------------------------------------- 102 --------------------------------------
The size of an linkedlist is 6

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
Bin son : Bi Cng Giao --------------------------------------- 103 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 104 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 105 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 106 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 107 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 108 --------------------------------------
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 */
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
Bin son : Bi Cng Giao --------------------------------------- 109 --------------------------------------
/* 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());
}
}

6.5.2 Bao bc tp hp chun
Chng ta thit k mt lp bao bc mt th hin ca ArrarList. Lp MyIntCollection2
minh ho iu ny.

import java.util.ArrayList;
// Khng cn m rng lp ArrayList
public class MyIntCollection2 {
// bao bc mt ArrayList trong lp ny.
ArrayList<Integer> numbers;
// nh ngha vi thuc tnh nh MyIntCollection
private int smallestInt;
private int largestInt;
private int total;

public MyIntCollection2() {
// Khi to mt ArrayList nhng vo lp.
numbers = new ArrayList<Integer>();
// gn gi tr khi u cho total.
total = 0;
}

Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 110 --------------------------------------
/* 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());
}
}
6.6 Phng thc tr v kiu tp hp
Nu chng ta nh ngha mt phng thc c kiu tr v l mt tp hp, ta c th nhn
v mt tp hp c kch thc tu ti ni gi phng thc.
Trong on lnh sau nh ngha lp Course, mt phng thc getRegisteredStudents
tr v ton b i tng Student c ng k mt kho hc xc nh:
Chng 6: Tp i tng
Bin son : Bi Cng Giao --------------------------------------- 111 --------------------------------------
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;
}
}

Di y l on lnh s dng phng thc trn:
// Khi to mt kho hc v vi sinh vin
Course c = new Course();
Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();

// ng k sinh vin cho kho hc ny.
c.enroll(s1);
c.enroll(s2);
c.enroll(s3);

/* yu cu kho hc cho danh sch sinh vin ng k hc v in bng im ca
tng sinh vin ny */
for (Student s : c.getRegisteredStudents())
s.printGradeReport();

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
Bin son : Bi Cng Giao --------------------------------------- 112 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 113 --------------------------------------
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
7.1 Gii thiu ngoi l
Vn c th pht sinh bt ng khi my o Java thc hin chng trnh Java, v d:
Chng trnh khng th m mt tp tin d liu do khng c quyn thch hp
Chng trnh gp kh khn khi thit lp kt ni n mt h thng qun l
CSDL v ngi s dng cung cp mt mt khu khng hp l.
Ngi s dng cung cp s liu khng ph hp thng qua mt ng dng ca
giao din ngi dng, v d nhp mt gi tr khng phi s ni mt gi tr s
c mong i.
Vn c th l mt li logic m cc trnh bin dch khng th pht hin.
Ta xt v d sau :

package chuong7;
public class Problem {
public static void main(String[] args) {
/* Khai bo hai tham chiu ti i tng sinh vin v khi to chng l
gi tr null */
Student s1 = null;
Student s2 = null;
// b qua chi tit

/* to i tng v cho s1 tham chiu ti nhng qun lm iu ny cho
s2 */
s1 = new Student();

// dng lnh ny OK
s1.setName(Fred);
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 114 --------------------------------------

/* 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

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
M bytecode
c np vo
my o
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 115 --------------------------------------
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.
7.2.2 Khi catch
Khi catch c cu trc nh sau:
catch (ExceptionType variableName) { ...
// m phc hi cho mt ngoi l kiu ExceptionType ...
}

Mt hay nhiu khi catch c th theo sau mt khi try nh:
try {
// m c th gy ngoi l ...
} catch (ExceptionType1 variableName1) {
// m phc hi cho mt ngoi l kiu ExceptionType1 ...
} catch (ExceptionType2 variableName2) {
// m phc hi cho mt ngoi l kiu ExceptionType2 ...
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 116 --------------------------------------
}
//
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
Bin son : Bi Cng Giao --------------------------------------- 117 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 118 --------------------------------------

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
Bin son : Bi Cng Giao --------------------------------------- 119 --------------------------------------
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 ...

7.2.3 Khi finally
Mt khi try c th c mt khi finally lin kt vi n. Khi finally phi sau khi
catch (cui cng) lin kt vi khi try . D c hay khng khi catch no c thc
hin, khi finally lun c thc thi.
Xt chng trnh Problem5 sau:

package chuong7;
public class Problem5 {
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 ...");
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 120 --------------------------------------
} 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
Bin son : Bi Cng Giao --------------------------------------- 121 --------------------------------------
} // 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
Bin son : Bi Cng Giao --------------------------------------- 122 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 123 --------------------------------------

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
Bin son : Bi Cng Giao --------------------------------------- 124 --------------------------------------
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

Hnh 7.7 Ngoi l thot khi p.methodY() v chuyn xung s.methodX() x l
public class Professor {
// b qua chi tit.
public void methodY() {
// Ngoi l NullPointerException c nm y nhng khng b bt
//
}
}
//-----------------------------
public class Student {
// b qua chi tit.
public void methodX() {
Professor p = new Professor();
// Khng c x l ngoi l y
p.methodY();
}
}
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 125 --------------------------------------
//-----------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 126 --------------------------------------
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.
7.4 Phn cp lp ngoi l
Nh cp phn trc lp Exception tng qut, bao gm trong gi java.lang, l
siu lp ca tt c cc loi ngoi l trong Java. Nh minh ha trong hnh 7.10 (c
ly t ti liu Java trc tuyn ca Sun), c nhiu lp con trc tip ca cc lp hc
ngoi l.
Mt khi catch bt ngoi l cho mt loi X s bt kiu c th ca ngoi l hay bt k
kiu con no ca n, v l bn cht ca tha k. Do l do ny, iu quan trng l
lit k khi lnh catch t chi tit nht ti tng qut nht sau khi lnh try, c ngha l,
t lp con mc thp nht n siu lp cao nht. Hy s dng mt v d c th minh
ha ti sao iu ny l nh vy.
Chng ta thc hin truy xut CSDL. Cc ngoi l c nh ngha trong gi java.sql.
Ta xem xt ba kiu ngoi l tng qut sau:
DataTruncation l loi ngoi l chi tit nht m chng ta s quan tm trong v d
ny. Mt ngoi l DataTruncation xy ra nu d liu c c ghi vo CSDL v
b ct ngn, v d nh khi mt gi tr String qu di v b ghi vo mt trng CSDL
khi n ch ch c th cha 255 k t.
DataTruncation l kiu con ca ngoi l tng qut hn l SQLWarning.
SQLWarning c nm ra khi c mt vn truy cp CSDL (khng nghim trng)
xy ra. N ch cnh bo ng dng v vn ny.
Ngoi l SQLWarning n phin n l mt trng hp c bit/lp con ca lp
ngoi l tng qut hn SQLException. SQLException c nm khi c bt c iu
g trong qu trnh giao tip CSDL, t c gng ng nhp bng cch s dng mt
mt khu khng hp l, hay c gng truy cp vo mt bng khng tn ti, hay
c gng gi mt truy vn SQL khng chun.
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 127 --------------------------------------
Cui cng SQLException l lp con trc tip ca lp Exception tng qut.

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
Bin son : Bi Cng Giao --------------------------------------- 128 --------------------------------------
//
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 Lp cha ca th t phn cp ngoi l
RuntimeException Lp c s cho nhiu ngoi l java.lang
ArthmeticException Trng thi li v s, v d nh chia cho 0
IllegalAccessException Lp khng th truy cp
IllegalArgumentException 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 Khi mun truy cp i tng null
SecurityException Vic thit lp c ch bo mt khng c
hot ng
ClassNotFoundException Khng th np lp yu cu
NumberFormatException Vic chuyn i khng thnh cng t chui
sang s thc
AWTException Ngoi l v AWT
IOException Lp cha ca cc ngoi l I/O
FileNotFoundException Khng th nh v tp tin
EOFException Kt thc mt tp tin
NoSuchMethodException Phng thc yu cu khng tn ti
InterruptedException Khi mt lung b ngt
SQLException Khi giao tip CSDL c li
Bng 7.1 Danh sch mt s ngoi l
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 129 --------------------------------------
7.5 Cc im cn lu thm v ngoi l
7.5.1 Bt ngoi l tng qut
Mt s ngi lp trnh s dng hng tip cn li bing bt loi ngoi l chung
nht v sau khng lm g khi phc li, ch lm im lng my o Java, v d
nh:
try {
//
} catch (Exception e) { } // khng lm g phc hi !!!
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);
}
}
}

7.5.2 Trnh bin dch Java yu cu phi c x l ngoi l
i khi Java bt buc chng ta phi bao on lnh c th gy ra ngoi l, v d

public class FileIOExample {
public static void main(String[] args) {
// m gi m v c tp tin;
while (cha ti cui tp tin) {
c dng k tip t tp tin;
// ...
}
}
}

Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 130 --------------------------------------
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) { ...}
}
}

2. Ta thm lnh throws ti tiu ca phng thc m ngoi l c th xy ra nh:
import java.io.FileNotFoundException;
public class FileIOExample {
/* thm throws ti phng thc main, ta khng phi quan tm
v bt FileNotFoundExceptions */
public static void main(String[] args) throws FileNotFoundException {
// m gi m v c tp tin;
while (cha ti cui tp tin) {
c dng k tip t tp tin;
// ...
}
}
}
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 131 --------------------------------------
7.5.3 Tn dng x l ngoi l lm r li pht sinh
Ta c th s dng phng thc getMessage() trong khi catch c thng bo m t
li nh sau:
try {
// m tp tin Foo.dat khng tn ti...
} catch (FileNotFoundException e) {
System.out.println("Error opening file " + e.getMessage());
}

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();
}

7.5.4 try/catch lng nhau
Mt khi try c th c lng vo bn trong khi try hoc khi catch. Thng thng ta
c nhu cu lng khi try trong mt khi catch, v m phc hi m chng ta vit trong
mt khi catch c th c mt nguy c nm mt ngoi l b sung ca ring n.
V d nh khi mt FileNotFoundException pht sinh, chng ta mun m mt tp tin
mc nh thay th. Nhng, do m mt tp tin mc nh c th cng c kh nng
nm mt FileNotFoundException ca ring n, ta cn phi bao m phc hi trong khi
try ring ca n nh sau:
try {
// m tp tin Foo.dat khng tn ti...
} catch (FileNotFoundException e) {
/* Nu ta khng th m tp tin do ngi dng ch ra, ta s m tp tin mc
nh, nhng iu g xy ra nu tp tin mc nh cng khng c */
try {
// m tp tin mc nh
} catch (FileNotFoundException e2) {
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 132 --------------------------------------
// c gng phc hi ...
}
}

7.5.5 Kiu ngoi l do ngi dng nh ngha
Ta c th nh ngha cc loi ngoi l ring bo hiu cc kiu li c th ca ng
dng ca chng ta, v chng trnh nm chng khi c vn pht sinh.
to kiu ngoi l ring, ta to lp tha k t cc lp ngoi l c sn ca Java.
Thng thng ta m rng lp Exception trc tip:
public class MissingValueException extends Exception { ... }
Xt mt minh ho tng i hon chnh v ngoi l do ngi dng nh ngha:
public class MissingValueException extends Exception {
private Student student;
/* ... phng thc xy dng c hai tham s, tham s u tin gn cho thuc
tnh student, v tham s th hai chuyn cho ngoi l ... */
public MissingValueException(Student s, String message) {
super(message);
student = s;
}

// ... thm phng thc get cho thuc tnh Student.
public Student getStudent() {
return student;
}
}

V dng ngoi l ny trong nh ngha lp Student:
public class Student {
private String name;
private String ssn;
// b qua chi tit.
public String getSsn() { ... }
public void setSsn() { ... }
public String getName() { ... }
public void setName(String n) throws MissingValueException {
// Ta mun bo co mt li nu n l chui rng.
if (n.equals(""))
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 133 --------------------------------------
throw new MissingValueException(this, "A student's name
cannot be blank");
else
name = n;
}
// ...
}

Khi to mt ng dng nh sau:
public class Example {
public static void main(String[] args) {
// m gi.
String name = c gi tr t GUI;
Student s = new Student();
s.setName(name);
//
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
Bin son : Bi Cng Giao --------------------------------------- 134 --------------------------------------
}
//
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

7.5.6 Nm nhiu kiu ngoi l
Ta c th nm nhiu kiu ngoi l t mt phng thc. Xt v d sau: gi s ta khai
bo mt ngoi l InvalidCharacterException cng vi MissingValueException.

public class Student {
// b qua chi tit.
public void setName(String s) throws MissingValueException,
InvalidCharacterException {
if (s.equals(""))
throw new MissingValueException(this, "A student's name cannot be
blank");
// m gi.
else if (s c mt k t khng hp l)
throw new InvalidCharacterException(this, s +" contains a non-
alphabetic character");
else name = s;
}
//
}

7.6 Case Study
Vit mt chng trnh NumberOfDigits m s k s c nhp vo nh tham s
t ca s dng lnh. Nu mt k t c nhp vo th xut ra cu thng bo li.
Mt chng trnh minh ho cho bi ton trn nh sau

package chuong7;
class NumberOfDigits {
public static void main(String args[]) {
try {
Chng 7: X l ngoi l
Bin son : Bi Cng Giao --------------------------------------- 135 --------------------------------------
int num = Integer.parseInt(args[0]);
System.out.println(args[0].length());
} catch (NumberFormatException e) {
System.out.println("\nEnter only numbers!");
}
}
}

Khi chy chng trnh s c dng nh hnh 7.12:

Hnh 7.12 Kt qu demo ca NumberOfDigits.java


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
Bin son : Bi Cng Giao --------------------------------------- 136 --------------------------------------
BI TP
1. Vit chng trnh ArraySize to mng 5 s. Vit lnh truy xut phn t th 6;
iu ny gy ra mt ngoi l. Bt ngoi l thch hp v in thng bo li.
2. Sau khi hc xong chng 9 hy vit mt applet Square. Mt ngoi l s pht sinh
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
Bin son : Bi Cng Giao --------------------------------------- 137 --------------------------------------
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
8.1 Lung vo/ra
8.1.1 Gii thiu lung vo/ra
Theo thut ng chung, lung (stream) l mt dng lu chuyn, trong thut ng v k
thut lung l mt l trnh m d liu c truyn trong mt chng trnh.
Cn trong Java lung l nhng dn ng (pipelines) gi v nhn thng tin. Mt ng
dng v cc lung m ta quen thuc l lung nhp System.in. Khi mt lung d
liu c gi hoc nhn, ta hm nh ang ghi hoc c lung v cc lung khc
b phong to. Nu c mt li xy ra khi c hay ghi lung, mt IOException c kch
hot. Do vy, cc cu lnh lung phi bao gm khi try/catch. Hnh 8.1 v 8.2 minh
ho vic c v ghi d liu qua lung nhp, xut tng ng:

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
Bin son : Bi Cng Giao --------------------------------------- 138 --------------------------------------
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.
8.1.2 Lung byte
Chng trnh s dng lung byte thc hin vo ra trn cc byte. Tt c lp lung
byte tha k t lp InputStream v OutputStream.
Trc ht ta xt lung byte vo ra trn tp tin, cc lung byte khc c s dng
tng t nh vy nhng ch khc cch m chng c xy dng.
Chng trnh CopyBytes di y dng lung byte chp xanadu.txt theo tng byte.

package chuong8;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 139 --------------------------------------
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();
}
}
}

Hnh 8.3 minh ho chng trnh CopyBytes.
Lung vo
I n X a n a d u d i d

I n X a n a d u d
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.
read(b)
S nguyn
d
write(b)
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 140 --------------------------------------
o Khi x l vo ra vi tp tin cha d liu k t ta nn dng lung k t. Lung
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
Bin son : Bi Cng Giao --------------------------------------- 141 --------------------------------------
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 {
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 142 --------------------------------------
if (inputStream != null)
inputStream.close();
if (outputStream != null)
outputStream.close();
}
}
}

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
Bin son : Bi Cng Giao --------------------------------------- 143 --------------------------------------
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

8.2 Scanning v Formatting
8.2.1 Scanning
i tng kiu Scanner dng ngt cc d liu vo c qui cch thnh cc t (token)
v dch tng t theo kiu d liu ca n.
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 144 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 145 --------------------------------------
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);
}
}

Sau y l ni dung usnumbers.txt
8.5
32,767
3.14159
1,000,000.1

Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 146 --------------------------------------
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 + ".");
}
}

y l kt qu xut ra:

Cn bc hai ca 2 l 1.4142135623730951.
Cn bc hai ca 5 l 2.23606797749979.
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 147 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 148 --------------------------------------
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.
% 1$ +0 20 .10 f
Bt u
c t qui
cch
Ch
mc
tham
s
C Chiu
rng

chnh
xc
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);
8.3 Vo ra t ch dng lnh
Mt chng trnh thng c chy t dng lnh v tng tc vi ngi s dng
trong mi trng dng lnh. Cc nn tng Java h tr loi hnh tng tc theo hai
cch: thng qua cc lung chun v thng qua Console.
8.3.1 Vo ra qua lung chun
x l u vo ta phi dng System.in, y l mt lung byte. Vi System.in ta c
th c trong mt byte n l, hoc mt mng kiu byte, n tr l mt s nguyn. Sau
ta chuyn tng byte t u vo bn phm thnh kiu k t. V d:
try {
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 149 --------------------------------------
int tmp = System.in.read ();
char c = (char)tmp;
}
c mt chui k t th on m trn nn i vo bn trong mt vng lp:
String strInput = "";
while (true) {
try {
int tmp = System.in.read ();
if (tmp == -1)
break;
char c = (char) tmp;
strInput = strInput + c;
} catch (IOException e) { }
}
System.out.println ("Xut ra = " + strInput);
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
Bin son : Bi Cng Giao --------------------------------------- 150 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 151 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 152 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 153 --------------------------------------
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 = %9d %n", a_byte);
formatter.format ("short = %9d %n", a_short);
formatter.format ("int = %9d %n", an_int);
formatter.format ("long = %9d %n", a_long);
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 = false
byte = 114
short = 1211
int = 1234567
long = 987654321
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 154 --------------------------------------
float = 983.600
double = -4.30e-15

8.3.2 Vo ra qua Console
Console l mt thay th cao cp hn cho lung chun. Console c hu ht cc tnh
nng cung cp bi lung chun v c bit hu ch cho vic nhp mt khu an ton.
N cng cung cp lung vo v ra l lung k t thc s, thng qua phng thc
reader v writer.
Trc khi mt chng trnh c th s dng Console, n phi c gng to i tng
iu khin bng cch gi System.console(). Nu i tng iu khin c sn, phng
thc ny tr v mt tham chiu. Nu System.console tr v null, th cc hot ng
Console khng c php, hoc v h iu hnh khng h tr chng hay bi v chng
trnh chy trong mi trng khng tng tc.
i tng Console h tr nhp mt khu an ton thng qua cc phng thc
readPassword. Phng thc ny gip m bo nhp mt khu trong hai cch. u tin,
n ngn chn hin th, do , mt khu l khng th nhn thy trn mn hnh ca ngi
dng. Th hai, readPassword tr v mt mng k t, khng phi l mt chui, v vy
cc mt khu c th c ghi , loi b n khi b nh ngay sau khi n khng cn
cn thit.
Chng trnh Password sau thay i mt khu.

package chuong8;
import java.io.Console;
import java.util.Arrays;
import java.io.IOException;

public class Password {
public static void main (String args[]) throws IOException {
Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
}
String login = c.readLine("Enter your login: ");
char [ ] oldPassword = c.readPassword("Enter your old password: ");
if (verify(login, oldPassword)) {
boolean noMatch;
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 155 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 156 --------------------------------------
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 );
}
}
}

Kt qu chng trnh:

Input int (e.g. 3501): 23431
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 157 --------------------------------------
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*");
8.4 Lm vic vi CSDL
8.4.1 JDBC
8.4.1.1 Gii thiu JDBC
JDBC l mt API c cha mt tp hp cc lp, cc giao din Java v cc thng bo
li ngoi l nm trong cng mt c t m theo c cc cng ty sn xut JDBC
driver cng nh cc nh pht trin JDBC u phi tun th cht ch khi pht trin ng
dng.
SUN chun b v duy tr c t JDBC. Bi JDBC ch l mt c t ( xut cch vit
v s dng cc JDBC driver), nn cc cng ty sn xut phn mm bn th ba s pht
trin cc JDBC driver tun th cht ch c t ny. Cc nh pht trin JDBC sau s
s dng cc driver ny truy cp vo cc ngun d liu.
JDBC tn ti l gip cc nh pht trin Java to nn cc ng dng truy xut CSDL
m khng cn phi hc v s dng cc API c quyn do cc cng ty sn xut phn
mm khc nhau (bn th ba) cung cp.
8.4.1.2 Kin trc JDBC
Trong Java c 2 lp ch yu chu trch nhim v thit lp kt ni n mt CSDL:
1. DriverManager - Np cc JDBC driver vo trong b nh. C th s dng n
m cc kt ni ti mt ngun d liu.
2. Connection - Gip kt ni n mt ngun d liu. c dng to ra cc i
tng Statement, PreparedStatement v CallableStatement.
Statement - Biu din mt lnh SQL tnh. C th s dng n thu v i
tng ResultSet.
PreparedStatement - Mt gii php thay th hot ng tt hn i tng
Statement, thc thi mt cu lnh SQL c bin dch trc.
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 158 --------------------------------------
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-java-
5.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
Ta cng cn a ng dn n file JAR ny vo bin mi trng MYSQL_DRIVER
ca h thng.


MYSQL_DRIVER : C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\mysql-connector-
java-5.1.13-bin.jar
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 159 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 160 --------------------------------------
}

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
Bin son : Bi Cng Giao --------------------------------------- 161 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 162 --------------------------------------
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);
Chng 8: X l vo/ra
Bin son : Bi Cng Giao --------------------------------------- 163 --------------------------------------
if (rs.wasNull ()) nameVal = (khong ten);

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
Bin son : Bi Cng Giao --------------------------------------- 164 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 165 --------------------------------------
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: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 166 --------------------------------------
Chng 9. Lp trnh giao din

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 Giao din vi cc i tng c bn
Trong mc ny, chng ta s tm hiu v s dng cc i tng c bn ca lp trnh
giao din trong Java:
Cc i tng khung cha (container) c bn: Frame, Panel, Dialog.
Cc i tng thnh phn (component) c bn: Button, Label, TextField,
TextArea
Cc s kin c bn ca cc i tng.
Mun s dng cc i tng ny, cn thm lnh s dng th vin AWT ca Java:
import java.awt.*;
9.1.1 Cc i tng container c bn
Cc i tng container c dng cha cc i tng thnh phn khc. Cc lp
i tng ny c mt s phng thc chung nh sau:
add(Object): thm mt i tng (kiu component) vo container.
remove(Object): loi b mt i tng ra khi container.
removeAll(): loi b tt c cc i tng m container ang cha.
getComponent(int): tr v i tng thnh phn c ch s l tham s u vo.
Container qun l cc i tng cha trong n di dng mng. Ch s ca cc
thnh phn l s th t khi thnh phn c thm vo container.
getComponents(): tr v mng tt c cc i tng m container ang cha.
countComponents(): tr v s lng cc i tng m container ang cha.
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 167 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 168 --------------------------------------
// 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
Bin son : Bi Cng Giao --------------------------------------- 169 --------------------------------------
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
}
}

Hnh 9.3 Kt qu demo Dialog
9.1.2 Cc i tng component c bn
Cc i tng component c dng lm thnh phn ca cc i tng khung
cha, chng khng th dng c lp, m lun phi gn vo trong mt i tng khung
cha container.
9.1.2.1 Label
Label (nhn) l mt i tng hin th vn bn tnh, nhng vn bn m ngi dng
khng th thay i trc tip c. Cc phng thc c bn ca Label:
Label(): Khi to mt nhn rng.
Label(String): Khi to mt nhn vi ni dung vn bn l tham s u vo.
Label(String, int): Khi to mt nhn c ni dung sn, tham s th hai xc nh
cch cn l ca nhn so vi khung cha, bao gm {Label.CENTER,
Label.LEFT, Label.RIGHT}.
setText(String)/getText(): Truy nhp ni dung vn bn ca nhn.
setAlignment(int)/getAlignment(): Truy nhp thuc tnh cn l ca nhn.
setFont(Font): nh dng phng ch ca nhn.
Chng trnh LabelDemo minh ho vic s dng nhn trong mt frame.

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 170 --------------------------------------
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 171 --------------------------------------
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.setLayout(new GridLayout(0,2));
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 172 --------------------------------------
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 += \nThe 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
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 173 --------------------------------------

// Khai bo v khi to button
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 174 --------------------------------------
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 175 --------------------------------------
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
}
}
Gi s ta c th chen ton b khai bo ca lp X gia ) v ; ca khai bo
ActionListener l = nh sau:
ActionListener l = new ActionListener()
class X implements ActionListener { ... };
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 = ....
Gi s lp X khng c tn, ch c phn thn
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// b qua chi tit
}
}; // ng qun du ;

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 176 --------------------------------------
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) { }
};

trnh rm r, Java c cc lp Adapter c tc dng tng ng on lnh trn:
WindowListener w = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
//.
System.exit(0);
}
};

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 177 --------------------------------------
Tng t ta c cc on lnh tng ng:
MouseListener m = new MouseListener() {
public void mouseClicked (MouseEvent e) {
// b qua chi tit
}

// cc phng thc sau c nh ngha nhng khng lm g
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent 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
Bin son : Bi Cng Giao --------------------------------------- 178 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 179 --------------------------------------
}

// 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
}
}



Hnh 9.7 Kt qu demo s kin
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 180 --------------------------------------
9.2 Giao din vi cc i tng Multimedia
Ni dung phn ny s tp trung trnh by cc i tng multimedia, bao gm:
nh du (Checkbox) v Nt chn (Radio button)
La chn (Choice)
Danh sch (List)
9.2.1 nh du v nt chn
Checkbox v Radio button l cc i tng dng nh du, hoc chn thng tin. S
khc bit gia chng l checkbox cho php chn ng thi nhiu cng lc, trong khi
, trong mi nhm radio button, ch cho php chn mt thng tin.
Phng thc chung ca hai lp ny:
setState(boolean)/getState(): truy nhp n trng thi ca nt.
Cc phng thc xy dng Checkbox:
Checkbox(): khi to mt nh du rng.
Checkbox(String): khi to nh du c nhn xc nh.
Checkbox(String, boolean): khi to nh du c nhn, c trng thi xc nh.
Cc phng thc xy dng Radio button tng t nh Checkbox, ngoi tr vic phi
ch ra nhm ca cc radio button:
Checkbox(String, boolean, CheckboxGroup);
Checkbox(String, CheckboxGroup, boolean);
X l s kin thay i trng thi nt chn:
Kiu s kin: ItemEvent
Ci t giao tip: ItemListener
Phng thc xa l: itemStateChange(ItemEvent)
Chng trnh RadioDemo minh ho vic dng mt nhm radio button gm ba nt,
tng ng vi ba mu (RED, BLUE, GREEN). Khi click vo nt no, th mu phn t
s hin ln.

package chuong9;
import java.awt.*;
import java.awt.event.*;
public class RadioDemo extends Frame implements ItemListener {
Checkbox cbxRed, cbxBlue, cbxGreen;
public RadioDemo() {
super(Radio demo!);

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 181 --------------------------------------
// 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
Bin son : Bi Cng Giao --------------------------------------- 182 --------------------------------------
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
}
}

Hnh 9.8 Kt qu demo Radio Button
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 183 --------------------------------------

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
Bin son : Bi Cng Giao --------------------------------------- 184 --------------------------------------
// Khai bo i tng demo
ChoiceDemo myFrame = new ChoiceDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 9.9 Kt qu demo Choice Button
9.2.3 Danh sch
List l mt danh sch hot ng tng t i tng choice. Tuy nhin, list cho php
ngi dng c th chn mt hoc nhiu item cng mt lc. Cc phng thc c bn
ca lp List:
List(): khi to mt danh sch rng, mi ln ch c chn mt item.
List(int): tng t, nhng c qui nh s dng c nhn thy.
List(int, boolean): khi to mt danh sch c s dng c nhn thy xc nh,
ch cho php chn mt hay nhiu item xc nh bi tham s th hai.
add(String): thm mt item vo danh sch.
add(String, int): chn mt item vo v tr xc nh trong danh sch. Nu ch s
chn vt ra khi phm vi danh sch, item s c thm vo cui.
replaceItem(String, int): thay th mt item v tr xc nh (tham s th hai)
trong danh sch bng mt item mi (tham s th nht).
remove(int): xo item v tr xc nh trong danh sch.
removeAll(): xo ton b item hin c ca danh sch.
getSeletedIndex(): tr v index ca item c chn (danh sch n chn).
getSelectedItem(): tr v item c chn (danh sch n chn).
getSelectedIndexs(): tr v ch s cc item c chn (danh sch a chn).
getSelectedItems(): tr v cc item c chn (danh sch a chn).
X l s kin khi thay i item c chn:
Kiu s kin: ItemEvent
Ci t giao tip: ItemListener
Phng thc x l: itemStateChange(ItemEvent);
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 185 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 186 --------------------------------------
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
}
}

Hnh 9.10 Kt qu demo Listbox
9.3 Cc k thut trnh by
Ni dung phn ny s tp trung trnh by cc k thut trnh by cc i tng giao
din trn frame theo cc thit k khc nhau bng cch dng b qun l trnh by.
Bao gm cc k thut sau:
Trnh by theo dng (Flow layout)
Trnh by theo bng (Grid layout)
Trnh by theo Border (Border layout)
Trnh by theo GridBag (GridBag layout)
Trnh by t do (Null layout)
9.3.1 Trnh by Flow Layout
Cch trnh by Flow Layout s xp cc i tng trn mt hng theo dng. Nu i
tng mi thm khng ch (chiu rng) th n s t ng thm vo u dng mi.
Cc phng thc:
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 187 --------------------------------------
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
}
}




Hnh 9.11 Kt qu demo Flow layout
9.3.2 Trnh by Grid Layout
Cch trnh by Grid Layout s sp xp cc i tng theo dng bng, c xc nh s
hng v s ct. Cc phng thc xy dng:
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 188 --------------------------------------
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 hng trnh by l 3, s ct l tu thuc vo s i tng trong frame.
setLayout(new GridLayout(0,2));
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
}
}

Hnh 9.12 Kt qu demo Grid layout
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 189 --------------------------------------
9.3.3 Trnh by Border Layout
Cch hin th Border Layout s chia frame thnh 5 vng c nh v t ng ko dn
cc vng sao cho chim ht b mt ca frame:
West: vng pha ty, tc l pha l bn tri.
East: vng pha ng, tc l pha l bn phi.
North: vng pha bc, tc l pha l trn.
South: vng pha nam, tc l pha l di.
Center: vng trung tm, chnh gia frame.
Phng thc c bn ca lp BorderLayout:
BorderLayout(): Khi to mt i tng trnh by theo cch border.
Khi mt frame c trnh by theo cch border, ta c th dng phng thc sau gn
cc i tng vo cc vng ca frame:
<i tng frame>.add(<Vng border>, <i tng component>);
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
Bin son : Bi Cng Giao --------------------------------------- 190 --------------------------------------
// 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
}
}

Hnh 9.13 Kt qu demo Border layout
9.3.4 Trnh by GridBag Layout
Cch trnh by GridBag Layout cng trnh by cc i tng tng t nh Grid
Layout: cc i tng s c nh v theo v tr cc ca mt khung li. Tuy nhin,
GridBag cho php ta nh kch thc ca i tng s chim bao nhiu v s c
t v tr no trong khung li. Cc phng thc c bn:
GridBagLayout(): khi to mt i tng trnh by theo cch gridbag.
setConstraints(Component, GridBagConstraints): t v tr v kch thc ca
i tng component theo cc rng buc trong gridbagConstraints.
GridBagConstraints
y l lp cha cc rng buc cho cc i tng c trnh by theo cch GridBag.
Cc phng thc v thuc tnh c bn ca lp GridBagConstraints:
GridBagConstraints(): khi to mt i tng rng buc ca GridBag.
gridx/gridy: v tr ca cell m ta mun t i tng vo (theo chiu X v chiu Y).
gridwidth/gridheight: kch thc (vng trnh by) ca i tng (Theo chiu rng
v chiu cao).
fill: Xc nh cch t i tng, theo 4 cch:
- GridBagConstraints.NONE: i tng khng thay i kch thc theo cc
n chim.
- GridBagConstraints.VERTICAL: i tng c chiu cao kn vng n chim
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 191 --------------------------------------
- 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
Bin son : Bi Cng Giao --------------------------------------- 192 --------------------------------------
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
}
}

Hnh 9.14 Kt qu demo Gridbag layout
9.3.5 Trnh by Null Layout
Cch trnh by Null Layout s trnh by cc i tng khng theo mt quy tc no. Tt
c u do ngi dng t nh v v thit lp kch thc cho mi i tng.
nh v i tng bng phng thc setLocation():
<i tng>.setLocation(Point);
nh kch thc i tng bng phng thc setSize():
<i tng>.setSize(int, int);
Ngoi ra, c th va nh v, va nh kch thc cho i tng thng qua phng
thc: <i tng>.setBounds(int, int, int, int);
Trong , hai tham s du nh v i tng, hai tham s sau nh kch thc i
tng.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 193 --------------------------------------
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
}
}

Hnh 9.15 Kt qu demo Null layout
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.*;
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 194 --------------------------------------
9.4.1 Cu trc ca mt Applet
Cu trc tng qut ca mt applet nh sau:
public class <Tn lp applet> extends Applet {
// Cc thuc tnh
public void init(){}
public void start(){}
public void stop(){}
public void destroy(){}
// Cc phng thc khc
}

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
Bin son : Bi Cng Giao --------------------------------------- 195 --------------------------------------
}
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
}
}

Hnh 9.16 Kt qu demo Applet
9.4.2 S dng Applet
Applet khng th chy nh mt ng dng Java c lp (n khng c hm main), m
n ch chy c khi c nhng trong mt trang HTML (ui .htm, .html) v chy
bng mt trnh duyt web thng thng.
Cc bc xy dng v s dng mt applet bao gm:
Ci t chng trnh c dng mt applet nh mc trn
Bin dch m ngun thnh lp .class
Nhng m .class ca applet vo trang html.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 196 --------------------------------------
nhng mt applet vo mt trang html, ta dng th (tag) <Applet> nh sau:
<APPLET CODE = Tn_file_applet.class WIDTH = Chiu_rng HEIGHT =
Chiu_cao>
</APPLET>

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=200>
</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
Bin son : Bi Cng Giao --------------------------------------- 197 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 198 --------------------------------------
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 199 --------------------------------------
9.4.3 Truyn tham s cho Applet
Trong nhiu trng hp, applet phi ph thuc vo cc tham s bn ngoi truyn
vo. Khi ta c th dng th PARAM ca html truyn tham s cho applet. C
php:
<APPLET CODE = Tn_file_applet.class WIDTH = Chiu_rng HEIGHT =
Chiu_cao>
<PARAM NAME=Tn_bin VALUE=Gi_tr>
// Cc tham s khc
</APPLET>

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
Bin son : Bi Cng Giao --------------------------------------- 200 --------------------------------------
btn = new Button(Search);
}
txt = new TextField();
this.add(lbl);
this.add(txt);
this.add(btn);
}
}
Khi , applet phi c nhng vo trang html vi on m nh sau:
<APPLET CODE = ParamDemo.class WIDTH = 400 HEIGHT = 200>
<PARAM NAME=langue VALUE=vn>
</APPLET>

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
Bin son : Bi Cng Giao --------------------------------------- 201 --------------------------------------
9.5.1 M rng cc i tng component
JFC m rng cc i tng c bn ca Java thnh cc lp tng ng, thm k t J
u mi tn lp:
Button JButton
Label JLabel
TextField JTextField
TextArea JTextArea
Checkbox JCheckbox
List JList
Cc lp m rng ny c y cc phng thc ca cc i tng lp c bn ca th
vin java.awt. Ngoi ra, chng c b sung mt s phng thc to hiu ng giao
din.
JButton
Chng trnh JButtonDemo minh ho vic s dng i tng JButton. i tng
JButton c m rng thm mt s tnh nng sau:
JButton(String, Icon): Khi to mt nt nhn vi mt tn nhn v mt nh nn.
nh nn c kiu icon (tham s th hai).
setMnemonic(char): nh phm tt cho nt lnh. Khi ngi dng nhn Ctrl+phm
tt th nt lnh cng thc thi tng t nh kkhi ta click chut vo nt lnh.
setBorder(new MatteBorder(int, int, int, int, Icon)): Thit lp khung nn cho nt
vi cc tham s: Khong cch t ch n bin ( rng bin) theo cc chiu trn
di, tri phi, cui cng l nh nn cho nt.
setBorder(new LineBorder(int)): Thit lp vin cho nt dng hnh ch nht, tham
s xc nh mu cho vin ca nt. Ngoi ra, tham s ca phng thc ny cn c
th l cc lp SoftBevelBorder, EtchedBorder v TitleBorder.
setToolTipText(String): Thit lp dng tooltip cho i tng. Dng ny s hin ra
khi ta di chut ln i tng trn ca s.

package chuong9;
import javax.swing.*;
import javax.swing.border.MatteBorder;
public class JButtonDemo extends JFrame {
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
JFrame myFrame = new JFrame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 202 --------------------------------------
// 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.
9.5.2 M rng cc i tng container
Tng t nh cc i tng component, cc i tng container cng c m rng
trong JFC thnh cc lp c tn tng ng v thm k t J u:
Frame JFrame
Panel JPanel
Dialog JDialog
Menu JMenu
Chng trnh JFrameDemo minh ho vic s dng cc i tng m rng ca khung
cha Frame thnh JFrame. Khung cha JFrame c nhiu tng trnh din khc nhau,
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 203 --------------------------------------
cc tng l trong sut v chng kht ln nhau, khin cho ta vn c cm gic cc i
tng c trnh by trn cng mt mt phng nh khung cha Frame ca th vin
chun AWT.
Mt s tng hay s dng ca lp JFrame (theo th t t trong ra ngoi):
ContentPane: l tng thng dng nht, tng ny dng cha cc i tng
component c bn nh button, label, text, list
MenubarPane: tng dnh cha cc loi menu ca frame nh Menubar,
PopupMenu.
GlassPane: tng ngoi cng, thng dng cha cc tooltip ca cc i tng
trong tng Content. Khi ta set tooltipText cho mt i tng, tooltip s t ng
c add vo tng Glass.
truy nhp vo mt tng bt k, ta dng phng thc c tn:
get + <Tn ca tng>();
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 {

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");
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 204 --------------------------------------
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);
}

// 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.");
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 205 --------------------------------------
}
}

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>);
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 206 --------------------------------------
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
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 207 --------------------------------------
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");
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);
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 208 --------------------------------------
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); // Thm n ti popup menu
// 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());
}
});
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);
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 209 --------------------------------------
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
if (cmd.equals("color(blue)"))
this.parent.setBackground(Color.blue);
else
if (cmd.equals("color(green)"))
this.parent.setBackground(Color.green);
else
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 210 --------------------------------------
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.
9.6 Case Study
Trong phn ny, ta s minh ho cch s dng cc i tng ho ca th vin chun
AWT vit mt chng trnh m phng mt my tnh Calculator nh sau:
To mt frame lm khung chng trnh, tiu l Java Calculator
Pha trn l mt Label (hoc vn bn u c, nhng nu dng vn bn th
khng cho edit) hin cc s c nhp vo v kt qu tnh ton.
Pha di l cc nt nhn tng ng vi cc ch s v php ton. Nhng nhm
cc nt nhn cho ng b v layout p mt, ta nhm chng vo mt Panel.
Khi , frame s cha trc tip hai i tng: label v frame. Ta s dng layout
kiu null, v xc nh v tr chnh xc cho label v panel.
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.
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 211 --------------------------------------
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);
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);
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 212 --------------------------------------
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
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
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 213 --------------------------------------
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() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 214 --------------------------------------
// 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) {
result = (float)1/newIterator;
lbl.setText(String.valueOf(result));
}
operator = -1;
operatorState = true;
return;
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 215 --------------------------------------
}
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());
return;
}
if(ae.getSource() == btnDiv) {
operator = 3;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 216 --------------------------------------
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
}
}

Chng trnh s cho kt qu nh sau:


Hnh 9.22 Kt qu demo Case Study

Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 217 --------------------------------------
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 .
Chng 9: Lp trnh giao din
Bin son : Bi Cng Giao --------------------------------------- 218 --------------------------------------
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 menu 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 vo trang myHtml.htl chy. (Trang ny phi cng th mc vi cc lp
va ci t v bin dch).
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 219 --------------------------------------
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
10.1 Gii thiu lung
Mt lung (thread) l n v nh nht ca on m c th thi hnh c m thc hin
mt cng vic ring bit.
Java h tr a lung, m c kh nng lm vic vi nhiu lung. Mt ng dng c th
bao hm nhiu lung. Mi lung c ng k mt cng vic ring bit, m chng
c thc thi ng thi vi cc lung khc.
a lung gi thi gian nhn ri ca h thng thnh nh nht. iu ny cho php ta
vit cc chng trnh c hiu qu cao vi s tn dng CPU l ti a. Mi phn ca
chng trnh c gi mt lung, mi lung nh ngha mt ng dn khc nhau ca
s thc hin. y l mt thit k chuyn dng ca s a nhim.
Trong s a nhim, nhiu chng chng trnh chy ng thi, mi chng trnh c t
nht mt lung trong n. Mt vi x l thc thi tt c cc chng trnh. Cho d n c
th xut hin m cc chng trnh c thc thi ng thi, trn thc t CPU nhy
qua li gia cc tin trnh.
Mt lung i qua cc giai on khc nhau trong vng i ca n. V d, mt lung
c sinh ra, bt u, chy, v sau cht. Hnh 10.1 cho thy vng i hon chnh
ca mt lung.
New: mt lung mi bt u chu k sng ca n trong trng thi mi.
Runnable: sau khi mt lung va c sinh ra l bt u, lung s tr thnh
Runnable. Mt lung trng thi ny c coi l ang thc hin nhim v ca
mnh.
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 220 --------------------------------------
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.















Hnh 10.1 Vng i ca lung
10.2 To v qun l lung
10.2.1 To lung
Khi cc chng trnh Java c thc thi, lung chnh lun c thc hin v
Cc lung con s c to ra t n.
N l lung cui cng kt thc vic thc hin. Ngay khi lung chnh ngng thc
thi, chng trnh b chm dt.
Cho d lung chnh c to ra mt cch t ng vi chng trnh thc thi, n c th
c iu khin thng qua mt lung i tng.
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 221 --------------------------------------
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
}
}
Trnh by mt lp m lp ny thc hin lp Runnable. Ri th nh ngha phng
thc run().
class Mydemo implements Runnable {
public void run() {
//thc thi
}
}

Chng trnh MyThread s hin th thng tin v lung chnh

package chuong10;
import java.io.*;
public class MyThread extends Thread {
public static void main(String args[]){
Thread t = Thread.currentThread();
System.out.println("The current Thread is :" + t);
t.setName("MyJavaThread");
System.out.println("The thread is now named: " + t);
try {
for (int i = 0; i <3;i++) {
System.out.println(i);
Thread.sleep(1500);
}
} catch (InterruptedException e) {
System.out.println("Main thread interupted");
}
}
}

Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 222 --------------------------------------
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






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)
Cu trc mt lung vi tn l threadname
public Thread()
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);
[main,5,main]
Nhm lung m n ph thuc
Quyn u tin c t bi JVM
Tn ca lung
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 223 --------------------------------------
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

10.2.2 Phng thc ca lp lung
Phng thc Mc ch
enumerate(Thread [ ] t) Chp tt c cc lung hin hnh vo mng t nhm
lung v cc nhm con ca n.
getName() Tr v tn ca lung
isAlive() Tr v true, nu lung vn cn tn ti (sng)
getPriority() Tr v quyn u tin ca lung
setName(String name) t tn lung.
join() i cho n khi lung cht.
isDaemon() Kim tra c phi l lung ngm hay khng.
setDaemon(boolean on) Thit lp l lung ngm hay lung ngi dng.
sleep() Hon lung mt khong thi gian.
start() Gi phng thc run() bt u mt lung.
activeCount() S lung ang hot ng
yield() Tm thi dng lung ang thc hin v cho php lung
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 224 --------------------------------------
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();
}
}

Kt qu chng trnh trn

main
My Thread
2
true

Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 225 --------------------------------------
10.2.3 Quyn u tin ca lung
Khi c nhiu lung cng hot ng th mi lung nhn mt phn nh thi gian CPU,
c gi l nh lng. Lung c th thc thi tc v ca chnh n trong sut khong
thi gian nh lng y. Sau khong thi gian ny, lung khng tip tc thc hin,
ngay c nu n khng c hon thnh cng vic ca n. Lung k tip ca lung c
quyn u tin bng nhau ny s s hu CPU.
Mi lung trong chng trnh Java c ng k cho mt quyn u tin. JVM khng
bao gi thay i quyn u tin ca lung. Mi lung c mt gi tr u tin nm trong
khong t Thread.MIN_PRIORITY : 1 ti Thread.MAX_PRIORITY : 10. Mc nh
lung c s u tin l Thread.NORM_PRIORITY : 5.
Phng thc yield() thch hp cho cc h thng khng chia nh thi gian (non-time-
sliced), ni m cc lung hin thi hon thnh vic thc hin trc khi cc lung c
quyn u tin ngang nhau k tip tip qun. y, ta s gi phng thc yield() ti
nhng khon thi gian ring bit c th tt c cc lung c quyn u tin ngang
nhau chia s thi gian thc thi CPU.
Chng trnh PriorityDemo minh ho quyn u tin ca lung:

package chuong10;
public class PriorityDemo {
Priority t1, t2, t3;
public PriorityDemo() {
t1 = new Priority();
t1.start();
t2 = new Priority();
t2.start();
t3 = new Priority();
t3.start();
}
public static void main(String args[]){
new PriorityDemo();
}
}

class Priority extends Thread implements Runnable {
int sleep;
int prio = 3;
public Priority() {
sleep += 100;
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 226 --------------------------------------
setPriority(Thread.activeCount());
}
public void run() {
try {
Thread.sleep(sleep);
System.out.println("Name "+ getName()+" Priority = "+
getPriority());
} catch(InterruptedException e) {
System.out.println(e.getMessage());
}
}
}

Kt qu chng trnh nh sau:

Name Thread-2 Priority = 3
Name Thread-0 Priority = 1
Name Thread-1 Priority = 2

10.2.4 Lung ngm
C hai kiu lung trong mt chng trnh Java:
Cc lung ngi s dng
Lung ngm (daemon thread)
Ngi s dng to ra cc lung ngi s dng, trong khi cc lung chy pha sau
(background) cung cp cc dch v cho cc lung khc gi l lung ngm. Khi my o
Java khm ph rng ch c lung ngm ang chy th n s thot. My o Java c t
nht mt lung ngm c bit n nh l lung thu rc (thu lm nhng d liu v
ngha). Lung thu rc thc thi ch khi h thng khng c tc v no. N l mt lung
c quyn u tin thp. Lp lung c hai phng thc lm vic vi cc lung ngm:
public void setDaemon(boolean on)
public boolean isDaemon()
Chng trnh TestDaemon sau minh ho cho lung ngm

package chuong10;
class TestDaemon implements Runnable {
Thread Objth1, Objth2;
public TestDaemon() {
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 227 --------------------------------------
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();
}
}

Kt qu chng trnh nh sau:

2
false
true

10.2.5 a lung vi Applet
Trong khi a lung l rt hu dng trong cc chng trnh ng dng c lp, n cng
ng c quan tm vi cc ng dng trn Web. a lung c s dng trn web,
trong cc tr chi a phng tin, cc bc nh sinh ng, hin th cc dng ch chy
qua li trn biu ng, hin th ng h thi gian nh l mt phn ca trang Web Cc
chc nng ny to thnh cc trang web quyn r v bt mt.
Trong a lung vi Applet, lp java.applet.Applet l lp con c to ra bi ngi s
dng nh ngha applet.
Chng trnh MyApplet ch ra iu ny thc thi nh th no:

package chuong10;
import java.awt.*;
import java.applet.*;
public class MyApplet extends Applet implements Runnable {
int i;
Thread t;
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 228 --------------------------------------
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<22; 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.
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 229 --------------------------------------
10.3 Nhm lung
10.3.1 Gii thiu nhm lung
Nhm lung dng qun l cc lung nh l mt n v thng nht. N rt c ch
trong cc trng hp ta mun ngn li hay chy li nhiu lung c lin quan vi nhau.
V d, hy tng tng mt chng trnh trong c mt tp hp cc lung c s
dng in mt ti liu, tp hp khc c s dng hin th cc ti liu trn mn
hnh, v tp hp khc lu vo mt tp tin a. Nu in c hy b, bn s mun c
mt cch d dng ngn chn tt c cc ch lin quan n in. Nhm lung cung
cp tin li ny.
Hai kiu nhm lung thit lp (khi to) l:
public ThreadGroup(String str)
y, str l tn ca nhm lung mi nht c to ra.
public ThreadGroup(ThreadGroup tgroup, String str)
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 s lng cc lung kch hot hin hnh trong nhm lung
public synchronized int activeGroupCount()
Tr v s lng cc nhm hot ng trong nhm lung
public final String getName()
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
Bin son : Bi Cng Giao --------------------------------------- 230 --------------------------------------
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()];
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 231 --------------------------------------

// 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
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 232 --------------------------------------
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.

Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 233 --------------------------------------
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
Bin son : Bi Cng Giao --------------------------------------- 234 --------------------------------------
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");
}
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 235 --------------------------------------
}
}

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>

10.3.4 S dng khi ng b
To ra cc phng thc ng b trong phm vi cc lp l mt con ng d dng v
c hiu qu ca vic thc hin s ng b. Tuy nhin, iu ny khng lm vic trong
tt c cc trng hp.
Hy xem mt trng hp ta mun s ng b c thm nhp vo cc i tng ca
lp m khng c thit k cho thm nhp a lung. Tc l, lp khng s dng cc
phng thc ng b. Hn na, m ngun nh ngha lp khng c cho chng ta thm
synchronized trc phng thc ng b.
ng b s truy nhp mt phng thc ca i tng t ni gi ta s dng chung
mt khi ng b (synchronized block) nh sau:
synchronized(object) {
// cc cu lnh ng b
}
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
Bin son : Bi Cng Giao --------------------------------------- 236 --------------------------------------
Chng trnh SynchBlock ch ra cu lnh ng b s dng nh th no:

package chuong10;
class TargetSynchBlock {
void display(int num) {
System.out.print("<"+num);
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println("Interrupted");
}
System.out.println( + num+ ">");
}
}

class SourceSynchBlock implements Runnable{
int number;
TargetSynchBlock target;
Thread t;
public Source(TargetSynchBlock targ,int n) {
target = targ;
number = n;
t = new Thread(this);
t.start();
}
// ng b gi phng thc display()
public void run(){
synchronized(target) {
target.display(number);
}
}
}

public class SynchBlock {
public static void main(String args[]){
TargetSynchBlock target = new TargetSynchBlock ();
int digit = 10;
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 237 --------------------------------------
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.
10.3.5 K thut i thng bo
Java cung cp mt c ch lin lc bn trong s dng cc phng thc wait(), notify()
v notifyAll(). Cc phng thc ny c thc hin nh l cc cc phng thc final
trong lp Object, tt c lp c th truy xut chng. Ba phng thc ny c th c
gi ch t trong mt phng thc ng b.
Phng thc wait() bo cho lung ang gi thot khi monitor i vo trng thi
sleep cho n khi mt s lung khc vo cng monitor v gi phng thc notify().
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 238 --------------------------------------
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 "+ philo_num+ " is waiting for the "+ side+ "
chopstick");
wait();
} catch (InterruptedException e) {
}
}
System.out.println("Philosopher "+ philo_num+ " 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;
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 239 --------------------------------------
int philo_num;
Philosopher(int num, ChopStick chop1, ChopStick chop2) {
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++) {
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 240 --------------------------------------
chopsticks[count] = new ChopStick();
}
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
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 241 --------------------------------------
tt bi n him khi xy ra.
Xt chng trnh SimpleDeadLock sau:

package chuong10;
public class SimpleDeadLock extends Thread {
public static Object l1 = new Object();
public static Object l2 = new Object();
private int index;

public static void main(String[] a) {
Thread t1 = new Thread1();
Thread t2 = new Thread2();
t1.start();
t2.start();
}

private static class Thread1 extends Thread {
public void run() {
synchronized (l1) {
System.out.println("Thread 1: Holding lock 1...");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("Thread 1: Waiting for lock 2...");
synchronized (l2) {
System.out.println("Thread 2: Holding lock 1 &
2...");
}
}
}
}

private static class Thread2 extends Thread {
public void run() {
synchronized (l2) {
System.out.println("Thread 2: Holding lock 2...");
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 242 --------------------------------------
try {
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:
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 243 --------------------------------------
Object a = new Object();
Object b = a;
a = null;

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;
i tng bt u c th c thu rc
Mt v d khc:
Object m = new Object();
m = new Object();
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();

Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 244 --------------------------------------
// xc nh kch thc b nh trng
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
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 245 --------------------------------------
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 ng/Sai
b. Cc lung con c to ra t lung chnh 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.
Chng 10: Lung x l
Bin son : Bi Cng Giao --------------------------------------- 246 --------------------------------------
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.

Bin son : Bi Cng Giao --------------------------------------- 247 --------------------------------------


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-list-
demo.shtml
[9] ThreadGroup Sample in Java, http://www.java-
samples.com/showtutorial.php?tutorialid=233
[10] Java Thread Deadlock Demo Program,
http://www.herongyang.com/Java-Tools/jstack-Java-Thread-Deadlock-Demo-
Program.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, 11-
2010, trang 37

You might also like