You are on page 1of 114

Chng 1: Gii thiu v Java

Mc tiu bi hc
Kt thc bi hc ny, hc vin c th:
Tm hiu cc thc th trong th gii thc nh l cc i tng
nh ngha mt i tng phn mm
Tm hiu v gii thch cu trc ca mt lp
So snh cc lp v cc i tng
Tm hiu tm quan trng ca Java
Tm hiu b JDK v cc cng c ca n
Tm hiu v my o Java - Java Virtual Machine (JVM)

1.1

Gii thiu v lp v i tng

Cc i tng (object) v cc lp (class) l nn tng xy dng Java. Lp l


mt khun mu, bao gm mt tp cc i tng c tnh cht tng t nhau. Lp
m t tt c cc thuc tnh ca mt tp cc i tng c th.
1.1.1 Cc thc th trong th gii thc nh l cc i tng
i tng l khi nim dng m t cc thc th trong th gii thc. V d cc
i tng c th nhainf thy quanh ta nh: Ch - Dogs, t - Cars, bng hoa Flowers, ngi nh Houses, Bt k mt thc th hu hnh hoc c th s m
c no , u c th xem nh nh mt i tng trong th gii thc.
Mi i tng c cc thuc tnh hoc tnh cht nhm m t n l ci g. V d,
cc thuc tnh ca i tng Dog l:
Ging
Mu lng
Tui
Ngoi ra, mt i tng c th thc hin cc hnh ng. Chng hn, cc hnh
ng ca Dog c th thc hin l:
Sa
n

AptechVietnam

1/114

Learn Java by Example


Chy
Nh vy, hai yu t quan trng nht ca i tng trong th gii thc l: thuc
tnh (Attribute) v hnh ng (Action). Nh , i tng c th c nh ngha
nh mt thc th tn ti, c cc thuc tnh v hnh ng hon ton xc nh.
Tng t nh vy, trong phm vi ca cng ngh phn mm, cc i tng cng
c m t da theo trng thi v hnh vi ca n. Trng thi ca mt i tng
phn mm c nh ngha bi cc thuc tnh ca n. Cc hot ng ca mt
i tng phn mm c nh ngha nh l cc hnh vi ca n.
Hy xem xt mt i tng trong th gii thc, chng hn Dog, mt con ch.
Nu i tng ny c nh x n mt i tng phn mm, trng thi ca n
c th l mu lng, ging v tui. Hnh vi ca i tng Dog c th l sa, n,
chy,
V vy, mt i tng phn mm l mt thc th bao gm cc trng thi (thuc
tnh) v hnh vi (hnh ng). N lu gi cc trng thi ca n trong cc trng,
c gi l cc bin trong ngn ng lp trnh. Cn cc hnh vi c xem nh l
cc phng thc, ging nh cc hm trong ngn ng lp trnh. Mt phng
thc l mt chui cc cu lnh c t tn nhm thc hin cc tc v c th
no .
Tham kho hnh 1.1, y l v d v i tng Cashier (Th qu)

Hnh 1.1: i tng Cashier v i tng Customer


Cc thuc tnh ca i tng Cashier l:
Tn
Chc v
Tui
Mt i tng thc thi mt s hnh ng. Cc hnh ng ca i tng
Cashier l:

2/114

AptechVietnam

Chng 1 Gii thiu v Java


Thu tin t khch hng
In ho n
S thun li khi s dng i tng l:
N gip chng ta hiu hn v th gii thc
N nh x cc thuc tnh v cc hnh ng ca cc i tng trong th
gii thc thnh trng thi v hnh vi ca cc i tng phn mm.
1.1.2 Class (Lp)
Nh cp trn, Dog l mt v d v mt i tng trong th gii thc. Tuy
nhin, trong th gii thc c nhiu loi ng vt khc nh mo, cu, cp, V
vy, Dog ch l mt th hin ca lp ng vt.
Cc thuc tnh v hnh ng chung ca mt s i tng c nhm li thnh
mt n v. n v ny c th c dng to ra mt i din ca loi tng
ng, gi l lp. Mi mt lp m t mt tp cc i tng ring l.
Mt lp l mt khun mu hoc bn thit k nh ngha c im chnh ca trng
thi v hnh vi cho tt c cc i tng thuc v lp. Tt c cc th hin ca
lp, c gi l i tng, s c chung cc trng thi v hnh vi.
Tuy nhin, cc thuc tnh v hnh ng c th c gn ch sau khi mt i
tng c to ra. Khi i tng c to ra ta mi c mt i din tht s ca
thc th. V vy, lp l mt m hnh khi nim ca thc th. N m t cc thuc
tnh v hnh ng chung ch khng ring cho mt i tng c th no.
V d, xem xt mt lp c tn Animal (ng vt) nh trong bng 1.1. Lp cha
cc thuc tnh (trng thi) v hnh ng (hnh vi) ca ng vt.
Class Animal
Type
Animal Name
Color
Motion
Breathing
Eating
Bng 1.1: M t lp Animal
Lp ny c trng thi Type, Animal Name v Color.
Trong ,
Type
- M t loi ng vt.
Animal name - Tn loi ng vt, chng hn cu, cp, ch,

3/114

Learn Java by Example


Color

- M t mu da/ lng ca loi

Motion (Di chuyn), Breathing (Th) v Eating (n) l cc hnh vi ca lp


Animal.
1.1.3 So snh gia lp (class) v i tng (object)
C s khc bit gia mt lp v mt i tng. Mt lp m t mt thc th,
trong khi mt i tng l mt thc th tht s.
i tng l vt tht, trong khi lp l mt m hnh khi nim nh ngha tt c
cc trng thi v hnh vi cn thit ca mt i tng.
Mt lp l mt nguyn mu (prototype) ca mt i tng. N nh r cc hnh
ng v cc tnh cht cn thit cho mt loi i tng c th. Bng 1.2 l v d
v lp v i tng.
Class
(Lp)
Animal
Car

Object
(i tng)
Cat
Dog
Honda City
Benz

Bng 1.2: V d v lp v i tng


Lp khng thay i, trong khi d liu cha trong mt i tng c th thay i.
Cc thuc tnh ca lp c thit lp trong sut thi gian chay chng trnh,
khng th thm bt thuc tnh trong lc chng trnh ang chy. Khi mt i
tng c to t mt lp, n s l mt thnh phn ca lp cho n khi b
hu b. S tn ti ca i tng c hn ch, i tng s c to ra v hy b
theo ng trnh t.
Mi i tng c gi l mt th hin ca mt lp. Trong v d bn di,
Employee l mt lp, cn cc i tng l: Cashier, System Administrator, Stock
Manager, Salesman, Purchase Manager.

4/114

AptechVietnam

Chng 1 Gii thiu v Java

Hnh 1.2: Cc i tng v lp.


1.2 Gii thiu v Java
Vo nm 1995, hng Sun Microsystem gii thiu mt ngn ng lp trnh mi l
Java. Cho n gi, t Java ch c ngha l tn mt hn o Indonesia hoc
mt kiu cch pha caf no .
1.2.1 S cn thit ca Java
Java l mt ngn ng dnh cho cc nh lp trnh chuyn nghip. Java c xy
dng trn c s ngn ng lp trnh C v C++. N k tha c php ca C v cc
nt c trng ca C++. Mt nhm k s ca hng Sun Microsystem cn thit k
mt ngn ng cho cc thit b in t nh tivi, my git, V vy, mc ch c
bn l pht trin ngn ng to ra phn mm c th nhng trong cc thit b
in t. Trong ngn ng C v C++ trnh bin dch ph thuc vo loi CPU ring
bit.
Cc trnh bin dch rt t v mt nhiu thi gian to ra. Do , khng th c
trnh bin dch cho mi loi CPU. V yu cu l cn c cch d dng v hiu qu
to ra cc trnh bin dch. Ngoi ra, phn mm phi nh, nhanh, hiu qu v
c lp nn tng, ngha l m chng trnh c th thc hin trn nhiu CPU
khc nhau di cc mi trng khc nhau. Trong n lc to ra mt ngn ng
c lp nn tng v kh chuyn, James Gosling v nhm cng s i tin phong

5/114

Learn Java by Example


trong vn ny. Kt qu l s ra i ca ngn ng Java. u tin n c gi
l Oak, sau c i tn thnh Java. Ngy nay, Java c nhng bc
pht trin ht sc thnh cng v c chp nhn bi hng triu lp trnh vin
trn ton th gii.
Java l mt ngn ng lp trnh ph dng, c dng vit cc chng trnh c
th chy c trn Internet. Nt c trng chnh ca Java l ngn ng hng
i tng v c lp nn tng. c lp nn tng c ngha l chng trnh c th
chy trn nhiu nn tng khc nhau nh: Microsoft Windows, Apple Macintosh,
Linux, Java khng nhng c dng cho cc ng dng c lp, cc chng
trnh trn mng, m cn c dng trong cc thit b tiu dng nh: in thoi,
cc thit b cm tay,
1.2.2 Cc c trng ca ngn ng Java

Hng i tng (Object-oriented)

Java l mt ngn ng hng i tng. Trong Java khng c cc hng, bin


hoc hm c lp. Ngha l tt c u l mt phn ca i tng. Cc hng,
bin v hm c truy nhp thng qua cc lp v cc i tng.
Cc ngn ng hng i tng lai ghp khc nh C++, c c im ca ngn
ng cu trc cng thm s m rng i tng. V d, C++ l mt ngn ng
hng i tng, nhng lp trnh theo hng cu trc, phng thc main() nm
ngoi bt k lp v i tng no. Java th khng cho php cch khai bo ny.
Trong Java, phng thc main() ch c khai bo bn trong mt lp.

c lp nn tng (Platform independent)

Java l mt nn tng pht trin ng dng. N c th c dng nh mt


ngn ng. Nn tng y l s kt hp gia phn cng v phn mm h thng
m hu ht cc phn mm u chy c. V d, b x l Intel chy trn nn
Windows XP l mt nn tng.
c lp nn tng ni n kh nng ca chng trnh di chuyn t mt nn tng
ny sang mt nn tng khc khng c bt k mt kh khn no. c lp nn
tng trong Java mc m ngun v m bytecode (m trung gian).
Java l mt ngn ng nh kiu mnh m, ngha l phi cn khai bo kiu d
liu cho mi bin. Kiu d liu trong Java l ng nht trong tt c cc nn tng
pht trin. Java c cc lp th vin c s. iu ny cho php cc lp trnh vin
c th di chuyn m t nn tng ny n mt nn tng khc m khng cn vit
li m.

6/114

AptechVietnam

Chng 1 Gii thiu v Java


Ni tm li, c lp nn tng mc m ngun cho php di chuyn m ngun t
mt h thng ny sang mt h thng khc, bin dch v thc hin m xui trn
mi h thng.
S dng m bytecode, Java gii quyt vn c lp nn tng. Khng ging
nh trnh bin dch ca C, trnh bin dch Java a ra mt nh dng c bit,
l bytecode, ging nhau trn mi nn tng.
Cc chng trnh Java c bin dch thnh bytecode vn cn mt trnh thng
dch thc thi n trn bt k mt nn tng nh sn no. Cng vic ca trnh
thng dch l c m bytecode v chuyn n thnh ngn ng my.
chy Java trn mt my tnh hoc mt h iu hnh mi, ch cn trnh thng
dch v mt vi gi th vin cn thit. Bi v bytecode l c lp nn tng.

Mnh m

Java l ngn ng nh kiu mnh m. N c thit k vit cc phn mm c


tin cy cao v mnh. Tuy nhin, n yu cu phi khai bo cc phng thc
mt cch r rng. Java kim tra li c php ti thi im bin dch, v ti thi
im thng dch. V vy, n chc chn loi b mt s li trong lp trnh.
Java khng c con tr v php tnh con tr. N kim tra tt c truy nhp n
mng v chui ti thi im chy chng trnh. Ngoi ra n cn kim tra s
chuyn kiu ca i tng t kiu ny n kiu khc ti thi im chy chng
trnh.
Trong cc mi trng lp trnh truyn thng, lp trnh vin phi t cp pht b
nh. Kt thc chng trnh, lp trnh vin phi gii phng vng b nh ny. Cc
s c s ny sinh khi lp trnh vin qun gii phng b nh. Trong Java, lp trnh
vin khng cn quan tm n vic gii phng b nh. N c thc hin t
ng bi b thu gom rc (garbage collection).

An ton (Secure)

Virus my tnh l nguyn nhn gy ra s lo lng trong vic s dng my tnh.


Trc khi c Java, cc lp trnh vin phi qut virus cc tp tin trc khi ti v
v thc hin chng. Thng thng vic ny cng khng loi tr hon ton virus.
Ngoi ra, chng trnh khi thc thi c kh nng tm kim v c cc thng tin
nhy cm trn my ca ngi s dng m ngi s dng khng h hay bit.
Java cung cp mt mi trng qun l vic thc thi chng trnh. N cho rng
khng c mt on m no l an ton c. V th, Java khng ch l ngn ng lp

7/114

Learn Java by Example


trnh thun tu m cn cung cp nhiu mc kim sot tnh an ton khi thc thi
chng trnh.
mc u tin, d liu v cc phng thc c truy nhp thng qua cc
interface (giao tip) do lp cung cp. Java khng h tr cc php ton con tr.
Do , n khng cho php truy nhp trc tip n cc vng nh v cung cp c
ch thu gom rc gip thu hi b nh khng s dng. Cc c trng ny gip
Java an ton ti a v c kh nng kh chuyn cao.
Trong 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 bytecode
phi m bo cc qui tc an ton trc khi thc thi.
Mc th t, kim sot vic np cc lp vo b nh gim st vic vi phm gii
hn truy xut trc khi np vo h thng.

Phn tn (Distributed)

Java c th c dng pht trin cc ng dng trn nhiu nn tng, h iu


hnh v nhiu giao tip ngi dng ho. Java c thit k h tr cc
ng dng trn mng. Do , Java c dng nh l mt cng c pht trin trn
mi trng Internet.

a lung (Multithreaded)

a lung l yu t cn thit cho mt ngn ng nh Java. Mt ng dng thc


hin mt tc v trong khi ang ch ngi dng nhp liu. Trong mt ng dng
ho trn mng nh mt trnh duyt web, thng c rt nhiu tc v xy ra ti
mt thi im. Java cung cp h tr cho x l gi l multithreading thc
hin nhiu tc v ng thi. Java cung cp c ch ng b nhiu x l. C ch
ny cng h tr cho lung (thread) gip cc ng dng tng tc trn mng chy
m xui.

ng (Dynamic)

Java c thit k nh mt ngn ng ng p ng cho nhng mi trng


m. M ngun Java c lu tr trong tp tin c dng .java. Trnh bin dch s
bin dch chng thnh bytecode cha trong tp tin .class. Mi tp tin .java
thng c bin dch thnh mt tp tin .class.
u tin trnh bin dch kim tra ng dn trn th mc hin hnh v cc th
mc khc c xc nh trong bin mi trng CLASSPATH. iu ny cn thit
gip xc nh cc lp khc c tham chiu trong tp tin ngun. V d, nu tp
tin c bin dch ph thuc vo cc tp tin khng c bin dch khc, trnh
bin dch s c tm v bin dch chng. Trnh bin dch c th iu khin s ph
thuc vng trn cng nh cc phng thc c s dng trc khi c khai
bo. N cng xc nh tp tin ngun c thay i so vi ln bin dch cui cng
hay khng. V vy, trnh bin dch kh thng minh.

8/114

AptechVietnam

Chng 1 Gii thiu v Java

Kin trc trung lp (Architecture-neutral)

Cng ngh Java c thit k h tr cc ng dng s c trin khai trong


cc mi trng khng ng nht trn mng. Trong cc mi trng nh vy, cc
ng dng phi c kh nng thc thi tt trn nhiu kin trc phn cng.
Cc chng trnh Java c bin dch thnh mt nh dng bytecode khng ph
thuc kin trc c th thc thi trn nhiu nn tng phn cng v phn mm. V
vy, vn phn phi nh phn v phin bn c gii quyt bi bn cht thng
dch ca cng ngh Java.
Cc chng trnh Java chy trn bt k h thng no c h tr my o Java.
iu ny khng nhng hu ch trn mng m cn c ch trn cc h thng phn
tn.

Kh chuyn (Portable)

Kh chuyn l h qu ca kin trc trung lp. Cng ngh Java c c kh nng


kh chuyn l nh vo nh ngha cht ch ca ngn ng. N ch r kch thc
ca cc kiu d liu c bn loi tr s ph thuc ci t v hnh vi ca cc
ton t s hc. H thng Java bn thn l kh chuyn. Trnh bin dch Java
c vit bng Java, trong khi h thng thc thi Java c vit bng ANSI C vi
ranh gii kh chuyn r rng.

Hiu sut cao (high performance)

Hiu sut lun c cn nhc. So vi cc ngn ng kch bn thng dch mc


cao, Java c hiu sut cao nht. B thu gom rc t ng thc hin nh lung
ngm bn di, c u tin thp nht, m bo kh nng kh chuyn cao
nht. Sun khng nh kh nng thc thi ca bytecode chuyn thnh m my tt
gn nh C hoc C++.
1.3 Gii thiu JDK
Sun Microsystems cung cp ngn ng Java trong sn phm gi l Java
Development Kit (JDK). JDK bao gm cc cng c pht trin, mi trng thc thi
(Java Runtime Environment hay JRE), cc th vin, cc chng trnh demo v
m ngun. Mt s cng c nm trong JDK dng pht trin cc ng dng Java
c m t di y:

Trnh bin dch Java, Javac

Trnh bin dch dch m ngun Java thnh tp tin class. Trnh bin dch javac
c dng bin dch cc tp tin m ngun Java thnh bytecode. M ngun
Java c th c to ra bng bt k trnh son tho vn bn no, chng hn
Notepad
C php:
Javac [option] source

9/114

Learn Java by Example

Trong ,
source

- 1 hoc nhiu tn tp tin c phn m rng l .java

option

- Cc tu chn dng lnh

V d,
Javac FirstProgram.java
Cu lnh ny s to ra mt tp tin c tn FirstProgram.class. Tp tin class ny
s chy trn my o Java (JVM). Mt vi tu chn ca cu lnh javac c m
t trong bng 1.3
Ty chn
(Option)

M t

-classpath

Xc nh r v tr cha cc lp c tham chiu


trong m ngun (c lu trong bin mi trng
CLASSPATH)

-d

Xc nh th mc ch cha cc tp tin .class

-g

In tt c cc thng tin g li thay cho s dng v


tn tp tin mc nh.

-verbose

Hin th cc thng tin u ra mi ln lp c np


v tp tin ngun c bin dch.

-version

Hin th thng tin v phin bn

-sourcepath

Cho bit v tr lp

-help

Hin th cc tu chn chun

Bng 1.3: Cc tu chn ca trnh bin dch Javac


Xem xt v d sau s dng tu chn d:
javac d c:\FirstProgram.java
Cu lnh ny s bin dch v lu tp tin FirstProgram.class trong a C.

Trnh thng dch Java, Java

Trnh thng dch Java c s dng thc thi m bytecode. N ly i s l


tn tp tin .class thc thi hoc tn tp tin lu tr Java gi l jar.
C php:
10/114

AptechVietnam

Chng 1 Gii thiu v Java


java [option] classname [arguments]
Trong ,
option - Cc tu chn dng lnh
classname

- Tn tp tin class c dng

arguments

- i s c truyn vo cho hm main

V d,
Java FirstProgram
Mt vi tu chn ca cu lnh Java c m t trong bng 1.4
Ty chn
-classpath

M t
Xc nh r v tr cha cc lp cn (c lu
trong bin mi trng CLASSPATH)

verbose

Hin th cc thng tin u ra mi ln lp c


np v tp tin ngun c bin dch.

-version

Hin th thng tin v phin bn v thot

-jar

S dng tn tp tin JAR thay cho tp tin class

-help

Hin th thng tin tr gip v lnh Java v thot

-X

Hin th thng tin v cc ty chn phi chun v


thot

-v hoc

Bng 1.4: Cc tu chn ca trnh thng dch Java

1.4 My o Java (Java Virtual Machine - JVM)


My o Java l tri tim ca ngn ng lp trnh Java. Mi trng Java bao gm
nm phn t sau:
Ngn ng
nh ngha Bytecode
Cc th vin lp Java/Sun
My o Java (JVM)
Cu trc ca tp tin .class

11/114

Learn Java by Example


c tnh kh chuyn ca tp tin .class cho php cc chng trnh Java vit mt
ln chy mi ni (Write once, run anywhere). c tnh ny c c nh s ci
t my o Java (JVM).
1.4.1 My o Java l g?
Lp trnh vin cn thit phi bit my o Java l g v cch lm vic ca n. iu
ny s gip ta tn dng c im mnh ca JVM v trnh nhng im yu.
My o l mt khi nim phn mm da trn tng ca my tnh tng tng.
N c tp hp cc lnh logic xc nh cc hot ng ca my tnh. My o c
th c xem nh mt h iu hnh thu nh. N thit lp cc lp tru tng
cho: phn cng bn di, h iu hnh, m bin dch.
Trnh bin dch chuyn m ngun thnh tp cc lnh ca my o khng ph
thuc vo phn cng ring bit. Trnh thng dch l mt ng dng hiu cc lnh
ca my o v chuyn cc lnh thnh cc lnh thc hin trn phn cng bn
di. My o, v c bn, to ra mt h thng thc thi gip thc hin cc m
lnh bng cch:
Np cc tp tin .class
Cc trnh Class Loaders l mt trong cc thnh phn c bn ca kin
trc my o Java. N cho php my o Java np cc lp m khng cn
bit bt c th g v ng ngha h thng tp tin v cho php cc ng
dng np cc lp Java nh cc module m rng.
Qun l b nh
My o Java qun l b nh theo cc cch sau:

Khi mt my o Java c triu gi chy mt ng dng, n yu


cu h iu hnh cp b nh cho bn thn JVM chy v b nh
trng cho cc ng dng to cc i tng mi.

Khi mt i tng mi c to, JVM cp pht b nh cho i


tng t vng nh trng.

Khi vng nh trng gim xung sau khi to mt s i tng, JVM


yu cu h iu hnh cp thm.

Khi mt i tng khng cn c dng n s b hu b. B nh b


chim dng s c gii phng v tr li vng b nh trng.

Khi vng nh trng b chim gi, v khng th xin cp thm vng


nh t h iu hnh th JVM tm dng ng dng v a ra thng
bo li Out of memory error.

Thc hin thu gom rc (Garbage Collection)


Qu trnh thu gom rc l gii phng b nh ang s dng ca mt i tng
ngay khi n kt thc, ngha l i tng khng c truy nhp sau mt thi
12/114

AptechVietnam

Chng 1 Gii thiu v Java


gian di. Qu trnh ny xy ra t ng v an ton i vi cc i tng khng
cn cn tham chiu n na.
Khi my o Java thc thi m, mt thanh ghi cc b gi l program counter c
dng. Thanh ghi ny tr n cc lnh ang c thc thi hin ti. Nu cn thit,
cc lnh ny sa ni dung thanh ghi ny thay i lung thc thi. Mt khc,
lung c thc hin tun t nn n tr t lnh ny n lnh khc.
Mt khi nim ph bin khc c dng trong Java l trnh bin dch JIT JustIn-Time. Cc trnh duyt web nh Netscape Navigator, Internet Explorer bao
gm trnh bin dch JIT nhm tng tc thc thi m Java. Mc ch chnh ca
JIT l chuyn i m bytecode sang m my ng vi tng b vi x l c th.
Cc lnh ny c lu tr v dng bt c lc no, c gi nh l mt phng
thc xc nh. Hnh 1.3 hin th mi quan h gia trnh bin dch Java v JIT.

Hnh 1.3: Mi quan h gia trnh bin dch Java v JIT


M chng trnh c bin dch v chy thng qua mt my o thay cho vi x l
ca my tnh. Bng cch s dng cch tip cn ny, m ngun Java c th chy
trn bt k nn tng no, n c bin dch v chy thng qua my o Java.
My o Java khng bit g v ngn ng lp trnh Java, n ch nhn ra mt nh
dng nh phn xc nh ca mt file gi l file class. Cc chng trnh Java c
bin dch thnh m bytecode c th tuyn trn mng v thc thi bi my o
Java. Mi file class cha nh ngha ca mt lp hoc mt giao tip. File
bytecode c phn tn m rng l .class

13/114

Learn Java by Example

Tm Tt Bi Hc
Mt i tng l mt th hin ca mt lp.
Mt lp nh ngha mt thc th trn gii hn ca cc tnh cht v hnh
ng ph bin.
Mt lp nh ngha mt thc th, trong khi mt i tng l mt thc
th thc s.
Java l mt ngn ng thng dch v bin dch.
Cc tnh nng ca Java:
o Hng i tng
o c lp nn tng
o Mnh m
o An ton
o Phn tn
o a lung
o ng
o Kin trc trung lp
o Kh chuyn
o Hiu sut cao
Sun Microsystems gii thiu ngn ng Java nh l mt sn phm di
tn gi Java Development Kit (JDK)
Bn trong my o, Java to ra mt h thng thi gian thc gip thc thi
m lnh nh sau:
o Np cc files .class
o Qun l b nh
o Thc thi vic thu gom rc

14/114

AptechVietnam

t
Chng 2: Bin v ton t
Mc tiu bi hc
Kt thc bi hc ny, hc vin c th:
C php khai bo bin
nh ngha cc kiu d liu c bn
Tm hiu v gii thch cu trc ca mt lp
M t cc kiu nh dng
M t cc k t c bit (escape sequences)
Xc nh cc ton t khc nhau

2.1 Bin
Bin l n v lu tr c bn trong chng trnh Java. Bin l cc thnh phn
xc nh d liu v c dng tham chiu n cc gi tr xc nh c to
ra trong chng trnh. t tn cc bin c ngha gip ta d dng c hiu m
ngun hn.
2.1.1 Khai bo bin
Tt c cc bin phi c khai bo trc khi s dng. Dng khai bo bin c
bn l:
datatype variablename;
Trong ,
datatype
variablename

- Kiu d liu hp l
- Tn bin hp l

Cc bin c th khai bo v khi to theo nhiu cch khc nhau, c minh ho


trong on m 1.
on m 1:
Line0: int x,y,z; //Khai bo 3 bin kiu int x,y
//v z

AptechVietnam

15/114

Learn Java by Example


Line1: int a=5,b,c=10; //Khai bo 3 bin kiu int
//, khi to a v c
Line2: byte num=20; // Khai bo 1 bin num c kiu
//byte v khi to gi tr l 20
Line3: char c=c; //Khai bo c l bin c kiu
//char, khi to gi tr l c
Line4: int num1=num2=10; //Gi tr 10 c lu tr
//trong num1 v num2
Line0 v Line1 l cc v d v khai bo danh sch cc bin c cch nhau bi
du phy v Line4 l v d v gn mt gi tr cho mt hoc nhiu bin lc khai
bo bin.
on m 2 l mt v d v gn cc gi tr h bt phn (8) v h thp lc phn
(16) cho cc bin.
on m 2:
Line1: int decVal = 10;//gi tr 10 trong h
// thp phn (h 10)
Line2: int octVal = 012;//gi tr 10 trong h
// bt phn (h 8)
Line3: int hexVal = 0xa;//gi tr 10 trong h
// thp lc phn (h 16)
on m 2 hin th c php ng cha cc gi tr trong h bt phn v h
thp lc phn. Line2 biu din mt nh dng trong h bt phn vi tip u ng
0. H thng s bc phn c 8 k t s t 0 n 7 m t cc s.
Line3 biu din nh dng trong h thp lc phn vi tip u ng 0x. H thng
s thp lc phn c 16 k t s m t cc s, t 0 n 9 v t k t A n F.
T A n F tng ng t 10 n 15. V d, gi tr 26 trong h 16 l:
int hexVal = 0x1a;
H thng thp phn c m t trong Line1, l cch dng thng dng trong lp
trnh.

16/114

AptechVietnam

Chng 2 Bin v ton t


2.1.2 Khai bo hng (literals)
Hng l mt gi tr khng i v c m t trc tip trong on m m khng
cn n tnh ton. V d,
on m 3:
Line1: int val = 50;
Line2: float num = 35.7F;
Line3: char x = x;
Mt hng c s dng bt k ni no cho php kiu gi tr ca n. Tuy
nhin, c nhiu kiu hng khc nhau. Mt vi trong s chng l:
Hng nguyn (Integer literals)
Hng nguyn c dng biu din mt gi tr nguyn (int), trong Java l mt
gi tr s nguyn 32 bit. Trong mt chng trnh, s nguyn l kiu thng c
s dng nht. Bt k mt gi tr s nguyn no u l mt hng s nguyn.
Cc s nguyn c th biu din nh:

Cc gi tr thp phn c biu din trong h c s 10

Cc gi tr bt phn c biu din trong h c s 8

Cc gi tr thp lc phn c biu din trong h c s 16

Mi mt loi trn c hng tng ng. Mt hng s nguyn c th c gn n


mt kiu s nguyn khc nh byte hoc long. Khi mt gi tr hng c gn n
mt bin kiu byte hoc short, s khng c li nu gi tr hng nm trong phm vi
ca kiu ch. Cc s nguyn c th c biu din vi mt k t hoa (L)hoc
thng (l) cui, biu din mt s nguyn di 64 bit.
Hng du chm ng (floating-point literals)
Cc hng s thc biu din cc gi tr thp phn vi phn l. Cc hng s thc
c cc thnh phn sau:

Thnh phn s, v d 0, 1, 2, , 9

Du thp phn, v d 4.90, 3.141

S m c biu din bi E hoc e i theo sau mt s thp phn


c th dng hoc m. V d: e+208, 7.436E6, 23763E-05,

Kiu hu t D, d, F hoc f

17/114

Learn Java by Example

Trong Java, cc hng s thc, ngm nh, c chnh xc double. Mt hng


float c biu din bi F hoc f, theo sau l gi tr, v mt hng s thc double
c biu din bi D hoc d.
Hng Boolean (boolean literals)
Cc hng boolean n gin v ch c hai gi tr logic l true v false. Cc gi tr
ny khng th chuyn i n bt k h thng s no. Trong Java, true khng
bng 1 v false khng bng 0. N ch c th gn n cc bin c khi bo l
boolean hoc dng trong cc biu thc vi cc ton t boolean.
Hng k t (character literals)
Cc hng k t c t trong cp du ngoc n. Tt c cc k t ASCII hp
l c th t trc tip trong cp du ngoc n, nh g, $ v z.
Hng Null (null literals)
Khi mt i tng c to, lng b nh xc nh c cp pht cho i
tng. a ch bt u ca b nh c lu trong i tng, l, mt bin
tham chiu. Tuy nhin i khi, bin tham chiu khng tham chiu n i tng.
Trong hp ny, bin tham chiu c gn mt hng null nh v d bn di:
obj = null ;
Hng chui (String literals)
Hng chui cha chui cc k t trong cp du ngoc kp. Cc k t c th l
k t thng, c th c c trn mn hnh, hoc k t iu khin, khng nhn
thy c trn mn hnh. Cc du vch cho ngc, du nhy kp v cc k t
iu khin khc c th c biu din bng du cho ngc (\) i km vi m
iu khin, cc k t ny cn gi l escape sequences. V d sau l mt xu
thng, khng c k t iu khin:
Welcome to Java

2.2 Kiu d liu (Data type)

18/114

AptechVietnam

Chng 2 Bin v ton t


Cc ng dng x l d liu u vo v xut d liu kt qu. u vo, u ra, v
kt qu ca cc qu trnh tnh ton u lin quan n d liu. Trong mi trng
tnh ton, d liu c phn lp theo cc tiu ch khc nhau ph thuc vo bn
cht ca n. mi tiu ch, d liu c mt tnh cht xc nh v c mt kiu th
hin ring bit.
Java cung cp mt vi kiu d liu m chng c h tr trn tt c cc nn
tng. V d, d liu loi int (integer) ca Java c th hin bng 4 bytes trong
b nh ca tt c cc loi my bt lun u chy chng trnh Java. Bi vy
cc chng trnh Java khng cn phi thay i khi chy trn cc nn khc nhau.
Trong Java kiu d liu c chia thnh hai loi:
Cc kiu d liu nguyn thy (primitive)
Cc kiu d liu tham chiu (reference)
2.2.1 Cc kiu d liu nguyn thu (Primitive Data Type)
Java h tr tm kiu d liu nguyn thu c chia ra thnh 4 nhm:
Kiu s nguyn (Integer)
Trong nhm ny c cc kiu d liu: byte, short, int v long v, hu ht, biu
din cc gi tr s nguyn c du.
Kiu du chm ng (Floating-point)
Trong nhm ny c cc kiu d liu: float v double v biu din cc s c phn
thp phn.
Kiu k t (Character)
Nhm ny c kiu d liu char, biu din cc k hiu trong tp hp cc k t
nh k t ch ci v k t s.
Kiu Boolean
Kiu d liu boolean thuc nhm ny v biu din cho hai gi tr true (ng)
hoc false (Sai).

19/114

Learn Java by Example


Kiu d liu s nguyn gm 4 loi:
Kiu byte
Dng lu tr lng d liu nh. y l kiu d liu c di 8 bit, phm vi
lu tr t -128 n 127. N thng c dng khi lm vic vi lung d liu t
mng hoc t file. Kiu d liu ny thng dng khi lm vic vi d liu nh
phn chun v c th khng tng thch vi cc kiu d liu khc ca Java. T
kho byte c dng trong khai bo mt bin kiu ny. V d:
byte val;
Kiu short
y l kiu d liu t dng nht. C di 16 bit v phm vi lu tr t
32.768 n 32.767. Kiu d liu ny thng dng cho cc ng dng trn cc
my tnh 16 bit. Kiu d liu ny cng c dng lu tr d liu s nh. T
kho short dng khai bo bin kiu ny.
Kiu int
y l kiu d liu thng dng nht. N c di 32 bit, vi phm vi lu tr t
-2.147.483.648 n 2.147.483.647. Kiu int l kiu linh hot v hiu qu nht. V
d: Tng s lng phi tr cho tt c nhn vin trong cng ty.
Kiu long
long l kiu d liu 64 bit c du, vi phm vi lu tr t
-9.223.372.036.854.775.808 n +9.223.372.036.854.775.807. N c dng
khi kiu int khng lu mt s ln hn phm vi ca n. V d, dn s ca
mt nc.

2.2.2 Cc kiu d liu tham chiu


Trong Java, cc i tng v cc mng l cc bin tham chiu. Khi mt i
tng hoc mt mng c to, mt vng nh nht nh c gn cho n v
a ch ca vng nh ny c lu tr trong bin tham chiu. Ni cch khc,
kiu d liu tham chiu l a ch ca mt i tng hoc mt mng c to ra
trong b nh.

20/114

AptechVietnam

Chng 2 Bin v ton t

2.3 nh dng nhp v xut


Bt c khi no kt qu hin th trn mn hnh, th cn phi c nh dng. Java
cung cp cc k t iu khin nh dng (escape sequence) thc hin nh
dng cc d liu nhp v xut

2.3.1 nh dng xut


C th nh dng theo 2 cch:
print() v println()
format()
Cc phng thc ny hot ng tng t nhau. Phng thc format()dng lp
Java.util.Formatter thc hin nhiu nh dng phc tp hn.
Cc phng thc print() v println()
Cc phng thc ny chuyn d liu dng phng thc toString thch hp v
tr li mt gi tr chui. Hy xem xt on m 4.
on m 4:
int num1 = 5;
int num2 = 10;
int sum = num1 + num2;
System.out.print(The sum of);
System.out.print(num1);
System.out.print( and );
System.out.print(num2);
System.out.print( is );
System.out.print(sum);
System.out.println(.);

21/114

Learn Java by Example


int num3 = 2;
sum = num1 + num2 + num3;
System.out.println(The sum of + num1 + , + num2 +
and + num3 + is + sum + .);

Kt qu ca on m trn l:
The sum of 5 and 10 is 15.
The sum of 5, 10, and 2 is 17.
Bin sum c nh dng hai ln: ln u trong lnh print; ln th hai bng m
chuyn c t ng to ra bi trnh bin dch Java v s dng phng thc
toString. Trong trng hp ny, bt k gi tr no cng c th c nh dng.
Phng thc format()
Phng thc ny nh dng nhiu i s da trn mt chui nh dng. Chui
nh dng cha c phn nh dng ln hng chui bnh thng nhng n khng
kt hp vi bt k mt i s no. Cc chui nh dng h tr nhiu c tnh.
Thnh phn nh dng bt u bng du %. V d,
System.out.println(%d, + sum);
Cu lnh ny hin th gi tr nguyn ca bin sum.
C php ca mt chui nh dng nh sau:
C php:
%[arg_index$][flags][width][.precision]conversion character
Trong ,
arg_index L mt s nguyn theo sau l $. S nguyn cho bit i s s
c in ti v tr c cp.
flags C nhiu bin c khc nhau trong Java nh bng 2.1
Flag (C)

22/114

M t

i s c canh thng theo bn tri

Chn mt du + hoc - vi i s ny

AptechVietnam

Chng 2 Bin v ton t


0

Dn u i s ny vi cc s 0

Dng du ngn cch nhm

S m c bao quanh bng du


ngoc n
Bng 2.1: Kiu ca cc flag

width - Xc nh s ti thiu cc k t s c in
precision xc nh s k t s s c in sau du thp phn. Dng vi
cc s du chm ng.
conversion character - Kiu ca i s c nh dng. V d, b l
boolean, c l char, d l s nguyn, .
Cc gi tr t trong cp du [] l ty chn. Ch cc thnh phn yu cu xc
nh nh dng l du % v k t chuyn i.
on m 5 minh ha cch s dng phng thc format()
int val = 5;
double sq = 2.236068;
System.out.format("The square root of %d is %f.%n",val,sq);

Kt qu ca on m trn nh sau:
The square root of 5 is 2.236068.

2.3.2 K t iu khin (escape sequences)


K t iu khin c dng biu din cc k t c bit. Cc k t iu khin
c th dng cho hng k t hoc hng chui.
Bng 2.2 gii thiu mt vi k t c bit trong Java

23/114

Learn Java by Example


K t c bit

Gi tr k t

\f

Cun trang giy vo my in (Form feed)

\r

Xung hng (Carriage return)

\xxx

K t tng ng vi gi tr bt phn xxx, xxx nm


trong khong 000 n 0377.

\uxxxx

K t unicode vi m ho xxxx, trong xxxx l


mt s thp lc phn gm 4 k s.
Bng 2.2: K t iu khin (Escape sequence)

biu din mt k t unicode , k t iu khin unicode \u c th c dng


trong chng trnh Java. Mt k t unicode c th c biu din bng mt
chui thp lc phn hoc bt phn. on m 6 minh ho vn ny.
on m 6:
// In Hello s dng chui thp lc phn
System.out.println("\u0048\u0065\u006C\u006C\u006F"
"!\n");

//In Blake s dng chui bt phn cho k t a


System.out.println("Bl\141ke\"2007\"");
Ch : Cc k t iu khin thp lc phn bt u vi \u, theo sau l 4 k s h
thp lc phn. Cc k t iu khin bt phn gm 3 k s sau du \. V d:
\xyy
Trong , x c th bt k k s no t 0 n 3, y t 0 n 7.
Kt qu on m 6 l:
Hello!
Blake2007
Hai kiu k t iu khin c th c ngha khc nhau bi v k t c bit \u c
x l trc cc k t c bit khc.

24/114

AptechVietnam

Chng 2 Bin v ton t


2.4 Cc ton t
Cc ton t kt hp vi cc bin n hoc cc biu thc thnh cc biu thc
mi phc tp hn m n tr li cc gi tr.

2.4.1 Loi ton t


Java cung cp cc loi ton t khc nhau nh sau:
Ton t s hc
Cc ton t s hc c dng trong cc biu thc ton 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 vi loi ton t ny.
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 (ng) hoc
false (sai).
Ton t logic
Cc ton t logic lm vic vi cc ton hng boolean.
Ton t gn
Ton t gn l mt du bng, =, dng gn gi tr cho mt bin. C th gn gi
tr cho mt hoc nhiu bin k tip nhau. Ngha l, c th s dng mt dy cc
php gn.
Ton t thao tc bit (bitwise)
Mt ton t bitwise cho php ta thao tc trn tng bit ring bit trong cc kiu d
liu nguyn thu. Ton t bitwise da trn c s i s boolean. N thc hin

25/114

Learn Java by Example


php tnh trn hai bit c v tr tng ng trn hai ton hng to ra mt kt qu
mi.
Khi cc ton hng l cc s, ton t & thc thi hm AND gia hai bit, v ton t
| thc thi hm OR gia hai bit. Bng 2.3 m t vn ny.
Condition1
(iu kin 1)

Condition2
(iu kin 2)

Condition1 &
Condition2

Condition1 |
Condition2

True

True

True

True

True

False

False

True

False

False

False

False

False

False

False

False

Bng 2.3: AND v OR


Ton t dch bit sang phi khng du
Mi ln mt dch bit xy ra, ton t >>> t ng in bit c th t u tin cao vi
ni dung trc ca n nhng vn gi du ca gi tr. Tuy nhin, thnh thong
dch chuyn ny khng thch hp vi nhng gi tr khng phi l s. Trng hp
ny thng xy ra khi lm vic vi d liu l ha v cc gi tr da trn pixel.
Trong tnh hung , mt gi tr 0 c dch chuyn n bit c th t u tin cao
khng quan tm ti gi tr ban u ca n. iu ny gi l dch chuyn bit khng
du. V vy, mt ton t dch bit sang phi khng du, >>>, lun lun dch
chuyn 0 n cc bit c th t u tin cao hn.
on m 7:
int val = -3;
val = val >>> 20;
Trong , val c gn bng -3. Gi tr ny sau c dch chuyn sang phi
20 bits, in 0 vo 20 bits v l i bit du. Gi tr sau khi dch bit l 4095.
Ton t instanceof

26/114

AptechVietnam

Chng 2 Bin v ton t


Ton t ny ch c dng cho cc bin tham chiu i tng kim tra mt
i tng c thuc mt kiu xc nh hay khng. Dng tng qut ca ton t
instanceof l:
object instanceof type
y, i tng l th hin ca mt lp, v c kiu l kiu ca lp. Nu i
tng thuc v mt kiu xc nh hoc c th p kiu thnh kiu xc nh, th
ton t instanceof tr li gi tr true, ngc li th false.
on m 8 minh ho cch dng ton t ny.
on m 8:
Scanner input = new Scanner(System.in);
Boolean val = input instanceof Scanner;
System.out.println(val);
Gi tr c in ra trong on m trn l true
Ton iu kin
Ton t iu kin l mt loi ton t c bit v n gm ba thnh phn cu thnh
biu thc iu kin. Ton t ny c th thay th cu lnh if-then-else.
C php :
expression1 ? expression2 : expression3;
Trong ,
expression1: l biu thc logic bt k tr v gi tr true hoc false.
expression2: l biu thc s c c lng khi gi tr ca expression 1 l true.
expression3: l biu thc s c c lng khi gi tr ca expression 1 l false
Cc ton t iu kin c th lng nhau v c minh ha trong on m 9:
on m 9:
int

num1 = 5;

27/114

Learn Java by Example


int

num2 = 10;

char op = '*';
System.out.println( (op == '-') ? (num1 - num2) : (op ==
'+') ? (num1 + num2) : (op == '*') ? (num1 * num2) :
"Invalid operator");
Trong on m 9, iu kin cui cng l true nn kt qu l 50.

2.4.2 Th t u tin ca cc ton t v s kt hp


Khi mt biu thc cha nhiu ton t, chng s c thc hin theo mt th t
xc nh bi th t u tin ca n. Th t u tin ca cc ton t ton hc tun
theo cc nguyn tc s hc. Nu khng chc chn, ta dng du ngoc n
thay i th t u tin.
Xt biu thc 5+3*2, n c tnh 5+(3*2) bng 11, ch khng tnh (5+3)*2 bng
16. Ton t (*) c u tin cao hn ton t (+), do vy php nhn c thc
hin trc.
Xt biu thc 8-3-2, n c tnh (8-3)-5 bng 3, ch khng tnh 8-(3-2) bng 7.
V vy , khi biu thc c nhiu ton t - th u tin (s kt hp) c thc
hin t tri sang phi.
Hai ton t + v c cng u tin. Nn cng c thc hin t tri sang
phi. Xt biu thc:
x + 3 y +5
(x + 3) y +5
((x + 3) y) +5
((x + 3) y +5)
Cc ton t =, += v -= c cng u tin nhng c thc hin t phi sang
tri trong cng biu thc. Xt biu thc:
x = y += z -= 4
x = y += (z -= 4)
x = (y += (z -= 4))

28/114

AptechVietnam

Chng 2 Bin v ton t


(x = y += (z -= 4))
Dng du ngoc n thay i th t u tin ca cc ton t. Nu khng dng
n th u tin v s kt hp s c dng xc nh th t cc ton t s
thc thi. Khong trng khng c tc dng.
Th t u tin c thc hin nh sau:
Trong mt biu thc cc ton t c thc hin theo th t u tin t
cao xung thp (tightest binding)
Nu c nhiu hn 1 ton t u tin nh nhau trong biu thc th thc hin
t tri sang phi
Hy t cc biu thc u tin nht trong du ngoc trn chng c
thc hin trc nht.
Tip tc vi biu thc con th hai v cc biu thc tip theo
Tip n cc ton t c u tin cao nht cn li theo cng qui trnh
trn.
Rt d b sai nu qun i th t u tin. Hy xem biu thc sau:
x = a+b/5.0-c**d+1*e
l tng ng vi
x = ((a+(b/5.0))-(c**d))+ (1*e)
Tun theo qui trnh sau ng ngoc cc biu thc

Ton t u tin cao nht l **. Ngha l c**d c thc hin trc tin, ta
ng n trong ngoc trn.

Du / v du * l ton t u tin cao nht th hai, s c thc hin k


tip, do vy t b/5.0 v 1*e vo ngoc trn.

Du + v c u tin cao nht k tip. Do chng c cng u tin


vi nhau nn thc hin t tri sang phi.
Cui cng php gn c thc hin.
2.4.3 p kiu
p kiu hay chuyn i kiu hm ni n vic thay i kiu d liu ca mt
bin sang kiu khc. Thc hin iu ny ta thu c mt s tinh nng u vit
29/114

Learn Java by Example


ca thang bc cc d liu. Chng hn, cc gi tr gii hn ca mt tp cc s
nguyn integer c th cha trong mt khun dng c ng hn. C th chuyn
i kiu sang dng khc ph hp vi vic tnh ton hn v khng th tnh ton
vi kiu d liu trc , chng hn nh l chia cc s vi chnh xc cao
hn. Trong ngn ng lp trnh hng i tng, chuyn i kiu cho php
chng trnh xem i tng ca mt kiu nh l kiu tin bi ca chng lm
n gin vic tng tc vi chng.
C 2 loi chuyn kiu: mc nh v tng minh. Thut ng chuyn kiu mc
nh c ngha l nng kiu. Hu ht cc dng chuyn kiu tng minh c hiu
l p kiu. Chuyn kiu tng minh cng c th thu c t cc thng trnh
chuyn kiu c vit ring nh l np chng hm dng ca i tng.
Chuyn kiu ngm nh
Chuyn kiu ngm nh, cng cn gi l nng kiu (coercion), l t ng
chuyn kiu bi trnh bin dch. Mt s ngn ng cho php, thm ch i
hi b bin dch phi h tr chuyn kiu.
Trong mt biu thc phc hp, chng trnh s chy ng nu d liu
ca kiu di c th chuyn ln kiu trn.
on lnh 10 m t chuyn kiu mc nh.
short a=2000;
int b;
b=a;
y gi tr a c nng cp t short ln int v khng cn ton t p
kiu no c. iu ny c hiu l chuyn kiu thng thng. Chuyn
kiu thng thng tc ng trn cc kiu d liu c bn, cho php
chuyn i cc d liu s (short ln int, int ln float, float ln double...) v
mt s chuyn i con tr. Mt s chuyn i c th gy ra mt chnh
xc, lc y trnh bin dch c th cnh bo. iu ny c th khng cn n
chuyn kiu tng minh.
Chuyn kiu tng minh
Nhiu loi chuyn kiu, c bit l h thp kiu gy mt d liu, i hi
chuyn kiu tng minh.
on lnh 11 m t chuyn kiu tng minh
short a=2000;
int b;
b= (int)a;
// c php p kiu

30/114

AptechVietnam

Chng 2 Bin v ton t


b= int (a);

// c php kiu hm

C nhiu loi p kiu tng minh, l:

C kim tra

Trc khi chuyn kiu c thc hin, mt kim tra trong lc chy
chng trnh c thc hin xem kiu ch n c cha c gi
tr ngun hay khng. Nu khng, mt li b sinh ra.

Khng kim tra

Khng c kim tra no c thc hin. Nu kiu ch khng cha


c gi tr gc, kt qu khng c ghi nhn.

Mu bit

D liu khng c xem xt g tt, cc bt th c sao chp nguyn


bn.

31/114

Learn Java by Example

Tm tt bi hc
Bin l mt tn c dng tham chiu n cc gi tr
ch nh trong chng trnh.
Hng l gi tr khng i c vit thng trong m lnh
khng i hi s tnh ton no c.
Java c cc loi d liu c sn, gi l d liu nguyn
thy.
nh dng d liu xut ra ngi ta dng lp Formatter
hoc s dng cc phng thc format() v printf() ca
lp PrintStream.
Mt s cc k t c bit c biu din kt hp vi du
\
Java cung cp nhiu loi ton t, l

32/114

Ton t s hc

Ton t bit

Ton t quan h

Ton t logic

Ton t iu kin

Ton t gn

AptechVietnam

Chng 3: Lnh r nhnh v vng lp


Mc ch
Cui chng ny, hc vin c th nm c:
Cc cu trc r nhnh if
Cu trc switch-case
Cu trc vng lp while, do while, for v vng lp lng nhau
Cu lnh break, continue
3.1 Cu lnh r nhnh
Cu lnh r nhnh hay cu lnh iu khin c s dng iu khin lung
thc thi trong ngn ng lp trnh. Java h tr hai loi lnh r nhnh l: cu
trc if v cu trc switch. Cc cu lnh ny cho php chng trnh thc thi cc
on m lnh khc nhau da trn kt qu ca biu thc iu kin hoc gi tr
ca bin.
3.1.1 Lnh if lng nhau
Cu lnh if-else kim tra kt qu ca biu thc hoc bin iu kin ri da trn
kt qu tr v thc hin cc lnh tng ng. Cu lnh if c th c s dng
lng trong mt cu trc if khc, loi if ny c gi l nested-if. Nh vy, nestedif l cu trc if c lng trong cu trc if hoc else khc.
Cc im quan trng cn lu khi s dng lnh if lng nhau:
Cu lnh else lun lun c kt hp lnh if gn nht.
N nm trong cng khi vi else v khng kt hp vi else no c.
AptechVietnam

33/114

Learn Java by Example

C php:
if (iu_kin)
{
if (iu_kin)
{
//cu lnh/khi lnh ny c thc hin nu iu kin ng
}
else
{
//cu lnh/khi lnh ny c thc hin nu iu kin sai
}
}
else
{
//cu lnh/khi lnh ny c thc hin nu iu kin sai
}

on m di y minh ha cch s dng cu trc nested-if


on m 1:
Scanner input = new Scanner(System.in);
System.out.println(Nhp mt s: );
num = input.nextInt();
//Kim tra xem num c chia ht cho 3 khng?
//cu lnh if ngoi
if(num % 3 == 0)
{
//kim tra xem num c chia ht cho 5 khng?
if(num % 5 == 0)
{
//in ra thng bo num chia ht cho 3 v 5
System.out.println(The number is divisible by both 3 and 5.);
}
else
{
//S chia ht cho 3 nhng khng chia ht cho 5
System.out.println(The number is divisible by 3 but not by 5.);

}
}
else
{
//S khng chia ht cho 3 v 5
System.out.println(The number is not divisible by 3 and 5.);

34/114

AptechVietnam

Chng 3 R nhnh v vng lp


Gii thch on m lnh
on m trn khi bo mt bin num v cha s nguyn nhp vo t ngi
dng. Chng trnh s dng cu trc if lng nhau, u tin chng trnh kim tra
s nguyn ngi dng nhp vo (bin num) c chia ht cho 3 v 5 hay ch chia
ht cho 3 v in ra cc thng bo tng ng. y, cu lnh else cui cng
c kt hp vi if (num % 3 ==0). Cu lnh else bn trong c kt hp vi if
(num % 5 == 0) bi v n c kt hp vi if gn nht trong cng khi lnh.
3.1.2 Lnh Switch-case lng nhau
Cu trc switch-case c th c s dng thay th cho cu trc if-else-if khi c
nhiu if-else lng nhau. S dng switch-case khin kh nng thc thi ca
chng trnh tt hn. Tng t nh if-else, switch-case c th s dng lng
trong mt switch-case khc.
Do switch-case nh ngha cc khi lnh ring, nn khng c s xung t gia
cc hng gi tr case ca lnh switch-case trong v lnh switch-case ngoi. on
m di y minh ha cch s dng cc lnh switch-case:
on m 2:
......
switch (day)
{
case 0:
switch(target)
{
case 1:
System.out.println(Target is 1 to 7.);
break;
}
break;
case 1:
System.out.println(Sunday);
break;
case 2:
System.out.println(Monday);
break;
case 3:
System.out.println(Tuesday);
break;
case 4:
System.out.println(Wednesday);
break;
......
}
35/114

Learn Java by Example


Trong on m trn, khi lnh case 1 ca switch-case trong khng xung
t/nhm ln vi khi lnh case 1 ca switch-case ngoi. Bin day c s
dng so snh vi danh sch cc khi case ca switch-case ngoi, nu gi tr
ca bin day bng 0 th bin target mi c so snh vi danh sch cc khi
case ca switch-case bn trong.
C ba im quan trng cn lu khi s dng cu trc switch-case;
Cu trc switch khc vi cu trc if. switch ch c th kim tra bng, trong
khi if c th kim tra bt k gi tr ca biu thc logic no.
Khng cho php 2 gi tr case ging nhau trong cng mt switch-case.
Nu switch-case lng nhau, gi tr ca cc hng case ca switch-case
trong v ngoi c th ging nhau.
Cu trc lnh switch-case hiu qu hn s dng nhiu cu lnh if-else
lng nhau.
3.2 Vng lp
Vng lp c s dng rt ph bin trong lp trnh, n c s dng thc
hin cc cu lnh lp li nhiu ln. Cc loi vng lp c h tr trong Java
gm:

Vng lp while

Vng lp do while

Vng lp for

Vng lp thc hin mt lnh (hoc khi lnh) chng no tha mn mt iu kin
hoc tha mn s ln lp xc nh.
3.2.1 Vng lp while
Vng lp while dng thc hin mt lnh hoc khi lnh chng no iu kin
cn true (ng). Ti mt v tr no trong vng lp lm cho biu thc iu kin
thnh false (sai), nu khng vng lp s thc hin v tn.

36/114

AptechVietnam

Chng 3 R nhnh v vng lp

C php:
...
while(iu_kin)
{
Cc cu lnh;
...
}
...
Thn ca vng lp l rng nu n khng cha cu lnh no c, v mt c php,
n vn ng trong Java. on m di y minh ha cch s dng thn vng
lp rng:
on m 3:
......
int num1 = 1;
int num2 = 30;
while (++num1 < --num2);
System.out.println(The midpoint is: + num1);
......
Trong on m trn, gi tr ca bin num1 c tng 1 v gi tr ca bin num2
c gim 1, sau em so snh. Vng lp c thc hin chng no gi tr
ca num1 ln hoc bng num2. Do vy, bin num1 c gi tr gia num1 v
num2, kt qu in ra:
The midpoint is: 16

37/114

Learn Java by Example


Biu thc iu kin ca vng lp c th phc tp, bin iu khin c th c
thay i gi tr trong thn vng lp. Tuy nhin biu thc iu kin phi false (sai
hoc khng tha) nu khng vng lp s thc hin v tn. on m di y
minh ha vng lp v tn:
on m 4:
......
int count = 0;
while (count < 100)
{
System.out.println(This goes on forever, HELP!!!);
count = count + 10; //Tng count ln 10 n v
System.out.println(Count = + count);
count = count - 10; //gim count 10 n v
System.out.println(Count = + count);
}
......
Trong on m trn, gi tr ca count lun bng 0 v nh hn 100. V vy, biu
thc iu kin lun lun true (ng), vng lp khng bao gi kt thc. Mt lnh
break c th c dng ngt vng lp trong chng trnh trn. Nu c dng
ny cui vng lp, vng lp ch thc hin 1 ln v kt thc, kt qu hin th:
This goes on forever, HELP!!!
Count = 10
Count = 0
Tuy nhin, y ch l minh ha cch s dng, trong thc t chng ta khng dng
nh vy.

38/114

AptechVietnam

Chng 3 R nhnh v vng lp


im quan trng cn lu khi s dng vng lp while l, cc bin iu khin
(bin c s dng trong biu thc iu kin) phi c khai bo trc khi s
dng. Xem v d di y l khng hp l
while (int val = 10) { } //biu thc iu khin khng hp
l
3.2.2 Vng lp do-while
Vng lp do-while thc hin cc cu lnh chng no iu kin cn true (ng).
Khc vi vng lp while, vng lp do-while thc hin cc cu lnh t nht mt
ln sau biu thc iu kin mi c kim tra. Nu iu kin ng, vng lp
tip tc thc hin, nu iu kin sai, vng lp kt thc. on m di y minh
ha cch s dng vng lp do-while
on m 5:
......
int number = 5;
int guest;
Scanner input = new Scanner(System.in);
System.out.println(Guess a number between 1 to 10);
do
{
System.out.println(Enter your guess: );
guess = input.nextInt();
if (guess > number)
{
System.out.println(Value too high);
}
if (guess < number)

39/114

Learn Java by Example


{
System.out.println(Value too low);
}
}while (guess != number);
System.out.println(The answer is %d., number);
......
Trong on m trn, 2 bin number v guess c khai bo. Bin number c
gn gi tr 5, bin guess c nhp vo t ngi dng. Nu gi tr ngi dng
nhp vo bng gi tr ca bin number th dng lnh println() in ra dng The
answer is 5. cn nu khng th vng lp tip tc thc hin.
3.2.3 Vng lp for
Vng lp for c s dng khi ngi dng bit trc s bc lp. Khai bo ca
vng lp for gm 3 phn:
Khai bo v khi to gi tr ca cc bin
Biu thc logic
Biu thc iu khin lp
Ba phn khai bo ny phn cch nhau bng du chm phy (;). Khi vng lp bt
u, phn khai bo ca vng lp c thc hin. Thng thng, y l biu
thc khi gn gi tr ban u v ng vai tr l bin m iu khin vng lp.
Biu thc khi to ch thc hin duy nht mt ln. Tip n, biu thc logic c
thc hin kim tra bin iu khin vi gi tr ca s ln lp. Nu biu thc
logic c gi tr ng th vng lp tip tc thc hin, ngc li vng lp kt thc.
Sau cng, biu thc iu khin lp c thc hin, thng thng biu thc lp
dng tng hoc gim gi tr ca bin iu khin.

40/114

AptechVietnam

Chng 3 R nhnh v vng lp


Trong phn khai bo v biu thc lp, chng ta c th s dng nhiu bin phn
cch nhau bi du phy v th t thc hin t tri qua phi. Th t thc hin
rt quan trng nu nh gi tr ca biu thc th 2 ph thuc vo kt qu thc
hin. on m di y minh ha cch s dng vng lp for vi phn cch
nhiu bin khai bo:
on m 6:
......
int i,j;
int max = 10;
System.out.println(The sum of two variables for a table of
10 is: );
for(i=0,j=max;i<=max;i++,j--)
{
System.out.println(\n%d + %d = %d,i,j,i+j);
}
......
Trong on m trn, 3 bin i, j, max c khai bo. Bin max c gn gi tr
bng 10. Trong phn khi to, bin i c gn bng 0 v bin j c gn bng
max = 10. y chng ta thy 2 bin c khi to gi tr phn cch bi du
phy. Biu thc iu kin; i<=max m bo rng vng lp thc hin chng no i
cn nh hn hoc bng max=10.Vng lp s kt thc khi biu thc iu kin tr
v false (sai) c ngha lc i = 11. Cui cng, biu thc lp cng bao gm 2
php tnh i++, j--. Sau mi bc lp, i c tng 1 n v v j gim 1 n v.
Tng ca 2 bin ny lun lun bng max v bng 10 c in ra. Kt qu ca
on m trn nh di y:
The sum of two variables for a table of 10 is:
0 + 10 = 10

41/114

Learn Java by Example


1 + 9 = 10
2 + 8 = 10
3 + 7 = 10
4 + 6 = 10
5 + 5 = 10
6 + 4 = 10
7 + 3 = 10
8 + 2 = 10
9 + 1 = 10
10 + 0 = 10
Nh tho lun trong phn trc, c 3 phn trong khai bo vng lp for, tuy nhin
bt k mt hoc tt c cc phn trong khai bo for c th trng. on m
di y minh ha cch s dng vng lp for khng s dng phn khai bo:
on m 7:
......
//Khi to gi tr ca bin num
int num = 1;
for(; num != 40;num++)
{
System.out.println(Enter a number: );
num = input.nextInt();
}
......
Trong on m trn, bin num c ngi dng nhp vo cho n khi c gi tr
bng 40. Vng lp khng c phn khi to. Thay vo , num c khi to
ngoi phn khai bo vng lp. Bin num c tng ln 1. Vng lp s kt thc

42/114

AptechVietnam

Chng 3 R nhnh v vng lp


khi num bng 40. Nu c 3 phn trng, vng lp s lp v tn. on m di
y minh ha cch s dng :
on m 8:
......
for( ; ; )
{
System.out.println(This will go on and on);
}
......
Trong on m trn, dng ch This will go on and on c in cho n khi
vng lp kt thc. Cu lnh break c th dng kt thc vng lp ny. on
m trn dn n vng lp v hn, vng lp v hn khin chng trnh chy
khng gii hn trong khong thi gian di v s dng ht ti nguyn ca h
thng, iu ny dn n treo h thng. Trong thc t, chng ta nn trnh s
dng loi vng lp kiu ny trong chng trnh ca mnh.
3.2.4 Vng lp lng nhau
Trong Java, chng ta c th s dng vng lp lng nhau, l vng lp c
t trong mt vng lp khc. on m di y minh ha cch s dng vng lp
lng nhau:
on m 9:
......
int num = 0;
//Lp t 0 cho n 5 (lp 6 ln)
System.out.println(The factorials of the first five

43/114

Learn Java by Example


numbers are: );
do
{
int i = 1;
int factorial = 1;
System.out.println(Factorial of + num + :);
if(num==0)
{
System.out.println(factorial);
}else
{
while(num>=i)
{
factorial = factorial * i;
i++;
}
System.out.println(factorial);
}
num++;
}while(num < 6);
......
Trong on m trn, chng trnh in ra giai tha ca cc s t 0 5. Cu lnh
if-else c dng tnh giai tha ca bin num. Lnh c t trong vng lp
do-while. Kt qu hin th nh sau:
The factorials of the first five numbers are:
Factorial of 0 : 1
Factorial of 1 : 1
Factorial of 2 : 2
Factorial of 3 : 6

44/114

AptechVietnam

Chng 3 R nhnh v vng lp


Factorial of 4 : 24
Factorial of 5 : 120
3.3 Cu lnh nhy
i khi s bc lp ca vng lp khng c bit trc. iu kin kt thc
vng lp c xc nh sau, v ngay trong thn vng lp. Trong mt s tnh
hung khc, mt s cu lnh trong thn vng lp c b qua da trn iu kin
no . p ng nhng yu cu , Java cung cp hai lnh nhy l break v
continue dng thay i lung iu khin ca chng trnh da trn cc iu
kin. Do vy, cc cu lnh nhy ny c s dng chuyn iu khin n
phn khc ca chng trnh.
3.3.1 Lnh break
Lnh break thot khi vng lp trong cng v thc hin cu lnh tip theo sau
khi lnh ca vng lp ngoi. Cu lnh break l cu lnh c lp, do vy cn
phi kt thc lnh break bng du chm phy. Lnh break khng ch c s
dng trong vng lp for m cn c s dng trong c while v do-while. Cc
cu lnh sau break khng c thc hin. V d di y minh ha cch s
dng break trong vng lp while.
on m 10:
......
int i = 1;
int sum = 0;
while (i < 100)
{
sum = sum + i;
System.out.println(Sum: + sum);
if(i==10)
break;
i++;
}
......

45/114

Learn Java by Example


Trong on m trn, vng lp while c thit k chy t 1 n 99 v tnh
tng ca cc s t 1 n 99. Nhng cu lnh break c s dng kt thc
vng lp khi i bng 10. Do vy kt qu c hin th nh sau:
Sum:
Sum:
Sum:
Sum:
Sum:
Sum:
Sum:
Sum:
Sum:
Sum:

1
3
6
10
15
21
28
36
45
55

3.3.2 Lnh continue


Cu lnh continue chuyn iu khin sang bc lp k tip v b qua cc cu
lnh sau continue. C ngha l khi gp cu lnh continue, cc lnh sau continue
trong thn vng lp s khng c thc hin m iu khin s c chuyn
sang bc lp k tip. Cu lnh continue thng c s dng vi mt biu
thc iu kin trong thn vng lp nh lnh break. Lnh continue s dng
c trong 3 loi vng lp: while, do-while v vng lp for. Vi vng lp while,
do-while, lnh continue chuyn iu khin n biu thc iu khin ca vng
lp. Trong khi , vi vng lp for, iu khin nhy n phn biu thc lp (phn
th 3 trong khai bo vng lp) sau thc hin tip biu thc iu khin. on
m di y minh ha cch s dng continue trong vng lp do-while:
on m 11:
......
char letter = A;
do
{
if(letter ==J || letter == L)
{

46/114

AptechVietnam

Chng 3 R nhnh v vng lp


letter++;
continue;
}
System.out.println(Letter: + letter);
letter++;
}while(letter !=N)
...
Trong on m trn, cc k t t A n M c in ra mn hnh bng vng lp
do-while. Lnh continue b qua 2 k t in ra l J v L.

3.4 Nhn
Cc cu lnh trong Java c th nh nhn. Nhn thng c hay dng vi
vng lp for, while kt hp vi break hoc continue. Nhn c nhn din bi
tn nh danh theo sau l du 2 chm v t trc lnh nh nhn.
Lnh nh nhn c s dng trong trng hp cc vng lp lng nhau. N
dng ch nh vng lp lng trong thc hin bc lp k tip hay ngt vng
lp. on m di y minh ha cch s dng nhn
on m 12:
int i;
outer:
for(i=0;i<5;i++)
{
if(i==2)
{
System.out.println("Hello");
break outer;
}

47/114

Learn Java by Example


System.out.println("This is the outer loop");
}
System.out.println("Good bye");
......
Trong on m trn, vng lp thc hin 5 ln. Hai ln lp u tin chng trnh
in ra dng ch This is the outer loop. Bc lp th 3 gi tr ca i = 2, do vy
s in ra dng ch Hello. Tip n, lnh break c thc hin v chuyn iu
khin n nhn outer: . Vng lp kt thc v dng lnh cui c in ra. Kt qu
hin th nh sau:
This is the outer loop
This is the outer loop
Hello
Good bye
on m di y minh ha cch s dng lnh continue
on m 13:
......
outer:
for(i=0;i<5;i++)
{
if(j=0;j<5;j++)
{
System.out.println("Hello");
continue outer;
}
System.out.println("This is the outer loop");
}

48/114

AptechVietnam

Chng 3 R nhnh v vng lp


System.out.println("Good bye");
......
Trong on m trn, dng ch Hello c in ra 5 ln. Sau khi cu lnh
continue c thc hin, lung iu khin ca chng trnh c chuyn sang
bc lp k tip ca vng lp c nh nhn. Cui cng, iu kin ca vng lp
ngoi (vng lp c nh nhn) tr v false, vng lp kt thc v chng trnh in
ra dng ch Good bye. Kt qu thc hin nh sau:
Hello
Hello
Hello
Hello
Hello
Good bye

49/114

Learn Java by Example


Tm tt bi hc

Lung iu khin chng trnh c iu khin bi cc cu trc lnh r


nhnh
Cc loi vng lp h tr trong Java gm: while, do-while, for. Vng lp s
dng thc hin cc cu lnh mt cch lp li
Lnh break v continue l cc cu lnh nhy trong Java
Lnh break kt thc vng lp lng trong v thc hin lnh k tip trong
khi lnh ca vng lp ngoi.
Lnh continue b qua cc cu lnh nm sau n v thc hin bc lp tip
theo
Lnh nhn thng c s dng vi cc vng lp nh for, while.

50/114

AptechVietnam

Chng 4: Gii thiu v lp


Mc tiu bi hc
Kt thc bi hc ny, hc vin c th nm c nhng vn sau:
To mng i tng
Khi nim qui trong Java
M t v s dng kiu enum
Thu gom rc (Garbage collection) trong Java v c ch hot ng

4.1 Mng cc tham chiu i tng


Trong Java, c th khai bo mng cha cc phn c bt k kiu d liu no, k
c kiu tham chiu n i tng. Khi mt mng c to ra, tham chiu n
mt lp, ta ni l mt mng cc i tng.
Cc i tng c khi to ch khi hm dng ca i tng c gi khi thc
thi chng trnh. Sau khi i tng c khi to, n c th truy nhp thng qua
bin i tng.
Nu kiu ca mng khai bo l mt lp th cc tham chiu n cc i tng
ca kiu lp c khai bo c lu trong mng. Do vy, cc thnh phn ca
mng cc i tng ch l cc tham chiu n cc i tng ch khng phi l
cc th hin thc s ca cc i tng.
4.2 To mng i tng

AptechVietnam

51/114

Learn Java by Example

To mng i tng thc hin theo 3 bc nh sau:


1. Khai bo bin c th tham chiu n mng i tng c kiu thch hp.
2. To i tng mng
3. Gn cc phn t mng vi cc th hin ca kiu tng ng.
V d di y khai bo mng c tn emp_Array cha 20 i tng ca lp
Employee;
on m 1:
Employee [] emp_Array = new Employee[20];
Khi to mng bng vng lp for
on m 2:
for (int m=0;m<emp_Array.length;m++)
{
//khi to mng i tng
emp_Array[m] = new Employee();
}

Gi tr ngm nh ca mi phn t mng i tng l null tr khi cc i tng


thc s c to v tham chiu ca chng c gn cho mi phn t mng.
on m di y minh ha cch khi to cc i tng
on m 3:

52/114

AptechVietnam

Chng 4 Gii Thiu v Lp

emp_Array[0] = new Employee(Derek,121);


emp_Array[1] = new Employee(Clark,55);
Hoc khi to bng cch khc nh sau:
on m 4:
Employee [2] emp_Array = {new Employee(Derek,121),new
Employee(Clark,55)};
4.3 qui trong Java
Trong lp trnh, qui l cch thc gi li chnh n (gi li chnh hm ). Trong
thc t, rt nhiu bi ton c biu din v gii quyt bng thut ton qui. V
d trong Java, tnh giai tha dng qui c biu din nh sau:
on m 5:
public static int calculateFactorial(int n)
{
if(n==0)
return 1;
else
return n * calculateFactorial(n1);
//li gi qui
}
qui l phng thc gi li chnh n. v d trn, phng thc
calculateFactorial() gi li chnh n. Mt iu lu l lm sao m bo rng
n lc no th li gi qui kt thc cn khng chng trnh s chy v tn
v s dng ht ti nguyn ca my tnh dn n treo my. Vi minh ha trn

53/114

Learn Java by Example


chng ta thy qui s kt thc khi n =0. Tnh hung kt thc qui cn c
gi l tnh hung nn (base case) ca qui.
Tt c cc phng thc dng thut gii qui c nhng c tnh nh sau:

S ln m phng thc gi li chnh n cn c gi l su ca qui


Mi khi phng thc gi chnh n, my tnh s lu cc bin trong ngn
xp (stack). Stack l vng nh hn ch, do vy vi thut gii qui c
su ln s dn n treo my. Trng hp nh vy c gi l Stack
Overflow (trn stack).
Phng thc qui c mt iu kin kt thc. Trong v d trn, phng
thc calculateFactorial() s kt thc khi n = 0. Nu iu kin ny khng c
th phng thc s gi li chnh n v hn. Trng hp ny c gi l
qui khng im dng.
Tt c cc phng thc qui u c 2 giai on. Giai on th nht
c gi l Winding, xy ra khi phng thc gi li chnh n v y gi tr
vo stack. Giai on th 2 c gi l Unwinding, xy ra khi phng thc
ly gi tr t stack ra.

V d di y dng thut gii qui tnh ly tha hai:


V d 1:

package test;
import Java.util.Scanner;
public class PowerOfTwo
{
public static void main(String [] args)

54/114

AptechVietnam

Chng 4 Gii Thiu v Lp


{
Scanner input = new Scanner(System.in);
int power, result;
System.out.println(Calculate the power of two);
System.out.println(Enter an integer power: );
Power = input.nextInt();
Result = powerOfTwo(power);
System.out.println(Two to power + power + is +
result);
return;
}
public static int powerOfTwo(int exponent)
{
if(exponent ==0)
return 1;
else
return (2 * powerOfTwo(exponent - 1));
}
}
4.4 Kiu d liu lit k (enum)
Gi s bn mun biu din cc ma trong nm trong chng trnh, bn c th
s dng cc con s 0, 1, 2, 3 tng ng vi ma xun, ma h, ma thu v ma
ng. Dng theo cch ny h thng hot ng c nhng khng trc quan v
khng r rng. y khng phi l gii php tt xy dng nhng tnh hung
nh vy. Chng hn ngi ta c th nhp sai cc con s khc ch khng phi
cc con s 0, 1, 2, 3 nh mong mun v khng c cch g khng ch vic
nhp sai. Java h tr kiu d liu enum gii quyt tt nhng vn trn. Vi
kiu d liu enum, gi tr ca n l cc tn tng trng.
4.5 To kiu lit k
Kiu enum c th c th t hoc khng c th t. Kiu enum khng th t l
kiu khng c th t logic. V d: kiu d liu boolean l mt dng ca kiu

55/114

Learn Java by Example


khng th t v khng c lp lun no xc nh true trc hay sau false. Vi
kiu enum c th t, cc gi tr c th sp xp theo mt trt t logic.
4.5.1 Mc ch ca enum
Kiu enum c gii thiu nhm gip lit k hiu qu dy cc gi tr, v d nh
biu din cc ngy trong tun. u im ca kiu enum:

Khc phc c vic nh x gia s v chui mt cch t nht. Kiu


enum c s dng bng cc chui thay cho cc con s.
Dng s nguyn dng thay cho kiu lit k khng an ton. Chng
hn, bin DaysOfWeek l bin nguyn lit k ngy trong tun, chng ta
c th gn gi tr bng 9, nh vy l khng hp l. R rng, dng s
nguyn thay cho kiu lit k l khng an ton. gii quyt cc hhc
im ny ngi ta dng kiu lit k. Vi kiu lit k, chng ta ch c th
gn cc gi tr c nh ngha trc.

Trong Java, kiu d liu enum c nh ngha bng t kha enum. V cc gi


tr ca n l cc hng s, nn cc trng ca kiu enum khai bo bng ch hoa.
V d di y khai bo bin Months thuc kiu enum:
on m 6:
public enum Months
{
JANUARY,
FEBRUARY,
MARCH,
APRIL,
MAY,
JUNE,

56/114

AptechVietnam

Chng 4 Gii Thiu v Lp


JULY,
AUGUST,
SEPTEMBER,
OCTOBER,
NOVEMBER,
DECEMBER
}
Kiu enum s dng c php khai bo nh khai bo lp, ch khc s dng t
kha enum thay cho class v c gi l lp c bit. Phn thn ca kiu
enum c th khai bo cc phng thc cng nh cc trng. Trnh bin dch s
b sung thm cc phng thc c bit khi enum c to ra. Chng ta c th
nh ngha kiu enum trong mt tp tin ring hoc trong mt tp tin nh ngha
cc lp. Nu nh ngha kiu enum public th phi nh ngha trong mt tp tin
ring bit c tn trng vi tn enum.
V d di y minh ha vic nh ngha kiu enum biu din lc mu:
on m 7:
enum ColorScheme
{
Red, Blue, Green, Cyan, Magenta, Yellow, Black
}
Sau khi nh ngha kiu enum, chng ta c th khai bo bin thuc kiu enum
nh sau:
ColorScheme CMYK;
Sau gn gi tr cho bin:
CMYK = ColorScheme.Magenta;
In ra gi tr ca bin ColorSchema bng lnh nh sau:
System.out.println(The color used is: + CMYK);

57/114

Learn Java by Example

Kt qu s l:
The color used is: Magenta
4.6 Garbage Collection (GC) Thu gom rc
Khi mt i tng (Object) c to ra, n c cp pht vng nh trong b
nh. Vng nh ny c gi l Heap. Cc i tng trong Java c to ra
bng ton t new v vng nh ca i tng c cp pht trong Heap lc
thc thi. Khi i tng trn Heap khng cn c tham chiu bi chng trnh,
chng tr nn thch hp cho thnh phn thu gom rc (Garbage Collection), v
Java Heap c gi l

Garbage Collection Heap. Thut ng Garbage

Collection (Thu gom rc) hm cc i tng trong Java khi khng cn cn


thit bi chng trnh, gi l rc v c th loi b. iu c ngha l vng nh
cp pht cho cc i tng s c ti s dng cho i tng mi tip sau.
Java Virtual Machine s xc nh nhng i tng no m khng cn dng
na v s thu hi vng nh b chim dng.
Bn cnh vic gii phng vng nh ca cc i tng khng c tham chiu,
Garbage Collector (b thu gom rc) cn gip ngn s phn mnh vng nh
heap. S phn mnh heap xy ra trong qu trnh chng trnh thc thi. Trong
qu trnh thc thi, cc i tng c to ra v hy b khi khng dng n na,
do dn n tnh trng c cc block (khi) rng nm gia cc block ang dng.
Khi yu cu vng nh cp pht cho cc i tng mi cn phi ni rng kch
thc ca heap mc d vn cn vng nh trong heap cp pht. Vn
ny thng hay xy ra do khng cn vng nh lin tc trong heap cp
pht.

58/114

AptechVietnam

Chng 4 Gii Thiu v Lp


Trong c t JVM, ch vng heap ca JVM phi c thu gom rc. Nhng khng
nh ngha cch thc b thu gom rc (Garbage Collector) hot ng, m mi nh
pht trin JVM phi quyt nh cch ci t.
4.6.1 u im ca GC (Garbage Collection)
GC lm gim bt gnh nng cho lp trnh vin trong vic gii phng vng nh.
i vi lp trnh vin, vic quyt nh khi no gii phng vng nh rt kh khn
v y ri ro, do vy cng vic ny c giao cho JVM, iu ny c nhiu u
im:
u im th nht l tng hiu sut cho lp trnh vin v cho php h tp
trung hn vo vic lp trnh.
Th hai, GC m bo tnh ton vn chng trnh. GC l phn quan trng
trong chin lc bo mt ca Java. Lp trnh vin Java khng th tnh c
lm hng JVM do vic gii phng sai vng nh.
Nhc im tim n ca GC l lm tng ti nguyn s dng v lm gim hiu
nng ca chng trnh. JVM lun theo di nhng i tng no ang c s
dng bi chng trnh v gii phng nhng i tng khng cn dng na.
Hot ng ny gy tiu tn nhiu thi gian ca CPU.

59/114

Learn Java by Example


Tm tt bi hc

Mng i tng l mt mng cha tham chiu n cc i tng


qui l hnh thc gi (gi hm) li chnh n
Kiu enum l mt danh sch hng s v tp hu hn cc gi tr c th gn
cho bin.
GC (Garbage Collection) l gii php qun l vng nh t ng

60/114

AptechVietnam

Chng 5: Arrays Mng


Mc tiu ca bi
Kt thc bi hc ny, hc vin c th:
M t mng trong Java
M t lp String v nhng phng thc ca n
Gii ngha lp StringBuilder v nhng phng thc ca n

5.1 Gii thiu v mng (Arrays)


Mng lu tr cc phn t cng kiu d liu vo nhng vng nh lin tip nhau.
D liu trong mng c th l kiu d liu nguyn thu (primitive data type) hoc
i tng. Ging nh bin, gi tr trong mng c th c gn gi tr ngay lc
to mng. Nu khng c gi tr no c gn cho mng, th Java s gn gi tr
mc nh cho tt c cc phn t trong mng, ty thuc vo kiu d liu. V d,
nhng phn t ca mng c kiu d liu l int, mc nh, c khi gn l 0.
Mng c th l mng mt chiu hay mng nhiu chiu. Mt phn t xc nh
trong mng c truy nhp bng tn hoc ch s. Phn t u tin trong mng
c ch s l 0, phn t th 2 c ch s l 1, v c tip tc nh vy. Mng l
phng tin thun tin nhm thng tin c lin quan vi nhau.
Mng c th c to theo ba cch nh bng 5.1
Phng php
M t
C php
Ch khai bo
Khai bo mt
datatype[]
mng
identifier
Khai bo v
to mng

Khai bo, to
v khi gn
gi tr cho cc
phn t

Khai bo v cp
pht vng nh
cho cc phn t
trong mng dng
t kho new
Khai bo mng,
cp pht vng
nh v khi gn
gi tr cho cc
phn t

datatype[]
identifier = new
datatype[size]

datatype[]
identifier =
{value1,
value2,valueN}

V d
char[] ch;
khai bo mt mng kiu
k t tn l ch
char[] ch = new
char[10];
khai bo v khi to
mt mng ch lu 10
k t.
char[] ch =
{A,B,C,D};
khai bo mt mng ch
bn phn t vi cc gi
tr c khi gn

Bng 5.1 : To mng

AptechVietnam

61/114

Learn Java by Example


5.1.1 Mng k t
Mng k t c th c to nh trong on m sau.
on m 1:
char[] ch ={A,B,C,D};
System.out.println(ch[3]);
on m 1 to mng mt chiu c tn ch, vi cc gi tr khi to A, B, C v D.
Dng th hai in ra gi tr ca phn t c ch s 3, l D.
Trong Java, mng nhiu chiu l mt mng c cc thnh phn mt mng khc,
ta cng ni l mng ca cc mng. Mng nhiu chiu cc k t c th c
to ra nh on m 2.
on m 2 :
Char [][] ch = {{A,B,C,D}, {E,F,G,H}};
System.out.println(ch[1][1]);
on m 2 khi to mt mng nhiu chiu vi hai hng v bn ct. Dng th 2
in ra gi tr ca phn t ti v tr hng 1, ct 1. Kt qu in ra l F.
on m 3 m t mng chui 2 chiu.
on m 3:
String [][] names = {{John, Andrews, David,
Scott},{- Manager, CEO}};
System.out.println(names[0][0] + names[0][1]);
System.out.println(names[0][2] + names[1][1]);
on m 3 s c hin th kt qu nh:
John Manager
David CEO
Thuc tnh length c th dng xc nh kch thc ca mng hay s cc phn
t c lu trong mng.
System.out.println(ch.length);
Cu lnh trn s in ra kch thc ca mng

62/114

AptechVietnam

Chng 5 Mng

5.1.2 Sp xp mng
Lun cn thit sp xp cc phn t trong mng theo gi tr c th t t cao
n thp (th t gim dn - descending order) hoc ngc li (th t tng dn
ascending order).
Qu trnh sp xp mng cn phi hon i gi tr gia cc phn t mng. C
nhiu cch khc nhau sp xp mng. Cc cch sp xp ging nhau ch
chng u so sch mi phn t trong mng vi phn t khc v hon i gi tr
nu gi tr t sai v tr.
Qu trnh sp xp hon i thc hin vi cc phn t bt u tp gi tr. Kiu
sp xp ny so snh gi tr ca phn t u tin vi mi phn t tip theo v
thc hin cc hon i cn thit. Tip n phn t th hai s c so snh vi
mi phn t tip theo cn li trong mng v thc hin cc hon i cn thit.
Tng t vi cc phn t cn li trong mng n khi khng cn hon i no
xy ra bc cui cng.
Hnh 5.1 m t khi nim ca sp xp hon i.
65

10

57

98

105

304

Hnh 5.1 : Sp xp hon i


Bng 5.2 ch r cc phn t c sp xp theo th t tng dn sau mi bc.
Mi bc bt u t khi ly mt phn t v so snh vi cc phn t cn li tip
theo trong mng, nu cn thit, thc hin cc hon i gi tr ca cc phn t.
Cc gi tr gc trong
mng
Sau bc th nht
Sau bc th hai
Sau bc th ba
Sau bc th t
Sau bc th nm

65
304
304
304
304
304

10
10
105
105
105
105

57
57
10
98
98
98

98
65
57
10
65
65

105
98
65
57
10
57

304
105
98
65
57
10

Bng 5.2: Gi tr ca cc thnh phn sau mi bc trong sp xp hon i.

63/114

Learn Java by Example


u tin 2 phn t (65 v 10) c so snh v gi tr ln hn s c di sang
bn tri. Trong trng hp ny, 10 nh hn 65; nn khng hon i. Tip theo,
so snh gi tr u tin vi gi tr th 3 (65 v 57) v cng tng t, khng hon
i. Sau , phn t u tin v phn t th 4 (65 v 98) c so snh v hon
i v tr, a 98 ln u v 65 v v tr th 4. C nh vy so snh phn t u
tin vi tt c cc phn t cn li tip theo trong mng, gi tr ln nht 304 s
c t vo phn t u tin. Kt thc bc lp th 2 gi tr ln nht th 2
(304) s c t vo v tr th hai. Qu trnh tip tc v gi tr nh nht c
t vo cui danh sch khi kt thc.
on m 4 minh ha cch sp xp cc phn t theo th t gim dn trong Java.
on m 4 :
int [] array = {65,10,57,98,105,304};
int i,j;
int temp ;
// ly chiu di ca mng
int arrayLength = array.length;
// phn t c so snh trong vng lp ny
for (i=0; i< (arrayLength -1);i++)
{
for (array[i]<array[j])
{
//hon i v tr
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
// hin th cc gi tr sau khi sp xp
for(i=0;i<array.length; i++)
{
System.out.println(array[i]+\t);
}
Kt qu hin th l :
304

105

98

65

57

10

5.1.3 Tm kim trong mng


C nhiu cch khc nhau tm kim gi tr trong mt mng.. Trong tt c cc
cch tm kim, tm kim tun t l cch n gin v d ci t nht. Trong tm
kim tun t, gi tr cn tm c so snh vi cc gi tr ca mng bt u t
64/114

AptechVietnam

Chng 5 Mng
phn t u tin. V cch tm kim ny thc hin theo dng tuyn tnh nn cn
c gi l tm kim tuyn tnh (linear search). Tuy nhin, nu thc hin tm trn
mng khng c sp xp th chm.
K thut hiu qu nht c th c p dng tm cc phn t trong mt mng
c sp xp l k thut tm kim nh phn. K thut ny nhanh hn so vi cc
phng thc tm kim khc. K thut ny kim tra phn t nm gia ca mng.
Nu gi tr cn tm bng phn t gia, th tm kim kt thc. Nu gi tr cn tm
nh hn phn t gia, th thc hin tm nh phn trn na phn u ca mng.
Nu ln hn, th thc hin tm nh phn trn na phn sau ca mng. Trc khi
thc hin tm kim nh phn th mng phi c sp xp.
Hnh 5.2 minh ha k thut tm kim nh phn trn mt mng c sp xp.
Gi tr cn tm l 11.

Hnh 5.2 K thut tm kim nh phn


on m 5 m t m Java cho thc hin tm kim nh phn
on m 5 :
int [] array = {0,11,13,14,15,17,18,19,21,24,26,28,29};
int low =0;
int high = array.length -1;
int searchValue = 11;
int flag =0;
while(low<=high)
{
int mid = low + (high low)/2;
if(searchValue == array[mid]){
flag = 1;
System.out.println( Element found at index + mid);
Break;
} else if(searchValue<array[mid]){
high = mid -1;

65/114

Learn Java by Example


}else if (searchValue > array[mid]){
low = mid +1;
}
}
if(flag ==0){
System.out.println(Element not found in the array);
}
Kt qu c hin th nh di :
Element found at index 1
5.2 Lp String
Khi nim chui trong Java rt khc so vi C v C++. Trong Java, mt hng
chui l mt i tng ca lp String. V th, cc thao tc vi chui c thc
hin thng qua cc phng thc c cung cp bi lp String. Khi i tng
ca lp String c to ra, cc k t to nn chui khng th thay i. Nhng c
th thay i chui nh th no? Mi ln cn thay i mt chui, mt i tng
String mi c to ra cng vi cc thay i so vi i tng c, chui gc vn
gi nguyn nh c. Cc phng thc ca lp String trong J2SE 5.0 c gii
thiu trong cc phn sau:
5.2.1 codePointAt()
Phng thc codePointAt() tr v m s ca k t ti ch mc xc nh. Khi
nim then cht trong Unicode l code point. Unicode code points l ch nhng s
ch v tr ca cc k t trong bng m. V d trong Unicode, code point 65 th
hin cho k t in A
C php:
int codePointAt(int index);
V d 1:
String str = Aptech Global Learning Solutions;
System.out.print(str.codePointAt(0));
Kt qu:
65
5.2.2 codePointBefore()
Phng thc codePointBefore() tr v m s unicode ca k t (Unicode code
point) trc k t c ch mc xc nh.

66/114

AptechVietnam

Chng 5 Mng
C php:
int codePointBefore(int index);
V d 2 :
String str = Aptech Global Learning Solutions;
System.out.println(str.codePointBefore(1));
Kt qu:
65
5.2.3 codePointCount()
Phng thc codePointCount() tr v s lng k t Unicode gia hai ch mc
trong chui.
C php:
int codePointCount(int start, int end)
V d 3:
String str = Aptech Global Learning Solutions;
System.out.println(str.codePointCount(0,5));
Kt qu:
5
5.2.4 startsWith()
Phng thc startsWith() tr v gi tr logic kim tra chui c bt u bng
mt tin t (prefix) xc nh hay khng.
C php:
boolean startsWith(String prefix);
V d 4 :
String str = Aptech Global Learning Solutions;
System.out.println(str.startsWith(Apt));
Kt qu:
true
5.2.5 endsWith()
67/114

Learn Java by Example

Phng thc endsWith() tr v gi tr logic kim tra chui c kt thc bng


hu t (suffix) xc nh hay khng.
C php:
boolean endsWith(String suffix);
V d 5:
String str = Aptech Global Learning Solutions;
System.out.println(str.endsWith(tions));
Kt qu:
true
5.2.6 toUpperCase()
Phng thc toUpperCase() chuyn cc k t trong chui thnh ch vit hoa
C php:
String toUpperCase();
V d 6:
String str = Aptech Global Learning Solutions;
System.out.println(str.toUpperCase());
Kt qu hin th:
APTECH GLOBAL LEARNING SOLUTIONS
5.2.7 toLowerCase()
Phng thc toLowerCase() chuyn cc k t trong chui thnh ch vit
thng
C php:
String toLowerCase();
V d 6:
String str = Aptech Global Learning Solutions;
System.out.println(str.toLowerCase());

68/114

AptechVietnam

Chng 5 Mng
Kt qu hin th:
aptech global learning solutions
5.2.8 valueOf()
Phng thc valueOf() tr v chui tng ng vi i s xc nh. i s c
th l mt trong cc gi tr sau: boolean, char, float, double, int, long, mng
char, hoc object.
C php:
Static String valueOf(char[] data);
Static String valueOf(char[] data, int offset, int count);
V d 8:
Char [] array = {A, p,t,e,c,h,
,G,l,o,b,a,l};
System.out.println(String.valueOf(array));
System.out.println(String.valueOf(array,7,6);
Kt qu hin th:
Aptech Global
Global
5.2.9 toCharArray()
Phng thc toCharArray() chuyn ni dung ca chui thnh mng cc k t.
C php:
char [] toCharArray();
V d:
char [] array;
String str =Aptech Global Learning Solutions;
Array = str.toCharArray();
System.out.println(String.valueOf(array));
Kt qu hin th :
Aptech Global Learning Solutions
5.2.10 equalsIgnoreCase()
69/114

Learn Java by Example

Phng thc equalsIgnoreCase() so snh hai chui, b qua kiu vit v tr v


gi tr boolean. Nu cc chui ging nhau th phng thc tr v gi tr true,
ngc li l false.
C php:
boolean equalsIgnoreCase(String anotherString);
V d:
String str = Aptech Global Learning Solutions;
String anotherString = APTECH GLOBAL LEARNING SOLUTIONS;
System.out.println(str.equalsIgnoreCase(anotherString));
Kt qu:
true
5.3 Lp StringBuider
Chui trong Java, mt khi c to ra, khng th no thay i trc tip. c
tnh ny c gi l tnh bt bin ca chui. khc phc, Java cung cp lp
StringBuilder, th hin cho mt dy kh bin cc k t. StringBuilder l lp
tng ng vi chui v th hin cho cc dy k t c kh nng bin i
c. Chng c th c nhiu k t c chn vo gia hoc thm vo phn cui
ca chui. Nhng phng thc ca lp StringBuilder c m t di y:
5.3.1 charAt()
Phng thc charAt() tr v k t ti ch mc xc nh
C php:
char charAt(int index);
V d 11:
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
System.out.println(sb.charAt(7));
Kt qu hin th :
G
5.3.2 deleteCharAt()
70/114

AptechVietnam

Chng 5 Mng

Phng thc deleteCharAt() xo k t ti v tr xc nh.


C php:
StringBuilder deleteCharAt(int index);
V d 12:
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
System.out.println(sb.deleteCharAt(5));
Kt qu hin th :
Aptec Global Learning Solutions
5.3.3 getChars()
Phng thc getChars() sao chp s lng xc nh cc k t ca chui vo
mt mng.
C php:
void getChars(int begin, int end, char[] destArray, int
destArraybegin);
V d 13:
char [] array = new char[6];
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
sb.getChars(0,6,array,0);
System.out.println(array);
on m trn sao chp nhng k t ca i tng StringBuilder, sb, bt u t
k t c ch mc 0 n ch mc 5. Nhng k t c sao chp c lu vo
mng k t c tn array bt u t ch mc 0.
Kt qu hin th :
Aptech
5.3.4 length()
Phng thc length() tr v tng s k t t i tng StringBuilder.
C php:
71/114

Learn Java by Example

int length();
V d:
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
System.out.println(sb.length());
Hin th :
32
5.3.5 replace()
Phng thc replace() thay th nhng k t trong i tng StringBuilder bng
nhng k t mi.
C php:
StringBuilder replace(int begin, int end, String str);
V d 15 :
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
System.out.println(sb.replace(23,32,Services));
Kt qu hin th :
Aptech Global Learning Services
5.3.6 setCharAt()
Phng thc setCharAt() thay th mt k t ti ch mc xc nh t i tng
StringBuilder bng mt k t mi.
C php:
void setCharAt(int index, char ch);
V d:
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
sb.setCharAt(7,g);// thay th ch hoa G thnh ch thng
g
System.out.println(sb);

72/114

AptechVietnam

Chng 5 Mng
Kt qu hin th :
Aptech global Learning Solutions
5.3.7 setLength()
Phng thc setLength() thit lp di ca StringBuilder.
C php:
void setLength(int newLength);
Nu di mi ln hn di hin ti, tt c cc k t mi c thit lp v k
t null (\u0000). Nu chiu di nh hn chiu di hin ti, th k t u tin ca
mng cho n k t cui cng ca chiu di mi c gi li, phn cn li sau
cng c ct b.
V d 17:
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
sb.setLength(35);// chiu di c l length=32, chiu di
mi length = 35;
System.out.println(sb);
sb.setLength(13); // chiu di mi l length = 13
System.out.println(sb);
Kt qu hin th :
Aptech Global Learning Solutions
Aptech Global
5.3.8 appendCodePoint()
Phng thc appendCodePoint() b sung thm mt Unicode code point vo
i tng StringBuilder
C php:
StringBuilder appendCodePoint(int codePoint);
V d:
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
System.out.println(sb.appendCodePoint(123)); // chn k t
{
Kt qu hin th :
73/114

Learn Java by Example


Aptech Global Learning Solutions{
5.3.9 capacity()
Phng thc capacity() tr v dung lng hin c ca i tng StringBuilder.
Dung lng l s lng lu tr ginh cho cc k t c chn mi.
C php:
int capacity();
V d 19:
StringBuilder sb = new StringBuilder(); //dung lng mc
nh
System.out.println(sb.capacity()); // tr v 16
sb = new StringBuilder(Aptech Global Learning Solutions);
System.out.println(sb.length()); // tr v 32
//dung lng mc nh + chiu di ca i tng sb
System.out.println(sb.capacity());// tr v 48
Kt qu hin th
16
32
48
5.3.10 substring()
Phng thc subString() to mt chui con t i tng StringBuilder.
C php:
String substring(int startIndex);
String substring(int startIndex, int endIndex);
Phng thc th hai tr v chui con t i tng StringBuilder. Chui con bt
u ti startIndex v kt thc ti endIndex - 1
V d 20:
String str;
StringBuilder sb = new StringBuilder(Aptech Global
Learning Solutions);
str = sb.substring(7);//tr v mt chui con bt u v
tr ch mc th 7
System.out.println(str);

74/114

AptechVietnam

Chng 5 Mng
//Tr v chui con v tr ch mc 7 v cho n ch mc 21
str = sb.substring(7,21);
System.out.println(str);
Kt qu hin th:
Global Learning Solutions
Global Learning

75/114

Learn Java by Example

Tm Tt Bi Hc
Mng c dng lu tr nhiu phn t cng kiu d liu trong mt
dy v tr vng nh lin tip nhau
Gi tr lu tr trong cc phn t mng c th c tm v sp xp
Hng String trong Java l mt trng hp ca lp String.
Lp String cung cp nhiu phng thc a dng tm kim v chia tch
trong chui
String khng th bin i c, c ngha rng chng l hng v gi tr ca
chng khng th thay i c
Lp StringBuilder c dng nh mt String c th thay i ni dung

76/114

AptechVietnam

Chng 6: Gi v thnh phn ch nh truy nhp

Mc Tiu Bi Hc
Kt thc bi hc ny, hc vin c th:
nh ngha packages v lit k nhiu loi package
Cc bc ci t v s dng packages ca ngi dng nh ngha
Nhn bit cc cch truy nhp public, private v protected
Trng thi dng default hoc truy nhp package
nh ngha v lit k cc trng v nh ngha phng thc

6.1 Gi (Package)
Package trong Java l mt nhm cc lp (class) v cc giao tip (interface) c
lin quan vi nhau c t chc thnh mt n v. Mt package, ln lt, cha
cc package con hoc khng. Nu mt lp c to ra khng ch ra package
no, n thuc v package khng c tn. iu ny thng gp trong cc ng
dng nh.
Tn lp i km tn cc package cha lp y gi l tn y ca lp(Fully
qualified name). V d, tools.drawing.Shapes l tn y ca lp Shape.
Package c phn thnh package c sn hay nh ngha trc v package do
ngi dng nh ngha. Nhng package c sn l phn Java API. Package do
ngi dng nh ngha c to bi nh pht trin ng dng.
6.2 To v s dng package
Cc bc to mt package trong Java c c th nh sau:
Bc u tin l chn tn cho package. Tn package c vit di dng ch
in thng, khng bt u bng k t ch s v khng c du ni (-). Tuy nhin,
chng c th cha cc k t gch di. Ngay khi tn package c chn, mt
th mc c tn ng vi tn package c to ra. Tt c cc tp tin ngun cha

AptechVietnam

77/114

Learn Java by Example


chng trnh Java trong package c t trong th mc . Lnh package
c thm vo u trong mi tp tin ngun cha trong th mc.
C php:
package <packagename>;
V d, gi s Machines.Java v Gadgets.Java l hai tp tin c to ra trong
package c tn factory.
Nh bc 1, th mc c to ra vi tn factory.
Dng package factory; c thm vo mi tp tin Machines.Java v
Gadgets.Java. Trong hai on m 1 v on m 2 minh ha v d.
on m 1:
Line0 : package factory;
Line1
: public class Machines {
Line0 hin th m t package. Class Machines by gi nm
trong package factory
on m 2:
Line0 : package factory;
Line1 : public class Gadgets {
Gi s hai on m c hon thnh v hai tp tin c lu.
Bc k tip l bin dch v thc thi ng dng. V d, thc thi lp Machines
thc hin cu lnh sau ti du nhc lnh vi th mc hin ti l th mc cha
cha tp tin ngun:
Java factory.Machines
s dng mt lp ti bt k v tr no, lnh import c dng. V d v cch
dng lnh import nhp lp Machines t package factory:
import factory.Machines; //import mt class n
import tt c cc lp trong package, dng lnh di y :
import factory.*; // import tt c cc class
on m 3 minh ha cch dng lp Machines t packge factory trong lp
Resources t trong mt package khc.

78/114

AptechVietnam

Chng 7 Tha k v giao tip

on m 3:
package company;
import factory.Machines;
public class Resources {
public void testMethod() {
Machines objMachines = new Machines();
}
}
ch ra lp Resources thuc package company, lnh package c thm
vo dng u tin ca on m. dng lp Machines trong lp Resources,
cn phi import lp Machines vo. Lc bin dch lp Resources, phi m bo
classpath cha ng dn ca th mc cha cc package, y l factory.
Tt c cc lnh import trong lp phi c t sau cu lnh package v trc
khai bo lp. Cc lnh import v package t trong mt tp tin s nh hng
n tt c cc lp trong tp tin v khng th p dng cho ring tng lp.
Trong lnh package, tn ca cc package v tn ca package con c phn
cch bi du chm. Mi thnh phn ca tn package phi l tn mt th mc
trn my cc b. V d, nu lnh package nh di y:
package demo.management.list.src;
th, phi to cu trc th mc nh hnh di :
demo\management\list\src.
Thng thng, tn y cn phi s dng truy nhp nhng thnh phn tnh
(static) ca lp trong lp khc. Tuy nhin, iu lm cho m tr nn cng
knh, c bit khi c nhiu li gi thnh phn tnh trong cng mt cu lnh. Java
cung cp cch gii quyt bng cc lnh import static. Lnh import static cho
php mt chng trnh import ring l hay ton b nhng thnh phn tnh. V d,
nu lp Machines thuc vo package mnc.factory c mt thnh phn tnh
boltSize cn c dng trong lp Gadgets, th lnh import static c th c
s dng. Lc ny, boltSize c th c dng bt c ni u bn trong lp
Gadgets m khng cn dng tn y ca n. on m 4 minh ha trng
hp ny.
on m 4:
import static mnc.factory.Machines.boltSize;
class Gadgets {
public void assign() {

79/114

Learn Java by Example


boltSize = 20;
}
}
import static cng c th c dng trong th vin :
import static Java.lang.Math.PI;
double area = PI*radius*radius;
D import static l c tnh rt hu ch, nhng khng nn s dng thng
xuyn. Dng qu nhiu import static lm cho chng trnh tr nn kh c
cng knh kh c v cng gy ra cc vn bo dng.
6.3 Ch nh truy nhp (Accesss Specifiers)
Ch nh truy nhp hay thnh phn xc nh phm vi truy nhp trong Java iu
khin cch truy nhp v kh nng nhn thy ca cc lp v cc thnh phn ca
lp. Cc nguyn l hng i tng c ci t trong chng trnh thng qua
s dng cc ch nh truy nhp. C bn mc truy nhp sau :
public
Ch nh truy nhp public xc nh mc truy nhp ph bin. Ch nh truy
nhp public, khi p dng cho lp Java, cho php lp c th truy nhp
mi ni, thm ch bn ngoi package. Khi p dng cho bt k thnh phn
no ca lp, n cho php thnh phn c th truy nhp t mi ni trong
chng trnh. Cc lp mc trn ch c th l public hoc truy nhp ngm
nh v khng th l private hoc protected.
private
Ch nh truy nhp private xc nh mc truy nhp hn ch. Khi mt lp
hoc thnh phn ca n c khai bo l private, ch c th truy nhp
bn trong lp v khng th truy nhp bt k u khc. Cc lp khc
khng th truy nhp vo thnh phn private ca lp ny.
protected
Ch nh truy nhp protected xc nh mc truy nhp c bo v. Khi
thnh phn lp c khai bo l protected, th ch c th truy nhp bn
trong lp ca n, trong cng package v cc lp k tha.
Truy nhp ngm nh hoc package.
Khng c t kha xc nh cho mc truy nhp ngm nh hoc package.
Nu lp hay interface khng xc nh cc ch nh truy nhp trn, th s

80/114

AptechVietnam

Chng 7 Tha k v giao tip


c mc truy nhp ngm nh. V c th truy nhp nhng lp khc trong
cng package. Tng t, nu mt thnh phn ca lp khng khai bo ch
nh truy nhp, thnh phn s nhn truy nhp ngm nh v ch c th
c truy nhp trong cng package v khng th truy nhp t ngoi
package.
Bng 6.1 th hin mi quan h gia cc ch nh truy nhp v nhng thnh phn
trong mt chng trnh Java.
Ch nh
truy nhp
public
private
protected
mc nh/
khng m
t

Trng
d liu
Yes
Yes
Yes
Yes

C th truy nhp
Phng Hm dng
Lp
thc
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
No
Yes
Yes
Yes

Interface
Yes
No
No
Yes

Bng 6.1 : Ch nh truy nhp cho nhng thnh phn khc nhau
Nh vy, nh bng 6.1, lp v interface mc cao nht c th l public hoc mc
nh cch truy nhp, trng d liu, hm dng v phng thc c th c mt
trong bn ch nh truy nhp. V d, mt hm dng c th c khai bo nh
on m 5.
on m 5:
public class Building {
private int floors;
Building( ) {
floors=10;
}
}
Trong on m 5, hm dng khng nh ngha ch nh truy nhp (access
modifier), v th ch c truy nhp trong package ca n.
Bng 6.2 th hin cch thc cc ch nh truy nhp tc ng n lp, interface
hoc thnh phn. V d, mt thnh phn protected ca lp c th truy nhp bn
trong lp ca n, bn trong lp con v bn trong nhng lp trong cng package
Nhng thnh phn c th truy nhp

Ch nh truy
nhp
public

Lp
Yes

Package
Yes

Lp con
Yes

Bn ngoi
Package
Yes

81/114

Learn Java by Example


private
protected
Khng khai
bo

Yes
Yes
Yes

No
Yes
Yes

No
Yes
No

No
No
No

Bng 6.2 Ch nh truy nhp v phm vi truy nhp ca chng


on m 6 s minh ha cch s dng mt s ch nh truy nhp.
on m 6:
class Building {
protected int floors = 3;
private String name;
public void getName() {
System.out.println(Building name is +name);
}
public void setName() {
Scanner imput = new Scanner(System.in);
input.useDelimiter(\n);
name = input.next();
}
}
public class BuildingTest {
public static void main(String args[]) {
Building objBuilding = new Building();
System.out.println(Number of floors are +
objBuilding.floors);
objBuilding.setName();
objBuilding.getName();
}
}
on m 6, khi bin dch v thc thi, s hin th s tng l 3 v nhc ngi dng
nhp tn ca ta nh (building) vo trng name v hin th tn c nhp.
Nh trong on m, tn c truy nhp v in ra dng phng thc public bi v
trng name l private v khng th truy nhp bn ngoi lp. Quan st ta thy
lp BuildingTest l khng c k tha t lp Building nhng cch n gin
l to i tng v kch hot cc phng thc ca n.
Mt thnh phn (lp, interface hoc thnh vin) c th c mt trong cc ch nh
truy nhp c m t trong bng 6.2. V d, public v protected khng th c
thit lp ng thi cho mt thnh phn ca lp. Khi thit k lp, tt nht l to ra
cc bin th hin private v c cc phng thc truy nhp (accessor methods)

82/114

AptechVietnam

Chng 7 Tha k v giao tip


public truy xut v thit lp gi tr cho cc bin. V cng m bo khng c
phng thc private hoc bin private no khng c s dng trong lp.
Cc bin cc b khai bo trong phng thc khng khai bo ch nh truy nhp
(access specifier). Ch cc bin mc lp, cn gi l bin th hin (instance
variable), mi khai bo ch nh truy nhp.
6.4 B t cho trng v phng thc
B t cho trng v phng thc (field and method modifier)l nhng t kha
c dng xc nh cc phng thc v trng cn c khai bo iu
khin truy nhp ca ngi dng. Mt s s dng km vi t kha public v
protected. Java cung cp cc t kha volatile, transient v native nh l cc
b t cho trng v phng thc (field and method modifiers).
volatile
B tr volatile cho php ni dung ca bin ng b cho tt c cc tuyn
trnh ang chy v vy khi gi tr ca bin thay i, tt c cc tuyn trnh
s nhn thy s thay i . B t volatile ch p dng cho trng.
Nhng hm dng, phng thc, lp v interface khng c p dng b tr
ny. Bin volatile hu ch trong mi trng a x l v khng thng s
dng trong cc mi trng khc.
native
B tr native ch c p dng cho cc phng thc ca lp v cho bit
ci t ca phng thc nm bn ngoi lp. Thng ci t cng nm
ngoi JVM v c to ra vi ngn ng hay cng ngh khng phi Java
nh C hay C++. Hm dng, trng, lp v interface khng c b t ny.
Nhng phng thc khai bo s dng b t native c gi l phng
thc native . Tp tin m ngun Java thng ch cha khai bo v khng
c phn ci t ca phng thc native. Nhng phng thc native vi
phm vo tnh cht c lp nn tng (platform) ca Java v do khng
nn s dng tr khi thc s cn thit. i tng gi phng thc native
thm ch khng cn bit phng thc c khai bo trong lp, bi v
chng kch hot phng thc bnh thng ging nh li gi cc phng
khc. Mt vi lp trong Java API c cc phng thc native. Lp Object,
v d, trong gi Java.lang, c nhiu phng thc native.
transient
B t transient c dng khai bo cc trng s khng lu tr hoc
khi phc nh mt phn trng thi ca i tng. Trong nhiu trng
hp, tun t ha (serialization) tng i tn km b nh ngoi. Trong
trng hp nh vy, t kha transient gim lng d liu tun t, nng

83/114

Learn Java by Example


cao hiu sut thc hin, v gim chi ph. Tun t ha (Serialization) l
mt qu trnh chuyn i trng thi ca i tng thnh mt lung cc
byte nh phn (binary stream). Lung c th c ghi ra a hoc lu tr
trong b nh.
B t volatile v transient khng th p dng cho cc bin cc b.
Java khng xc nh c th v tr ca cc ch nh truy nhp (access specifiers)
v b t (modifiers) trong khai bo. V th cc khai bo sau l hp l:
native public void testNative();
private volatile int price;
transient private volatile int price;
Tuy nhin, cu lnh di y khng hp l bi v ch nh truy nhp hay b t
cho trng v phng thc phi t trc kiu d liu.
int private volatile price;

84/114

AptechVietnam

Chng 7 Tha k v giao tip

Tm Tt Bi Hc
Package (gi) trong Java l mt nhm cc lp (class) c quan h vi
nhau v nhng ci chung c sp xp li vi nhau nh mt n v.
Package c th chia lm 2 loi: package c sn hoc package do ngi
dng nh ngha.
Cu lnh khai bo package c khai bo vo phn trn cng ca mt
class v dng lnh import import mt hoc nhiu class(lp) t mt
package khc vo trong chng trnh.
Cch thc truy nhp ch nh v m t trong iu khin Java cho php
truy nhp ca lp v cc thnh vin ca lp.
B t cho trng v phng thc l nhng t kha dng xc nh
trng v phng thc cn c khai bo cho iu khin truy nhp ca
ngi dng

85/114

Chng 7 : Tha k v giao tip


Mc tiu bi hc:
Kt thc bi hc ny, hc vin c th :
Hiu khi nim v s tha k
Hiu khi nim v np chng
M t khi nim v giao tip
7.1 S tha k
Tha k (inheritance) l mt khi nim rt mnh. Tha k cho php s dng li
m . Xt tnh hung ngi dng mun to mt lp mi v c lp khc cha
m c th s dng li. Trong trng hp , ngi dng c th ch n gin
tha k lp mi t lp hin c m khng cn vit hay g ri m mi.
Lp tha k t lp khc c gi l lp con (sub-class) hoc lp dn xut hoc
lp m rng . Lp m c lp con dn xut gi l lp cha (superclass) hoc
lp c s (base class). Tt c cc lp trong Java ngm nh l lp con ca lp
Object. Mt lp Java c th c dn xut tng minh t mt v ch mt lp
cha s dng t kho extends. Ni cch khc, Java ch h tr n tha k.
on m 1:
class Mammal {} // ng vt c v, lp cha
class Whale extends Mammal{} // C voi, lp con
Mt lp con tha hng cc trng, cc phng thc v thm ch cc lp lng
t lp cha. Tuy nhin, cc hm dng (constructor) khng c tha k v cc
hm dng khng phi l thnh phn ca lp. Hm dng ca lp cha c th
c gi t lp con .
Mt lp con tha k tt c cc thnh phn public v protected ca lp cha bt k
gi (package) ca lp con. Nu cc lp con cng package vi lp cha th n
khng tha k cc thnh phn private ca lp cha. Tuy nhin, cc phng thc
public v phng thc protected s dng truy xut ti cc trng private
cng c th c dng bi lp con.
Mt lp lng (nested-class) c th truy xut n tt c cc trng private v cc
phng thc private ca lp cha n. Do , mt lp lng public hay
protected c tha k bi lp con truy xut gin tip ti tt c cc thnh phn
private ca lp cha.

AptechVietnam

87/114

Learn Java by Example


7.2 Hip bin kiu tr v (Covariant Return Types)
Nt mi trong J2SE 5.0 l n cho php mt phng thc ghi , tr v mt i
tng c kiu l 1 lp con ca kiu c tr v ca phng thc b ghi lp
cha. y gi l hip bin kiu tr v. u im chnh ca hip bin kiu tr v l
n gim p kiu v kim tra kiu.V d, xem lp cha c tn l Student ci t 2
phng thc c tn getMarks(). Mt phng thc tr v 1 th hin ca lp
java.lang.Number v lp kia tr v lp java.lang.Integer nh trong on m
ngun 2.
on m 2:
class Student
{
public Number getMarks(){
return new Number();//Tr v i tng ca lp Number
}
public Integer getMarks(){
return new Integer();//Tr v i tng lp Integer
}
}
Theo on m trn khi bin dch lp ny s nhn c kt qu li nh sau:
Student.Java:6: getMarks() is already defined in Student
public Integer getMarks(){
^
L do ca li ny l nu mt lp gi phng thc getMarks() trong lp Student
trnh bin dch s khng bit n nn gi phng thc no trong hai phng
thc. V s nguyn (Integer) l lp con ca lp Number, mt trong hai phin bn
ca phng thc c th c gi ng .
By gi xem lp cha Student c mt ci t n ca phng thc getMarks().
Xem lp con c tn ExchangeStudent ghi cng phng thc getMarks()
nhng tr v i tng c kiu Integer l kiu con ca lp Number. Nu on
m 3 c bin dch trong JDK phin bn trc J2SE 5.0 s xy ra li .Tuy
nhin, n bin dch thnh cng trong J2SE 5.0 JDK.
on m 3:
class Student {
public Number getMarks(){
return new Number();//Tr v i tng ca lp Number

88/114

AptechVietnam

Chng 7 Tha k v giao tip


}
}
class ExchangeStudent extends Student{
public Integer getMarks(){
return new Integer();//Tr v i tng ca lp Integer
}
}
Ch thch ca ND: V d trn ch mang tnh minh ha, khng dch c v Number l lp
Abstract, hm dng ca Integer khng ng. Ngoi ra trong bn chnh cn thiu vic tha k lp
Student.

7.2.1 Che lp phng thc (hidden method)


Che lp phng thc l hin tng c th hin bi cc phng thc tnh ca
mt lp. Nu lp con nh ngha mt phng thc tnh c cng k hiu nhn bit
(signature) nh phng thc trong lp cha, phng thc trong lp con c gi
l che lp phng thc trong lp cha.
S khc bit gia che lp v ghi c cc hm quan trng. Phin bn no ca
phng thc che lp c gi, ty thuc vo n c gi t lp cha hay t lp
con. Xt lp cha Vehicle ci t phng thc tnh accelerate() v phng thc
ng brake(). Gi s lp con Truck ghi phng thc brake() v phng
thc tnh accelerate(). y phng thc trong lp Truck gi l che lp
phng thc trong lp Vehicle. Gi th phin bn no ca phng thc che lp
s c thc thi ty thuc vo th hin ca lp cha hay lp con. Cc phng
thc che lp c m t chi tit trong on m 4.
on m 4:
class Vehicle{

// Xe c

static void accelerate(){

// Tng tc

System.out.println("Accelerate in Vehicle.");
}
void brake(){

// Hm thng

System.out.println("Brake in Vehicle.");
}
}
public class Truck extends Vehicle

// Truck: xe ti

{
static void accelerate(){

89/114

Learn Java by Example


System.out.println("Accelerate in Truck...");
}
void brake(){
System.out.println("Brake in Truck...");
}
public static void main(String args[]){
Truck dumper = new Truck();
Vehicle trailor = dumper;
//Kim tra che lp phng thc
Vehicle.accelerate();
//Phng thc tnh trong lp Vehicle c gi
//Kim tra s che lp phng thc accelerate
// trong lp Vehicle
dumper.accelerate();//phng thc tnh trong Truck
trailor.accelerate();//phng thc trong Vehicle chy
//Ghi n gin
trailor.brake();

//phng thc ghi trong lp


//Truck c chy

}
}
7.2.3 Che lp cc thuc tnh ca lp cha
Mt thuc tnh (field) ca lp con che lp bt k thuc tnh no ca lp cha cng
tn, thm ch kiu ca chng khc nhau. Bn trong lp con, thuc tnh ca lp
cha khng th c tham chiu bng tn thng thng m phi dng t kha
super. i vi cc tham s ca hm dng v phng thc, nu tn ca mt
tham s v thuc tnh ging nhau, th tham s che lp thuc tnh. i vi trng
hp ny, t kho this phi c dng truy nhp n thuc tnh.
Ni chung, cc thuc tnh n khng c khuyn dng v n lm cho m kh
c. Tuy nhin, m d c hn, lp trnh vin thnh thong t tn ging nhau
cho bin thuc tnh v tham s ca phng thc. Khi , tham s che lp thuc
tnh. Do , t kho this c dng truy xut n thuc tnh.
7.3 Np chng (Overloading)
7.3.1 Np chng phng thc

90/114

AptechVietnam

Chng 7 Tha k v giao tip


Mt s phng thc, c cng tn nhng khc tham s, khi c nh ngha
trong mt lp th c gi l np chng phng thc (method overloading). Cc
phng thc np chng khng th khc kiu d liu tr v. Chng c th khc
s lng tham s, khi , cc tham s c th cng kiu d liu; hoc cng s
lng tham s vi iu kin cc tham s ny phi khc kiu d liu. Cc
phng thc c th c np chng thm ch khi cc tham s c truyn vo
l cc i tng ca lp. Xt v d v phng thc c np chng c s lng
cc i tng truyn vo khc nhau. Cho lp c tn Laboratory (phng th
nghim) nh ngha mt phng thc np chng c tn l makeCompound()
nhn cc i tng Chemical (ha cht) qua cc tham s truyn vo.
on m 5 m t np chng phng thc.
on m 5:
class Laboratory {
public Compound makeCompound(Chemical a, Chemical b){
//Some application code here
}
public Compound makeCompound(Chemical a, Chemical b,
Chemical c){
//Some application code here
}
}
y, Chemical l lp c to bi chnh ng dng nhng vn c th c
dng ging nh cc lp dng sn ca Java (build-in Java). Do , cc phng
thc c th c np chng bng cch truyn vo s lng khc nhau cc tham
s c cng kiu d liu.
Phng thc cng c th c np chng bng cch truyn vo s lng c
nh cc tham s nhng kiu d liu ca tham s khc nhau. on m 6 m t
loi np chng phng thc ny.
on m 6:
class Laboratory {
public Compound makeCompound(Chemical a, Chemical b,
double quantityOfWater){
//Some application code here
}

91/114

Learn Java by Example


public Compound makeCompound(Chemical a, Chemical b,
Chemical c){
//Some application code here
}
}
Phng thc makeCompound c np chng vi ba tham s c kiu d liu
khc nhau c truyn vo.
7.3.2 Np chng hm dng
Cc hm dng (constructor) ca lp cng c th c np chng ging phng
thc. Np chng hm dng c th c thc hin hoc vi cng s lng tham
s v kiu d liu ca tham s khc nhau hoc khc s lng tham s v kiu
d liu ca tham s ging nhau.
on m 7 m t np chng hm dng
on m 7:
public class Compound {
public Compound(Element
//Some application
}
public Compound(Element
//Some application
}
}

a, Element b){
code here
a, Element b, Element c){
code here

Hm dng ca lp Compound c np chng vi s cc tham s i tng


khc nhau v cng kiu d liu. Thc tin ny c s dng khi mt i tng
mi c to ra s dng mt s i tng hin c.
Cch th hai ca np chng hm dng l truyn vo s lng c nh cc tham
s c kiu d liu khc nhau nh minh ha trong on m 8.
on m 8:
public class Compound {
public
Compound(Element
a,
Element
b,
double
quantityOfWater){
//Some application code here
}
public Compound(Element a, Element b, Compound c){
//Some application code here
}
}

92/114

AptechVietnam

Chng 7 Tha k v giao tip


T kho this thng dng tham chiu ti i tng hin ti. T kho this c
th c s dng ti v tr cho php tham chiu n i tng ca lp hin
hnh. Tuy nhin, this cng c th c dng gi hm dng khc trong cng
mt lp. y gi l triu gi hm dng tng minh. Khi nim c tho lun
su hn trong on m 9.
on m 9:
public class Man
{
private int height;
private double weight;
public Man(){
this(0,0);
}
public Man(double wt){
this(0,wt);
}
public Man(int height, double weight){
this.height = height;
this.weight = weight;
}
public static void main(String[] args){
//Initializes height and weight to 0
Man objMan1 = new Man();
//Initilizes weight to 160.50 and height to zero
Man objman2 = new Man(160.50);
//Initilizes weight to 160.50 and height to 190
Man objman2 = new Man(190, 160.50);
}
}
Hm dng u tin trong lp trn triu gi tng minh hm dng c hai i s
bng vic s dng t kho this v gn 0 vo hai i s. Hm dng th hai cng
c gi vi t kho this v mt i s n weight c truyn vo. Hm dng
th ba l hm dng chun khi gn cc bin th hin bng li gi ti cc hm
dng c tham s thng qua t kha this. Mt quy tc chun cn phi tun theo
l nu c lnh gi n hm dng khc, th lnh phi c t u tin trong
hm dng hin ti.
Giao tip (interface) l s tru tng ca lp. Mt interface xc nh nhng iu
mt lp phi lm, nhng khng ch r lm bng cch no.
7.5 Giao tip (interface)
7.5.1 Truy xut cc ci t thng qua tham chiu giao tip
Cc giao tip c th c gn cc bin tham chiu tng t vic gn mt tham
chiu n lp. Bin ny c th lu mt th hin ca bt k lp no ci t giao
93/114

Learn Java by Example


tip ny. Vic triu gi mt phng thc trn bt k mt trong cc tham chiu s
gi phin bn ci t ph hp ca phng thc ty thuc vo th hin thc s
ca giao tip ang c tham chiu ti. Kt qu, phng thc s c thc thi
c tm kim theo cch ng trong lc thc thi v cc lp c to ra sau
on m gi thc hin cc phng thc ca chng.
V phng thc c gi c xc nh ti thi im thc thi, nn s tn chi ph
thc thi loi m ny. Do , phng php ny thc t khng c dng vi
cc m hng n kh nng thc thi.
7.5.2 Cc bin trong giao tip:
Cc giao tip c th c cc bin. Cc bin c m t trong giao tip dng
ngm nh l final v static (tnh). Chng khng th c thay i bi cc lp
ci t giao tip. Do , chng phi c khi to vi mt gi tr hng. Nu giao
tip c khai bo l public th ngm nh tt c cc phng thc v cc bin
c khai bo trong giao tip cng l public. Khi mt giao tip c ci t bi
mt lp, tt c cc bin ca giao tip s hot ng nh cc bin hng trong lp.
on m 10 minh ha khi nim ny.
on m 10:
public interface Aircraft{
//bin trong interface cn c khi to
public int passengerCapacity = 400;
void fly();
}
public class FighterJet implements Aircraft
{
//bin ca interface l final v static. Do vy khng th
// thay i trong lp
passengerCapacity = 2; //s sinh li
void fly(){
//Bin Static khng th truy nhp t vng non-static
System.out.println(passengerCapacity);
//s sinh ra li
}
public static void main(String[] args)
System.out.println(passengerCapacity); //In ra 400
}
}

7.5.3 Giao tip c th c m rng


Trong Java, mt lp n gin c th c th m rng thnh mt lp khc, n
lt n cng theo cch m rng thnh mt lp th ba v c nh vy. Khi
nim ny cng c gi l tha k v cng c th s dng cho giao tip. Mt
giao tip l mt lp tru tng. Do mt giao tip c th m rng t giao tip
khc ging nh mt lp m rng t lp Java khc. Thc ra, ngn ng Java thc
94/114

AptechVietnam

Chng 7 Tha k v giao tip


hin a tha k ch vi giao tip. C ngha l mt giao tip ring l c th tha
k nhiu hn mt giao tip. iu ny c gii thch trong on m 11.
on m 11:
interface Game extends Player, Animation
{
//Variables and method declarations of both Player and
Animation interfaces available here
}
y giao tip Game tha k giao tip Player v Animation. Do c th ni
rng giao tip Game tha k cc phng thc ca c hai giao tip Player v
Animation.
7.5.4 Quan h L MT / IS-A:
y l khi nim da trn s tha k lp hay s ci t (implementation) giao
tip. Mt quan h IS-A th hin th bc lp trong trng hp tha k lp. V d
nu mt lp Ferrari m rng lp Car, th cu Ferrari L MT Car l ng.
Nu lp Car bn thn n m rng t lp Verhical khc th mi quan h Ferrari
IS-A Verhical cng ng. Mt quan h IS-A c th c m t bng mi tn
trong hnh v m t th bc ca lp.

Vehicle
A Car IS-A Vehicle
Car

A Ferrari IS-A Vehicle

A Ferrari IS-A Car


Ferrari
Hnh 7.1: Mi quan h IS-A
Quan h IS-A cng c th c s dng trong trng hp ci t giao tip. Mt
quan h IS-A trong trng hp ca giao tip c th hin trong Java vi t
kho implements. Mt lp Java c th ci t nhiu giao tip. gi l a-thak-giao-tip trong Java. N c s dng buc mt lp con phi tun theo
quy tc do ngi dng nh ngha cho cc phng thc ghi .

95/114

Learn Java by Example

Tm tt chng
Khi nim v dn xut mt lp mi t lp tn ti c bit nh l tha
k.
Tt c cc lp l lp con ngm nh ca lp i tng. Java ch h tr
n tha k c ngha l mt lp Java ch c th c dn xut t mt lp
cha.
Giao tip cng c m rng t cc giao tip khc ging nh cc lp. T
kho extends c dng dn xut cc giao tip mi t cc giao tip
cha khc.
Java h tr a tha k trong cc giao tip
Ghi phng thc l mt khi nim m trong 2 phng thc c cng
tn, s lng v kiu tham s v cng kiu tr v .
Np chng phng thc l mt khi nim m trong 2 phng thc c
th c cng tn, kiu tr v nhng khc tham s.
Cc hm dng c np chng tng t cc phng thc .
T kho this dng gi cc hm dng t bn trong 1 hm dng khc.
Cc tham chiu giao tip c th dng lu tr th hin ca bt k lp
no ci t giao tip ny.
Cc giao tip c th cha bin m cc bin ngm nh l final v static
trong lp ci t giao tip .

96/114

AptechVietnam

Chng 8: M rng lp
Mc tiu bi hc:
Kt thc bi hc ny, hc vin c th :
nh ngha phm vi ca bin
Hiu s khc nhau gia lp v bin th hin
M t phng thc tnh
Ch r cc u khuyt ca phng thc tnh
Ch r cc u khuyt ca bin th hin
8.1 Gii thiu v bin:
C hai loi bin trong Java. Loi th nht l bin nguyn thu (Primitive
variable). Mt bin nguyn thu dng lu gi tr c kiu d kiu nguyn
thu. Loi th hai l bin tham chiu (Reference variable) dng lu tham
chiu n i tng.
8.1.1 Bin nguyn thu
Bin th hin (Instance variable)
Cc bin nguyn thu c th thuc v hai loi ty thuc vo v tr chng c
khai bo. Mt bin th hin l mt bin c khai bo bn trong mt lp
nhng ngoi phng thc. Cc bin th hin l cc trng ca lp v ch
c khi to khi lp c to th hin. Khi to ra i tng, n c ring
bn sao mi trng ca lp ty thuc vo kiu t kha c dng vi bin
y.
Cc bin hot ng cho n khi lp cn hot ng. Ni cch khc, cc bin
c th c truy xut cho n khi mt tham chiu n lp hoc i tng tn
ti.
Bin cc b (Local variable)
Bin c khai bo bn trong phng thc c gi l bin cc b. Cc
bin c to ra ngay khi phng thc c triu gi v c gii phng khi
phng thc kt thc. Bin cc b ch c th truy xut bn trong phng
thc chng ang c khai bo. Chng khng th truy xut t bt c
phng thc khc hay bt c u bn trong lp.

AptechVietnam

97/114

Learn Java by Example

Khi nim v bin th hin v bin cc b c gii thch trong on m 1


on m 1:
public class Vehicle
{
private int horsepower; //Bin th hin, thuc tnh
public void getEngineType(){
int numberOfCylinders;
//Bin cc b
horsepower = 1000; //C th truy nhp
}
public void getVehicleType(){
//Khng h truy nhp bin ny t phng thc ny
numberOfCylinders = 8;
}
}
8.1.2 Bin tham chiu
Bin tham chiu (Reference variable) dng cha cc tham chiu n cc i
tng. Chng c khai bo vi mt kiu xc nh khng bao gi b thay i
sang kiu khc. Tuy nhin chng c th c dng tham chiu n bt k i
tng ca kiu c khai bo hoc kiu con ca kiu c khai bo. Chng c
th c khai bo nh cc bin th hin, bin cc b hoc bin tnh .
Bin th hin (Instance Variable)
Mt bin tham chiu khi c khai bo nh mt bin th hin c th truy xut
thng qua lp. Cc bin c khi to mc nh khi lp to ra th hin ca n.
Phm vi ca bin th hin l trong lp khai bo n v bin tn ti cho n khi
cn tham chiu n lp
Bin cc b (local variable)
Bin cc b khng th c nh du tru tng (abstract) hay tnh (static)
nhng chng c th c nh du l final. Bin cc b khng c gi tr mc
nh nh bin th hin. Do , nh mt quy tc, chng phi c khi to trc
khi s dng trong phng thc. Mt bin cc b khng th tham chiu t bt k
m no bn ngoi phng thc ni n c khai bo. C th t tn bin cc
b trng vi tn bin th hin. K thut ny c gi l to bng. Phng php
ny thc t khng c khuyn khch nhng nu ngi pht trin ng dng
mun ly cng tn cho bin cc b v bin th hin m d c hn th nn
dng t kho this.

98/114

AptechVietnam

Chng 8 M rng lp
on m 2:
public class PixelPoint
{
Pixel pix;
//Bin tham chiu th hin
public void showPixel(){
Pixel newPixel;
//Bin tham chiu cc b
}
public vodi setPixel(Pixel pix){
//Khi to bin tham chiu th hin dng t kha this
this.pix = pix;
}
}
8.1.3 T kho static: cc bin v cc phng thc
Mt bin static c gi l bin lp bi v mt bn sao n l ca bin tn ti
cho tt c th hin ca lp. Ni cch khc, tt c cc i tng ca lp chia s
cng mt bn sao ca bin static. iu ny cng ng vi bin tham chiu.
Phng thc c th c nh du static. Tuy nhin, mt phng thc static
c th che lp nhng khng c ghi . Cc phng thc static c th c
truy xut trc tip dng tn lp hn l tham chiu i tng. Mt phng thc
static ch c th truy xut cc bin cc b, cc thuc tnh static v cc tham s
phng thc.
B khi to tnh (static initializer)
Mt lp c th cha m trong khi static m khng thuc v bt k phng
thc bnh thng no. Nh cc khi static c khai bo trong on m 3.
Cc khi static c thc thi ch mt ln khi lp c np. Nu nhiu hn
mt khi static tn ti bn trong lp th chng s c thc thi theo th t
xut hin trong m. Trong on m 3, khi lp Vehical u tin c np,
khi static initializer c thc thi v bin price c khi to vi gi tr
50.50
on m 3:
public class Vehicle
{
static double price;
//Instance Variable
static{
price = 50.50; //Static initializer block
}
}

99/114

Learn Java by Example


8.2 Bin lp v bin th hin:
Bin th hin
(instance variable)
c khi to ch khi
lp c to th hin
Ch c th c truy
nhp thng qua tham
chiu i tng.

Bin lp (class variable)

L cc bin tnh v c gn gi tr mc nh thm ch


trc khi lp c to th hin.
C th c truy nhp thng qua tham chiu i
tng cng nh tn lp. V chng c gi t cc
bin lp, nn khng nn s dng cc tham chiu i
tng truy nhp n cc bin lp hay bin tnh.
Mi th hin ca lp c Tt c cc th hin ca lp chia s cng mt bn sao
bn sao ring ca bin. ca bin tnh
Bng 8.1 Khc nhau gia bin lp v bin th hin
8.3.1 Cc u im ca phng thc static
1. Phng thc static c th c triu gi bng s dng trc tip tn lp.
2. Phng thc static dng ci t cc ng x (hnh vi) b nh hng
bi trng thi ca bt c th hin no.
3. Phng thc static c th c nh ngha li trong cc th hin
4. Phng thc static c th truy nhp thng qua th hin ca lp cng vi
ton t chm (.). Tuy nhin y l c php khc thng v trn thc t
trnh bin dch thay th tham chiu th hin bng tn lp trc khi gi
phng thc.
8.3.2 Cc nhc im ca phng thc tnh :
1. Phng thc static c th c gi bng cch dng mt tham chiu i
tng khng khi to. Trnh bin dch ch kim tra kiu ca i tng v
phng thc ang c gi c phi l phng thc static hay khng. Do
, mt phng thc static c th c truy nhp bi mt bin tham
chiu i tng khng c khi to.
2. Mt phng thc static khng c ghi , mc d n c th che lp
3. Cc thuc tnh non-static ca lp khng th truy xut t trong phng
thc static.
4. Cc phng thc non-static ca lp hoc th hin khng th c truy
xut trong phng thc static.
5. V phng thc static c th c gi khng s dng th hin ca lp
cha n, s dng t kho this b cm.
8.4 Thun li v bt li ca cc phng thc th hin :

100/114

AptechVietnam

Chng 8 M rng lp

8.4.1 Thun li ca phng thc th hin:


1. Cc phng thc th hin (instance method) c th c ghi v np
chng .
2. Cc phng thc th hin ghi c th c kiu tr v khc l kiu mi v
l lp con ca kiu tr v c khai bo ca phng thc c ghi .
3. Chng c th ch c truy nhp bng th hin ca lp dng ton t
chm .
8.4.2 Bt li ca phng thc th hin:
1. Cc bin static khng th c truy xut t phng thc th hin
2. Cc phng thc c quyn truy nhp private trong mt lp th khng
c tha k v do khng th c ghi .
3. Phng thc th hin trong Java ch c th tr v mt tham s n. Tham
s ny c th l mt kiu nguyn thu hoc l mt i tng tham chiu.

101/114

Learn Java by Example

Tm tt bi hc
Cc bin nguyn thu c dng lu tr cc gi tr kiu d liu
nguyn thu v cc bin tham chiu dng lu tr cc tham chiu
n cc i tng.
Cc bin th hin nguyn thu c th truy nhp thng qua lp m
chng mi c khai bo.
Cc bin cc b nguyn thu c khai bo bn trong cc phng
thc v phm vi ca chng b gii hn trong phng thc .
Cc bin tham chiu dng lu tr cc tham chiu n cc i
tng. Phm vi ca bin th hin v bin cc b tng t nh cc
bin nguyn thu .
Mt bin static c gi mt bin lp bi v mt bn sao n ca bin
ang tn ti trong tt c cc th hin ca lp.
Cc khi khi to static u khng c trong thn ca bt k phng
thc no v dng khi to lp .

102/114

AptechVietnam

Chng 9: Ngoi l
Mc tiu bi hc
Kt thc bi hc ny, hc vin c th:

M t v cc kiu ngoi l
M t v cng dng ca t kha throw v throws
To ngoi l do ngi dng nh ngha
Ci t cc assertion

Ngoi l l mt kh nng iu qun li trong ngn ng lp trnh Java. Nh pht


trin c th xc nh cc hnh vi ca mt ng dng bng cch s dng ngoi l.
V d iu kin in hnh c th ngay gy ra ngoi l l triu gi phng thc vi
cc i s khng c chp nhn, li mng, hoc c m mt tp tin khng tn
ti.
9.2. Cc kiu ngoi l
C hai loi ngoi l chnh trong ngn ng lp trnh Java:
Ngoi l c kim sot (Checked Exception)
Ngoi l c kim sot c to ra trong cc tnh hung thc hin bnh thng
ca mt chng trnh. Mt s v d v ngoi l c kim sot l yu cu mt tp
tin khng c, ngi dng nhp liu sai, v mng hng. Nhng ngoi l ny c
x l trnh cc li bin dch. Nu mt ngoi l xy ra trong qu trnh thc hin
phng thc, phng thc c th iu qun ngoi l hoc chuyn ngoi l cho
phng thc ang gi ch r vn xy ra. Phng thc ang gi li c th
iu qun ngoi l hoc chuyn cho phng thc ang gi n. Qu trnh ny c
th tip tc n khi ngoi l t n nh ca lung (thread) v lung b kt thc
thc hin. K thut ny gi l Call-stack. u im chnh ca k thut l nh pht
trin c th t cc on m x l li bt c v tr no h mun.
Ngoi l khng kim sot (Unchecked Exception)
Ngoi l khng kim sot c to ra trong cc tnh hung c xem l khng
th phc hi i vi chng trnh. V d thng thng v cc tnh hung l hnh
ng truy nhp mt phn t nm ngoi mng. Mt ng dng khng c yu
cu kim sot cc loi ngoi l kiu ny. Ngoi l thc thi (runtime exception)
cng l v d ca ngoi l khng kim sot. Thng th chng pht sinh do cc
li logic (logical bugs). Ngoi l khng kim sot pht sinh do cc vn mi

AptechVietnam

103/114

Learn Java by Example


trng hoc cc li khng th c phc hi v c gi l Error (li). S dng
ht b nh c cp pht ca chng trnh l v d v li (error).
9.2. iu qun ngoi l trong Java
Nh tho lun trc, mt ng dng ch c yu cu iu qun cc ngoi
l kim sot (checked exception). Ngoi l trong Java c th c iu qun
bng cc s dng cc khi try-catch, hoc c th c chuyn n phng thc
ang gi s dng t kha throw hoc throws.
9.2.1. T kha throw v throws
T kha throws khai bo rng mt phng thc c th nm ra ngoi l trong qu
trnh thc hin ca n. T kha throw c s dng nm ra ngoi l sau khi
thc hin mt s kim tra tnh hp l trong chng trnh. Khi cu lnh throw thc
hin, lung thc hin b thay i v cc cu lnh tip sau khng c thc hin.
Sau , Ngoi l to bi lnh throw c truyn cho phng thc ang gi
trc trong stack (Ngn xp).
i khi mt phng thc c th nm ra nhiu hn mt ngoi l. Danh sch cc
ngoi l c phn cch bng du phy (,) c nm ra bi phng thc c
t khai bo phng thc. K thut call-stack (gi ngn xp) phi c
tun theo trong khai bo cc phng thc c li gi cc phng thc khai to ra
ngoi l. on m 1 minh ha cch dng lnh throws.
on m 1:
public class ExceptionDemo
{
public void checkException(){
try{
//Statements
check();
}catch(Exception e){
//statements
}
}
void check() throws NullPointerException{
if (flag < 0){
throw new NullPointerException();
}
}
}
9.3. Ngoi l do ngi dng nh ngha (User-defined exception)

104/114

AptechVietnam

Chng 9 Ngoi l
Ngoi l do ngi dng nh ngha c dn xut t lp Exception. Ngn ng
lp trnh Java cho php cc nh pht trin ch nh nh ngha v to cc ngoi l
c kim sot (checked exception)
9.3.1. To ngoi l do ngi dng nh ngha (User-defined exception)
Lp Exception l lp c s ca tt c cc ngoi l do ngi dng nh ngha.
Cc ngoi l do ngi dng nh ngha cung cp cc gii php thit thc c th
c s dng trong chng trnh. Lp Throwable l lp cha ca tt c cc
ngoi l v li trong ngn ng Java.
Tt c cc phng thc ca lp Throwable c k tha bi lp Exception, do
, lp Exception l lp con ca lp Throwable. V vy, cc lp ngoi l do
ngi dng nh ngha c th s dng tt c cc phng thc ca lp
Throwable.
9.3.2. Khi no nm ra cc ngoi l?
iu quan trng i vi nh pht trin cn bit khi no dng cc ngoi l. C th
c mt khuynh hng s dng qu nhiu lp Exception v n tin dng. im
lu l mi khi mt ngoi l c nm ra lm cn tr s thc hin ca chng
trnh. Ch c mt hng dn cn tun theo quyt nh khi no nm ra mt
ngoi l l nu mt phng thc gp mt iu kin bt thng m n khng th
iu qun, n nn nm ra ngoi l. iu ny to ra mt cu hi khc v iu kin
no c th c phn loi nh l iu kin bt thng (abnormal condition)
Do vy, iu kin bt thng c th bt c iu kin no to ra kt qu khng
nh mong i so vi chc nng bnh thng ca mt phng thc. Cc ngoi
l c th c dng kim tra c cc tham s truyn vo cho phng thc
public hoc hm dng public l hp l hay khng.
9.3.3. Xu chui ngoi l
Xu chui ngoi l (exception chaining) hay bao ng ngoi l, l mt k thut
lp trnh hng i tng iu qun ngoi l bng vic nm li re-throw mt
ngoi l n bt sau khi bao ng (wrapping) n vi mt ngoi l mi. Ngoi
l gc c lu nh thuc tnh (nh nguyn nhn) ca ngoi l mi. tng l
mt phng thc nm cc ngoi l c nh ngha cng mc nh ca chnh
phng thc m khng loi b cc thng tin t cc mc thp hn.
on m thng dng trong Java n bt ngoi l v nm ra ngoi l khc.
try{

}catch(YourException e){
throw new MyException();
}

105/114

Learn Java by Example


Nu thng tin t ngoi l gc b mt, vic d li tr nn khng th. V th, trong
khi bao ng cc ngoi l, mt b truy xut thng c cung cp trch xut
thng tin. iu ny cho php cc nh pht trin hnh thnh cc xu chui ngoi
l gm cc ngoi l c bao ng.
u im ca s dng kh nng xu chui ngoi l l:
S kin mt ngoi l c to ra t cc mc thp hn c th c ghi li
khng quan tm ngoi l l g?
V cc API ph bin c s dng ghi li s kin mt ngoi l c
to ra t cc mc thp hn, s khuyn khch cc lp trnh vin duy tr h
s v xu chui ngoi l (exception chain)
H s (record) mt ngoi l c th gy ra ngoi l khc c th c lu
v tham chiu n sau .
gi h s ca xu chui ngoi l, hai phng thc ca lp Throwable c
s dng. Phng thc getCause() v initCause(Throwable) v hai hm dng
Throwable(Throwable) v Throwable(String, Throwable) c dng ghi xu
chui ca cc ngoi l. Tuy nhin, thm ch khng s dng cc hm dng cng
c th bao ng cc lp bc bng phng thc initCause().
Sa i ci t ca phng thc Throwable.printStackTrace hin th cc
ln vt ngc vi ton b xu chui gy ra ngoi l. Phng thc mi
getStackTrace() cung cp truy nhp do lp trnh theo di thng tin ln vt
c cung cp bi printStackTrace.
9.4 Gi nh (Assertion)
Assertion l lnh Java cho php nh pht trin kim tra cc gi nh c to ra
bi ng dng. Lnh assert kim tra biu thc boolean trong khi thc thi. Biu
thc
C hai dng lnh assert:
assert booleanExpression;
assert booleanExpression : expression;
Dng u tin ch nh gi biu thc boolean v tr li kt qu true hay false.
Dng th hai ging nh dng mt. Ngoi ra, nu biu thc boolean c lng l
false, biu thc th hai c tr li thng ip chi tit cho AssertionError. Biu
thc th hai c th thuc v bt k kiu no, ngoi tr void.
AssertionError l mt Error, khng l Exception. u im ca s dng lnh
assert l:

106/114

AptechVietnam

Chng 9 Ngoi l

Lnh assert khng cn t trong khi try-catch.


AssertionError c to ra khng c n bt v iu qun bi ng dng.
V vy, khng on m phc tp no cn trong ng dng.
Ngoi lnh thc s, khng cn thm m lnh no.
Cc assertion c th c dng :
n bt cc li logic
Kim tra kt qu ca mt thao tc
Kim tra cc iu kin li c iu qun
1.4.1 Assertion trong m
Assertion c th s dng trong bt c v tr no sau y:
Cc nh lng bt bin trong (internal invariants).
Cc nh lng bt bin lung iu khin (Control-flow invariants)
Cc nh lng bt bin lp, tin iu kin (precondition) v hu iu kin
(postcondition)
Chi tit c gii thch nh sau:
Cc nh lng bt bin trong
Cc gi thit trong chng trnh biu th bng cc ch thch. V d, trong mt
lnh if, ch thch gii thch cho mnh else nh trong on m 2.
on m 2:
if (sum > 600) {

} else if (sum > 600 && basic <=1000){

} else{

} //The sum should be less than 600


Thay v s dng ch thch, assertion c th c dng ti cng v tr. By gi,
lnh if c th c vit li trong on m 3.

107/114

Learn Java by Example

on m 3:
if (sum > 600) {

} else if (sum > 600 && basic <=1000){

} else{
assert sum < 600 : "sum is less than 600";
}
Ti v tr khc, assertion c th c s dng, l lnh switch khng c mnh
default. Khi nh pht trin mong mun mt trong cc mnh case c thc
hin th mnh default c th c loi b. V d, on m 4, mt trong cc
lnh switch-case s c thc hin.
on m 4:
switch (num) {
case 1:
...;
break;
case 2:
...;
break;
case 3:
...;
break;
}
Ch r mt gi nh nhm m bo bin num s c mt trong ch ba gi tr.
Mnh assert c th c thm vo trong mnh default kim tra gi
nh, nh minh ha trong on m 5.
on m 5:
default:
assert false : num;
Nu bin num nhn mt gi tr khc v assertion c cho php, assert s hng
v AssertionError s c nm ra.
C mt la chn khc chp nhn c trong on m 6
on m 6:

108/114

AptechVietnam

Chng 9 Ngoi l
default:
throw new AssertionError(num);
La chn trn lm tng tnh bo v ngay c assertion khng c cho php,
nhng s bo v m rng thm khng tng thm chi ph. Lnh throw s khng
thc hin tr khi chng trnh hng. Hn na, la chn trn l hp l trong mi
trng hp khi lnh assert khng c php. Nu phng thc bao tr li gi
tr, mi case trong lnh switch cha mt lnh return. Nu khng lnh return
no t sau lnh switch, th s gy ra li c php thm vo mnh default vi
assertion. Phng thc khng tr li gi tr no nu khng c case no tha
mn v assertion b v hiu.
Cc nh lng bt bin lung iu khin
Mt assertion c th t ti v tr iu khin khng t ti. Lnh assertion cng c
th c s dng nh trong on m 7.
assert false;
void assertdemo(){
for (...){
if (...){
return;
}
}
//Execution should never reach this point!!!
}
on m trn c th c vit li nh trong on m 8
on m 8:
void assertdemo(){
for (...){
if (...){
return;
}
}
assert false;
}
9.4.2 Cho v khng cho php assertion
Cc ty chn dng lnh ca lnh Java cho php hoc khng cho php assertion
mc lp. Dng lnh chuyn i enableassertion hay vit tt l ea, cho
109/114

Learn Java by Example


php assertion. Ngm nh, assertion b v hiu lc thc thi. Hai ty chn dng
lnh cho php nh pht trin la chn cho php hoc khng cho php assertion.
cho php assertion s dng enableassertion hay ea. khng cho php
assertion s dng disableassertion hay da. Chi tit v cc ty chn nh sau:
-ea
Cho php hoc khng cho php assertion trong tt c cc lp ngoi tr
cc lp h thng.
-ea:<tn_package >
Cho php hoc khng cho php assertion trong package c tn v cc
package con.
-ea:
Cho php hoc khng cho php assertion trong package khng ch tn
trong th mc lm vic hin ti.
-ea:<tn_lp>
Cho php hoc khng cho php assertion trong lp c tn.
Kt qu sau khi thc thi lp Excep bng lnh Java Excep, vi mi trng thc
thi ngm nh khng cho php assertion:
Excep.m1 ( 1 ) : OK
Excep.m1 ( -1) : OK
Vi cc assertion b v hiu, khng li gi phng thc m1(int) no gy ra kim
tra assertion. Nh m t trc, cho php assertion cn s dng cc ty
chn dng lnh. Bt c lnh no sau y, th hin trong on m 9, cho php
kim tra assertion trong lp Excep
Java ea Excep
Java ea:Excep Excep
Java ea:... Excep
Kt qu sau khi thc hin cc lnh:
Excep.m1( 1 ) : OK
Excep.m1(
-1
)
:
Exception
Java.lang.AssertionError
at Excep.m1(Excep.Java:6)
at Excep.main(Excep.Java:17)

in

thread

main

Gi phng thc m1(int) vi tham s 1 khng gy ra assertion. Tuy nhin, -1 vi


phm gi nh rng tham s phi lm mt s nguyn dng. H thng thc thi
Java thng bo gi nh tht bi thng qua th hin ca lp,
java.lang.AssertionError.
110/114

AptechVietnam

Chng 9 Ngoi l

nm r hm dng AssertionError no c dng, xem xt cch thc cc


assertion c x l khi cho php
c lng expression1
Nu true
o Khng c hnh ng no
Nu false
o V nu expression2 tn ti
c lng expression2 v s dng kt qu di dng tham s
n ca hm dng AssertionError.
o Ngc li
S dng hm dng ngm nh AssertionError.
V lnh assert trong lp Excep s dng dng biu thc n, s vi phm xy
ra khi truyn -1 vo phng thc m1(int) thc y hm dng AssertionError
c s dng. Hm dng ngm nh thc t s dng hm dng ngm nh ca
java.lang.Throwable in thng ip ngoi l bao gm m t ln vt dng vn
bn.
Kt qu li assertion khi thc hin lp Excep thiu. Nh thy AssertionError
xy ra trong phng thc m1 ti dng 6, nhng kt qu khng m t sai iu g.
May mn l dng lnh assert c hai biu thc cung cp kh nng ny. Nh gii
thch trn, trong dng hai biu thc, khi biu thc expression1 c c
lng l false, assertion s truyn kt qu ca biu thc expression2 vo cho
tham s ca hm dng AssertionError. Biu thc expression2 thc t mang
thng ip dng chui. Ngha l cc hm dng mt tham s ca lp
AssertionError phi chuyn kt qu ca biu thc expression2 sang chui
(String).
Lp Bar, c m t trong on m 10, s dng dng hai biu thc cho mt
assertion n trong phng thc m1(int).
on m 10:
public class Bar {
public void m1(int value){
assert 0 <= value: "Value must be non-negative :
value= " + value;
System.out.println("OK");
}
public static void main(String[] args)

{
111/114

Learn Java by Example


Bar bar = new Bar();
System.out.println("bar.m1( 1 ): ");
bar.m1(1);
System.out.println("bar.m1( -1 ): ");
bar.m1(-1);
}
}
Kt qu thc hin Bar c cho php assertion nh sau:
bar.m1( 1 ): OK
bar.m1( -1 ): Exception in thread main Java.lang.AssertionError: Value
must be non-negative: value= -1
at Bar.m1(Bar.Java:6)
at Bar.main(Bar.Java:17)
Kt qu cho thy s chuyn i kt qu ca biu thc expression thnh chui
(String) v ni vo cui thng ip ngoi l, trc thng tin theo vt. Thng ip
chi tit tt nhin l ci thin cng dng ca thng ip ngoi l. V to cc thng
ip li hp l khng kh, cc nh pht trin ng h dng hai biu thc ca lnh
assert.
Lp Java.lang.Throwable cho php nh dng r rng thng tin ln vt. Lp
FooBar, lit k trong on m 11, s dng cc kh nng mi ny nh dng
thng ip ngoi l c to ra bi li assertion.
on m 11:
public class Bar {
public void m1(int value){
assert 0 <= value: "Value must be non-negative : value= " +
value;
System.out.println("OK");
}
public static void printAssertionError(AssertionError ae){
StackTraceElement[] stackTraceElements=ae.getStackTrace();
StackTraceElement stackTraceElement=stackTraceElements[0];
System.err.println("AssertionError");
System.err.println("Class="+stackTraceElement.getClassName());
System.err.println("method="+stackTraceElement.getMethodName());
System.err.println("message="+stackTraceElement.getMessage());
}
public static void main(String[] args)
{

112/114

AptechVietnam

Chng 9 Ngoi l
try{
Bar bar = new Bar();
System.out.println("bar.m1( 1 ): ");
bar.m1(1);
System.out.println("bar.m1( -1 ): ");
bar.m1(-1);
}catch(AssertionError ae){
printAssertionError(ae);
}
}
}

Kt qu thc thi FooBar c cho php assertion hin th thng bo


AssertionError r rng:
fooBar.m1( 1 ): OK
fooBar.m1( 1 ): AssertionError
class =
FooBar
method= m1
message= Value must be non-negative: value= -1
9.4.4 So snh Assertion
Kh khn hay xy ra i vi cc nh pht trin mi l quyt nh khi no s dng
assertion v khi no dng ngoi l. C hai u n bt cc s c trong chng
trnh, nhng mc ch s dng th rt khc nhau. S khc nhau gia ngoi l, v
s dng, so vi assertion nh sau:
Mt ngoi l cho ngi dng ca chng trnh bit iu g sai.
Mt assertion m t mt s gi nh v chng trnh
Khi mt assertion tht bi, n ch ra li trong logic lp trnh
Cc ngoi l c to ra gii quyt cc vn c th xy ra trong tin
trnh thc hin ca chng trnh.
Assertion c vit nhm ch ra cc gi nh to ra bi chng trnh.

113/114

Learn Java by Example

Tm Tt Bi Hc
Cc ngoi l c kim sot th hin cc tnh hung khng c kim sot
bi chng trnh.
Cc ngoi l khng kim sot th hin khim khuyt trong chng trnh
T kha throw cho bit ngoi l xy ra.
Cc ngoi l cng c th c nh ngha bi ngi dng v c th c
s dng trong chng trnh.
Assertion c th c t ti bt k v tr no iu khin khng t ti.

114/114

AptechVietnam

You might also like