You are on page 1of 206

Ngn ng lp trnh JAVA

MC LC
Chng 1: GII THIU TNG QUAN V NGN NG LP
TRNH JAVA ......................................................................... 7
1.1. M u ......................................................................... 7
1.2. Gii thiu v ngn ng lp trnh Java............................ 7
1.2.1. Java l g? .............................................................. 7
1.2.2. Lch s pht trin ca ngn ng lp trnh Java........ 7
1.2.3. Mt s c im ni bc ca ngn ng lp trnh Java
........................................................................................ 8
1.3. Cc ng dng Java ...................................................... 10
1.3.1. Java v ng dng Console .................................... 10
1.3.2. Java v ng dng Applet ...................................... 11
1.3.3. Java v pht trin ng dng Desktop dng AWT v
JFC ................................................................................ 12
1.3.4. Java v pht trin ng dng Web.......................... 13
1.3.5. Java v pht trin cc ng dng nhng ................. 14
1.4. Dch v thc thi mt chng trnh vit bng Java........ 14
1.5. Chng trnh Java u tin.......................................... 15
1.5.1. To chng trnh ngun HelloWordApp .............. 15
1.5.2. Bin dch tp tin ngun HelloWordApp................ 16
1.5.3. Chy chng trnh HelloWordApp....................... 16
1.5.4. Cu trc chng trnh HelloWordApp.................. 17
S dng phng thc/bin ca lp................................ 17
1.6. Cng c lp trnh v chng trnh dch........................ 17
1.6.1. J2SDK ................................................................. 17
1.6.2. Cng c son tho m ngun Java. ....................... 18
Chng 2: ............................................................................. 21
HNG, BIN, KIU D LIU, ........................................... 21
TON T, BIU THC V CC ....................................... 21
CU TRC IU KHIN TRONG JAVA .......................... 21
2.1. Bin ............................................................................ 21
2.2. Cc kiu d liu c s................................................. 23
2.2.1. Kiu s nguyn .................................................... 24
2.2.2. Kiu du chm ng............................................. 26
1

2.2.3. Kiu k t (char) .................................................. 26


2.2.4. Kiu lun l (boolean).......................................... 27
2.3. Hng: .......................................................................... 27
2.4. Lnh, khi lnh trong java........................................... 28
2.5. Ton t v biu thc ................................................... 29
2.5.1. Ton t s hc...................................................... 29
2.5.2. Ton t trn bit..................................................... 29
2.5.3. Ton t quan h & logic ....................................... 29
2.5.4. Ton t p kiu .................................................... 30
2.5.5. Ton t iu kin ................................................. 30
2.5.6. Th t u tin ...................................................... 30
2.6. Cu trc iu khin ..................................................... 31
2.6.1. Cu trc iu kin if else ................................. 31
2.6.2. Cu trc switch case ........................................ 32
2.6.3. Cu trc lp.......................................................... 32
2.6.4. Cu trc lnh nhy (jump) .................................... 33
2.7. Lp bao kiu d liu c s (Wrapper Class)................ 33
2.8. Kiu d liu mng....................................................... 34
2.8.1. Khi nim mng ................................................... 34
2.8.2. Khai bo mng ..................................................... 34
2.8.3. Cp pht b nh cho mng ................................... 35
2.8.4. Khi to mng...................................................... 35
2.8.5. Truy cp mng ..................................................... 35
2.9. Mt s v d minh ha: ............................................... 36
Chng 3: HNG I TNG TRONG JAVA ............... 47
3.1. M u ....................................................................... 47
3.2. Lp (Class) ................................................................. 48
3.2.1. Khi nim ............................................................ 48
3.2.2. Khai bo/nh ngha lp ....................................... 48
3.2.3. To i tng ca lp .......................................... 49
3.2.4. Thuc tnh ca lp ............................................... 49
3.2.5. Hm - Phng thc lp (Method)......................... 50
3.2.6. Khi to mt i tng (Constructor)................... 52
3.2.7. Bin this............................................................... 53
2

3.2.8. Khai bo chng phng thc (overloading method)


...................................................................................... 54
3.3. c im hng i tng trong java ......................... 54
3.3.1. ng gi (encapsulation) ..................................... 55
3.3.2. Tnh a hnh (polymorphism): .............................. 55
3.3.3. Tnh k tha (inheritance) .................................... 57
3.4. Gi (packages) ............................................................ 62
3.5. Giao din (interface) ................................................... 63
3.5.1. Khi nim interface: ............................................. 63
3.5.2. Khai bo interface: ............................................... 64
3.5.3. V d minh ha..................................................... 65
Chng 4: THIT K GIAO DIN NGI DNG............. 82
4.1. M u ....................................................................... 82
4.2. Gii thiu th vin awt................................................ 83
4.3. Cc khi nim c bn.................................................. 83
4.3.1. Component........................................................... 83
4.3.2. Container ............................................................. 84
4.3.3. Layout Manager ................................................... 85
4.4. Thit k GUI cho chng trnh ................................... 86
4.4.1. To khung cha ca s chng trnh .................... 86
4.4.2. To h thng thc n.......................................... 87
4.4.3. Gn Component vo khung cha.......................... 89
4.4.4. Trnh by cc Component trong khung cha ........ 90
4.4.5. Cc i tng khung cha Container.................. 101
4.5. X l bin c/s kin ................................................ 105
4.5.1. M hnh x l s kin (Event-Handling Model) . 105
4.5.2. X l s kin chut ............................................ 108
4.5.3. X l s kin bn phm ...................................... 111
4.6. Mt s v d minh ha .............................................. 115
Chng 5: LUNG V TP TIN....................................... 128
5.1. M u ..................................................................... 128
5.2. Lung (Streams) ....................................................... 129
5.2.1. Khi nim lung................................................. 129
5.2.2. Lung byte (Byte Streams)................................. 129
5.2.3. Lung k t (Character Streams)........................ 131
3

5.2.4. Nhng lung c nh ngha trc (The Predefined


Streams) ...................................................................... 132
5.3. S dng lung Byte .................................................. 133
5.3.1. c d liu t Console....................................... 134
5.3.2. Xut d liu ra Console...................................... 135
5.3.3. c v ghi file dng lung Byte ......................... 136
5.3.4. c v ghi d liu nh phn................................ 141
5.4. File truy cp ngu nhin (Random Access Files) ....... 145
5.5. S dng lung k t.................................................. 147
5.5.1. Nhp Console dng lung k t ......................... 149
5.5.2. Xut Console dng lung k t .......................... 151
5.5.3. c/ghi File dng lung k t............................ 152
5.6. Lp File .................................................................... 155
Chng 6: LP TRNH C S D LIU.......................... 158
6.1. GII THIU............................................................. 158
6.2. KIN TRC JDBC................................................... 158
6.3. Cc khi nim c bn................................................ 160
6.3.1. JDBC Driver ...................................................... 160
6.3.2. JDBC URL ........................................................ 162
6.4. KT NI CSDL VI JDBC ..................................... 163
6.4.1. ng k trnh iu khin .................................... 163
6.4.2. Thc hin kt ni ............................................... 163
6.4.3. V d.................................................................. 164
6.5. KIU D LIU SQL V KIU D LIU JAVA.... 168
6.6. CC THAO TC C BN TRN CSDL................ 170
6.6.1. Cc lp c bn ................................................... 170
6.6.2. V d truy vn CSDL ......................................... 171
6.6.3. V d cp nht CSDL ......................................... 174
Ti liu tham kho:.............................................................. 176
Ph lc A: Trc nghim kin thc........................................ 177
Ph Lc B:p n trc nghim kin thc............................. 205

LI NI U
Ngn ng lp trnh java ra i v c cc nh nghin cu
ca Cng ty Sun Microsystem gii thiu vo nm 1995. Sau khi
ra i khng lu, ngn ng lp trnh ny c s dng rng
ri v ph bin i vi cc lp trnh vin chuyn nghip cng
nh cc nh pht trin phn mm. Gn y ngn ng lp trnh,
cng ngh java c a vo ging dy cc c s o to
lp trnh vin chuyn nghip. Mt s trng i hc Vit
Nam dy mn lp trnh java nh mt chuyn t chn cho cc
sinh vin cng ngh thng tin giai on chuyn ngnh.
Sau mt thi gian tm hiu, lm vic v c tham gia ging
dy chuyn lp trnh java cho lp c nhn tin hc t xa qua
mng. Nhm tc gi chng ti quyt nh bin son cun gio
trnh ny nhm phc v cng tc ging dy cng nh hc tp
ca sinh vin chuyn ngnh cng ngh thng tin.
Ni dung gio trnh tp trung vo nhng kin thc cn bn
nht ca lp trnh java gip ngi c bc u tip cp d
dng vi cng ngh mi ny, v y cng chnh l mt bc
m chng ta tr thnh java shooter. Mt s vn nng
trong ngn ng lp trnh java nh: javabean, thit kt giao din
dng th vin JFC(Java Foundation Class), lp trnh mng, lp
trnh c s d liu bng java, lp trnh ng dng web dng
J2EE (Java 2 Enterprise Edition), s c ni n trong cc
chuyn nng cao. Chng 6 ca gio trnh gii thiu tng
quan v lp trnh c s d liu dng jdbc, mt ni dung theo
chng ti cn phi c trnh by trong mt chuyn ring.
c th c hiu gio trnh ny ngi c cn nm vng
cc kin thc v: nhp mn lp trnh, lp trnh hng i tng.
y l ln xut bn u tin chc chn khng th trnh khi
nhng sai st. Nhm tc gi rt mong nhn c nhng kin
ng gp ca qu thy c, cc ng nghip v bn c c
5

th hon thin hn gio trnh ny phc v cho vic hc tp ca


sinh vin.
Xin chn thnh cm n!
TPHCM thng 01/2006
Nhm tc gi

Chng 1: GII THIU TNG QUAN V NGN


NG LP TRNH JAVA
1.1.M u
Chng ny s cung cp cho sinh vin cc khi nim, kin thc
c bn lin quan n vic lp trnh ng dng bng ngn ng
Java nh: lch s pht trin ca java, cc c im ca java,
khi nim my o, cu trc ca mt chng trnh n gin vit
bng Java cng nh cch xy dng, dch v thc thi mt
chng trnh Java.
1.2.Gii thiu v ngn ng lp trnh Java
1.2.1. Java l g?
Java l ngn ng lp trnh hng i tng (ta C++) do
Sun Microsystem a ra vo gia thp nin 90.
Chng trnh vit bng ngn ng lp trnh java c th chy
trn bt k h thng no c ci my o java (Java Virtual
Machine).
1.2.2.Lch s pht trin ca ngn ng lp trnh Java
Ngn ng lp trnh Java do James Gosling v cc cng s
ca Cng ty Sun Microsystem pht trin.
u thp nin 90, Sun Microsystem tp hp cc nh nghin
cu thnh lp nn nhm t tn l Green Team. Nhm Green
Team c trch nhim xy dng cng ngh mi cho ngnh in
t tiu dng. gii quyt vn ny nhm nghin cu pht
trin xy dng mt ngn ng lp trnh mi t tn l Oak
tng t nh C++ nhng loi b mt s tnh nng nguy him
ca C++ v c kh nng chy trn nhiu nn phn cng khc
nhau. Cng lc world wide web bt u pht trin v Sun
thy c tim nng ca ngn ng Oak nn u t ci tin

v pht trin. Sau khng lu ngn ng mi vi tn gi l


Java ra i v c gii thiu nm 1995.
Java l tn gi ca mt hn o Indonexia, y l ni
nhm nghin cu pht trin chn t tn cho ngn ng
lp trnh Java trong mt chuyn i tham quan v lm vic trn
hn o ny. Hn o Java ny l ni rt ni ting vi nhiu
khu vn trng cafe, chnh l l do chng ta thng thy
biu tng ly caf trong nhiu sn phm phn mm, cng c lp
trnh Java ca Sun cng nh mt s hng phn mm khc a
ra.
1.2.3.Mt s c im ni bc ca ngn ng lp trnh Java
My o Java (JVM - Java Virtual Machine)
Tt c cc chng trnh mun thc thi c th phi c
bin dch ra m my. M my ca tng kin trc CPU ca mi
my tnh l khc nhau (tp lnh m my ca CPU Intel, CPU
Solarix, CPU Macintosh l khc nhau), v vy trc y mt
chng trnh sau khi c bin dch xong ch c th chy c
trn mt kin trc CPU c th no . i vi CPU Intel chng
ta c th chy cc h iu hnh nh Microsoft Windows, Unix,
Linux, OS/2, Chng trnh thc thi c trn Windows
c bin dch di dng file c ui .EXE cn trn Linux th
c bin dch di dng file c ui .ELF, v vy trc y
mt chng trnh chy c trn Windows mun chy c
trn h iu hnh khc nh Linux chng hn th phi chnh sa
v bin dch li. Ngn ng lp trnh Java ra i, nh vo my
o Java m kh khn nu trn c khc phc. Mt chng
trnh vit bng ngn ng lp trnh Java s c bin dch ra m
ca my o java (m java bytecode). Sau my o Java chu
trch nhim chuyn m java bytecode thnh m my tng ng.
Sun Microsystem chu trch nhim pht trin cc my o Java
chy trn cc h iu hnh trn cc kin trc CPU khc nhau.
Thng dch:
8

Java l mt ngn ng lp trnh va bin dch va thng


dch. Chng trnh ngun vit bng ngn ng lp trnh Java c
ui *.java u tin c bin dch thnh tp tin c ui *.class
v sau s c trnh thng dch thng dch thnh m my.
c lp nn:
Mt chng trnh vit bng ngn ng Java c th chy trn
nhiu my tnh c h iu hnh khc nhau (Windows, Unix,
Linux, ) min sao c ci t my o java (Java Virtual
Machine). Vit mt ln chy mi ni (write once run
anywhere).
Hng i tng:
Hng i tng trong Java tng t nh C++ nhng Java
l mt ngn ng lp trnh hng i tng hon ton. Tt c
mi th cp n trong Java u lin quan n cc i tng
c nh ngha trc, thm ch hm chnh ca mt chng
trnh vit bng Java ( l hm main) cng phi t bn trong
mt lp. Hng i tng trong Java khng c tnh a k tha
(multi inheritance) nh trong C++ m thay vo Java a ra
khi nim interface h tr tnh a k tha. Vn ny s
c bn chi tit trong chng 3.
a nhim - a lung (MultiTasking - Multithreading):
Java h tr lp trnh a nhim, a lung cho php nhiu tin
trnh, tiu trnh c th chy song song cng mt thi im v
tng tc vi nhau.
Kh chuyn (portable):
Chng trnh ng dng vit bng ngn ng Java ch cn
chy c trn my o Java l c th chy c trn bt k my
tnh, h iu hnh no c my o Java. Vit mt ln, chy mi
ni (Write Once, Run Anywhere).
H tr mnh cho vic pht trin ng dng:
9

Cng ngh Java pht trin mnh m nh vo i gia Sun


Microsystem cung cp nhiu cng c, th vin lp trnh phong
ph h tr cho vic pht trin nhiu loi hnh ng dng khc
nhau c th nh: J2SE (Java 2 Standard Edition) h tr pht
trin nhng ng dng n, ng dng client-server; J2EE (Java 2
Enterprise Edition) h tr pht trin cc ng dng thng mi,
J2ME (Java 2 Micro Edition) h tr pht trin cc ng dng
trn cc thit b di ng, khng dy,
1.3.Cc ng dng Java
1.3.1.Java v ng dng Console
ng dng Console l ng dng nhp xut ch vn bn
tng t nh mn hnh Console ca h iu hnh MS-DOS.
Lai chng trnh ng dng ny thch hp vi nhng ai bc
u lm quen vi ngn ng lp trnh java.
Cc ng dng kiu Console thng c dng minh ha cc
v d c bn lin quan n c php ngn ng, cc thut ton, v
cc chng trnh ng dng khng cn thit n giao din ngi
dng ha.

class HelloWorld
{
public static void main(String[] args)
10

{
System.out.println("\nHello World");
}
}
1.3.2.Java v ng dng Applet
Java Applet l loi ng dng c th nhng v chy trong trang
web ca mt trnh duyt web. T khi internet mi ra i, Java
Applet cung cp mt kh nng lp trnh mnh m cho cc trang
web. Nhng gn y khi cc chng trnh duyt web pht
trin vi kh nng lp trnh bng VB Script, Java Script,
HTML, DHTML, XML, cng vi s canh tranh khc lit
ca Microsoft v Sun lm cho Java Applet lu m. V cho
n by gi gn nh cc lp trnh vin u khng cn mn
m vi Java Applet na. (trnh duyt IE i km trong phin
bn Windows 2000 khng cn mc nhin h tr thc thi mt
ng dng Java Applet). Hnh bn di minh ha mt chng
trnh java applet thc thi trong mt trang web.

11

1.3.3.Java v pht trin ng dng Desktop dng AWT v


JFC
Vic pht trin cc chng trnh ng dng c giao din ngi
dng ha trc quan ging nh nhng chng trnh c vit
dng ngn ng lp trnh VC++ hay Visual Basic c java
gii quyt bng th vin AWT v JFC. JFC l th vin rt
phong ph v h tr mnh m hn nhiu so vi AWT. JFC gip
cho ngi lp trnh c th to ra mt giao din trc quan ca bt
k ng dng no. Lin quan n vic pht trin cc ng dng
c giao din ngi dng ha trc quan chng ta s tm hiu
chi tit trong chng 4.
Minh ha thit k giao din ngi dng s dng JFC

12

1.3.4.Java v pht trin ng dng Web


Java h tr mnh m i vi vic pht trin cc ng dng Web
thng qua cng ngh J2EE (Java 2 Enterprise Edition). Cng
ngh J2EE hon ton c th to ra cc ng dng Web mt cch
hiu qu khng thua km cng ngh .NET m Microsft ang
qung co.
Hin nay c rt nhiu trang Web ni ting Vit Nam cng
nh khp ni trn th gii c xy dng v pht trin da trn
nn cng ngh Java. S ng dng Web c xy dng dng
cng ngh Java chc chn khng ai c th bit c con s
chnh xc l bao nhiu, nhng chng ti a ra y vi v d
thy rng cng ngh Java ca Sun l mt i th ng gm
ca Microsoft.
13

http://java.sun.com/
http://e-docs.bea.com/
http://www.macromedia.com/software/jrun/
http://tomcat.apache.org/index.html
Chc khng t ngi trong chng ta bit n trang web thng tin
nh t ni ting TPHCM l: http://www.nhadat.com/.
ng dng Web ny cng c xy dng da trn nn cng
ngh java.
Bn c th tm hiu chi tit hn v cng ngh J2EE to a ch:
http://java.sun.com/j2ee/
1.3.5.Java v pht trin cc ng dng nhng
Java Sun a ra cng ngh J2ME (The Java 2 Platform, Micro
Edition J2ME) h tr pht trin cc chng trnh, phn mm
nhng. J2ME cung cp mt mi trng cho nhng chng trnh
ng dng c th chy c trn cc thit b c nhn nh: in
thai di ng, my tnh b ti PDA hay Palm, cng nh cc
thit b nhng khc.

Bn c th tm hiu chi tit hn v cng ngh J2ME ti a ch:


http://java.sun.com/j2me/
1.4.Dch v thc thi mt chng trnh vit bng Java
Vic xy dng, dch v thc thi mt chng trnh vit bng
ngn ng lp trnh java c th tm tt qua cc bc sau:
- Vit m ngun: dng mt chng trnh son tho no
y (NotePad hay Jcreator chng hn) vit m ngun
v lu li vi tn c ui .java
14

Bin dch ra m my o: dng trnh bin dch javac


bin dch m ngun .java thnh m ca my o (java
bytecode) c ui .class v lu ln a
Thng dch v thc thi: ng dng c load vo b
nh, thng dch v thc thi dng trnh thng dch Java
thng qua lnh java.
o a m java bytecode vo b nh: y l bc
loading. Chng trnh phi c t vo trong
b nh trc khi thc thi. Loader s ly cc
files cha m java bytecode c ui .class v
np chng vo b nh.
o Kim tra m java bytecode: trc khi trnh
thng dch chuyn m bytecode thnh m my
tng ng thc thi th cc m bytecode phi
c kim tra tnh hp l.
o Thng dch & thc thi: cui cng di s iu
khin ca CPU v trnh thng dch ti mi thi
im s c mt m bytecode c chuyn sang
m my v thc thi.

1.5.Chng trnh Java u tin


1.5.1.To chng trnh ngun HelloWordApp
Khi ng Notepad v g on m sau
/*Vit chng trnh in dng HelloWorld ln mn hnh
Console*/
class HelloWorldApp{
public static void main(String[] args){
//In dong chu HelloWorld
System.out.println(HelloWorld);
}
}
Lu li vi tn HelloWorldApp.java
15

1.5.2.Bin dch tp tin ngun HelloWordApp


Vic bin dch tp tin m ngun chng trnh
HelloWorldApp c th thc hin qua cc bc c th nh sau:
- M ca s Command Prompt.
- Chuyn n th mc cha tp tin ngun va to ra.
- Thc hin cu lnh: javac HelloWordApp.java
Nu gp thng bo li Bad Command of filename hoc
The name specified is not recognized as an internal or external
command, operable program or batch file c ngha l
Windows khng tm c trnh bin dch javac. sa li ny
chng ta cn cp nht li ng dn PATH ca h thng.
Ngc li nu thnh cng bn s c thm tp tin
HelloWordApp.class
1.5.3.Chy chng trnh HelloWordApp
-

Ti du nhc g lnh: java HelloWordApp


Nu chng trnh ng bn s thy dng ch
HelloWord trn mn hnh Console.
Nu cc bn nhn c li Exception in thread "main
java.lang.NoClassDefFoundError: HelloWorldApp c
ngha l Java khng th tm c tp tin m bytecode
tn HelloWorldApp.class ca cc bn. Mt trong nhng
ni java c tm tp tin bytecode l th mc hin ti ca

16

cc bn. V th nu tp tin byte code c t C:\java


th cc bn nn thay i ng dn ti .
1.5.4.Cu trc chng trnh HelloWordApp
Phng thc main(): l im bt u thc thi mt ng dng.
Mi ng dng Java phi cha mt phng thc main c dng
nh sau: public static void main(String[] args)
Phng thc main cha ba b t c t sau:
public ch ra rng phng thc main c th c gi
bi bt k i tng no.
static ch ra rng phng thc main l mt phng
thc lp.
void ch ra rng phng thc main s khng tr v bt
k mt gi tr no.
Ngn ng Java h tr ba kiu ch thch sau:
/* text */
// text
/** documentation */. Cng c javadoc trong b JDK s dng
ch thch ny chun b cho vic t ng pht sinh ti liu.
- Du m v ng ngo8c nhn { v }: l bt u v kt
thc 1 khi lnh.
- Du chm phy ; kt thc 1 dng lnh.
1.5.5.S dng phng thc/bin ca lp
C php:
Tn_lp.Tn_bin
hoc Tn_lp.Tn_phng_thc()
1.6.Cng c lp trnh v chng trnh dch
1.6.1.J2SDK
-

Download J2SE phin bn mi nht tng ng vi h


iu hnh ang s dng t a ch java.sun.com v ci
17

t ln my tnh (phin bn c chng ti s dng khi


vit gio trnh ny l J2SE 1.4). Sau khi ci xong, chng
ta cn cp nht ng dn PATH h thng ch n th
mc cha chng trnh dch ca ngn ng java.

1.6.2.Cng c son tho m ngun Java.


vit m ngun java chng ta c th s dng trnh son
tho NotePad hoc mt s mi trng pht trin h tr ngn
ng java nh: Jbuilder ca hng Borland, Visual Caf ca hng
Symantec, JDeveloper ca hng Oracle, Visual J++ ca
Microsoft,
Trong khun kh gio trnh ny cng nh hng dn
sinh vin thc hnh chng ti dng cng c JCreator LE v3.50
ca hng XINOX Software. Cc bn c th download
JCreator LE v3.50 t http://www.jcreator.com/download.htm.
V d: Dng JCreator to v thc thi chng trnh c tn
HelloWorldApp.
Bc 1: To 1 Empty Project
18

File New Project.


Chn Empty project ri bm nt chn Next

Sau nhp tn project v bm chn Finish.

Bc 2:
To
mt Class mi tn HelloWorldApp v a vo Project hin ti.
- File New Class.
- Nhp vo tn Class v chn Finish (hnh bn di).

19

Bc 3: Son tho m ngun (hnh bn di)


Dch (F7)

Thc thi (F5)

Ca s
WorkSpace

Ca s son tho
m ngun

20

Chng 2:
HNG, BIN, KIU D LIU,
TON T, BIU THC V CC
CU TRC IU KHIN TRONG JAVA
2.1.Bin
Bin l vng nh dng lu tr cc gi tr ca chng
trnh. Mi bin gn lin vi mt kiu d liu v mt
nh danh duy nht gi l tn bin.
- Tn bin thng thng l mt chui cc k t
(Unicode), k s.
o Tn bin phi bt u bng mt ch ci, mt du
gch di hay du dollar.
o Tn bin khng c trng vi cc t kha (xem
ph lc cc t kha trong java).
o Tn bin khng c khong trng gia tn.
- Trong java, bin c th c khai bo bt k ni u
trong chng trnh.
Cch khai bo
<kiu_d_liu> <tn_bin>;
<kiu_d_liu> <tn_bin> = <gi_tr>;
Gn gi tr cho bin
<tn_bin> = <gi_tr>;
-

Bin cng cng (ton cc): l bin c th truy xut khp ni


trong chng trnh, thng c khai bo dng t kha public,
hoc t chng trong mt class.
Bin cc b: l bin ch c th truy xut trong khi lnh n khai
bo.

21

Lu : Trong ngn ng lp trnh java c phn bit ch in hoa


v in thng. V vy chng ta cn lu khi t tn cho cc i
tng d liu cng nh cc x l trong chng trnh.
V d:
import java.lang.*;
import java.io.*;
class VariableDemo
{
static int x, y;
public static void main(String[] args)
{
x = 10;
y = 20;
int z = x+y;
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("z = x + y =" + z);
System.out.println("So nho hon la so:" +
Math.min(x, y));
char c = 80;
System.out.println("ky tu c la: " + c);
}
}
Kt qu chng trnh

22

2.2.Cc kiu d liu c s


Ngn ng lp trnh java c 8 kiu d liu c s: byte, short, int,
long, float, double, boolean v char.

23

Kiu c s

Kiu lun l

Kiu k t

Kiu s
kiu nguyn

boolean

byte

Kiu

byte
short
int
long
float
double

kiu thc

char

Kch
thc
(bytes)
1
2
4
8
4
8

short

int

Gi tr min

-256
-32768
-231
-263

long

float

Gi tr max

255
32767
231 - 1
263 - 1

double

Gi tr
mc
nh
0
0
0
0L
0.0f
0.0d

2.2.1.Kiu s nguyn
-

Java cung cp 4 kiu s nguyn khc nhau l: byte,


short, int, long. Kch thc, gi tr nh nht, ln nht,
cng nh gi tr mc nh ca cc kiu d liu s
nguyn c m t chi tit trong bng trn.
Kiu mc nh ca cc s nguyn l kiu int.
Cc s nguyn kiu byte v short rt t khi c dng.
Trong java khng c kiu s nguyn khng du nh
trong ngn ng C/C++.
24

Khai bo v khi to gi tr cho cc bin kiu nguyn:


int x = 0;
long y = 100;
Mt s lu i vi cc php ton trn s nguyn:
- Nu hai ton hng kiu long th kt qu l kiu long.
Mt trong hai ton hng khng phi kiu long s c
chuyn thnh kiu long trc khi thc hin php ton.
- Nu hai ton hng u khng phi kiu long th php
tnh s thc hin vi kiu int.
- Cc ton hng kiu byte hay short s c chuyn sang
kiu int trc khi thc hin php ton.
- Trong java khng th chuyn bin kiu int v kiu
boolean nh trong ngn ng C/C++.
V d: c on chng trnh nh sau
boolean b = false;
if (b == 0)
{
System.out.println("Xin chao");
}
Lc bin dch on chng trnh trn trnh dch s bo li:
khng c php so snh bin kiu boolean vi mt gi tr kiu
int.

25

2.2.2.Kiu du chm ng
i vi kiu du chm ng hay kiu thc, java h tr hai kiu
d liu l float v double.
Kiu float c kch thc 4 byte v gi tr mc nh l 0.0f
Kiu double c kch thc 8 byte v gi tr mc nh l 0.0d
S kiu du chm ng khng c gi tr nh nht cng khng
c gi tr ln nht. Chng c th nhn cc gi tr:
- S m
- S dng
- V cc m
- V cc dng
Khai bo v khi to gi tr cho cc bin kiu du chm ng:
float x = 100.0/7;
double y = 1.56E6;
Mt s lu i vi cc php ton trn s du chm ng:
- Nu mi ton hng u c kiu dn chm ng th php
ton chuyn thnh php ton du chm ng.
- Nu c mt ton hng l double th cc ton hng cn
li s c chuyn thnh kiu double trc khi thc
hin php ton.
- Bin kiu float v double c th p chuyn sang kiu d
liu khc tr kiu boolean.
2.2.3.Kiu k t (char)
Kiu k t trong ngn ng lp trnh java c kch thc l 2
bytes v ch dng biu din cc k t trong b m Unicode.
Nh vy kiu char trong java c th biu din tt c 216 = 65536
k t khc nhau.
Gi tr mc nh cho mt bin kiu char l null.

26

2.2.4.Kiu lun l (boolean)


-

Kiu boolean ch nhn 1 trong 2 gi tr: true hoc false.


Trong java kiu boolean khng th chuyn thnh kiu
nguyn v ngc li.
Gi tr mc nh ca kiu boolean l false.

2.3.Hng:
-

Hng l mt gi tr bt bin trong chng trnh


Tn hng c t theo qui c ging nh tn bin.
Hng s nguyn: trng hp gi tr hng dng long ta
thm vo cui chui s ch l hay L. (v d: 1L)
Hng s thc: trung hp gi tr hng c kiu float ta
thm tip v ng f hay F, cn kiu s double th ta
thm tip v ng d hay D.
Hng Boolean: java c 2 hng boolean l true, false.
Hng k t: l mt k t n nm gia nm gia 2 du
ngoc n.
o V d: a: hng k t a
o Mt s hng k t c bit

K t

ngha
Xa li (BackSpace)
Tab
Xung hng
Du enter
Nhy kp
Nhy n
S ngc
y trang
K t unicode

\b
\t
\n
\r
\
\
\\
\f
\uxxxx

27

Hng chui: l tp hp cc k t c t gia hai du


nhy kp . Mt hng chui khng c k t no l mt
hng chui rng.
o V d: Hello Wolrd
o Lu : Hng chui khng phi l mt kiu d
liu c s nhng vn c khai bo v s dng
trong cc chng trnh.

2.4.Lnh, khi lnh trong java


Ging nh trong ngn ng C, cc cu lnh trong java kt
thc bng mt du chm phy (;).
Mt khi lnh l on chng trnh gm hai lnh tr ln v
c bt u bng du m ngoc nhn ({) v kt thc bng du
ng ngoc nhc (}).
Bn trong mt khi lnh c th cha mt hay nhiu lnh
hoc cha cc khi lnh khc.
{ // khi 1
{ // khi 2
lnh 2.1
lnh 2.2

} // kt thc khi lnh 2


lnh 1.1
lnh 1.2

} // kt thc khi lnh 1


{ // bt u khi lnh 3
// Cc lnh thuc khi lnh 3
//
} // kt thc thi lnh 3

28

2.5.Ton t v biu thc


2.5.1.Ton t s hc
Ton t
+
*
/
%
++
--

ngha
Cng
Tr
Nhn
Chia nguyn
Chia d
Tng 1
Gim 1

2.5.2.Ton t trn bit


Ton t
&
|
^
<<
>>
>>>
~

ngha
AND
OR
XOR
Dch tri
Dch phi
Dch phi v in 0 vo bit trng
B bit

2.5.3.Ton t quan h & logic


Ton t
==
!=
>
<
>=
<=

ngha
So snh bng
So snh khc
So snh ln hn
So snh nh hn
So snh ln hn hay bng
So snh nh hn hay bng
29

||
&&
!

OR (biu thc logic)


AND (biu thc logic)
NOT (biu thc logic)

2.5.4.Ton t p kiu
-

p kiu rng (widening conversion): t kiu nh sang


kiu ln (khng mt mt thng tin)
p kiu hp (narrow conversion): t kiu ln sang kiu
nh (c kh nng mt mt thng tin)
<tn bin> = (kiu_d_liu) <tn_bin>;
V d:
float fNum = 2.2;
int iCount = (int) fNum; // (iCount = 2)

2.5.5.Ton t iu kin
C php: <iu kin> ? <biu thc 1> : < biu thc 2>
Nu iu kin ng th c gi tr, hay thc hin <biu thc 1>,
cn ngc li l <biu thc 2>.
<iu kin>: l mt biu thc logic
<biu thc 1>, <biu thc 2>: c th l hai gi tr, hai biu thc
hoc hai hnh ng.
V d:
int x = 10;
int y = 20;
int Z = (x<y) ? 30 : 40;
// Kt qu z = 30 do biu thc (x < y) l ng.
2.5.6.Th t u tin
Th t u tin tnh t tri qua phi v t trn xung di
Cao nht
30

()
++
*
+
>>

[]
-/
>>> (dch phi v

.
~
%

<<

in 0 vo bit trng)

>
==
&
^
|
&&
||
?:
=
Thp nht

>=
!=

<

<tont>=

2.6.Cu trc iu khin


2.6.1.Cu trc iu kin if else
Dng 1:
if (<iu_kin>)
{
<khi_lnh>;
}
Dng 2:
if (<iu_kin>)
{
<khi _lnh1>;
}
else
{
<khi _lnh2>;
31

<=

}
2.6.2.Cu trc switch case
switch (<bin>)
{
case <gitr_1>:
<khi_lnh_1>;
break;
.
case <gitr_n>:
<khi_lnh_n>;
break;
default:
<khi lnh default>;
}
2.6.3.Cu trc lp
Dng 1: while()
while (iu_kin_lp)
{
khi _lnh;
}
Dng 2: do { } while;
do
{
khi_lnh;
} while (iu_kin);
Dng 3: for ()
for (khi_to_bin_m;k_lp;tng_bin)
{
<khi _lnh>;
32

}
2.6.4.Cu trc lnh nhy (jump)
Lnh break: trong cu trc switch chng ta dng cu lnh
break thot thi cu trc switch trong cng cha n. Tng
t nh vy, trong cu trc lp, cu lnh break dng that
khi cu trc lp trong cng cha n.
Lnh continue: dng tip tc vng lp trong cng cha n
(ngc vi break).
Nhn (label):
Khng ging nh C/C++, Java khng h tr lnh goto nhy
n 1 v tr no ca chng trnh. Java dng kt hp nhn
(label) vi t kha break v continue thay th cho lnh
goto.
V d:
label:
for ()
{
for ()
{
if (<biu thc iu kin>)
break label;
else
continue label;
}
}
Lnh label: xc nh v tr ca nhn v xem nh tn ca vng
lp ngoi. Nu <biu thc iu kin> ng th lnh break label
s thc hin vic nhy ra khi vng lp c nhn l label,
ngc li s tip tc vng lp c nhn label (khc vi break
v continue thng thng ch thot khi hay tip tc vng lp
trong cng cha n.).
2.7.Lp bao kiu d liu c s (Wrapper Class)
Data type

Wrapper Class
33

Ghi ch

boolean
byte
short
char
int
long
Float
double

(java.lang.*)
Boolean
Byte
Short
Character
Integer
Long
Float
Double

- Gi (package): cha
nhm nhiu class.
- Ngoi cc Wrapper
Class, gi java.lang cn
cung cp cc lp nn
tng cho vic thit k
ngn ng java nh:
String, Math,

2.8.Kiu d liu mng


Nh chng ta bit Java c 2 kiu d liu
- Kiu d liu c s (Primitive data type)
- Kiu d liu tham chiu hay dn xut (reference data
type): thng c 3 kiu:
o Kiu mng
o Kiu lp
o Kiu giao tip(interface).
y chng ta s tm hiu mt s vn c bn lin quan n
kiu mng. Kiu lp(class) v giao tip(interface) chng ta s
tm hiu chi tit trong chng 3 v cc chng sau.
2.8.1.Khi nim mng
Mng l tp hp nhiu phn t c cng tn, cng kiu d liu
v mi phn t trong mng c truy xut thng qua ch s ca
n trong mng.
2.8.2.Khai bo mng
hoc

<kiu d liu>
<kiu d liu>[]

<tn mng>[];
<tn mng>;

V d:
hoc

int
int[]

arrInt[];
arrInt;
34

int[]

arrInt1, arrInt2, arrInt3;

2.8.3.Cp pht b nh cho mng


- Khng ging nh trong C, C++ kch thc ca mng c xc
nh khi khai bo. Chng hn nh:
int arrInt[100]; // Khai bo ny trong Java s b bo li.
- cp pht b nh cho mng trong Java ta cn dng t kha
new. (Tt c trong Java u thng qua cc i tng). Chng
hn cp pht vng nh cho mng trong Java ta lm nh sau:
int arrInt = new int[100];
2.8.4.Khi to mng
Chng ta c th khi to gi tr ban u cho cc phn t ca
mng khi n c khai bo.
V d:
int
arrInt[]
= {1, 2, 3};
char arrChar[]
= {a, b, c};
String arrStrng[]
= {ABC, EFG, GHI};
2.8.5.Truy cp mng
Ch s mng trong Java bt u t 0. V vy phn t u tin c
ch s l 0, v phn t th n c ch s l n-1. Cc phn t ca
mng c truy xut thng qua ch s ca n t gia cp du
ngoc vung ([]).
V d:
int arrInt[] = {1, 2, 3};
int x = arrInt[0]; // x s c gi tr l 1.
int y = arrInt[1]; // y s c gi tr l 2.
int z = arrInt[2]; // z s c gi tr l 3.
Lu : Trong nhng ngn ng lp trnh khc (C chng hn),
mt chui c xem nh mt mng cc k t. Trong java th
35

khc, java cung cp mt lp String lm vic vi i tng


d liu chui cng khc thao tc trn i tng d liu ny.
2.9.Mt s v d minh ha:
V d 1: Nhp k t t bn phm
import java.io.*;
/* gi ny cung cp th vin xut nhp h thng thng qua
nhng lung d //liu v h thng file.*/
class InputChar
{
public static void main(String args[])
{
char ch = ;
try
{
ch = (char) System.in.read();
}
catch(Exception e)
{
System.out.println(Nhp li!);
}
System.out.println(Ky tu vua nhap: + ch);
}
}
V d 2: Nhp d liu s
import java.io.*;
class inputNum
{
public static void main(String[] args)
{
int n=0;
try
{
BufferedReader in =
new BufferedReader(
36

new InputStreamReader(
System.in));
String s;
s = in.readLine();
n = Integer.parseInt(s);
}
catch(Exception e)
{
System.out.println(Nhp d liu b
li !);
}
System.out.println(Bn va nhp s: + n);
}
}
V d 3: Nhp v xut gi tr cc phn t ca mt mng cc s
nguyn.
class ArrayDemo
{
public static void main(String args[])
{
int arrInt[] = new int[10];
int i;
for(i = 0; i < 10; i = i+1)
arrInt[i] = i;
for(i = 0; i < 10; i = i+1)
System.out.println("This is arrInt[" + i +
"]: " + arrInt[i]);
}
}

37

V d 4: Tm phn t c gi tr nh nht (Min) v ln nht


(Max) trong mt mng.
class MinMax
{
public static void main(String args[])
{
int nums[] = new int[10];
int min, max;
nums[0] = 99;
nums[1] = -10;
nums[2] = 100123;
nums[3] = 18;
nums[4] = -978;
nums[5] = 5623;
nums[6] = 463;
nums[7] = -9;
nums[8] = 287;
nums[9] = 49;
min = max = nums[0];
for(int i=1; i < 10; i++)
{
if(nums[i] < min) min = nums[i];
if(nums[i] > max) max = nums[i];
}
System.out.println("min and max: " + min + " "
+ max);
}
}
class MinMax2
38

{
public static void main(String args[])
{
int nums[] = { 99, -10, 100123, 18, -978,
5623, 463, -9, 287, 49 };
int min, max;
min = max = nums[0];
for(int i=1; i < 10; i++)
{
if(nums[i] < min) min = nums[i];
if(nums[i] > max) max = nums[i];
}
System.out.println("Min and max: " + min + " "
+ max);
}
}

V d 5: chng trnh minh ha mt li tham chiu n phn t


bn ngoi (vut qu) kch thc mng.
class ArrayErr
{
public static void main(String args[])
{
int sample[] = new int[10];
int i;
for(i = 0; i < 100; i = i+1)
sample[i] = i;
}
}

39

V d 6: Sp xp mng dng phng php sp xp ni bt


(Bubble Sort)
class BubbleSort
{
public static void main(String args[])
{
int nums[] = { 99, -10, 100123, 18, -978,
5623, 463, -9, 287, 49 };
int a, b, t;
int size;
size = 10; // number of elements to sort
// display original array
System.out.print("Original array is:");
for(int i=0; i < size; i++)
System.out.print(" " + nums[i]);
System.out.println();
// This is the Bubble sort.
for(a=1; a < size; a++)
for(b=size-1; b >= a; b--)
{
if(nums[b-1] > nums[b])
{
// if out of order
// exchange elements
t = nums[b-1];
nums[b-1] = nums[b];
nums[b] = t;
}
}
// display sorted array
40

System.out.print("Sorted array is:");


for(int i=0; i < size; i++)
System.out.print(" " + nums[i]);
System.out.println();
}
}

V d 7: Nhp v xut gi tr ca cc phn t trong mt mng


hai chiu.
class TwoD_Arr
{
public static void main(String args[])
{
int t, i;
int table[][] = new int[3][4];
for(t=0; t < 3; ++t)
{
for(i=0; i < 4; ++i)
{
table[t][i] = (t*4)+i+1;
System.out.print(table[t][i] + "
");
}
System.out.println();
}
}
}

41

V d 8: To i tng chui
class StringDemo
{
public static void main(String args[])
{
// Tao chuoi bang nhieu cach khac nhau
String str1 = new String("Chuoi trong java la
nhung Objects.");
String str2 = "Chung duoc xay dung bang nhieu
cach khac nhau.";
String str3 = new String(str2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}

V d 9: Minh ha mt s thao tc c bn trn chui


// Chuong trinh minh hoa cac thao tac tren chuoi ky tu
class StrOps
{
public static void main(String args[])
{
String str1 = "Java la chon lua so mot cho lap
trinh ung dung Web.";
String str2 = new String(str1);
String str3 = "Java ho tro doi tuong String de xu
ly chuoi";
42

int result, idx;


char ch;
System.out.println("str1:" + str1);
System.out.println("str2:" + str2);
System.out.println("str3:" + str3);
System.out.println("Chieu dai cua chuoi str1 la:
" + str1.length());
// Hien thi chuoi str1, moi lan mot ky tu.
System.out.println();
for(int i=0; i < str1.length(); i++)
System.out.print(str1.charAt(i));
System.out.println();
if(str1.equals(str2))
System.out.println("str1 == str2");
else
System.out.println("str1 != str2");
if(str1.equals(str3))
System.out.println("str1 == str3");
else
System.out.println("str1 != str3");
result = str1.compareTo(str3);
if(result == 0)
System.out.println("str1 = str3 ");
else
if(result < 0)
System.out.println("str1 < str3");
else
System.out.println("str1 > str3");
43

// Tao chuoi moi cho str4


String str4 = "Mot Hai Ba Mot";
idx = str4.indexOf("Mot");
System.out.println("str4:" + str4);
System.out.println("Vi tri xuat hien dau tien cua
chuoi con 'Mot' trong str4: " + idx);
idx = str4.lastIndexOf("Mot");
System.out.println("Vi tri xuat hien sau cung cua
chuoi con 'Mot' trong str4:" + idx);
}
}

V d 10: chng trnh nhp vo mt chui v in ra chui


nghch o ca chui nhp.
import java.lang.String;
import java.io.*;
public class InverstString
{
public static void main(String arg[])
{
System.out.println("\n *** CHUONG TRINH IN
CHUOI NGUOC *** ");
try
44

System.out.println("\n *** Nhap


chuoi:");
BufferedReader in = new
BufferedReader(new
InputStreamReader(System.in));
// Class BufferedReader cho php c
text t lung nhp k t, to b m cho
nhng k t h tr cho vic c nhng
k t, nhng mng hay nhng dng.
// Doc 1 dong tu BufferReadered ket thuc
bang dau ket thuc dong.
String str = in.readLine();
System.out.println("\n Chuoi vua nhap
la:" + str);
// Xuat chuoi nghich dao
System.out.println("\n Chuoi nghich dao
la:");
for (int i=str.length()-1; i>=0; i--)
{
System.out.print(str.charAt(i));
}

}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}

V d 11: Ly chui con ca mt chui


class SubStr
{
public static void main(String args[])
{
45

String orgstr = "Mot Hai Ba Bon";


// Lay chuoi con dung ham
// public String substring(int beginIndex, int
// endIndex)
String substr = orgstr.substring(4, 7);
System.out.println("Chuoi goc: " + orgstr);
System.out.println("Chuoi con: " + substr);
}
}

V d 12: Mng cc chui


class StringArray
{
public static void main(String args[])
{
String str[] = {"Mot", "Hai", "Ba", "Bon" };
System.out.print("Mang goc: ");
for(int i=0; i < str.length; i++)
System.out.print(str[i] + " ");
System.out.println("\n");
// Thay doi chuoi
str[0] = "Bon";
str[1] = "Ba";
str[2] = "Hai";
str[3] = "Mot";
System.out.print("Mang thay doi:");
for(int i=0; i < str.length; i++)
System.out.print(str[i] + " ");
46

System.out.print("\n");
}
}

Chng 3: HNG I TNG TRONG JAVA


3.1.M u
Thng qua chuyn lp trnh hng i tng (OOP)
chng ta bit OOP l mt trong nhng tip cn mnh m, v
47

rt hiu qu xy dng nn nhng chng trnh ng dng trn


my tnh. T khi ra i cho n nay lp trnh OOP chng t
c sc mnh, vai tr ca n trong cc n tin hc. Ch
hng
ny s gip bn c tm hiu v cc kiu d liu dn xut l
lp (class) v giao tip (interface), cng nh cc vn c bn
v lp trnh hng i tng trong java thng qua vic to lp
cc lp, cc i tng v cc tnh cht ca chng.
3.2.Lp (Class)
3.2.1.Khi nim
Chng ta c th xem lp nh mt khun mu (template) ca
i tng (Object). Trong bao gm d liu ca i tng
(fields hay properties) v cc phng thc(methods) tc ng
ln thnh phn d liu gi l cc phng thc ca lp.
Cc i tng c xy dng bi cc lp nn c gi l
cc th hin ca lp (class instance).
3.2.2.Khai bo/nh ngha lp
class <ClassName>
{
<kiu d liu> <field_1>;
<kiu d liu> <field_2>;
constructor
method_1
method_2
}
class: l t kha ca java
ClassName: l tn chng ta t cho lp
field_1, field_2: cc thuc tnh, cc bin, hay cc thnh phn d
liu ca lp.
constructor: l s xy dng, khi to i tng lp.
method_1, method_2: l cc phng thc/hm th hin cc thao
tc x l, tc ng ln cc thnh phn d liu ca lp.
48

3.2.3.To i tng ca lp
ClassName objectName = new ClassName();
3.2.4.Thuc tnh ca lp
Vng d liu (fields) hay thuc tnh (properties) ca lp
c khai bo bn trong lp nh sau:
class <ClassName>
{
// khai bo nhng thuc tnh ca lp
<tin t> <kiu d liu> field1;
//
}
xc nh quyn truy xut ca cc i tng khc i vi
vng d liu ca lp ngi ta thng dng 3 tin t sau:
public: c th truy xut t tt c cc i tng khc
private: mt lp khng th truy xut vng private ca 1
lp khc.
protected: vng protected ca 1 lp ch cho php bn
thn lp v nhng lp dn xut t lp truy cp
n.
V d:
public class xemay
{
public
public
private
protected

String
String
float
int

nhasx;
model;
chiphisx;
thoigiansx;

// so luong so cua xe may: 3, 4 so


protected
int
so;
// sobanhxe l bin tnh c gi tr l 2 trong tt c
// cc th hin to ra t lp xemay
49

public static

int

sobanhxe = 2;

}
Thuc tnh nhasx, modelc th c truy cp n t tt
c cc i tng khc.
Thuc tnh chiphisx ch c th truy cp c t cc i
tng c kiu xemay
Thuc tnh thoigiansx, so c th truy cp c t cc i
tng c kiu xemay v cc i tng ca cc lp con dn
xut t lp xemay
Lu : Thng thng an ton cho vng d liu ca cc i
tng ngi ta trnh dng tin t public, m thng chn tin
t private ngn cn quyn truy cp n vng d liu ca mt
lp t cc phng thc bn ngoi lp .
3.2.5.Hm - Phng thc lp (Method)
Hm hay phng thc (method) trong Java l khi lnh
thc hin cc chc nng, cc hnh vi x l ca lp ln vng d
liu.
Khai bo phng thc:
<Tin t> <kiu tr v> <Tn phng thc> (<danh sch i
s>)
{
<khi lnh>;
}
xc nh quyn truy xut ca cc i tng khc i vi
cc phng thc ca lp ngi ta thng dng cc tin t sau:
public: phng thc c th truy cp c t bn ngoi
lp khai bo.
protected: c th truy cp c t lp khai bo v
nhng lp dn xut t n.
private: ch c truy cp bn trong bn thn lp khai
bo.
50

static: phng thc lp dng chung cho tt c cc th


hin ca lp, c ngha l phng thc c th c
thc hin k c khi khng c i tng ca lp cha
phng thc .
final: phng thc c tin t ny khng c khai bo
chng cc lp dn xut.
abstract: phng thc khng cn ci t (khng c
phn source code), s c hin thc trong cc lp dn
xut t lp ny.
synchoronized: dng ngn cc tc ng ca cc i
tng khc ln i tng ang xt trong khi ang ng
b ha. Dng trong lp trnh miltithreads.
<kiu tr v>: c th l kiu void, kiu c s hay mt lp.
<Tn phng thc>: t theo qui c ging tn bin.
<danh sch thng s>: c th rng
Lu :
Thng thng trong mt lp cc phng thc nn c
khai bo dng t kha public, khc vi vng d liu thng l
dng tin t private v mc ch an ton.
Nhng bin nm trong mt phng thc ca lp l cc bin
cc b (local) v nn c khia to sau khi khai bo.
V d:
public class xemay
{
public
public
private
protected

String
String
float
int

nhasx;
model;
chiphisx;
thoigiansx;

// so luong so cua xe may: 3, 4 so


protected
int
so;

51

// l bin tnh c gi tr l 2 trong tt c


// cc th hin to ra t lp xemay
public static int sobanhxe = 2;
public float tinhgiaban()
{
return 1.5 * chiphisx;
}
}
3.2.6.Khi to mt i tng (Constructor)
Contructor tht ra l mt loi phng thc c bit ca lp.
Constructor dng gi t ng khi khi to mt th hin ca lp,
c th dng khi gn nhng gi tr mc nh. Cc
constructor khng c gi tr tr v, v c th c tham s hoc
khng c tham s.
Constructor phi c cng tn vi lp v c gi n dng
t kha new.
Nu mt lp khng c constructor th java s cung cp cho
lp mt constructor mc nh (default constructor). Nhng
thuc tnh, bin ca lp s c khi to bi cc gi tr mc
nh (s: thng l gi tr 0, kiu lun l l gi tr false, kiu i
tng gi tr null, )
Lu : thng thng an ton, d kim sot v lm ch m
ngun chng trnh chng ta nn khai bo mt constructor cho
lp.

V d:
public class xemay
{
//
public xemay()
52

{}
public xemay(String s_nhasx, String s_model,
f_chiphisx, int i_thoigiansx, int i_so);
{
nhasx = s_nhasx;
model = s_model;
chiphisx = f_chiphisx;
thoigiansx = i_thoigiansx;
so = i_so;
// hoc
// this.nhasx = s_nhasx;
// this.model = s_model;
// this.chiphisx = f_chiphisx;
// this.thoigiansx = i_thoigiansx;
// this.so = i_so;
}
}
3.2.7.Bin this
Bin this l mt bin n tn ti trong tt c cc lp trong
ngng ng java. Mt class trong Java lun tn ti mt bin this,
bin this c s dng trong khi chy v tham kho n bn
thn lp cha n.
V d:
<tin t> class A
{
<tin t> int <field_1>;
<tin t> String <field_2>;
// Contructor ca lp A
public A(int par_1, String par_2)
{
53

this.field_1 = par_1;
this.field_2 = par_2;
}
<tin t> <kiu tr v> <method_1>()
{
//
}
<tin t> <kiu tr v> <method_2>()
{
this.method_1()
//
}
}
3.2.8.Khai bo chng phng thc (overloading method)
Vic khai bo trong mt lp nhiu phng thc c cng tn
nhng khc tham s (khc kiu d liu, khc s lng tham s)
gi l khai bo chng phng thc (overloading method).
V d:
public class xemay
{
// khai bo fields
public float tinhgiaban()
{
return 2 * chiphisx;
}
public float tinhgiaban(float huehong)
{
return (2 * chiphisx + huehong);
}
}
3.3.c im hng i tng trong java
H tr nhng nguyn tc c bn ca lp trnh hng i
tng, tt c cc ngn ng lp trnh k c java u c ba c
54

im chung: tnh ng gi (encapsulation), tnh a hnh


(polymorphism), v tnh k tha (inheritance).
3.3.1.ng gi (encapsulation)
C ch ng gi trong lp trnh hng i tng gip cho
cc i tng du i mt phn cc chi tit ci t, cng nh
phn d liu cc b ca n, v ch cng b ra ngoi nhng g
cn cng b trao i vi cc i tng khc. Hay chng ta
c th ni i tng l mt thnh t h tr tnh ng gi.
n v ng gi c bn ca ngn ng java l class. Mt
class nh ngha hnh thc ca mt i tng. Mt class nh r
nhng thnh phn d liu v cc on m ci t cc thao tc
x l trn cc i tng d liu . Java dng class xy
dng nhng i tng. Nhng i tng l nhng th hin
(instances) ca mt class.
Mt lp bao gm thnh phn d liu v thnh phn x l.
Thnh phn d liu ca mt lp thng bao gm cc bin thnh
vin v cc bin th hin ca lp. Thnh phn x l l cc thao
tc trn cc thnh phn d liu, thng trong java ngi gi l
phng thc. Phng thc l mt thut ng hng i tng
trong java, trong C/C++ ngi ta thng dng thut ng l
hm.
3.3.2.Tnh a hnh (polymorphism):
Tnh a hnh cho php ci t cc lp dn xut khc nhau t
mt lp ngun. Mt i tng c th c nhiu kiu khc nhau
gi l tnh a hnh.
V d:
class A_Object
{
//
void method_1()
{
//
55

}
}
class B_Object extends A_Object
{
//
void method_1()
{
//
}
}
class C
{
public static void main(String[] args)
{
// To mt mng 2 phn t kiu A
A_Object arr_Object = new A_Object[2];
B_Object var_1 = new B_Object();
// Phn t u tin ca mng arr_Object[0]
tham // chiu n 1 i tng kiu B_Object dn
xut // t A_Object
arr_Object[0] = var_1;
A_Object var_2;
for (int i=0; i<2; i++)
{
var_2 = arr_Object[i];
var_2.method_1();
}
}
}
Vng lp for trong on chng trnh trn:

56

Vi i = 0 th bin var_2 c kiu


var_2.method_1() s gi thc
method_1 ca lp B_Object.
Vi i = 1 th bin var_2 c kiu
var_2.method_1() s gi thc
method_1 ca lp A_Object.

l B_Object, v lnh
hin phng thc
l A_Object, v lnh
hin phng thc

Trong v d trn i tng var_2 c th nhn kiu A_Object


hay B_Object. Hay ni cc khc, mt bin i tng kiu
A_Object nh var_2 trong v d trn c th tham chiu n bt
k i tng no ca bt k lp con no ca lp A_Object (v
d var_2 c th tham chiu n i tng var_1, var_1 l i
tng ca lp B_Object dn xut t lp A_Object). Ngc li
mt bin ca lp con khng th tham chiu n bt k i
tng no ca lp cha.
3.3.3.Tnh k tha (inheritance)
Mt lp con (subclass) c th k tha tt c nhng vng d
liu v phng thc ca mt lp khc (siu lp - superclass).
Nh vy vic to mt lp mi t mt lp bit sao cho cc
thnh phn (fields v methods) ca lp c cng s thnh cc
thnh phn (fields v methods) ca lp mi. Khi ta gi lp
mi l lp dn xut (derived class) t lp c (superclass). C
th lp c cng l lp c dn xut t mt lp no y, nhng
i vi lp mi va to th lp c l mt lp siu lp trc
tip (immediate supperclass).
Dng t kha extends ch lp dn xut.
class A extends B
{
//
}
3.3.3.1 Khi bo phng thc chng
57

Tnh k tha gip cho cc lp con nhn c cc thuc


tnh/phng thc public v protected ca lp cha. ng thi
cng c th thay th cc phng thc ca lp cha bng cch
khai bo chng. Chng hn phng thc tinhgiaban() p dng
trong lp xega s cho kt qu gp 2.5 ln chi ph sn xut thay
v gp 2 chi ph sn xut ging nh trong lp xemay.
V d:
public class xega extends xemay
{
public xega()
{
}
public xega(String s_nhasx, String s_model, f_chiphisx,
int i_thoigiansx);
{
this.nhasx = s_nhasx;
this.model = s_model;
this.chiphisx = f_chiphisx;
this.thoigiansx = i_thoigiansx;
this.so = 0;
}
public float tinhgiaban()
{
return 2.5 * chiphisx;
}
}
Java cung cp 3 tin t/t kha h tr tnh k tha ca lp:
public: lp c th truy cp t cc gi, chng trnh
khc.
final: Lp hng, lp khng th to dn xut (khng th
c con), hay i khi ngi ta gi l lp v sinh.

58

abstract: Lp tru tng (khng c khai bo cc thnh


phn v cc phng thc trong lp tru tng). Lp dn
xut s khai bo, ci t c th cc thuc tnh, phng
thc ca lp tru tng.

3.3.3.2 Lp ni
Lp ni l lp c khai bo bn trong 1 lp khc. Lp ni
th hin tnh ng gi cao v c th truy xut trc tip bin ca
lp cha.
V d:
public class A
{
//
int <field_1>
static class B
{
//
int <field_2>
public B(int par_1)
{
field_2 = par_1 + field_1;
}
}
}
Trong v d trn th chng trnh dch s to ra hai lp vi hai
files khc nhau: A.class v B.class
3.3.3.3 Lp v sinh
Lp khng th c lp dn xut t n (khng c lp con) gi
l lp v sinh, hay ni cch khc khng th k tha c t
mt lp v sinh. Lp v sinh dng hn ch, ngn nga
cc lp khc dn xut t n.

59

khai bo mt lp l lp v sinh, chng ta dng t kha


final class.
Tt c cc phng thc ca lp v sinh u v sinh, nhng
cc thuc tnh ca lp v sinh th c th khng v sinh.
V d:
public final class A
{
public final int x;
private int y;
public final void method_1()
{
//
}
public final void method_2()
{
//
}
}
3.3.3.4 Lp tru tng
Lp tru tng l lp khng c khai bo cc thuc tnh
thnh phn v cc phng thc. Cc lp dn xut ca n s
khai bo thuc tnh, ci t c th cc phng thc ca lp tru
tng.
V d:
abstract class A
{
abstract void method_1();
60

}
public class B extends A
{
public void method_1()
{
// ci t chi tit cho phng thc method_1
// trong lp con B.
//
}
}
public class C extends A
{
public void method_1()
{
// ci t chi tit cho phng thc method_1
// trong lp con C.
//
}
}
Lu : Cc phng thc c khai bo dng cc tin t
private v static th khng c khai bo l tru tng
abstract. Tin t private th khng th truy xut t cc lp dn
xut, cn tin t static th ch dng ring cho lp khai bo m
thi.
3.3.3.5 Phng thc finalize()
Trong java khng c kiu d liu con tr nh trong C,
ngi lp trnh khng cn phi qu bn tm v vic cp pht v
gii phng vng nh, s c mt trnh dn dp h thng m
trch vic ny. Trnh dn dp h thng s dn dp vng nh cp
pht cho cc i tng trc khi hy mt i tng.
Phng thc finalize() l mt phng thc c bit c ci
t sn cho cc lp. Trnh dn dp h thng s gi phng thc
ny trc khi hy mt i tng. V vy vic ci t mt s
61

thao tc gii phng, dn dp vng nh cp pht cho cc i


tng d liu trong phng thc finalize() s gip cho ngi
lp trnh ch ng kim sot tt qu trnh hy i tng thay v
giao cho trnh dn dp h thng t ng. ng thi vic ci t
trong phng thc finalize() s gip cho b nh c gii
phng tt hn, gp phn ci tin tc chng trnh.
V d:
class A
{
// Khai bo cc thuc tnh
public void method_1()
{
//
}
protected void finalize()
{
// C th dng ng tt c cc kt ni
// vo c s d liu trc khi hy i tng.
//
}
}
3.4.Gi (packages)
Vic ng gi cc lp li to thnh mt th vin dng
chung gi l package.
Mt package c th cha mt hay nhiu lp bn trong, ng
thi cng c th cha mt package khc bn trong.

62

khai bo mt lp thuc mt gi no y ta phi dng t


kha package.
Dng khai bo gi phi l dng u tin trong tp tin khai
bo lp.
Cc tp tin khai bo lp trong cng mt gi phi c lu
trong cng mt th mc.
Lu : Vic khai bo import tt c cc lp trong gi s lm tn
b nh. Thng thng chng ta ch nn import nhng lp cn
dng trong chng trnh.
V d:
package phuongtiengiaothong;
class xemay
{
// .
}
class xega extends xemay
{
//
}
Khi mun s dng lp xemay vo chng trnh ta s khai
bo nh sau:
import phuongtiengiaothong.xemay;
3.5.Giao din (interface)
3.5.1.Khi nim interface:
Nh chng ta bit mt lp trong java ch c mt siu lp
trc tip hay mt cha duy nht (n tha k). trnh i tnh
phc tp ca a tha k (multi-inheritance) trong lp trnh
hng i tng, Java thay th bng giao tip (interface). Mt
lp c th c nhiu giao tip (interface) vi cc lp khc

63

tha hng thm vng d liu v phng thc ca cc giao tip


ny.
3.5.2.Khai bo interface:
Interface c khai bo nh mt lp. Nhng cc thuc tnh
ca interface l cc hng (khai bo dng t kha final) v cc
phng thc ca giao tip l tru tng (mc d khng c t
kha abstract).
Trong cc lp c ci t cc interface ta phi tin hnh ci
t c th cc phng thc ny.
V d:
public interface sanpham
{
static final String nhasx = Honda VN;
static final String dienthoai = 08-8123456;
public int
gia(String s_model);
}
// khai bo 1 lp c ci t interface
public class xemay implements sanpham
{
// ci t li phng thc ca giao din trong lp
public int
gia(String s_model)
{
if (s_model.equals(2005))
return (2000);
else
return (1500);
}
public String chobietnhasx()
{
return (nhasx);
}
}
64

C mt vn khc vi lp l mt giao din (interface)


khng ch c mt giao din cha trc tip m c th dn xut
cng lc nhiu giao din khc (hay c nhiu giao din cha). Khi
n s k tha tt c cc gi tr hng v cc phng thc ca
cc giao din cha. Cc giao din cha c lit k thnh chui v
cch nhau bi du phy ,. Khai bo nh sau:
public interface InterfaceName extends interface1, interface2,
interface3
{
//
}
3.5.3.V d minh ha
V d 1: Minh ha tnh a hnh (polymorphism) trong phn cp
k tha thng qua vic m t v x l mt s thao tc c bn
trn cc i tng hnh hc.
// nh ngha lp tru tng c s tn Shape trong
// tp tin Shape.java
public abstract class Shape extends Object
{
// tr v din tch ca mt i tng hnh hc shape
public double area()
{
return 0.0;
}
// tr v th tch ca mt i tng hnh hc shape
public double volume()
{
return 0.0;
}
65

// Phng thc tru tng cn phi c hin thc


// trong nhng lp con tr v tn i tng
// hnh hc shape thch hp
public abstract String getName();
} // end class Shape
// nh ngha lp Point trong tp tin Point.java
public class Point extends Shape
{
protected int x, y; // Ta x, y ca 1 im
// constructor khng tham s.
public Point()
{
setPoint( 0, 0 );
}
// constructor c tham s.
public Point(int xCoordinate, int yCoordinate)
{
setPoint( xCoordinate, yCoordinate );
}
// gn ta x, y cho 1 im
public void setPoint( int xCoordinate, int yCoordinate )
{
x = xCoordinate;
y = yCoordinate;
}
// ly ta x ca 1 im
public int getX()
{
return x;
}
66

// ly ta y ca 1 im
public int getY()
{
return y;
}
// Th hin ta ca 1 im di dng chui
public String toString()
{
return "[" + x + ", " + y + "]";
}
// tr v tn ca i tng shape
public String getName()
{
return "Point";
}
} // end class Point
nh ngha mt lp cha Shape l mt lp tru tng dn
xut t Object v c 3 phng thc khai bo dng tin t
public. Phng thc getName() khai bo tru tng v vy n
phi c hin thc trong cc lp con. Phng thc area()
(tnh din tch) v phng thc volume() (tnh th tch) c
nh ngha v tr v 0.0. Nhng phng thc ny s c khai
bo chng trong cc lp con thc hin chc nng tnh din
tch cng nh th tch ph hp vi nhng i tng hnh hc
tng ng (ng trn, hnh tr, )
Lp Point: dn xut t lp Shape. Mt im th c din
tch v th tch l 0.0, v vy nhng phng thc area() v
volume() ca lp cha khng cn khai bo chng trong lp
Point, chng c tha k nh nh ngha trong lp tru
tng Shape. Nhng phng thc khc nh setPoint()
67

gn ta x, y cho mt im, cn phng thc getX(), getY()


tr v ta x, y ca mt im. Phng thc getName() l hin
thc cho phng thc tru tng trong lp cha, nu nh
phng thc getName() m khng c nh ngha th lp
Point l mt lp tru tng.
// nh ngha lp Circle trong tp tin Circle.java
public class Circle extends Point
{
// Dn xut t lpPoint
protected double radius;
// constructor khng tham s
public Circle()
{
// ngm gi n constructor ca lp cha
setRadius( 0 );
}
// constructor c tham s
public Circle( double circleRadius, int xCoordinate,
int yCoordinate )
{
// gi constructorca lp cha
super( xCoordinate, yCoordinate );
setRadius( circleRadius );
}
// Gn bn knh ca ng trn
public void setRadius( double circleRadius )
{
radius = ( circleRadius >= 0 ? circleRadius:0 );
}
// Ly bn knh ca ng trn
68

public double getRadius()


{
return radius;
}
// Tnh din tch ng trn Circle
public double area()
{
return Math.PI * radius * radius;
}
// Biu din ng trn bng mt chui
public String toString()
{
return "Center = " + super.toString() +
"; Radius = " + radius;
}
// tr v tn ca shape
public String getName()
{
return "Circle";
}
} // end class Circle
Lp Circle dn xut t lp Point, mt ng trn c th
tch l 0.0, v vy phng thc volume() ca lp cha khng
khai bo chng, n s tha k t lp Point, m lp Point th
tha k t lp Shape. Din tch ng trn khc vi mt im,
v vy phng thc tnh din tch area() c khai bo chng.
Phng thc getName() hin thc phng thc tru tng
khai bo trong lp cha, nu phng thc getName() khng khai
bo trong lp Circle th n s k tha t lp Point. Phng
thc setRadius dng gn mt bn knh (radius) mi cho mt

69

i tng ng trn, cn phng thc getRadius tr v bn


knh ca mt i tng ng trn.
// nh ngha lp hnh tr Cylinder
// trong tp tin Cylinder.java.
public class Cylinder extends Circle
{
// chiu cao ca Cylinder
protected double height;
// constructor khng c tham s
public Cylinder()
{
// ngm gi n constructor ca lp cha
setHeight( 0 );
}
// constructor c tham s
public Cylinder( double cylinderHeight,
double cylinderRadius, int xCoordinate,
int yCoordinate )
{
// Gi constructor ca lp cha
super( cylinderRadius, xCoordinate,
yCoordinate );
setHeight( cylinderHeight );
}
// Gn chiu cao cho Cylinder
public void setHeight( double cylinderHeight )
{
height = ( cylinderHeight >= 0 ? cylinderHeight
:0 );
}
70

// Ly chiu cao ca Cylinder


public double getHeight()
{
return height;
}
// Tnh din tch xung quanh ca Cylinder
public double area()
{
return 2 * super.area() + 2 * Math.PI * radius *
height;
}
// Tnh th tch ca Cylinder
public double volume()
{
return super.area() * height;
}
// Biu din Cylinder bng mt chui
public String toString()
{
return super.toString() + "; Height = " + height;
}
// tr v tn ca shape
public String getName()
{
return "Cylinder";
}
} // end class Cylinder

71

Lp Cylinder dn xut t lp Circle. Mt Cylinder (hnh


tr) c din tch v th tch khc vi mt Circle (hnh trn), v
vy c hai phng thc area() v volume() cn phi khai bo
chng. Phng thc getName() l hin thc phng thc tru
tng trong lp cha, nu phng thc getName() khng khai
bo trong lp Cylinder th n s k tha t lp Circle. Phng
thc setHeight dng gn chiu cao mi cho mt i tng
hnh tr, cn phng thc getHeight tr v chiu cao ca mt
i tng hnh tr.
// Test.java
// Kim tra tnh k tha ca Point, Circle, Cylinder vi
// lp tru tng Shape.
// Khai bo th vin
import java.text.DecimalFormat;
public class Test
{
// Kim tra tnh k tha ca cc i tng hnh hc
public static void main( String args[] )
{
// To ra cc i tng hnhhc
Point point = new Point( 7, 11 );
Circle circle = new Circle( 3.5, 22, 8 );
Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 );
// To mt mng cc i tng hnh hc
Shape arrayOfShapes[] = new Shape[ 3 ];
// arrayOfShapes[ 0 ] l mt i tng Point
arrayOfShapes[ 0 ] = point;
// arrayOfShapes[ 1 ] l mt i tng Circle
arrayOfShapes[ 1 ] = circle;
// arrayOfShapes[ 2 ] l mt i tng cylinder
arrayOfShapes[ 2 ] = cylinder;
// Ly tn v biu din ca mi i tng hnh hc
72

String output =
point.getName() + ": " + point.toString() + "\n" +
circle.getName() + ": " + circle.toString() + "\n" +
cylinder.getName() + ": " + cylinder.toString();
DecimalFormat precision2 = new DecimalFormat(
"0.00" );
// duyt mng arrayOfShapes ly tn, din tch, th tch
// ca mi i tng hnh hc trong mng.
for ( int i = 0; i < arrayOfShapes.length; i++ )
{
output += "\n\n" + arrayOfShapes[ i ].getName() +
": " + arrayOfShapes[ i].toString() +
"\n Area = " +
precision2.format( arrayOfShapes[ i ].area() ) +
"\nVolume = " +
precision2.format( arrayOfShapes[ i ].volume() );
}
System.out.println(output);
System.exit( 0 );
}
} // end class Test
Kt qu thc thi chng trnh:

73

V d 2: Tng t v d 1 nhng trong v d 2 chng ta dng


interface nh ngha cho Shape thay v mt lp tru tng.
V vy tt c cc phng thc trong interface Shape phi c
hin thc trong lp Point l lp ci t trc tip interface
Shape.
// nh ngha mt interface Shape trong tp tin shape.java
public interface Shape
{
// Tnh din tch
public abstract double area();
// Tnh th tch
public abstract double volume();
// tr v tn ca shape
public abstract String getName();
}
Lp Point ci t/hin thc interface tn shape.
// nh ngha lp Point trong tp tin Point.java
public class Point extends Object implements Shape
{
protected int x, y; // Ta x, y ca 1 im
// constructor khng tham s.
public Point()
{
setPoint( 0, 0 );
}
// constructor c tham s.
public Point(int xCoordinate, int yCoordinate)
{
setPoint( xCoordinate, yCoordinate );
74

}
// gn ta x, y cho 1 im
public void setPoint( int xCoordinate, int yCoordinate )
{
x = xCoordinate;
y = yCoordinate;
}
// ly ta x ca 1 im
public int getX()
{
return x;
}
// ly ta y ca 1 im
public int getY()
{
return y;
}
// Th hin ta ca 1 im di dng chui
public String toString()
{
return "[" + x + ", " + y + "]";
}
// Tnh din tch
public double area()
{
return 0.0;
}
// Tnh th tch
public double volume()
75

{
return 0.0;
}
// tr v tn ca i tng shape
public String getName()
{
return "Point";
}
} // end class Point
Lp Circle l lp con ca lp Point, v ci t/hin thc gin
tip interface tn shape.
// nh ngha lp Circle trong tp tin Circle.java
public class Circle extends Point
{
// Dn xut t lpPoint
protected double radius;
// constructor khng tham s
public Circle()
{
// ngm gi n constructor ca lp cha
setRadius( 0 );
}
// constructor c tham s
public Circle( double circleRadius, int xCoordinate,
int yCoordinate )
{
// gi constructorca lp cha
super( xCoordinate, yCoordinate );
setRadius( circleRadius );
}
76

// Gn bn knh ca ng trn
public void setRadius( double circleRadius )
{
radius = ( circleRadius >= 0 ? circleRadius:0 );
}
// Ly bn knh ca ng trn
public double getRadius()
{
return radius;
}
// Tnh din tch ng trn Circle
public double area()
{
return Math.PI * radius * radius;
}
// Biu din ng trn bng mt chui
public String toString()
{
return "Center = " + super.toString() +
"; Radius = " + radius;
}
// tr v tn ca shape
public String getName()
{
return "Circle";
}
} // end class Circle
// nh ngha lp hnh tr Cylinder
// trong tp tin Cylinder.java.
77

public class Cylinder extends Circle


{
// chiu cao ca Cylinder
protected double height;
// constructor khng c tham s
public Cylinder()
{
// ngm gi n constructor ca lp cha
setHeight( 0 );
}
// constructor c tham s
public Cylinder( double cylinderHeight,
double cylinderRadius, int xCoordinate,
int yCoordinate )
{
// Gi constructor ca lp cha
super( cylinderRadius, xCoordinate,
yCoordinate );
setHeight( cylinderHeight );
}
// Gn chiu cao cho Cylinder
public void setHeight( double cylinderHeight )
{
height = ( cylinderHeight >= 0 ? cylinderHeight
:0 );
}
// Ly chiu cao ca Cylinder
public double getHeight()
{
return height;
78

}
// Tnh din tch xung quanh ca Cylinder
public double area()
{
return 2 * super.area() + 2 * Math.PI * radius *
height;
}
// Tnh th tch ca Cylinder
public double volume()
{
return super.area() * height;
}
// Biu din Cylinder bng mt chui
public String toString()
{
return super.toString() + "; Height = " + height;
}
// tr v tn ca shape
public String getName()
{
return "Cylinder";
}
} // end class Cylinder
// Test.java
// Kim tra tnh k tha ca Point, Circle, Cylinder vi
// interface Shape.
// Khai bo th vin
import java.text.DecimalFormat;
79

public class Test


{
// Kim tra tnh k tha ca cc i tng hnh hc
public static void main( String args[] )
{
// To ra cc i tng hnhhc
Point point = new Point( 7, 11 );
Circle circle = new Circle( 3.5, 22, 8 );
Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 );
// To mt mng cc i tng hnh hc
Shape arrayOfShapes[] = new Shape[ 3 ];
// arrayOfShapes[ 0 ] l mt i tng Point
arrayOfShapes[ 0 ] = point;
// arrayOfShapes[ 1 ] l mt i tng Circle
arrayOfShapes[ 1 ] = circle;
// arrayOfShapes[ 2 ] l mt i tng cylinder
arrayOfShapes[ 2 ] = cylinder;
// Ly tn v biu din ca mi i tng hnh hc
String output =
point.getName() + ": " + point.toString() + "\n" +
circle.getName() + ": " + circle.toString() + "\n" +
cylinder.getName() + ": " + cylinder.toString();
DecimalFormat precision2 = new DecimalFormat(
"0.00" );
// duyt mng arrayOfShapes ly tn, din tch, th tch
// ca mi i tng hnh hc trong mng.
for ( int i = 0; i < arrayOfShapes.length; i++ )
{
output += "\n\n" + arrayOfShapes[ i ].getName() +
": " + arrayOfShapes[ i].toString() +
80

"\n Area = " +


precision2.format( arrayOfShapes[ i ].area() ) +
"\nVolume = " +
precision2.format( arrayOfShapes[ i ].volume() );
}
System.out.println(output);
System.exit( 0 );
}
} // end class Test
Kt qu thc thi chng trnh:

81

Chng 4: THIT K GIAO DIN NGI


DNG
4.1.M u
Chng ny cung cp cho sinh vin nhng kin thc c bn
xy dng giao din (Graphic User Interface - GUI) ca
chng trnh ng dng bng ngn ng java:
-

Nhng nguyn tc thit k giao din.

Nhng th vin, gi xy dng giao din: gm nhng lp


(class), nhng giao tip (interface) qun l s kin v
nhng thnh phn (components) xy dng nn giao din
ngi dng.

B qun l trnh by (layout managers)

X l s kin

Trong khun kh gio trnh lp trnh java cn bn ny


chng ti trnh by vic thit k GUI dng th vin awt
(abstract windows toolkit). Vic thit kt GUI s trc quan,
uyn chuyn hn khi chng ta s dng th vin JFC (Java
Foundation Class) s gii c gii thiu trong chuyn java
nng cao.

82

4.2.Gii thiu th vin awt


Th vin awt l b th vin dng xy dng giao din
ngi dng cho mt chng trnh ng dng c y cc thnh
phn c bn nh: Label, Button, Checkbox, Radiobutton,
Choice, List, Text Field, Text Area, Scrollbar, Menu, Frame
Ging nh cc API ca Windows, java cung cp cho ngi
lp trnh th vin awt. Nhng khc vi cc hm API, th vin
awt khng ph thuc h iu hnh. Th vin awt l nn tng, c
s gip cho chng ta tip cn vi th vin m rng JFC hiu
qu hn.
Cu trc cy phn cp ca tt c nhng lp trong th vin awt
chng ta c th xem chi tit trong ti liu km theo b cng c
j2se (phn API Specification)

4.3.Cc khi nim c bn


4.3.1.Component
Component l mt i tng c biu din ha c hin
th trn mn hnh m ngi dng c th tng tc c. Chng
83

hn nh nhng nt nhn (button), nhng checkbox, nhng


scrollbar, Lp Component l mt lp tru tng.
java.lang.Object

java.awt.Component
4.3.2.Container
Container l i tng vt cha hay nhng i tng c kh
nng qun l v nhm cc i tng khc li. Nhng i tng
con thuc thnh phn awt nh: button, checkbox, radio button,
scrollbar, list, ch s dng c khi ta a n vo khung
cha (container).
Mt s i tng container trong Java:

Panel: i tng khung cha n gin nht, dng


nhm cc i tng, thnh phn con li. Mt Panel c
th cha bn trong mt Panel khc.
java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--java.awt.Panel

Frame: khung cha Frame l mt ca s window hn


hoi mc trn cng bao gm mt tiu u v mt
ng bin (border) nh cc ng dng windows thng
thng khc. Khung cha Frame thng c s dng
to ra ca s chnh ca cc ng dng.
java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--java.awt.Window
+--java.awt.Frame

Dialogs: y l mt ca s dng hp hi thoi (ca s


dng ny cn c gi l pop-up window), ca s dng
ny thng c dng a ra thng bo, hay dng
ly d liu nhp t ngoi vo thng qua cc i tng,
thnh phn trn dialog nh TextField chng hn. Dialog

84

cng l mt ca s nhng khng y chc nng nh


i tng khung cha Frame.
java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--java.awt.Window
+--java.awt.Dialog

ScrollPanes: l mt khung cha tng t khung cha


Panel, nhng c thm 2 thanh trt gip ta t chc v
xem c cc i tng ln chon nhiu ch trn mn
hnh nh nhng hnh nh hay vn bn nhiu dng.
java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--java.awt.ScrollPane

4.3.3.Layout Manager
Khung cha container nhn cc i tng t bn ngoi a
vo v n phi bit lm th no t chc sp xp ch cho
cc i tng . Mi i tng khung cha u c mt b
qun l chu trch nhim thc hin cng vic y l b qun
l trnh by (Layout Manager). Cc b qun l trnh by m th
vin AWT cung cp cho ta bao gm:

FlowLayout: Sp xp cc i tng t tri qua phi v


t trn xung di. Cc i tng u gi nguyn kch
thc ca mnh.

BorderLayout: Cc i tng c t theo cc ng


vin ca khung cha theo cc cnh West, East, South,
North v Center tc ng, Ty, Nam, Bc v Trung
tm hay Tri, Phi, Trn, Di v Gia ty theo cch
nhn ca chng ta.

GridLayout: To mt khung li v hnh vi cc


bng nhau. Cc i tng s t va kch thc vi

85

tng . Th t sp xp cng t tri qua phi v t


trn xung di.

GridBagLayout: Tng t nh GridLayout, cc i


tng khung cha cng c a vo mt li v hnh.
Tuy nhin kch thc cc i tng khng nht thit
phi va vi 1 m c th l 2, 3 hay nhiu hn ty
theo cc rng buc m ta ch nh thng qua i tng
GridBagConstraint.

Null Layout: Cch trnh by t do. i vi cch trnh


by ny ngi lp trnh phi t ng lm tt c t vic
nh kch thc ca cc i tng, cng nh xc nh v
tr ca n trn mn hnh. Ta khng ph thuc vo nhng
rng buc ng, ty , nam, bc g c.

4.4.Thit k GUI cho chng trnh


4.4.1.To khung cha ca s chng trnh
Thng thng to ca s chnh cho chng trnh ng
dng ta tin hnh cc bc:
- To i tng Frame
- Xc nh kch thc ca Frame
- Th hin Frame trn mn hnh
V d:
import java.awt.*;
class FrameDemo
{
public static void main(String args[])
{
// To i tng khung chaFrame
Frame fr = new Frame("My First Window") ;
// Xc nh kch thc, v tr ca Frame
fr.setBounds(0, 0, 640, 480);
// Hin th Frame
86

fr.setVisible(true);
}
}
Kt qu thc thi chng trnh:

4.4.2.To h thng thc n


i vi th vin awt, xy dng h thng thc n cho
chng trnh ng dng chng ta c th dng cc lp MenuBar,
Menu, MenuItem, MenuShortcut.
MenuBar

MenuItem
Menu

V d: To h thng thc n cho chng trnh Calculator


import java.awt.*;
import java.awt.event.*;
class Calculator
{
public static void main(String[] args)
{
87

createMenu();
}
private static void createMenu()
{
// Tao Frame ung dung
final Frame fr = new Frame();
fr.setLayout(new BorderLayout());
// Tao cac menu bar
MenuBar menu = new MenuBar();
Menu menuFile = new Menu("Edit");
MenuItem copyItem = new MenuItem("Copy Ctrl+C");
MenuItem pasteItem = new MenuItem("Paste Ctrl+V");
menuFile.add(copyItem);
menuFile.add(pasteItem);
Menu menuHelp = new Menu("Help");
MenuItem hTopicItem = new MenuItem("Help Topics");
MenuItem hAboutItem = new MenuItem("About
Calculator");
menuHelp.add(hTopicItem);
menuHelp.addSeparator();
menuHelp.add(hAboutItem);
menu.add(menuFile);
menu.add(menuHelp);
fr.setMenuBar(menu);
fr.setBounds(100, 100, 300, 200);
fr.setTitle("Calculator");
//fr.setResizable(false);
fr.setVisible(true);
// x l bin s kin ng ca s ng dng.
fr.addWindowListener(
88

new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
Kt qu thc thi chng trnh:

4.4.3.Gn Component vo khung cha


gn mt thnh phn, mt i tng component vo mt
ca s (khung cha) chng ta dng phng thc add ca i
tng khung cha container.
V d:
import java.awt.*;
class AddDemo
{
public static void main(String args[])
{
// To i tng khung chaFrame
Frame fr = new Frame("AddDemo App");
// To i tng Component
89

Button buttOk = new Button(OK);


// Gn i tng nt nhn vo khung cha
fr.add(buttOk);
// Xc nh kch thc, v tr ca Frame
fr.setSize(100, 100);
// Hin th Frame
fr.setVisible(true);
}
}
Kt qu thc thi chng trnh:

4.4.4.Trnh by cc Component trong khung cha


Nh chng ta bit khung cha container nhn cc i
tng t bn ngoi a vo v n phi bit lm th no t
chc sp xp ch cho cc i tng . Mi i tng
khung cha u c mt b qun l chu trch nhim thc hin
cng vic y l b qun l trnh by (Layout Manager).
Chng ta s tm hiu chi tit v cc kiu trnh by ca th vin
AWT.
Interface LayoutManager nh ngha giao tip cho nhng
lp bit c lm th no trnh by nhng trong nhng
containers
4.4.4.1 FlowLayout
public class FlowLayout extends Object
90

implements LayoutManager, Serializable


i vi mt container trnh by theo kiu FlowLayout th:
Cc component gn vo c sp xp theo th t t tri
sang phi v t trn xung di.
Cc component c kch thc nh mong mun.
Nu chiu rng ca Container khng ch cho cc
component th chng t ng to ra mt dng mi.
FlowLayout thng c dng sp xp cc button
trong 1 panel.
Chng ta c th iu chnh khong cch gia cc
component.
V d:
import java.awt.*;
import java.lang.Integer;
class FlowLayoutDemo
{
public static void main(String args[])
{
Frame fr = new Frame("FlowLayout Demo");
fr.setLayout(new FlowLayout());
fr.add(new Button("Red"));
fr.add(new Button("Green"));
fr.add(new Button("Blue"));
List li = new List();
for (int i=0; i<5; i++)
{
li.add(Integer.toString(i));
}
fr.add(li);
fr.add(new Checkbox("Pick me", true));
fr.add(new Label("Enter your name:"));
91

fr.add(new TextField(20));
// phng thc pack() c gi s lm cho ca s
// hin hnh s c kch thc va vi kch thc
// trnh by b tr nhng thnh phn con ca n.
fr.pack();
fr.setVisible(true);
}
}
Kt qu thc thi chng trnh:

4.4.4.2 BorderLayout
public class BorderLayout extends Object
implements LayoutManager2, Serializable
i vi mt container trnh by theo kiu BorderLayout th:
B trnh by khung cha c chia lm 4 vng:
NORTH, SOUTH, WEST, EAST v CENTER. (ng,
Ty, Nam, Bc v trung tm). B trnh by loi ny cho
php sp xp v thay i kch thc ca nhng
components cha trong n sao cho va vi 5 vng
NG, TY, NAM, BC, TRUNG TM.
Khng cn phi gn component vo cho tt c cc vng.
Cc component vng NORTH v SOUTH c chiu
cao ty nhng c chiu rng ng bng chiu rng
vng cha.
Cc component vng EAST v WEST c chiu rng
ty nhng c chiu cao ng bng chiu cao vng
cha.
Cc component vng CENTER c chiu cao v chiu
rng ph thuc vo cc vng xung quanh.
92

V d:
import java.awt.*;
class BorderLayoutDemo extends Frame
{
private Button north, south, east, west, center;
public BorderLayoutDemo(String sTitle)
{
super(sTitle);
north = new Button("North");
south = new Button("South");
east = new Button("East");
west = new Button("West");
center = new Button("Center");
this.add(north, BorderLayout.NORTH);
this.add(south, BorderLayout.SOUTH);
this.add(east, BorderLayout.EAST);
this.add(west, BorderLayout.WEST);
this.add(center, BorderLayout.CENTER);
}
public static void main(String args[])
{
Frame fr = new BorderLayoutDemo ("BorderLayout
Demo");
fr.pack();
fr.setVisible(true);
}
}
Kt qu thc thi chng trnh:

93

4.4.4.3 GridLayout
public class GridLayout extends Object
implements LayoutManager
i vi mt container trnh by theo kiu GridLayout th:
B trnh by to mt khung li v hnh vi cc bng
nhau.
Cc i tng s t va kch thc vi tng . Th
t sp xp t tri qua phi v t trn xung di.
V d:
import java.awt.*;
public class GridLayoutDemo
{
public static void main(String arg[])
{
Frame f = new Frame("GridLayout Demo");
f.setLayout(new GridLayout(3,2));
f.add(new Button("Red"));
f.add(new Button("Green"));
f.add(new Button("Blue"));
f.add(new Checkbox("Pick me", true));
f.add(new Label("Enter name here:"));
94

f.add(new TextField());
f.pack();
f.setVisible(true);
}
}
Kt qu thc thi chng trnh:

4.4.4.4 GridBagLayout
public class GridBagLayout extends Object
implements LayoutManager2
(public interface LayoutManager2 extends
LayoutManager)
i vi mt container trnh by theo kiu GridBagLayout th:
Cc componets khi c a vo khung cha s c
trnh by trn 1 khung li v hnh tng t nh
GridLayout. Tuy nhin khc vi GridLayout kch thc
cc i tng khng nht thit phi va vi 1 trn
khung li m c th l 2, 3 hay nhiu hn ty theo
cc rng buc m ta ch nh thng qua i tng
GridBagConstraints.
Lp GridBagConstraints dn xut t lp Object. Lp
GridBagConstraints dng ch nh rng buc cho
nhng components trnh by trong khung cha container
theo kiu GridBagLayout.
o gridx, gridy: v tr ca khung li v hnh m
ta s a i tng con vo
95

o gridwidth, gridheight: kch thc hay vng


trnh by cho i tng con.
o Insets: l mt bin i tng thuc lp Inset
dng qui nh khong cch bin phn cch
theo 4 chiu (trn, di, tri, phi).
o weightx, weighty: ch nh khong cch ln ra
tng i ca cc i tng con vi nhau
V d:
import java.awt.*;
public class GridBagLayoutDemo
{
public static void main(String arg[])
{
Frame f = new Frame("GridBagLayout Demo");
// Thiet lap layout manager
// Tao doi tuong rang buoc cho cach trinh bay
// GridBagLayout.
GridBagLayout layout = new GridBagLayout();
GridBagConstraints constraints = new
GridBagConstraints();
f.setLayout(layout);
// Tao ra 9 nut nhan
String[] buttName = {"Mot", "Hai", "Ba", "Bon",
"Nam", "Sau", "Bay", "Tam", "Chin"};
Button[] buttons = new Button[9];
for(int i=0;i<9;i++)
{
buttons[i] = new Button (buttName[i]);
}
// Rang buoc cac nut nhan cach nhau 2 pixel
96

constraints.insets = new Insets(2,2,2,2);


// Qui dinh cac nut nhan se thay doi kich thuoc
// theo ca 2 chieu
constraints.fill = GridBagConstraints.BOTH;
// Rang buoc cho nut nhan thu 1
constraints.gridx = 1;
constraints.gridy = 1;
constraints.gridheight = 2;
constraints.gridwidth = 1;
layout.setConstraints(buttons[0], constraints);
// Rang buoc cho nut nhan thu 2
constraints.gridx = 2;
constraints.gridy = 1;
constraints.gridheight = 1;
constraints.gridwidth = 2;
layout.setConstraints(buttons[1], constraints);
// Rang buoc cho nut nhan thu 3
constraints.gridx = 2;
constraints.gridy = 2;
constraints.gridheight = 1;
constraints.gridwidth = 1;
layout.setConstraints(buttons[2], constraints);
// Rang buoc cho nut nhan thu 4
constraints.gridx = 1;
constraints.gridy = 3;
constraints.gridheight = 1;
constraints.gridwidth = 2;
layout.setConstraints(buttons[3], constraints);
// Rang buoc cho nut nhan thu 5
97

constraints.gridx = 3;
constraints.gridy = 2;
constraints.gridheight = 2;
constraints.gridwidth = 1;
layout.setConstraints(buttons[4], constraints);
// Rang buoc cho nut nhan thu 6
constraints.gridx = 4;
constraints.gridy = 1;
constraints.gridheight = 3;
constraints.gridwidth = 1;
layout.setConstraints(buttons[5], constraints);
// Tu nut thu 7 tro di khong can rang buoc
// thay vi doi kich thuoc
constraints.fill = GridBagConstraints.NONE;
// Rang buoc cho nut nhan thu 7
constraints.gridx = 1;
constraints.gridy = 4;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.weightx = 1.0;
layout.setConstraints(buttons[6], constraints);
// Rang buoc cho nut nhan thu 8
constraints.gridx = 2;
constraints.gridy = 5;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.weightx = 2.0;
layout.setConstraints(buttons[7], constraints);
// Rang buoc cho nut nhan thu 9
constraints.gridx = 3;
98

constraints.gridy = 6;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.weightx = 3.0;
layout.setConstraints(buttons[8], constraints);
// Dua cac nut nhan khung chua chuong trinh
for (int i=0;i<9;i++)
f.add(buttons[i]);
f.pack();
f.setVisible(true);
}
}
Kt qu thc thi chng trnh:

4.4.4.5 Null Layout


Mt khung cha c trnh by theo kiu Null Layout c
ngha l ngi lp trnh phi t lm tt c t vic qui nh kch
thc ca khung cha, cng nh kch thc v v tr ca tng
i tng component trong khung cha.
thit lp cch trnh by l Null Layout cho mt container
ta ch vic gi phng thc setLayout(null) vi tham s l null.
99

Mt s phng thc ca lp tru tng Component dng


nh v v qui nh kch thc ca component khi a chng
vo khung cha trnh by theo kiu kiu t do:
o Public void setLocation(Point p)
o Public void setSize(Dimension p)
o Public void setBounds(Rectangle r)
V d:
o MyButton.setSize(new Dimension(20, 10));
o MyButton.setLocation(new Point(10, 10));
o MyButton.setBounds(10, 10, 20, 10);
import java.awt.*;
class NullLayoutDemo
{
public static void main(String args[])
{
Frame fr = new Frame("NullLayout Demo");
fr.setLayout(null);
Button buttOk = new Button("OK");
buttOk.setBounds(100, 150, 50, 30);
Button buttCancel = new Button("Cancel");
buttCancel.setBounds(200, 150, 50, 30);
Checkbox checkBut = new Checkbox("Check
box", true);
checkBut.setBounds(100, 50, 100, 20);
List li = new List();
for (int i=0; i<5; i++)
{
li.add(Integer.toString(i));
}
li.setBounds(200, 50, 50, 50);
fr.add(buttOk);
fr.add(buttCancel);
100

fr.add(checkBut);
fr.add(li);
fr.setBounds(10, 10, 400, 200);
fr.setVisible(true);
}
}
Kt qu thc thi chng trnh:

4.4.5.Cc i tng khung cha Container


Nh chng ta bit container l i tng khung cha c
kh nng qun l v cha cc i tng (components) khc
trong n.
Cc components ch c th s dng c khi a n vo 1
i tng khung cha l container.
Mi container thng gn vi mt LayoutManager
(FlowLayout, BorderLayout, GridLayout, GridBagLayout, Null
Layout) qui nh cch trnh by v b tr cc components trong
mt container.
Cc lai container trong java: Frame, Panel, Dialog,
ScrollPanes.

101

4.4.5.1 Khung cha Frame


java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--java.awt.Window

+--java.awt.Frame
Khung cha Frame l mt ca s window hn hoi mc
trn cng bao gm mt tiu u v mt ng bin (border)
nh cc ng dng windows thng thng khc. Khung cha
Frame thng c s dng to ra ca s chnh ca cc ng
dng.
Khung cha Panel c b qun l trnh by (LayoutManager)
mc nh l FlowLayout.
4.4.5.2 Khung cha Panel
java.lang.Object
+--java.awt.Component
+--java.awt.Container

+--java.awt.Panel
Khung cha Panel c b qun l trnh by (LayoutManager)
mc nh l FlowLayout.
i vi khung cha Panel th cc Panel c th lng vo
nhau, v vy khung cha Panel thng c dng b tr cc
nhm components bn trong mt khung cha khc.
V d:
import java.awt.*;
public class PanelDemo extends Frame
{
private Button next, prev, first;
private List li;
public PanelDemo(String sTitle)
{
super(sTitle);
next = new Button("Next >>");
prev = new Button("<< Prev");
102

first = new Button("First");


Panel southPanel = new Panel();
southPanel.add(next);
southPanel.add(prev);
southPanel.add(first);
// BorderLayout.SOUTH: vng di
this.add(southPanel, BorderLayout.SOUTH);
Panel northPanel = new Panel();
northPanel.add(new Label("Make a Selection"));
// BorderLayout.NORTH: vng trn
this.add(northPanel, BorderLayout.NORTH);
li = new List();
for(int i=0;i<10;i++)
{
li.add("Selection" + i);
}
this.add(li, BorderLayout.CENTER);
}
public static void main(String arg[])
{
Container f = new PanelDemo("Panel Demo");
f.setSize(300, 200);
f.setVisible(true);
}
}
Kt qu thc thi chng trnh:

103

4.4.5.2 Khung cha Dialog


java.lang.Object
+--java.awt.Component
+--java.awt.Container
+--java.awt.Window

+--java.awt.Dialog
Dialog l mt lp khung cha ta Frame v cn c gi l
popup window. C hai loi dialog ph bin:
Modal Dialog: s kha tt c cc ca s khc ca ng
dng khi dialog dng ny cn hin th.
Non-Modal Dialog: vn c th n cc ca s khc ca
ng dng khi dialog dng ny hin th.
Mt ca s dng Dialog lun lun phi gn vi mt ca s
ng dng (Frame).
to mt i tng khung cha Dialog ta c th dng mt
trong cc constructor ca n:
public Dialog (Frame parentWindow, boolean isModal)
public Dialog (Frame parentWindow, String title,
boolean isModal)
parentWindow: ca s cha
title: tiu ca Dialog
isModal: true -> l Dialog dng modal
isModal: false -> l Dialog khng phi dng modal
(hay non-modal)
104

4.5.X l bin c/s kin


4.5.1.M hnh x l s kin (Event-Handling Model)
trn chng ta ch cp n vn thit k giao din
chng trnh ng dng m cha cp n vn x l s
kin. Nhng s kin c pht sinh khi ngi dng tng tc
vi giao din chng trnh (GUI). Nhng tng tc thng gp
nh: di chuyn, nhn chut, nhn mt nt nhn, chn mt
MenuItem trong h thng thc n, nhp d liu trong mt
vn bn, ng ca s ng dng, Khi c mt tng tc xy ra
th mt s kin c gi n chng trnh. Thng tin v s kin
thng c lu tr trong mt i tng dn xut t lp
AWTEvent. Nhng kiu s kin trong gi java.awt.event c
th dng cho c nhng component AWT v JFC. i vi th
vin JFC th c thm nhng kiu s kin mi trong gi
java.swing.event.

105

Nhng lp s kin ca gi java.awt.event

C 3 yu t quan trng trong m hnh x l s kin:


- Ngun pht sinh s kin (event source)
- S kin (event object)
- B lng nghe s kin (event listener)
Ngun pht sinh s kin: l thnh phn ca giao din m
ngi dng tc ng.
S kin: Tm tt thng tin v x kin xy ra, bao gm tham
chiu n ngun gc pht sinh s kin v thng tin s kin s
gi n cho b lng nghe x l.
B lng nghe: Mt b lng nghe l mt i tng ca mt lp
hin thc mt hay nhiu interface ca gi java.awt.event hay
java.swing.event (i vi nhng component trong th vin
JFC). Khi c thng bo, b lng nghe nhn s kin v x l.
Ngun pht sinh s kin phi cung cp nhng phng thc
ng k hoc hy b mt b lng nghe. Ngun pht sinh s
kin lun phi gn vi mt b lng nghe, v n s thng bo
vi b lng nghe khi c s kin pht sinh .
Nh vy ngi lp trnh cn lm hai vic:
106

To v ng k mt b lng nghe cho mt component


trn GUI.

Ci t cc phng thc qun l v x l s kin


Nhng interfaces lng nghe ca gi java.awt.event

Mt i tng Event-Listener lng nghe nhng s kin khc


nhau pht sinh t cc components ca giao din chng trnh.
Vi mi s kin khc nhau pht sinh th phng thc tng
ng trong nhng Event-Listener s c gi thc hin.
Mi interface Event-Listener gm mt hay nhiu cc phng
thc m chng cn ci t trong cc lp hin thc (implements)
interface . Nhng phng thc trong cc interface l tru
tng v vy lp (b lng nghe) no hin thc cc interface th
107

phi ci t tt c nhng phng thc . Nu khng th cc b


lng nghe s tr thnh cc lp tru tng.
4.5.2.X l s kin chut
Java cung cp hai intefaces lng nghe (b lng nghe s kin
chut) l MouseListener v MouseMotionListener qun l
v x l cc s kin lin quan n thit b chut. Nhng s kin
chut c th by cho bt k component no trn GUI m dn
xut t java.awt.component.
Cc phng thc ca interface MouseListener:
public void mousePressed(MouseEvent event): c gi
khi mt nt chut c nhnv con tr chut trn
component.
public void mouseClicked(MouseEvent event): c gi
khi mt nt chut c nhn v nh trn component m
khng di chuyn chut.
public void mouseReleased(MouseEvent event): c
gi khi mt nt chut nh sa khi ko r.
public void mouseEntered(MouseEvent event): c gi
khi con tr chut vo trong ng bin ca mt
component.
public void mouseExited(MouseEvent event): c gi
khi con tr chut ra khi ng bin ca mt
component.
Cc phng thc ca interface MouseMotionListener:
public void mouseDragged(MouseEvent even ): phng
thc ny c gi khi ngi dng nhn mt nt chut
v ko trn mt component.
public void mouseMoved(MouseEvent event): phng
thc ny c gi khi di chuyn chut trn component.
Mi phng thc x l s kin chut c mt tham s
MouseEvent cha thng tin v s kin chut pht sinh chng
hn nh: ta x, y ni s kin chut xy ra. Nhng phng
108

thc tng ng trong cc interfaces s t ng c gi khi


chut tng tc vi mt component.
bit c ngi dng nhn nt chut no, chng ta
dng nhng phung thc, nhng hng s ca lp InputEvent (l
lp cha ca lp MouseEvent).
V d: Chng trnh tn MouseTracker bn di minh ha vic
dng nhng phng thc ca cc interfaces MouseListener v
MouseMotionListener by v x l cc s kin chut
tng ng.
import java.awt.*;
import java.awt.event.*;
public class MouseTracker extends Frame
implements MouseListener, MouseMotionListener
{
private Label statusBar;
// set up GUI and register mouse event handlers
public MouseTracker()
{ super( "Demonstrating Mouse Events" );
statusBar = new Label();
this.add( statusBar, BorderLayout.SOUTH );
// application listens to its own mouse events
addMouseListener( this );
addMouseMotionListener( this );
setSize( 275, 100 );
setVisible( true );
}
// MouseListener event handlers
// handle event when mouse released immediately
// after press
public void mouseClicked( MouseEvent event )
{
statusBar.setText( "Clicked at [" + event.getX() +
109

", " + event.getY() + "]" );


}
// handle event when mouse pressed
public void mousePressed( MouseEvent event )
{
statusBar.setText( "Pressed at [" + event.getX() +
", " + event.getY() + "]" );
}
// handle event when mouse released after dragging
public void mouseReleased( MouseEvent event )
{
statusBar.setText( "Released at [" + event.getX() +
", " + event.getY() + "]" );
}
// handle event when mouse enters area
public void mouseEntered( MouseEvent event )
{
statusBar.setText( "Mouse in window" );
}
// handle event when mouse exits area
public void mouseExited( MouseEvent event )
{ statusBar.setText( "Mouse outside window" );
}
// MouseMotionListener event handlers
// handle event when user drags mouse with button pressed
public void mouseDragged( MouseEvent event )
{
statusBar.setText( "Dragged at [" + event.getX() +
", " + event.getY() + "]" );
}
110

// handle event when user moves mouse


public void mouseMoved( MouseEvent event )
{
statusBar.setText( "Moved at [" + event.getX() +
", " + event.getY() + "]" );
}
// execute application
public static void main( String args[] )
{
MouseTracker application = new MouseTracker();
}
} // end class MouseTracker
Kt qu thc thi chng trnh:

4.5.3.X l s kin bn phm


x l s kin bn phm java h tr mt b lng nghe s
kin l interface KeyListener. Mt s kin bn phm c
111

pht sinh khi ngi dng nhn v nh mt phm trn bn phm.


Mt lp hin thc KeyListener phi ci t cc phng thc
keyPressed, keyReleased v keyTyped. Mi phng thc ny c
mt tham s l mt i tng kiu KeyEvent. KeyEvent l lp
con ca lp InputEvent.
Cc phng thc ca interface KeyListener

Phng thc keyPressed c gi khi mt phm bt k


c nhn.

Phng thc keyTyped c gi thc hin khi ngi


dng nhn mt phm khng phi phm hnh ng
(nh phm mi tn, phm Home, End, Page Up, Page
Down, cc phm chc nng nh: Num Lock, Print
Screen, Scroll Lock, Caps Lock, Pause).

Phng thc keyReleased c gi thc hin khi nh


phm nhn sau khi s kin keyPressed hoc keyTyped.

V d: minh ha vic x l s kin chut thng qua cc phng


thc ca interface KeyListener. Lp KeyDemo bn di hin
thc interface KeyListener, v vy tt c 3 phng thc trong
KeyListener phi c ci t trong chng trnh.
// KeyDemo.java
// Demonstrating keystroke events.
// Java core packages
import java.awt.*;
import java.awt.event.*;
public class KeyDemo extends Frame implements KeyListener
{
private String line1 = "", line2 = "";
private String line3 = "";
private TextArea textArea;
// set up GUI
public KeyDemo()
112

{
super( "Demonstrating Keystroke Events" );
// set up TextArea
textArea = new TextArea( 10, 15 );
textArea.setText( "Press any key on the keyboard..." );
textArea.setEnabled( false );
this.add( textArea );
// allow frame to process Key events
addKeyListener( this );
setSize( 350, 100 );
setVisible( true );
}
// handle press of any key
public void keyPressed( KeyEvent event )
{
line1 = "Key pressed: " +
event.getKeyText( event.getKeyCode() );
setLines2and3( event );
}
// handle release of any key
public void keyReleased( KeyEvent event )
{
line1 = "Key released: " +
event.getKeyText( event.getKeyCode() );
setLines2and3( event );
}
// handle press of an action key
public void keyTyped( KeyEvent event )
{
113

line1 = "Key typed: " + event.getKeyChar();


setLines2and3( event );
}
// set second and third lines of output
private void setLines2and3( KeyEvent event )
{
line2 = "This key is " + ( event.isActionKey() ? "" : "not
" ) + "an action key";
String
temp
=
event.getModifiers() );

event.getKeyModifiersText(

line3 = "Modifier keys pressed: " + ( temp.equals( "" ) ?


"none" : temp );
textArea.setText(line1+"\n"+line2+"\n"+ line3+"\n" );
}
// execute application
public static void main( String args[] )
{
KeyDemo application = new KeyDemo();
}
} // end class KeyDemo
Kt qu thc thi chng trnh:

114

4.6.Mt s v d minh ha
V d 1: To b lng nghe bin c cho i tng khung cha
Frame, v x l bin c ng ca s.
import java.awt.*;
import java.awt.event.*;
public class WindowClosingDemo
{
public static void main(String args[])
115

{
Frame f = new Frame ("WindowClosing Demo");
WindowCloser closer = new WindowCloser();
f.addWindowListener(closer);
f.setBounds(10, 10, 300, 200);
f.setVisible(true);
}
}
import java.awt.event.*;
class WindowCloser implements WindowListener
{
public void windowClosing(WindowEvent e)
{
System.out.println("windowClosing..");
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("windowActivated...");
}
public void windowClosed(WindowEvent e)
{
System.out.println("windowClosed...");
}
public void windowDeactivated(WindowEvent e)
{
System.out.println("windowDeactivated...");
}
public void windowDeiconified(WindowEvent e)
{
System.out.println("windowDeiconified...");
}
public void windowIconified(WindowEvent e)
{
116

System.out.println("windowIconified...");
}
public void windowOpened(WindowEvent e)
{ System.out.println("windowOpened...");
}
}
C th dng lp tru tng WindowAdapter to ra b lng
nghe.
public abstract class WindowAdapter extends Object
implements WindowListener
(WindowAdapter hin thc interface WindowListener
nn lp o ny cng c 7 phng thc ging nh giao
din WindowListener)
import java.awt.event.*;
class WindowCloser extends WindowAdapter
{ public void windowClosing(WindowEvent e)
{ System.out.println("windowClosing..");
System.exit(0);
}
}
V d 2: CheckboxGroup Demo
import java.awt.*;
public class CheckboxGroupDemo extends Frame
{
private Checkbox red, green, blue;
private CheckboxGroup checkGroup;
public CheckboxGroupDemo(String title)
{ super(title);
checkGroup = new CheckboxGroup();
red = new Checkbox("Red", checkGroup, false);
green = new Checkbox("Green", checkGroup, false);
blue = new Checkbox("Blue", checkGroup, false);
117

//add the checkboxes to the frame


Panel north = new Panel();
north.add(red);
north.add(green);
north.add(blue);
this.add(north, BorderLayout.NORTH);
//register the event listener
SetColor listener = new SetColor(this);
red.addItemListener(listener);
green.addItemListener(listener);
blue.addItemListener(listener);
}
public static void main(String [] args)
{
Frame f = new
CheckboxGroupDemo("CheckboxGroupDemo");
f.setSize(300,300);
f.setVisible(true);
}
} // end of class
import java.awt.*;
import java.awt.event.*;
public class SetColor implements ItemListener
{
private Frame pallette;
private Color c;
public SetColor(Frame c)
{
pallette = c;
}
118

public void itemStateChanged(ItemEvent e)


{
String item = (String) e.getItem();
int state = e.getStateChange();
if (item.equalsIgnoreCase("red"))
c = new Color(255, 0, 0);
if (item.equalsIgnoreCase("green"))
c = new Color(0, 255, 0);
if (item.equalsIgnoreCase("blue"))
c = new Color(0, 0, 255);
pallette.setBackground(c);
}
} // end of class
Kt qu thc thi chng trnh:

V d 3: TextComponent
import java.awt.*;
class TextComponentDemo extends Frame
{
private TextField textField;
private TextArea textArea;
private Button enter, clear;
public TextComponentDemo (String title)
{
super(title);
119

textArea = new TextArea("", 0, 0,


TextArea.SCROLLBARS_VERTICAL_ONLY);
textArea.setEditable(false);
textField = new TextField();
enter = new Button("Enter");
clear = new Button("Clear");
//layout the GUI
this.add(textArea, BorderLayout.CENTER);
Panel southEast = new Panel(new BorderLayout());
southEast.add(enter, BorderLayout.EAST);
southEast.add(clear, BorderLayout.WEST);
Panel south = new Panel(new BorderLayout());
south.add(textField, BorderLayout.CENTER);
south.add(southEast, BorderLayout.EAST);
this.add(south, BorderLayout.SOUTH);
//setup the event handling
CreateList listener = new CreateList(textField,
textArea);
enter.addActionListener(listener);
clear.addActionListener(listener);
textField.addActionListener(listener);
}
public TextField getTextField()
{
return textField;
}
public static void main(String [] args)
120

{
TextComponentDemo f = new TextComponentDemo
("TextComponentDemo ");
f.setSize(300,200);
f.setVisible(true);
f.getTextField().requestFocus();
}
}
import java.awt.*;
import java.awt.event.*;
public class CreateList implements ActionListener
{
private int counter = 0;
private TextField source;
private TextArea destination;
public CreateList(TextField s, TextArea d)
{ source = s;
destination = d;
}
public void actionPerformed(ActionEvent e)
{
String action = e.getActionCommand();
if (action.equalsIgnoreCase("Enter"))
{
String text = source.getText();
counter++;
destination.append(counter + "." + text + "\n");
source.setText("");
}
else
if (action.equalsIgnoreCase("Clear"))
{
121

destination.setText("");
counter = 0;
}
}
}
Kt qu thc thi chng trnh:

V d 4: ListDemo
import java.awt.*;
public class ListDemo extends Frame
{ private List li;
private Label selected;
public ListDemo(String title)
{
super(title);
li = new List();
li.add("Monday");
li.add("Tuesday");
li.add("Wednesday");
li.add("Thursday");
li.add("Friday");
li.add("Saturday");
li.add("Sunday");

122

selected = new Label("Double click a day:",


Label.CENTER);
this.setLayout(new BorderLayout());
this.add(selected , BorderLayout.NORTH);
this.add(li, BorderLayout.CENTER);
// Tao listener cho List
ShowSelectionListener listener = new
ShowSelectionListener(selected);
li.addActionListener(listener);
}
public static void main(String args[])
{ ListDemo f = new ListDemo("List Demo");
f.setBounds(10, 10, 300, 200);
f.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
class ShowSelectionListener implements ActionListener
{ private Label lab;
public ShowSelectionListener(Label label_sel)
{
lab = label_sel;
}
public void actionPerformed(ActionEvent e)
{ // Tra ve Object ma Event da xuat hien
// getSource la phuong thuc ke thua tu
// java.util.EventObject
Object source = e.getSource();
123

// Nguon goc phat sinh bien co khong phai la List


if (!(source instanceof List))
{ return;
}
else
{
List li = (List) source;
String selected = li.getSelectedItem();
lab.setText(selected);
}
}
}
Kt qu thc thi chng trnh:

V d 5: Xy dng 1 lp khung cha Dialog dng hin th


message ging nh hm MessageBox trn Windows.
import java.awt.*;
import java.awt.event.*;
class DialogDemo
{
public static void main(String[] args)
{
createMenu();
}

124

private static void createMenu()


{
// Tao Frame ung dung
final Frame fr = new Frame();
fr.setLayout(new BorderLayout());
// Tao cac menu bar
MenuBar menubar = new MenuBar();
Menu mTest = new Menu("Test");
MenuItem testDlg = new MenuItem("Test Dialog");
testDlg.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
MessageBox msgBox = new
MessageBox(fr, "Here it is", "T/bao
Dialog");
msgBox.show();
}
}
);
mTest.add(testDlg);
menubar.add(mTest);
fr.setMenuBar(menubar);
fr.setBounds(100, 100, 300, 200);
fr.setVisible(true);
fr.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
125

}
}
);
}// end of createmenu()
} // end of class
import java.awt.*;
import java.awt.event.*;
public class MessageBox
{
Dialog msgBox;
/* ---------------------------------------------------------------// Contructor cua lop MessageBox
// parentWindow: cua so cha
// title: Tieu de cua Dialog
// msg: chuoi thong bao
-----------------------------------------------------------------*/
public MessageBox(Frame parentWindow, String msg,
String title)
{
if (parentWindow == null)
{
Frame emptyWin = new Frame();
// Tao Modal Dialog (tham so thu 3:true)
msgBox = new Dialog(emptyWin, title, true);
}
else
{
msgBox = new Dialog(parentWindow, title, true);
}
// Doi tuong nhan dung de trinh bay cau thong bao
Label Message = new Label(msg);
// Thiet lap che do trinh bay layout cho cac doi tuong.
126

msgBox.setLayout(new FlowLayout());
// Dua nhan thong bao Label vao khung chua Dialog
msgBox.add(Message);
// Dua nut nhan OK vao trong khung chua Dialog
Button okButton = new Button("OK");
msgBox.add(okButton);
// Khai bao kich thuoc cua cua so thong bao
msgBox.setSize(200, 100);
// Xu ly tinh huong khi nguoi dung nhan nut OK
okButton.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
msgBox.setVisible(false);
}
}
);
}
public void show()
{
msgBox.show();
}
} // end of class MessageBox
Kt qu thc thi chng trnh:

127

Chng 5: LUNG V TP TIN

(STREAMS & FILES)


5.1.M u
Vic lu tr d liu trong cc bin chng trnh, cc mng
c tnh cht tm thi v d liu s mt i khi bin ra khi tm
nh hng ca n hoc khi chng trnh kt thc. Files gip
cho cc chng trnh c th lu tr mt lng ln d liu, cng
nh c th lu tr d liu trong mt thi gian di ngay c khi
chng trnh kt thc. Trong chng ny chng ta s tm hiu
lm th no cc chng trnh java c th to, c, ghi v x l
cc files tun t v cc file truy cp ngu nhin thng qua mt
s v d minh ha.
X l files l mt vn ht sc c bn, quan trng m bt
k mt ngn ng lp trnh no cng phi h tr nhng th vin,
hm x l mt s thao tc c bn nht i vi kiu d liu
file.
X l files l mt phn ca cng vic x l cc lung, gip
cho mt chng trnh c th c, ghi d liu trong b nh, trn
files v trao d liu thng qua cc kt ni trn mng.
Chng ny s cung cp cho chng ta nhng kin thc c
bn v lung (streams) v files:
- Th vin cc lp v lung trong java: lung byte, lung
k t.
- Xut nhp Console dng lung byte, lung k t.
- Xut nhp files dng lung k t v lung byte.
- Vn x l files truy cp ngu nhin dng lp
RandomAccessFile.
- X l file v th mc dng lp File.

128

5.2.Lung (Streams)
5.2.1.Khi nim lung
Tt c nhng hot ng nhp/xut d liu (nhp d liu t
bn phm, ly d liu t mng v, ghi d liu ra a, xut d
liu ra mn hnh, my in, ) u c quy v mt khi nim
gi l lung (stream). Lung l ni c th sn xut v tiu
th thng tin. Lung thng c h thng xut nhp trong
java gn kt vi mt thit b vt l. Tt c cc lung u c
chung mt nguyn tc hot ng ngay c khi chng c gn
kt vi cc thit b vt l khc nhau. V vy cng mt lp,
phng thc xut nhp c th dng chung cho cc thit b vt l
khc nhau. Chng hn cng mt phng thc c th dng
ghi d liu ra console, ng thi cng c th dng ghi d
liu xung mt file trn a. Java hin thc lung bng tp hp
cc lp phn cp trong gi java.io.
Java nh ngha hai kiu lung: byte v k t (phin bn gc
ch nh ngha kiu lung byte, v sau lung k t c
thm vo trong cc phin bn v sau).
Lung byte (hay lung da trn byte) h tr vic xut nhp
d liu trn byte, thng c dng khi c ghi d liu nh
phn.
Lung k t c thit k h tr vic xut nhp d liu kiu
k t (Unicode). Trong mt vi trng hp lung k t s dng
hiu qu hn lung byte, nhng mc h thng th tt c nhng
xut nhp u phi qui v byte. Lung k t h tr hiu qu ch
i vi vic qun l, x l cc k t.
5.2.2.Lung byte (Byte Streams)
Cc lung byte c nh ngha dng hai lp phn cp.
Mc trn cng l hai lp tru tng InputStream v
OutputStream. InputStream nh ngha nhng c im chung
cho nhng lung nhp byte. OutputStream m t cch x l ca
cc lung xut byte.
129

Cc lp con dn xut t hai lp InputStream v


OutputStream s h tr chi tit tng ng vi vic c ghi d
liu trn nhng thit b khc nhau. ng chong ngp vi hng
lot rt nhiu cc lp khc nhau. ng qu lo lng, mi khi bn
nm vng, s dng thnh tho mt lung byte no th bn d
dng lm vic vi nhng lung cn li.
Lp lung byte
BufferedInputStream
BufferedOutputStream
ByteArrayInputStream
ByteArrayOutputStream
DataInputStream
DataOutputStream

ngha
Buffered input stream
Buffered output stream
Input stream c d liu t mt mng
byte
Output stream ghi d liu n mt mng
byte
Lung nhp c nhng phng thc c
nhng kiu d liu chun trong java
Lung xut c nhng phng thc ghi
nhng kiu d liu chun trong java

FileInputStream

Lung nhp cho php c d liu t file

FileOutputStream

Lung xut cho php ghi d liu xung


file

FilterInputStream

Hin thc lp tru tng InputStream

FilterOutputStream

Hin thc lp tru tng OutputStream

InputStream

Lp tru tng, l lp cha ca tt c cc


lp lung nhp kiu Byte

OutputStream

Lp tru tng, l lp cha ca tt c cc


lp xut nhp kiu Byte

PipedInputStream

Lung nhp byte kiu ng (piped)


thng phi c gn vi mt lung
xut kiu ng.
130

PipedOutputStream

Lung nhp byte kiu ng (piped)


thng phi c gn vi mt lung
nhp kiu ng to nn mt kt ni
trao i d liu kiu ng.

PrintStream

Lung xut c cha phng thc print()


v println()

PushbackInputStream

L mt lung nhp kiu Byte m h tr


thao tc tr li (push back) v phc hi
thao tc c mt byte (unread)

RandomAccessFile

H tr cc thao tc c, ghi i vi file


truy cp ngu nhin.

SequenceInputStream

L mt lung nhp c to nn bng


cch ni kt logic cc lung nhp khc.

5.2.3.Lung k t (Character Streams)


Cc lung k t c nh ngha dng hai lp phn cp.
Mc trn cng l hai lp tru tng Reader v Writer. Lp
Reader dng cho vic nhp d liu ca lung, lp Writer dng
cho vic xut d liu cua lung. Nhng lp dn xut t Reader
v Writer thao tc trn cc lung k t Unicode.
Lp lung k t

ngha

BufferedReader

Lung nhp k t c d liu vo mt


vng m.

BufferedWriter

Lung xut k t ghi d liu ti mt vng


m.

CharArrayReader

Lung nhp c d liu t mt mng k


t

CharArrayWriter

Lung xut ghi d liu ti mt mng k


t
131

FileReader

Lung nhp k t c d liu t file

FileWriter

Lung xut k t ghi d liu n file

FilterReader

Lp c d liu trung gian (lp tru


tng)

FilterWriter

Lp xut trung gian tru tng

InputStreamReader

Lung nhp chuyn bytes thnh cc k t

LineNumberReader

Lung nhp m dng

OutputStreamWriter

Lung xut chuyn nhng k t thnh cc


bytes

PipedReader

Lung c d liu bng c ch ng ng

PipedWriter

Lung ghi d liu bng c ch ng ng

PrintWriter

Lung ghi vn bn ra thit b xut (cha


phng thc print() v println() )

PushbackReader

Lung nhp cho php c v khi phc


li d liu

Reader

Lp nhp d liu tru tng

StringReader

Lung nhp c d liu t chui

StringWriter

Lung xut ghi d liu ra chui

Writer

Lp ghi d liu tru tng

5.2.4.Nhng lung c nh ngha trc (The Predefined


Streams)
Tt c cc chng trnh vit bng java lun t ng import
gi java.lang. Gi ny c nh ngha lp System, bao gm mt
s c im ca mi trng run-time, n c ba bin lung c
nh ngha trc l in, out v err, cc bin ny l cc fields
c khai bo static trong lp System.
132

System.out: lung xut chun, mc nh l console.


System.out l mt i tng kiu PrintStream.

System.in: lung nhp chun, mc nh l bn phm.


System.in l mt i tng kiu InputStream.

System.err: lung li chun, mc nh cng l console.


System.out cng l mt i tng kiu PrintStream
ging System.out.

5.3.S dng lung Byte


Nh chng ta bit hai lp InputStream v OutputStream
l hai siu lp (cha) i vi tt c nhng lp lung xut nhp
kiu byte. Nhng phng thc trong hai siu lp ny nm ra
cc li kiu IOException. Nhng phng thc nh ngha trong
hai siu lp ny l c th dng trong cc lp con ca chng. V
vy tp cc phng thc l tp ti tiu cc chc nng nhp
xut m nhng lung nhp xut kiu byte c th s dng.
Nhng phng thc nh ngha trong lp
InputStream v OutputStream
Phng thc

ngha

InputStream
int available( )

Tr v s lung bytes c th c c
t lung nhp

void close( )

ng lung nhp v gii phng ti


nguyn h thng gn vi lung.
Khng thnh cng s nm ra mt li
IOException

void mark(int numBytes)

nh du v tr hin ti trong lung


nhp

boolean markSupported( )

Kim tra xem lung nhp c h tr


phng thc mark() v reset() khng.
133

int read( )

c byte tip theo t lung nhp

int read(byte buffer[ ])

c buffer.length bytes v lu vo
trong vng nh buffer. Kt qu tr v
s bytes tht s c c

int read(byte buffer[ ], int


offset,
int numBytes)

c numBytes bytes bt u t a ch
offset v lu vo trong vng nh
buffer. Kt qu tr v s bytes tht s
c c

void reset( )

Nhy con tr n v tr c xc nh
bi vic gi hm mark() ln sau cng.

long skip(long numBytes)

Nhy qua numBytes d liu t lung


nhp

OutputStream
void close( )

ng lung xut v gii phng ti


nguyn h thng gn vi lung.
Khng thnh cng s nm ra mt li
IOException

void flush( )

p d liu t b m phi ghi ngay


xung lung (nu c)

void write(int b)

Ghi byte d liu ch nh xung lung

void write(byte buffer[ ])

void write(byte buffer[ ], int


offset,
int numBytes)

Ghi buffer.length bytes d liu t


mng ch nh xung lung
Ghi numBytes bytes d liu t v tr
offset ca mng ch nh buffer xung
lung

5.3.1.c d liu t Console


Trc y, khi Java mi ra i thc hin vic nhp d
liu t Console ngi ta ch dng lung nhp byte. V sau th
134

chng ta c th dng c lung byte v lung k t, nhng trong


mt s trng hp thc t c d liu t Console ngi ta
thch dng lung kiu k t hn, v l do n gin v d bo tr
chng trnh. y vi mc ch minh ha chng ta dng
lung byte thc hin vic nhp xut Console.
V d: chng trnh minh ha vic c mt mng bytes t
System.in
Import java.io.*;
class ReadBytes
{
public static void main(String args[])
throws IOException
{
byte data[] = new byte[100];
System.out.print("Enter some characters.");
System.in.read(data);
System.out.print("You entered: ");
for(int i=0; i < data.length; i++)
System.out.print((char) data[i]);
}
}
Kt qu thc thi chng trnh:

5.3.2.Xut d liu ra Console


Tng t nh nhp d liu t Console, vi phin bn u
tin ca java xut d liu ra Console t ch c th s dng
135

lung byte. K t phin bn 1.1 (c thm lung k t), xut


d liu ra Console c th s dng c lung k t v lung byte.
Tuy nhin, cho n nay xut d liu ra Console thng
ngi ta vn dng lung byte.
Chng ta kh quen thuc vi phng thc print() v
println(), dng xut d liu ra Console. Bn cnh 1o chng
ta cng c th dng phng thc write().
V d: minh ha s dng phng thc System.out.write()
xut k t X ra Console
import java.io.*;
class WriteDemo
{
public static void main(String args[])
{
int b;
b = 'X';
System.out.write(b);
System.out.write('\n');
}
}
Kt qu thc thi chng trnh:

5.3.3.c v ghi file dng lung Byte


To mt lung Byte gn vi file ch nh dng
FileInputStream v FileOutputStream. m mt file, n gin
ch cn to mt i tng ca nhng lp ny, tn file cn m l
thng s trong constructor. Khi file m, vic c v ghi d liu

136

trn file c thc hin mt cch bnh thng thng qua cc


phng thc cung cp trong lung.
5.3.3.1 c d liu t file
M mt file c d liu
FileInputStream(String fileName) throws
FileNotFoundException
Nu file khng tn ti: th nm ra
FileNotFoundException
c d liu: dng phng thc read()
int read( ) throws IOException: c tng byte t file v
tr v gi tr ca byte c c. Tr v -1 khi ht file, v
nm ra IOException khi c li c.
ng file: dng phng thc close()
void close( ) throws IOException: sau khi lm vic xong
cn ng file gii phng ti nguyn h thng cp
pht cho file.
V d:
/*
Hin th ni dung ca mt file tn test.txt lu tiD:\test.txt
*/
import java.io.*;
class ShowFile
{
public static void main(String args[]) throws IOException
{
int i;
FileInputStream fin;
try
{
fin = new FileInputStream(D:\\test.txt);
}
catch(FileNotFoundException exc)
{
System.out.println("File Not Found");
137

return;
}
catch(ArrayIndexOutOfBoundsException exc)
{
System.out.println("Usage: ShowFile File");
return;
}
// read bytes until EOF is encountered
do
{
i = fin.read();
if(i != -1) System.out.print((char) i);
} while(i != -1);
fin.close();
}
}
Kt qu thc thi chng trnh:

5.3.3.2 Ghi d liu xung file


M mt file ghi d liu
FileOutputStream(String fileName) throws
FileNotFoundException
Nu file khng to c: th nm ra
FileNotFoundException
Ghi d liu xung: dng phng thc write()
void write(int byteval) throws IOException: ghi mt
byte xc nh bi tham s byteval xung file, v nm ra
IOException khi c li ghi.
ng file: dng phng thc close()
138

void close( ) throws IOException: sau khi lm vic xong


cn ng file gii phng ti nguyn h thng cp
pht cho file.
V d: copy ni dung mt file text n mt file text khc.
/* Copy ni dung ca mt file text*/
import java.io.*;
class CopyFile
{
public static void main(String args[])throws IOException
{
int i;
FileInputStream fin;
FileOutputStream fout;
try
{
// open input file
try
{
fin = new FileInputStream(D:\\source.txt);
}
catch(FileNotFoundException exc)
{
System.out.println("Input File Not Found");
return;
}
// open output file
try
{
fout = new FileOutputStream(D:\\dest.txt);
}
catch(FileNotFoundException exc)
{
139

System.out.println("Error Opening Output


File");
return;
}
}
catch(ArrayIndexOutOfBoundsException exc)
{
System.out.println("Usage: CopyFile From To");
return;
}
// Copy File
try
{
do
{
i = fin.read();
if(i != -1) fout.write(i);
} while(i != -1);
}
catch(IOException exc)
{
System.out.println("File Error");
}
fin.close();
fout.close();
}
}
Kt qu thc thi chng trnh: chng trnh s copy ni dung
ca file D:\source.txt v ghi vo mt file mi D:\dest.txt.

140

5.3.4.c v ghi d liu nh phn


Phn trn chng ta c v ghi cc bytes d liu l cc k
t m ASCII. c v ghi nhng gi tr nh phn ca cc kiu
d liu trong java, chng ta s dng DataInputStream v
DataOutputStream.
DataOutputStream: hin thc interface DataOuput. Interface
DataOutput c cc phng thc cho php ghi tt c nhng kiu
d liu c s ca java n lung (theo nh dng nh phn).
Phng thc
void writeBoolean
(boolean val)
void writeByte (int val)
void writeChar (int val)
void writeDouble
(double val)
void writeFloat (float
val)
void writeInt (int val)
void writeLong (long
val)
void writeShort (int val)

ngha
Ghi xung lung mt gi tr
boolean c xc nh bi val.
Ghi xung lung mt byte c
xc nh bi val.
Ghi xung lung mt Char c
xc nh bi val.
Ghi xung lung mt gi tr
Double c xc nh bi val.
Ghi xung lung mt gi tr float
c xc nh bi val.
Ghi xung lung mt gi tr int
c xc nh bi val.
Ghi xung lung mt gi tr long
c xc nh bi val.
Ghi xung lung mt gi tr short
c xc nh bi val.

Contructor: DataOutputStream(OutputStream outputStream)


OutputStream: l lung xut d liu. ghi d liu ra file
th i tng outputStream c th l FileOutputStream.

141

DataInputStream: hin thc interface DataInput. Interface


DataInput c cc phng thc cho php c tt c nhng kiu
d liu c s ca java (theo nh dng nh phn).
Phng thc
boolean readBoolean( )
Byte readByte( )
char readChar( )
double readDouble( )
float readFloat( )
int readInt( )
Long readLong( )
short readShort( )

ngha
c mt gi tr boolean
c mt byte
c mt Char
c mt gi tr Double
c mt gi tr float
c mt gi tr int
c mt gi tr long
c mt gi tr short

Contructor: DataInputStream(InputStream inputStream)


InputStream: l lung nhp d liu. d liu t file th
i tng InputStream c th l FileInputStream.
V d: dng DataOutputStream v DataInputStream ghi v
c nhng kiu d liu khc nhau trn file.
import java.io.*;
class RWData
{
public static void main(String args[]) throws IOException
{
DataOutputStream dataOut;
DataInputStream dataIn;
int i = 10;
double d = 1023.56;
boolean b = true;
try
{
dataOut = new DataOutputStream(
new FileOutputStream("D:\\testdata"));
}
catch(IOException exc)
142

{
System.out.println("Cannot open file.");
return;
}
try
{
System.out.println("Writing " + i);
dataOut.writeInt(i);
System.out.println("Writing " + d);
dataOut.writeDouble(d);
System.out.println("Writing " + b);
dataOut.writeBoolean(b);
System.out.println("Writing " + 12.2 * 7.4);
dataOut.writeDouble(12.2 * 7.4);
}
catch(IOException exc)
{
System.out.println("Write error.");
}
dataOut.close();
System.out.println();
// Now, read them back.
try
{
dataIn = new DataInputStream(
new FileInputStream("D:\\testdata"));
}
catch(IOException exc)
{
System.out.println("Cannot open file.");
return;
}
143

try
{
i = dataIn.readInt();
System.out.println("Reading " + i);
d = dataIn.readDouble();
System.out.println("Reading " + d);
b = dataIn.readBoolean();
System.out.println("Reading " + b);
d = dataIn.readDouble();
System.out.println("Reading " + d);
}
catch(IOException exc)
{ System.out.println("Read error.");
}
dataIn.close();
}
}
Kt qu thc thi chng trnh:
D liu ghi xung file D:\\testdata

Kt qu c v xut ra Console:

144

5.4.File truy cp ngu nhin (Random Access Files)


Bn cnh vic x l xut nhp trn file theo kiu tun t
thng qua cc lung, java cng h tr truy cp ngu nhin ni
dung ca mt file no dng RandomAccessFile.
RandomAccessFile khng dn xut t InputStream hay
OutputStream m n hin thc cc interface DataInput,
DataOutput (c nh ngha cc phng thc I/O c bn).
RandomAccessFile h tr vn nh v con tr file bn trong
mt file dng phng thc seek(long newPos).
V d: minh ha vic truy cp ngu nhin trn file. Chng
trnh ghi 6 s kiu double xung file, ri c ln theo th t
ngu nhin.
import java.io.*;
class RandomAccessDemo
{
public static void main(String args[]) throws IOException
{
double data[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25};
double d;
RandomAccessFile raf;
try
{
raf = new RandomAccessFile("D:\\random.dat",
"rw");
}
catch(FileNotFoundException exc)
{
System.out.println("Cannot open file.");
return ;
}

145

// Write values to the file.


for(int i=0; i < data.length; i++)
{
try
{
raf.writeDouble(data[i]);
}
catch(IOException exc)
{
System.out.println("Error writing to file.");
return ;
}
}
try
{
// Now, read back specific values
raf.seek(0); // seek to first double
d = raf.readDouble();
System.out.println("First value is " + d);
raf.seek(8); // seek to second double
d = raf.readDouble();
System.out.println("Second value is " + d);
raf.seek(8 * 3); // seek to fourth double
d = raf.readDouble();
System.out.println("Fourth value is " + d);
System.out.println();
// Now, read every other value.
System.out.println("Here is every other value: ");
for(int i=0; i < data.length; i+=2)
{ raf.seek(8 * i); // seek to ith double
d = raf.readDouble();
System.out.print(d + " ");
}
146

System.out.println("\n");
}
catch(IOException exc)
{
System.out.println("Error seeking or reading.");
}
raf.close();
}
}
Kt qu thc thi chng trnh:

5.5.S dng lung k t


Chng ta tm hiu v s dng lung byte xut/nhp d
liu. Tuy c th nhng trong mt s trng hp lung byte
khng phi l cch l tng qun l xut nhp d liu kiu
character, v vy java a ra kiu lung character phc v
cho vic xut nhp d liu kiu character trn lung.
Mc trn cng l hai lp tru tng Reader v Writer. Lp
Reader dng cho vic nhp d liu ca lung, lp Writer dng
cho vic xut d liu ca lung. Nhng lp dn xut t Reader
v Writer thao tc trn cc lung k t Unicode.
Nhng phng thc nh ngha trong lp tru tng
Reader v Writer
Phng thc

ngha

147

Reader
abstract void close( )
void mark(int numChars)
boolean markSupported( )
int read( )
int read(char buffer[ ])
abstract int read(char
buffer[ ],
int offset,
int numChars)
boolean ready( )
void reset( )
long skip(long numChars)
Writer
abstract void close( )
abstract void flush( )
void write(int ch)
void write(byte buffer[ ])
abstract void write(char
buffer[ ],
int offset,
int numChars)
void write(String str)
void write(String str, int
offset,
int numChars)

ng lung
nh du v tr hin ti trn lung
Kim tra xem lung c h tr
thao tc nh du mark() khng?
c mt k t
c buffer.length k t cho vo
buffer
c numChars k t cho vo
vng m buffer ti v tr
buffer[offset]
Kim tra xem lung c c c
khng?
Di con tr nhp n v tr nh
du trc
B qua numChars ca lung nhp
ng lung xut. C li nm ra
IOException
Dn dp lung (buffer xut)
Ghi mt k t
Ghi mt mng cc k t
Ghi mt phn ca mng k t

Ghi mt chui
Ghi mt phn ca mt chui k t

148

5.5.1.Nhp Console dng lung k t


Thng th vic nhp d liu t Console dng lung k t
th thun li hn dng lung byte. Lp tt nht c d liu
nhp t Console l lp BufferedReader. Tuy nhin chng ta
khng th xy dng mt lp BufferedReader trc tip t
System.in. Thay vo chng ta phi chuyn n thnh mt
lung k t. lm iu ny chng ta dng InputStreamReader
chuyn bytes thnh k t.
c c mt i tng InputStreamReader gn vi
System.in ta dng constructor ca InputStreamReader.
InputStreamReader(InputStream inputStream)

Tip theo dng i tng InputStreamReader to ra


to ra mt BufferedReader dng constructor BufferedReader.
BufferedReader(Reader inputReader)

V d: To mt BufferedReader gn vi Keyboard
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
Sau khi thc hin cu lnh trn, br l mt lung k t gn vi
Console thng qua System.in.
V d: Dng BufferedReader c tng k t t Console. Vic
c kt thc khi gp du chm (du chm kt thc chng
trnh).
import java.io.*;
class ReadChars
{
public static void main(String args[]) throws IOException
{
char c;
BufferedReader br = newBufferedReader(
149

new InputStreamReader(System.in));
System.out.println("Nhap chuoi ky tu,
gioi han dau cham.");
// read characters
do
{
c = (char) br.read();
System.out.println(c);
} while(c != '.');
}
}
Kt qu thc thi chng trnh:

V d: Dng BufferedReader c chui k t t Console.


Chng trnh kt thc khi gp chui c l chui stop
import java.io.*;
class ReadLines
{
public static void main(String args[]) throws IOException
{
// create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String str;
System.out.println("Nhap chuoi.");
System.out.println("Nhap 'stop' ket thuc chuong trinh.");
150

do
{
str = br.readLine();
System.out.println(str);
} while(!str.equals("stop"));
}
}
Kt qu thc thi chng trnh:

5.5.2.Xut Console dng lung k t


Trong ngn ng java, bn cnh vic dng System.out
xut d liu ra Console (thng dng debug chng trnh),
chng ta c th dng lung PrintWriter i vi cc chng
trnh chuyn nghip. PrintWriter l mt trong nhng lp
lung k t. Vic dng cc lp lung k t xut d liu ra
Console thng c a chung hn.
xut d liu ra Console dng PrintWriter cn thit phi
ch nh System.out cho lung xut.
V d: To i tng PrintWriter xut d liu ra Console
PrintWriter pw = new PrintWriter(System.out, true);
V d: minh ha dng PrintWriter xut d liu ra Console
import java.io.*;
public class PrintWriterDemo
{
public static void main(String args[])
{
PrintWriter pw = new PrintWriter(System.out, true);
int i = 10;
151

double d = 123.67;
double r = i+d
pw.println("Using a PrintWriter.");
pw.println(i);
pw.println(d);
pw.println(i + " + " + d + " = " + r);
}
}
Kt qu thc thi chng trnh:

5.5.3.c/ghi File dng lung k t


Thng thng c/ghi file ngi ta thng dng lung
byte, nhng i vi lung k t chng ta cng c th thc hin
c. u im ca vic dng lung k t l chng thao tc trc
tip trn cc k t Unicode. V vy lung k t l chn la tt
nht khi cn lu nhng vn bn Unicode.
Hai lp lung thng dng cho vic c/ghi d liu k t
xung file l FileReader v FileWriter.
V d: c nhng dng vn bn nhp t bn phm v ghi chng
xung file tn l test.txt. Vic c v ghi kt thc khi ngi
dng nhp vo chui stop.
import java.io.*;
class KtoD
{
public static void main(String args[]) throws IOException
{
String str;
FileWriter fw;
152

BufferedReader br = new BufferedReader(


new InputStreamReader(System.in));
try
{
fw = new FileWriter("D:\\test.txt");
}
catch(IOException exc)
{
System.out.println("Khong the mo file.");
return ;
}
System.out.println("Nhap ('stop' de ket thuc chuong
trinh).");
do
{
System.out.print(": ");
str = br.readLine();
if(str.compareTo("stop") == 0) break;
str = str + "\r\n";
fw.write(str);
} while(str.compareTo("stop") != 0);
fw.close();
}
}
Kt qu thc thi chng trnh
D liu nhp t Console:

153

D liu ghi xung file:

V d: c v hin th ni dung ca file test.txt ln mn hnh.


import java.io.*;
class DtoS
{
public static void main(String args[]) throws Exception
{
FileReader fr = new FileReader("D:\\test.txt");
BufferedReader br = new BufferedReader(fr);
String s;
while((s = br.readLine()) != null)
{
System.out.println(s);
}
fr.close();
}
}
Kt qu thc thi chng trnh
Ni dung ca file test.txt:

154

Kt qu c file v hin th ra Console:

5.6.Lp File
Lp File khng phc v cho vic nhp/xut d liu trn
lung. Lp File thng c dng bit c cc thng tin
chi tit v tp tin cng nh th mc (tn, ngy gi to, kch
thc, )
java.lang.Object
+--java.io.File

Cc Constructor:
To i tng File t ng dn tuyt i
public File(String pathname)
v d: File f = new File(C:\\Java\\vd1.java);
To i tng File t tn ng dn v tn tp tin tch bit
public File(String parent, String child)
v d: File f = new File(C:\\Java, vd1.java);
To i tng File t mt i tng File khc
public File(File parent, String child)
v d:
File dir = new File (C:\\Java);
File f = new File(dir, vd1.java);

155

Mt s phng thc thng gp ca lp File (chi tit v cc


phng thc c thm trong ti liu J2SE API Specification)
public String getName()
public String getPath()

Ly tn ca i tng File
Ly ng dn ca tp tin

public boolean isDirectory()

Kim tra xem tp tin c phi


l th mc khng?
Kim tra xem tp tn c phi l
mt file khng?

public boolean isFile()

public String[] list()

Ly danh sch tn cc tp tin


v th mc con ca i tng
File ang xt v tr v trong
mt mng.

V d:
import java.awt.*;
import java.io.*;
public class FileDemo
{
public static void main(String args[])
{
Frame fr = new Frame ("File Demo");
fr.setBounds(10, 10, 300, 200);
fr.setLayout(new BorderLayout());
Panel p = new Panel(new GridLayout(1,2));
List list_C = new List();
list_C.add("C:\\");
File driver_C = new File ("C:\\");
String[] dirs_C = driver_C.list();

156

for (int i=0;i<dirs_C.length;i++)


{ File f = new File ("C:\\" + dirs_C[i]);
if (f.isDirectory())
list_C.add("<DIR>" + dirs_C[i]);
else
list_C.add(" " + dirs_C[i]);
}
List list_D = new List();
list_D.add("D:\\");
File driver_D = new File ("D:\\");
String[] dirs_D = driver_D.list();
for (int i=0;i<dirs_D.length;i++)
{ File f = new File ("D:\\" + dirs_D[i]);
if (f.isDirectory())
list_D.add("<DIR>" + dirs_D[i]);
else
list_D.add(" " + dirs_D[i]);
}
p.add(list_C);
p.add(list_D);
fr.add(p, BorderLayout.CENTER);
fr.setVisible(true);
}
}
Kt qu thc thi chng trnh:

157

Chng 6: LP TRNH C S D LIU

6.1.GII THIU
Hu ht cc chng trnh my tnh hin ny u t nhiu lin
quan n vic truy xut thng tin trong cc c s d liu. Chnh
v th nn cc thao tc h tr lp trnh c s d liu l chc
nng khng th thiu ca cc ngn ng lp trnh hin i, trong
c Java. JDBC API l th vin cha cc lp v giao din h
tr lp trnh vin Java kt ni v truy cp n cc h c s d
liu.
Phin bn JDBC API mi nht hin nay l 3.0, l mt thnh
phn trong J2SE, nm trong 2 gi th vin:
java.sql: cha cc lp v giao din c s ca
JDBC API.
javax.sql: cha cc lp v giao din m rng.
JDBC API cung cp c ch cho php mt chng trnh vit
bng Java c kh nng c lp vi cc h c s d liu, c kh
nng truy cp n cc h c s d liu khc nhau m khng cn
vit li chng trnh. JDBC n gin ha vic to v thi hnh
cc cu truy vn SQL trong chng trnh.
6.2.KIN TRC JDBC
Kin trc ca ca JDBC tng t nh kin trc ODBC do
Microsoft xy dng. Theo kin trc ny cc thao tc lin quan
n c s d liu trong chng trnh c thc hin thng qua
cc JDBC API. Sau cc JDBC API s truyn cc yu cu ca
chng trnh n b qun l trnh iu khin JDBC, l b phn
c nhim v la chn trnh iu khin thch hp c th lm
vic vi c s d liu c th m chng trnh mun kt ni.

158

Nh vy kin trc ca JDBC gm 2 tng: tng u tin l cc


JDBC API, c nhim v chuyn cc cu lnh SQL cho b qun
l trnh iu khin JDBC; tng th 2 l cc JDBC Driver API,
thc hin nhim v lin h v trnh iu khin ca h qun tr
c s d liu c th.

159

Hnh bn di minh ha cc lp v giao din c bn trong


JDBC API.

6.3.Cc khi nim c bn


6.3.1.JDBC Driver
c th tin hnh truy cp n cc h qun tr c s d liu s
dng k thut JDBC, chng ta cn phi c trnh iu khin
JDBC ca h qun tr CSDL m chng ta ang s dng. Trnh
iu khin JDBC l on chng trnh, do chnh nh xy dng
h qun tr CSDL hoc do nh cung ng th ba cung cp, c
kh nng yu cu h qun tr CSDL c th thc hin cc cu
lnh SQL.
Danh sch cc trnh iu khin JDBC cho cc h qun tr CSDL
khc nhau c Sun cung cp v cp nht lin tc ti a ch:
http://industry.java.sun.com/products/jdbc/drivers.
Cc trnh iu khin JDBC c phn lm 04 loi khc nhau.
Loi 1: c tn gi l Bridge Driver. Trnh iu
khin loi ny kt ni vi cc h CSDL thng qua
cu ni ODBC. y chnh l chnh iu khin
160

c s dng ph bin nht trong nhng ngy u


Java xut hin. Tuy nhin, ngy nay trnh iu
khin loi ny khng cn ph bin do c nhiu
hn ch. Trnh iu khin loi ny lun c cung
cp
km
trong
b
J2SE
vi
tn:
sun.jdbc.odbc.JdbcOdbcDriver.

Loi 2: c tn gi l Native API Driver. Trnh


iu khin loi ny s chuyn cc li gi ca
JDBC API sang th vin hm (API) tng ng
vi tng h CSDL c th. Trnh iu khin loi
ny thng ch do nh xy dng h CSDL cung
cp. c th thi hnh chng trnh m lnh
lm vic vi h CSDL c th cn phi c cung
cp i km vi chng trnh.

Loi 3: c tn gi l JDBC-Net Driver. Trnh


iu khin loi ny s chuyn cc li gi JDBC
API sang mt dng chun c lp vi cc h
CSDL, v sau c chuyn sang li gi ca h
CSDL c th bi 1 chng trnh trung gian. Trnh
iu khin ca cc nh cung ng th 3 thng
thuc loi ny. Li th ca trnh iu khin loi
161

ny l khng cn cung cp m lnh km theo v


c th s dng cng mt trnh iu khin truy
cp n nhiu h CSDL khc nhau.

Loi 4: c tn gi l Native Protocol Driver.


Trnh iu khin loi ny chuyn cc li gi
JDBC API sang m lnh ca h CSDL c th. y
l cc trnh iu khin thn Java, c ngha l
khng cn phi c m lnh ca h CSDL c th
khi thi hnh chng trnh.

6.3.2.JDBC URL
c th kt ni vi CSDL, chng ta cn xc nh ngun d
liu cng vi cc thng s lin quan di dng 1 URL nh sau:
jdbc:<subprotocol>:<dsn>:<others>
Trong :
<subprotocol>: c dng xc nh trnh iu
khin kt ni vi CSDL.
<dsn>: a ch CSDL. C php ca <dsn> ph
thuc vo tng trnh iu khin c th.
<other>: cc tham s khc
V d:

162

jdbc:odbc:dbname l URL kt ni vi CSDL


tn dbname s dng cu ni ODBC.
jdbc:microsoft:sqlserver://hostname:1433 l URL
kt ni vi CSDL Microsoft SQL Server.
Trong hostname l tn my ci SQL Server.

6.4.KT NI CSDL VI JDBC


Vic kt ni vi CSDL bng JDBC c thc hin qua hai
bc: ng k trnh iu khin JDBC; tip theo thc thi
phng thc getConnection() ca lp DriverManager.
6.4.1.ng k trnh iu khin
Trnh iu khin JDBC c np khi m bytecode ca n c
np vo JVM. Mt cch n gin thc hin cng vic ny l
thc thi phng thc Class.forName(<JDBC Driver>).
V d: np trnh iu khin s dng cu ni ODBC do Sun
cung cp, chng ta s dng cu lnh sau
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver).
6.4.2.Thc hin kt ni
Sau khi np trnh iu khin JDBC, vic kt ni vi CSDL
c thc hin vi mt trong cc phng thc sau trong lp
DriverManager:
public static Connection getConnection(String url)
throws SQLException: thc hin kt ni vi
CSDL c yu cu. B qun l trnh iu khin
s t ng la chn trnh iu khin ph hp trong
s cc trnh iu khin c np.
public static Connection getConnection(String url,
String user, String pass) throws SQLException:
tin hnh kt ni ti CSDL vi ti khon user v
mt m pass.
public static Connection getConnection(String url,
Properties info) throws SQLException: tng t
hai phng thc trn ngoi ra cung cp thm cc
163

thng tin qui nh thuc tnh kt ni thng qua i


tng ca lp Properties.
Kt qu tr v ca cc phng thc trn l mt i tng ca
lp java.sql.Connection c dng i din cho kt ni n
CSDL.
6.4.3.V d
Trong phn v d ny chng ta s tm hiu cc cch khc nhau
kt ni vi tp tin CSDl Access movies.mdb c mt bng tn
Movies. Bng ny gm cc ct number, title, category v fomat.
c th tin hnh kt ni vi Microsoft Access thng qua cu

ni ODBC sau khi to tp tin CSDL movies.mdb, chng ta


cn phi to Data Source Name cho CSDL bng cch vo
Control Panel v chn ODBC Data Source.

164

Tip theo nhn vo nt Add, bn s thy hin th danh sch cc


trnh iu khin CSDL hin c.

165

Bn chn Microsoft Access Driver(*.mdb) v nhn Finish. Ca


s cu hnh cho tp tin Access s xut hin v nhp moviesDSN
vo Data Source Name

Bn nhn nt Select v chn tp tin CSDL cn to data source


name. Sau nhn OK kt thc.

166

Sau khi hon tt cng vic to DSN cho tp tin movies.mdb,


chng ta c th s dng on m sau tin hnh kt ni vi
tp tin movies.mdb.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestConnection{
public static void main(String args[]) {
Connection connection = null;
if( args.length != 1) {
System.out.println("Syntax: java TestConnection " +
"DSN");
return;
}
try { // load driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("Loading the driver...");
}
catch( Exception e ) { //problem load driver,class not
exist
e.printStackTrace( );
return;
}
try {
String dbURL = "jdbc:odbc:" + args[0];
System.out.println("Establishing connection...");
connection =
DriverManager.getConnection(dbURL,"","");
System.out.println("Connect to +
connection.getCatalog() + successfully!");
// Do whatever queries or updates you want here!!!
}
catch( SQLException e ) {
e.printStackTrace( );
}
167

finally {
if( connection != null ) {
try { connection.close( ); }
catch( SQLException e ) {
e.printStackTrace( );
}
}
}
}
}
Sau khi bin dch on chng trnh trn, chng ta c th thc
hin kt ni vi CSDL bng cch thc thi cu lnh:
java TestConnection moviesDSN

6.5.KIU D LIU SQL V KIU D LIU JAVA


Trong qu trnh thao tc vi CSDL, chng ta s gp phi vn
chuyn i gia kiu d liu trong CSDL sang kiu d liu Java
h tr v ngc lai. Vic chuyn i ny c thc hin nh
trong 2 bng sau.
SQL Type
BIT
TINYINT
SMALLINT
INTEGER
BIGINT
REAL
FLOAT
DOUBLE

Java Type
Boolean
Byte
Short
Int
Long
Float
Double
Double

168

DECIMAL
NUMERIC
CHAR
VARCHAR
LONGVARCHAR
DATE
TIME
TIMESTAMP
BINARY
VARBINARY
LONGVARBINARY
BLOB
CLOB
ARRAY
REF
STRUCT

java.math.BigDecimal
java.math.BigDecimal
java.lang.String
java.lang.String
java.lang.String
java.sql.Date
java.sql.Time
java.sql.Timestamp
byte[ ]
byte[ ]
byte[ ]
java.sql.Blob
Java.sql.Clob
Java.sql.Array
Java.sql.Ref
Java.sql.Struct

Bng chuyn i t kiu d liu SQL sang Java


Java Type
boolean
byte
short
int
long
float
double
java.math.BigDecimal
java.lang.String
byte[ ]
java.sql.Date
java.sql.Time
java.sql.Timestamp
java.sql.Blob
java.sql.Clob
java.sql.Array
java.sql.Ref

SQL Type
BIT
TINYINT
SMALLINT
INTEGER
BIGINT
REAL
DOUBLE
NUMERIC
VARCHAR or
LONGVARCHAR
VARBINARY or
LONGVARBINARY
DATE
TIME
TIMESTAMP
BLOB
CLOB
ARRAY
REF

169

java.sql.Struct

STRUCT

Bng chuyn i t kiu d liu Java sang SQL


6.6.CC THAO TC C BN TRN CSDL
Cc thao tc truy vn CSDL ch c th c thc hin sau khi
c i tng Connection, c to ra t qu trnh kt ni vo
CSDL. Chng ta s dng i tng ca lp Connection to
ra cc th hin ca lp java.sql.Statement. Sau khi to ra cc i
tng ca lp Statement chng ta c th thc hin cc thao tc
trong cc i tng statement trn connection tng ng.
Ni dung trong mt statement chnh l cc cu SQL. Cu lnh
SQL trong cc statement ch c thc hin khi chng ta gi
chng n CSDL. Nu cu ln SQL l mt cu truy vn ni
dung th kt qu tr v s l mt th hin ca lp
java.sql.ResultSet, ngc li (cc cu lnh thay i ni dung
CSDL) s tr v kt qu l m s nguyn. Cc i tng ca
lp ResultSet cho php chng ta truy cp n kt qu tr v ca
cc cu truy vn.
6.6.1.Cc lp c bn

java.sql.Statement
Statement l mt trong 3 lp JDBC c bn dng th
hin mt cu lnh SQL. Mi thao tc trn CSDL c
thc hin thng qua 3 phng thc ca lp Statement.
Phng thc executeQuery() nhn vo 1 tham s l
chui ni dung cu ln SQL v tr v 1 i tng kiu
ResultSet. Phng thc ny c s dng trong cc
trng hp cu lnh SQL c tr v cc kt qu trong
CSDL.
Phng thc executeUpdate() cng nhn vo 1 tham s
l chui ni dung cu lnh SQL. Tuy nhin phng thc
ny ch s dng c i vi cc cy lnh cp nht ni
dung CSDL. Kt qu tr v l s dng b tc ng bi
cu lnh SQL.
170

Phng thc execute() l trng hp tng qut ca 2


phng thc trn. Phng thc nhn vo chui ni dung
cu lnh SQL. Cu lnh SQL c th l cu lnh truy vn
hoc cp nht. Nu kt qu ca cu lnh l cc dng
trong CSDL th phng thc tr v gi tr true, ngc li
tr v gi tr false. Trong trng hp gi tr true, sau
chng ta c th dng phng thc getResultSet() ly
cc dng kt qu tr v.
java.sql.ResultSet
i tng resultset l cc dng d liu tr v ca cu
lnh truy vn CSDL. Lp ny cung cp cc phng thc
rt trch cc ct trong tng dng kt qu tr v. Tt
c cc phng thc ny u c dng:
type getType(int | String)
Trong tham s c th l s th t ca ct hoc tn ct
cn ly ni dung.
Ti 1 thi im chng ta ch c th thao tc trn 1 dng
ca resultset. thao tc trn dng tip theo chng ta s
dng phng thc next(). Phng thc tr v gi tr true
trong trng hp c dng tip theo, ngc li tr v gi
tr false.

6.6.2.V d truy vn CSDL


public class Movie{
private String movieTitle, category, mediaFormat;
private int number;
public Movie(int n, String title, String cat, String format){
number = n;
movieTitle = title;
category = cat;
mediaFormat = format;
}
171

public int getNumber(){return number;}


public String getMovieTitle(){return movieTitle;}
public String getCategory(){return category;}
public void setCategory(String c){category = c;}
public String getFormat(){return mediaFormat;}
public void setFormat(String f){mediaFormat = f;}
public String toString(){
return number + ": " + movieTitle + " - " + category + "
"
+ mediaFormat;
}
}

import java.sql.*;
public class MovieDatabase{
private Connection connection;
private PreparedStatement findByNumber, updateCategory;
private CallableStatement findByCategory;
public MovieDatabase(Connection connection) throws
SQLException{
this.connection = connection;
}
public void showAllMovies(){
try{
Statement selectAll = connection.createStatement();
String sql = "SELECT * FROM Movies";
172

ResultSet results = selectAll.executeQuery(sql);


while(results.next()){
int number = results.getInt(1);
String title = results.getString("title");
String category = results.getString(3);
String format = results.getString(4);
Movie movie = new Movie(number, title, category,
format);
System.out.println(movie.toString());
}
results.close();
selectAll.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
import java.sql.*;
public class ShowMovies{
public static void main(String [] args){
String url = "jdbc:odbc:" + args[0];
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection =
DriverManager.getConnection(url);
MovieDatabase
db
=
new
MovieDatabase(connection);
db.showAllMovies();
connection.close();
}
catch(Exception e){
173

e.printStackTrace();
}
}
}
6.6.3.V d cp nht CSDL
Phng thc addMovie() bn di c thm vo lp
MovieDatabase nh ngha v d trn.
public class MovieDatabase{

public void addMovie(Movie movie){


System.out.println(Adding movie: + movie.toString());
try{
Statement addMovie = connection.createStatement();
String sql = INSERT INTO Movies VALUES(
+ movie.getNumber() + ,
+ + movie.getMovieTitle() + ,
+ + movie.getCategory() + ,
+ + movie.getFormat() + );
System.out.println(Executing statement: + sql);
addMovie.executeUpdate(sql);
addMovie.close();
System.out.println(Movie added successfully!);
}
catch(SQLException e){
e.printStackTrace();
}
}
}
import java.sql.*;
public class AddMovies{
public static void main(String [] args){
String url = jdbc:odbc: + args[0];
174

System.out.println(Attempting to connect to + url);


try{
System.out.println(Loading the driver...);
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
System.out.println(Establishing a connection...);
Connection connection =
DriverManager.getConnection(url);
System.out.println(Connect to
+ connection.getCatalog() + a success!);
MovieDatabase
db
=
new
MovieDatabase(connection);
Movie [] movies = new Movie[6];
movies[0] = new Movie(1, Star Wars: A New Hope,
Science Fiction, DVD);
movies[1] = new Movie(2, Citizen Kane, Drama,
VHS);
movies[2] = new Movie(3, The Jungle Book,
Children, VHS);
movies[3] = new Movie(4, Dumb and Dumber,
Comedy, DVD);
movies[4] = new Movie(5, Star Wars: Attack of the
Clones, Science Fiction, DVD);
movies[5] = new Movie(6, Toy Story, Children,
DVD);
for(int i = 0; i < movies.length; i++){
db.addMovie(movies[i]);
}
System.out.println(Closing the connection...);
connection.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
175

Ti liu tham kho:


[1] java.sun.com
[2] Herbert Schildt. Java 2. A Beginners Guide. Second
Edition. McGraw-Hill - 2003.
[3] Dr. Harvey M. Deitel - Paul J. Deitel. Java How to
Program, 4th Ed (Deitel). Prentice Hall - 2002
[4] Simon Roberts Philip Heller Michael Ernest. Complete
Java 2 Certification study guide. BPB Publications 2000.
[5] Cay S. Horstmann Gary Cornell. Core Java Volum 1 Fundamentals. The Sun Microsystems press. 1997
[6] Cay S. Horstmann Gary Cornell. Core Java Volum 2
Advanced Features. The Sun Microsystems press. 1997

176

Ph lc A: Trc nghim kin thc


1.
a.
b.
c.
d.

Chn pht biu ng


InputStream v OuputStream l 2 lung d liu kiu byte
Reader v Writer l 2 lung d liu kiu character.
Cu a) v b) ng
Tt c cc cu trn u sai

2. Cho bit s byte m on chng trnh sau ghi ra tp tin


temp.txt

a.
b.
c.
d.

2 bytes
4 bytes
8 bytes
16 bytes

3. Chn pht biu ng


a. Mt th hin ca lp File c th c dng truy cp cc
tp tin trong th mc hin hnh
b. Khi mt th hin ca lp File c to ra th mt tp tin
tng ng cng c to ra trn a.
c. Cc th hin ca lp File c dng truy cp n cc tp
tin v th mc trn a
d. Cu a) v c) ng
177

4. Cho bit cch to mt th hin ca InputStreamReader t


mt th hin ca InputStream.
a. S dng phng thc createReader() ca lp InputStream
b. S dng phng thc createReader() ca lp
InputStreamReader
c. To mt th hin ca InputStream ri truyn vo cho hm
khi to ca InputStreamReader
d. Tt c cc cu trn u sai
5. Chn pht biu ng
a. Lp Writer c th c dng ghi cc k t c cch m
ha khc nhau ra lung xut
b. Lp Writer c th c dng ghi cc k t Unicode ra
lung xut
c. Lp Writer c th c dng ghi gi tr cc kiu d liu
c s ra lung xut
d. Cu a) v b) ng
6. Chn pht biu ng:
a. Cc event listeners l cc interface qui nh cc phng
thc cn phi ci t x l cc s kin lin quan khi s kin
xy ra.
b. Mt event adapter l mt cung cp cc ci t mc nh cho
cc event listener tng ng
c. Lp WindowAdapter c dng x l cc s kin lin
quan n ca s mn hnh.
d. Tt c cc cu trn u ng
7. Khi c nhiu component c gn cc b lng nghe ca
cng mt loi s kin th component no s nhn c s kin
u tin?
a. Component u tin c gn b lng nghe s kin
b. Component cui cng c gn b lng nghe s kin
c. Khng th xc nh component no s nhn trc

178

d. Khng th c nhiu hn mt b lng nghe cho cng mt


loi s kin
8.
a.
b.
c.
d.

Chn cc component c pht sinh action event


Button
Label
Checkbox
Windows

9.
a.
b.
c.
d.

Chn pht biu ng


Th hin ca TextField c th pht sinh ActionEvent
Th hin ca TextArea c th pht sinh ActionEvent
Th hin ca button c th pht sinh ActionEvent
Cu a) v c) ng

10. Chn pht biu ng


a. MouseListener interface nh ngha cc phng thc x
l s kin nhn chut.
b. MouseMotionListener interface nh ngha cc phng thc
x l s kin nhn chut.
c. MouseClickListener interface nh ngha cc phng thc
x l s kin nhn chut.
d. Tt c cc cu trn u ng
11. Gi s chng ta c th hin e ca b lng nghe s kin
TextEvent v th hin t ca lp TextArea. Cho bit cch gn
b lng nghe e vo t?
a. t.addTextListener(e)
b. e.addTextListener(t)
c. addTextListener(e,t)
d. addTextListener(t,e)
12. Mn hnh sau s dng kiu trnh by no?

179

a.
b.
c.
d.

CardLayout
nullLayout
BorderLayout
SetLayout

13. Mn hnh sau s dng kiu trnh by no?

a.
b.
c.
d.

GridLayout
FlowLayout
BorderLayout
GridBagLayout

14. Cho mt component comp v mt container cont c kiu


trnh by l BorderLayout. Cho bit cch gn comp vo v tr
u ca cont.
a. addTop(cont,comp)
b. comp.add(North, cont)
c. cont.addTop(comp)
d. cont.add(comp,BorderLayout.NORTH)
15. Cho mt component comp v mt container cont c kiu
trnh by l FlowLayout. Cho bit cch gn comp vo cont.
180

a.
b.
c.
d.

cont.add(comp)
comp.add(cont)
cont.addComponent(comp)
cont.addAllComponents()

16. Chn phng thc dng xc nh cch trnh by ca mt


khung cha
a. startLayout()
b. initLayout()
c. layoutContainer()
d. setLayout()
17. Chn phng thc dng xc nh v tr v kch thc ca
cc component
a. setBounds()
b. setSizeAndPosition()
c. setComponentSize()
d. setComponent()
18. Chn kiu trnh by t cc component trn khung cha
di dng bng.
a. CardLayout
b. BorderLayout
c. GridLayout
d. FlowLayout
19. Chn phng thc dng gn ni dung cho Label
a. setText()
b. setLabel()
c. setTextLabel()
d. setLabelText()
20. Chn pht biu ng
a. TextComponent extends TextArea
b. TextArea extends TextField
181

c. TextField extends TextComponent


d. TextComponent extends TextField
21. Chn pht biu ng
a. Lp CheckboxGroup dng nh ngha c RadioButtons
b. Lp RadioGroup dng nh ngha c RadioButtons
c. Tt c cc cu trn u ng
d. Tt c cc cu trn u sai
22. Chn cu lnh to ra TextArea c 10 dng v 20 ct
a. new TexArea(10,20)
b. new TexArea(20,10)
c. new TexArea(200)
d. Tt c cc cu trn u sai
23. Chn cu lnh to ra mt danh sch gm 5 mc chn v
cho php thc hin chn nhiu mc cng lc
a. new List(5, true)
b. new List(true, 5)
c. new List(5, false)
d. new List(false, 5)
24. Chn phng thc hin th Frame ln mn hnh
a. setVisible()
b. display()
c. displayFrame()
d. Tt c cc cu trn u sai
25. Chn pht biu ng
a. Lp Class l lp cha ca lp Object
b. Lp Object l mt lp final
c. Mi lp k tha trc tip hoc gin tip t lp Object
d. Tt c cc cu trn u sai

182

26. Lp no sau y dng thc hin cc thao tc nhp xut


c bn vi console
a. System
b. Math
c. String
d. StringBuffer
27. Lp no sau y khng phi l lp bao?
a. String
b. Integer
c. Boolean
d. Character
28. on m sau sai ch no?

a. on m khng c li
b. iu kin ca cu lnh if phi c kiu boolean thay v
Boolean
c. Ch s ca cu lnh for l int thay v Integer
d. Cu b) v c)
29. Phng thc no sau y s lm cho gi tr bin s b thay
i
a. s.concat()
183

b. s.toUpperCase()
c. s.replace()
d. Cu a) v b) ng
30. Hy cho bit kt xut ca on chng trnh sau:

a.
b.
c.
d.

S1
S2
S1S2
S2S1

31. Chn pht biu ng cho hm khi to


a. Mt lp s kt tha cc hm khi to t lp cha
b. Trnh bin dch s t ng to hm khi to mc nh nu
lp khng nh ngha hm khi to
c. Tt c cc hm khi to c kiu tr v l void
d. Tt c cc cu trn u sai
32. Cho bit kt xut ca on chng trnh sau:

184

a.
b.
c.
d.

S1
S2
null
S1S2

33. Mt kiu d liu s c du c 2 gi tr +0 v -0 bng nhau:


a. ng
b. Sai
c. Ch ng vi kiu s nguyn
d. Ch ng vi kiu s thc
34. Chn khai bo tn ng
a. Big01LongStringWidthMeaninglessName
b. $int
c. bytes
d. Tt c cc cu trn u ng

185

35. Chn khai bo ng cho phng thc main()


a. public static void main( )
b. public void main(String[] arg)
c. public static void main(String[] args)
d. public static int main(String[] arg)
36. Chn th t ng ca cc thnh phn trong mt tp tin
ngun
a. Cu lnh import, khai bo package, khai bo lp.
b. Khai bo package u tin; th t ca cu lnh import v
khai bo lp l ty .
c. Khai bo package, cu lnh import, khai bo lp
d. Cu lnh import trc tin; th t ca khai bo package v
khai bo lp l ty .
37. Cho cu lnh sau:
int[] x = new int[25];
Chn kt qu ng sau khi thi hnh cu lnh trn
a. x[24] cha c nh ngha
b. x[25] c gi tr 0
c. x[0] = c gi tr null
d. x.length = 25
38. Cho on m sau:
1 : class Q6{
2:
public static void main(String args[]){
3:
Holder h = new Holder();
4:
h.held = 100;
5:
h.bump(h);
6:
System.out.println(h.held);
7:
}
8: }
9 : class Holder{
10 :
public int held;
11 :
public void bump(Holder theHolder){
186

12 :
theHolder.held++;
13 :
}
14 :
}
Gi tr in ra ca cu lnh dng th 6 l:
a. 0
b. 1
c. 100
d. 101
39. Cho on m sau:
1 : class Q7{
2:
public static void main(String args[]){
3:
double d = 12.3;
4:
Decrementer dec = new Decrementer();
5:
dec.decrement(d);
6:
System.out.println(d);
7:
}
8: }
9 : class Decrementer{
10 :
public void decrement(double decMe){
11 :
decMe = decMe 1.0;
12 :
}
13 :
}
Gi tr in ra ca cu lnh dng th 6 l:
a. 0.0
b. -1.0
c. 12.3
d. 11.3
40. Min gi tr ca bin kiu short l:
a. N ph thuc vo nn phn cng bn di
b. T 0 n 216 1
c. T -215 n 215 1
d. T -231 n 231 1

187

41. Min gi tr ca bin kiu byte l:


a. N ph thuc vo nn phn cng bn di
b. T 0 n 28 1
c. T -27 n 27 1
d. T -215 n 215 1
42. Cho bit gi tr ca x, a v b sau khi thi hnh on m sau:
1 : int x, a = 6, b = 7;
2 : x = a++ + b++;
a. x = 15, a = 7, b = 8
b. x = 15, a = 6, b = 7
c. x = 13, a = 7, b = 8
d. x = 13, a = 6, b = 7
43. Biu thc no sau y l hp l
a. int x = 6;x = !x;
b. itn x = 6; if (!(x > 3)) {}
c. int x = 6; x = ~x;
d. Cu b) v c) ng
44. Biu thc no sau y cho x c gi tr dng:
a. int x = -1; x = x >>> 5;
b. int x = -1; x = x >>> 32;
c. byte x = -1; x = x >>> 5;
d. int x = -1; x = x >> 5;
45. Biu thc no sau y hp l
a. String x = Hello; int y = 9; x +=y;
b. String x = Hello; int y = 9; x = x + y;
c. String x = null; int y = (x != null) && (x.length() > 0) ?
x.length() : 0;
d. Tt c cc cu trn u ng
46. on m no sau y in ra mn hnh ch Equal:
a.
188

int x = 100; float y = 100.0F;


if (x == y)
{
System.out.println(Equal);
}
b.
Integer x = new Integer(100);
Integer y = new Integer(100);
if (x == y)
{
System.out.println(Equal);
}
c.
String x = 100; String y = 100;
if (x == y)
{
System.out.println(Equal);
}
d. Cu a. v c. ng
47. Cho bit kt qu sau khi thi hnh chng trnh sau:
1 : public class Short{
2:
public static void main(String[] args){
3:
StringBuffer s = new StringBuffer(Hello);
4:
if ((s.length() > 5) &&
5:
s.append( there).equals(False)))
6:
;//do nothing
7:
System.out.println(value is + s);
8:
}
9: }
a. Gi tr xut l Hello
b. Li bin dch ti dng 4 v 5
c. Khng c gi tr xut
d. Thng bo NullPointerException
189

48. Cho bit kt qu sau khi thc hin chng trnh sau:
1 : public class Xor{
2:
public static void main(String[] args){
3:
byte b = 10;//00001010
4:
byte c = 15;//00001111
5:
b = (byte)(b ^ c);
6:
System.out.println(b contains + b);
7:
}
8: }
a. Kt qu l: b contains 10
b. Kt qu l: b contains 5
c. Kt qu l: b contains 250
d. Kt qu l: b contains 245
49. Cho bit kt qu sau khi bin dch v thi hnh chng trnh
sau:
1 : public class Conditional{
2:
public static void mai n(String[] args){
3:
int x = 4;
4:
System.out.println(value is +
5:
((x > 4 ? 99.99 : 9));
6:
}
7: }
a. Kt qu l: value is 99.99
b. Kt qu l: value is 9
c. Kt qu l: value is 9.0
d. Li bin dch ti dng s 5
50. Cho bit kt qu ca on m sau:
1 : int x = 3; int y = 10;
2 : System.out.println(y % x);
a. 0
b. 1
c. 2
d. 3
190

51. Chn cu khai bo khng hp l


a. String s;
b. abstract double d;
c. abstract final double hyperbolCosine();
d. Tt c cc cu trn u ng
52. Chn cu pht biu ng
a. Mt lp tru tng khng th cha phng thc final
b. Mt lp final khng th cha cc phng thc tru tng
c. C a) v b) u ng
d. C a) v b) u sai
53. Chn cch sa t nht on m sau bin dch ng
3 : final class Aaa
4: {
5:
int xxx;
6:
void yyy(){xxx = 1;}
7: }
8:
9:
10 :
class Bbb extends Aaa
11 :
{
12 :
final Aaa finalRef = new Aaa();
13 :
14 :
final void yyy()
15 :
{
16 :
System.out.println(In method yyy());
17 :
finalRef.xxx = 12345;
18 :
}
19 :
}
a. Xa t final dng 1
b. Xo t final dng 10
c. Xa t final dng 1 v 10
d. Khng cn phi chnh sa g

191

54. Chn pht biu ng cho chng trnh sau


1 : class StaticStuff
2: {
3:
static int x = 10;
4:
5:
static {x += 5;}
6:
7:
public static void main(String args[])
8:
{
9:
System.out.pritln(x = + x);
10 :
}
11 :
12 :
static {x /= 5}
13 :
}
a. Li bin dch ti dng 5 v 12 bi v thiu tn phng thc
v kiu tr v
b. Chng trnh chy v cho kt qu x = 10
c. Chng trnh chy v cho kt qu x = 15
d. Chng trnh chy v cho kt qu x = 3
55. Chn pht biu ng cho chng trnh sau:
1 : class HasStatic
2: {
3:
private static int x = 100;
4:
5:
public static void main(String args[])
6:
{
7:
HasStatic hs1 = new HasStatic();
8:
hs1.x++;
9:
HasStatic hs2 = new HasStatic();
10 :
hs2.x++;
11 :
hs1 = new HasStatic();
12 :
hs1.x++;
13 :
HasStatic.x++;
14 :
System.out.println(x = + x);
192

15 :
}
16 :
}
a. Chng trnh chy v cho kt qu x = 102
b. Chng trnh chy v cho kt qu x = 103
c. Chng trnh chy v cho kt qu x = 104
d. Tt c cc cu trn u sai
56. Cho on m sau:
1 : class SuperDuper
2: {
3:
void aMethod(){}
4: }
5:
6 : class Sub extends SuperDuper
7: {
8:
void aMethod(){}
9: }
Hy chn t kha ch phm vi hp l ng trc aMethod()
dng 8
a. default
b. protected
c. public
d. Tt c cc cu trn u ng

1:
2:
3:
4:
5:
6:
7:
8:

on m sau dng cho 2 cu hi tip theo


package abcde;
public class Bird{
protected static int referneceCount = 0;
public Bird(){referenceCount++;}
protected void fly(){}
static int getRefCount(){return referenceCount;}
}

57. Chn pht biu ng cho lp Bird trn v lp Parrot sau:


193

1 : package abcde;
2:
3 : class Parrot extends abcde.Bird{
4:
public void fly(){
5:
//
6:
}
7:
public int getRefCount(){
8:
return referenceCount;
9:
}
10 :
}
a. Li bin dch dng 4 tp tin Parrot.java v phng thc
fly() l protected trong lp cha v lp Bird v Parrot nm trong
cng package
b. Li bin dch dng 4 tp tin Parrot.java v phng thc
fly() l protected trong lp cha v public trong lp con.
c. Li bin dch dng 7 tp tin Parrot.java v phng thc
getRefCount() l static trong lp cha.
d. Chng trnh bin dch thnh cng nhng s pht sinh
Exception khi chy nu phng thc fly() ca lp Parrot khng
c gi
58. Chn pht biu ng cho lp Bird trn v lp Nightingale
sau:
1 : package singers;
2:
3 : class Nightingale extends abcde.Bird{
4:
Nightingale(){ refernceCount++;}
5:
6:
public static void main(String args[]){
7:
System.out.print(Before: + refernceCount);
8:
Nightingale florence = new Nightingale();
9:
System.out.print(After: + refernceCount);
10 :
florence.fly();
11 :
}
12 :
}
194

a. Kt qu trn mn hnh l: Before: 0


After: 2
b. Kt qu trn mn hnh l: Before: 0
After: 1
c. Li bin dch dng 4 ca lp Nightingale v khng th
overidde thnh vin static
d. Li bin dch dng 10 ca lp Nightingale v phng thc
fly() l protected trong lp cha.
59. Chn pht biu ng
a. Ch kiu d liu c s mi c chuyn i kiu t ng;
chuyn i kiu d liu ca bin tham chiu phi s dng
php p kiu
b. Ch bin tham chiu mi c chuyn i kiu t ng;
chuyn kiu ca 1 bin kiu c s phi s dng php ton p
kiu
c. C kiu d liu c s v kiu tham chiu u c th chuyn
i t ng v p kiu
d. Php p kiu i vi d liu s c th cn php kim tra khi
thc thi
60. Dng lnh no sau y s khng th bin dch:
1 : byte b = 5;
2 : char c = 5;
3 : short s = 55;
4 : int i = 555;
5 : float f = 555.5f;
6 : b = s;
7 : i = c;
8 : if (f > b)
9:
f = i;
a. Dng 3
b. Dng 4
c. Dng 5
d. Dng 6
61. Chn dng pht sinh li khi bin dch
195

1:
2:
3:
a.
b.
c.
d.

byte b = 2;
byte b1 = 3;
b = b * b1;
Dng 1
Dng 2
Dng 3
Tt c cc cu trn u ng

62. Trong on m sau kiu d liu ca bin result c th l


nhng kiu no?
1 : byte b = 11;
2 : short s =13;
3 : result = b * ++s;
a. byte, short, int, long, float, double
b. boolean, byte, short, char, int, long, float, double
c. byte, short, char, int, long, float, double
d. int, long, float, double
63. Cho on chng trnh sau:
1 : class Cruncher{
2:
void crunch(int i){
3:
System.out.println(int version):
4:
}
5:
void crunch(String s){
6:
System.out.println(String version);
7:
}
8:
9:
public static void main(String[] args){
10 :
Cruncher crun = new Cruncher();
11 :
char ch = p;
12 :
crun.crunch(ch);
13 : }
14 : }
a. Dng 5 s khng bin dch v phng thc tr v kiu void
khng th overridde
196

b. Dng 12 s khng bin dch v khng c phin bn no ca


phng thc crunch() nhn vo tham s kiu char
c. on m bin dch c nhng s pht sinh Exception
dng 12
d. Chng trnh chy v in ra kt qu: int version
64. Chn pht biu ng
a. Tham chiu ca i tng c th c chuyn i trong
php gn nhng khng th thc hin trong php gi phng
thc
b. Tham chiu ca i tng c th c p kiu trong php
gi phng thc nhng khng th thc hin trong php gn
c. Tham chiu ca i tng c th c chuyn i trong
php gi phng thc v php gn nhng tun theo nhng quy
tc khc nhau
d. Tham chiu ca i tng c th c chuyn i trong
php gi phng thc v php gn v tun theo nhng quy tc
ging nhau
65. Cho on m nh bn di. Hy cho bit dng no khng
th bin dch
1 : Object ob = new Object();
2 : String stringarr[] = new String[50];
3 : Float floater = new Float(3.14f);
4 : ob = stringarr;
5 : ob = stringarr[5];
6 : floater = ob;
7 : ob = floater;
a. Dng 4
b. Dng 5
a. Dng 6
b. Dng 7

197

Animal

Mammal

Dog

Cat
(implements
Washer)

Racoon
(implements
Washer)

Swamp
Thing

Hnh sau p dng cho cc cu 66, 67, 68


66. Cho on m sau:
1 :Dog
rover, fido;
2 :Animal anim;
3:
4 :rover = new Dog();
5 :anim = rover;
6 :fido = (Dog)anim;
Hy chn pht biu ng
a. Dng 5 khng th bin dch
b. Dng 6 khng th bin dch
c. on m bin dch thnh cng nhng s pht sinh
Exception ti dng 6
d. on m bin dch thnh cng v c th thi hnh
67. Cho on m sau:
1 :Cat sunflower;
2 :Washer wawa;
3 :SwampThing pogo;
4:
5 :sunflower = new Cat();
198

6 :wawa = sunflower;
7 :pogo = (SwampThing)wawa;
Hy chn pht biu
a. Dng 6 khng th bin dch; cn c mt php p kiu
chuyn t kiu Cat sang kiu Washer
b. Dng 7 khng th bin dch v khng th p t kiu
interface sang kiu class
c. on m s dch v chy nhng php p kiu dng 7 l
tha v c th b di
d. on m bin dch thnh cng nhng s pht sinh
Exceptiono dng 7 v kiu lp ca i tng trong bin wawa
lc thi hnh khng th chuyn sang kiu SwampThing
68. Cho on m sau
1 :Racoon rocky;
2 :SwampThing pogo;
3 :Washer w;
4:
5 :rocky = new Racooon();
6 :w = rocky;
7 :pogo = w;
a. Dng 6 s khng bin dch; cn phi c php p kiu
chuyn t kiu Racoon sang kiu Washer
b. Dng 7 s khng bin dch; cn c php p kiu chuyn
t kiu Washer sang kiu SwampThing
c. on m s bin dch nhng s pht sinh Exception dng
7 v chuyn i kiu khi thc thi t interface sang class l
khng c php
d. on m s bin dch v s pht sinh Exception dng 7 v
kiu lp ca w ti thi im thc thi khng th chuyn sang
kiu SwampThing
69. Cho on m sau:
1 : for (int i = 0; i < 2; i++){
2:
for (int j = 0; j < 3; j++){
199

3:
4:
5:
6:
7:
8: }

if (i == j){
continue;
}
System.out.println(i = + i + j = + j);
}

Dng no s l mt trong s cc kt qu c in ra?


a. i = 0 j = 0
b. i = 2 j = 1
c. i = 0 j = 2
d. i = 1 j = 1
70. Cho on m sau:
1 : outer: for (int i = 0; i < 2; i++){
2:
for (int j =0; j < 3; j++){
3:
if (i == j){
4:
continue outer;
5:
}
6:
System.out.println(i = + i + j = + j);
7:
}
8: }
Dng no s l mt trong s cc kt qu c in ra?
a. i = 0 j = 0
b. i = 0 j = 1
c. i = 0 j = 2
d. i = 1 j = 0
71. Chn vng lp ng
a.
1 : while (int i < 7){
2:
i++;
3:
System.out.println(i is + i);
4: }
b.
200

5:
6:
7:
8:
c.
1:
2:
3:
4:
d.
1:
2:
3:
4:
5:

int i = 3;
while (i){
System.out.println(i is + i);
}
int j = 0;
for(int k = 0; j + k != 10; j++, k++){
System.out.println(j is + j + k is + k);
}
int j = 0;
do{
System.out.println(j is + j++);
if (j == 3) { continue loop;}
}while (j < 10);

72. Cho bit kt xut ca on m sau


1 : int x = 0, y = 4, z = 5;
2 : if ( x > 2){
3:
if (y < 5){
4:
System.out.println(message one);
5:
}
6:
else{
7:
System.out.println(message two);
8:
}
9: }
10 : else if (z > 5){
11 :
System.out.println(message three);
12 : }
13 :
else{
14 :
System.out.println(message four);
15 :
}
a. message one
b. message two
c. message three
201

d. message four
73. Chn pht biu ng cho on m sau:
1 : int j = 2;
2 : switch (j){
3:
case 2:
4:
System.out.println(value is two);
5:
case 2 + 1:
6:
System.out.println(value is three);
7:
break;
8:
default:
9:
System.out.println(value is + j);
10 :
break;
11 :
}
a. on m khng hp l bi biu thc dng 5
b. Bin j trong cu trc switch() c th l mt trong cc kiu:
byte, short, int hoc long
c. Kt xut ca chng trnh ch l dng: value is two
d. Kt xut ca chng trnh ch l dng: value is two v
value is three
74. Cho bit kt qu sau khi dch v thc thi on chng trnh
sau:
1. import java.awt.*;
2.
3. public class Test extends Frame {
4. Test() {
5.
setSize(300,300);
6.
Button b = new Button(Apply);
7.
add(b);
8. }
9.
10.
public static void main(String args[]) {
11.
Test f = new Test();
12.
f.setVisible(true);
202

13.
}
14. }
a) C li bin dch ti dng 11 bi v constructor dng 4
khng khai bo public.
b) Chng trnh bin dch thnh cng nhng c s nm ra
exception khi thc thi cu lnh dng th 7.
c) Chng trnh hin th frame trng.
d) Chng trnh hin th 1 nt nhn (Button) s dng font ch
mc nh cho nhn ca Button. Button ch ln bao quanh
nhn ca n.
e) Chng trnh hin th nt nhn (Button) dng font ch mc
nh cho nhn nt. Nt nhn s chon tt c vng hin th ca
frame.
75. Nu 1 frame dng b qun l trnh by (layout manager) l
GridLayout v khng cha bt k panel hay container no khc
bn trong n th tt c nhng components khi a vo trong
frame ny c cng kch thc nh nhau (ngang, dc)?
a) ng.
b) Sai.
76. Nu 1 frame dng b qun l trnh by (layout manager)
mc nh v khng cha bt k panel no bn trong th tt c
nhng components bn trong frame l cng kch thc (ngang,
dc) ?
a) ng.
b) Sai.
77. Vi b qun l trnh by BorderLayout khng nht thit cc
vng phi c cha cc components.
a) ng.
b) Sai.
78. B qun l trnh by mc nh cho 1 khung cha kiu Panel
l:
203

a)
b)
c)
d)

FlowLayout
BorderLayout
GridLayout
GridBagLayout

79. Mt Container c b qun l trnh by l GridBagLayout th


mi component s c kch thc bng nhau khi thm vo khung
cha (container) ny?
a) ng
b) Sai
80. Bn c th to ra ca s chnh ca ng dng bng cch gi:
Frame f = new Frame(Main Frame);
Nhng khi bn chy chng trnh th Frame khng hin th.
Dng no bn di s lm hin th Frame.
a) f.setSize(300, 200);
b) f.setBounds(10, 10, 500, 400);
c) f.setForeground(Color.white);
d) f.setVisible(true);
81. i tng no bn di c th cha 1 menubar (chn
nhng cu ng)
a) Panel
b) ScrollPane
c) Frame
d) Menu
82. Sau khi to 1 frame bng cu lnh Frame f = new Frame()
v to menu bar bng cu lnh MenuBar mb = new MenuBar(),
lm th no gn MenuBar tn mb vo f.
a) f.add(mb)
b) f.setMenu(mb)
c) f.addMenu(mb)
d) f.setMenuBar(mb)

204

Ph Lc B: p n trc nghim kin thc


1.c; 2.b; 3.d; 4.c; 5.d; 6.d; 7.c; 8.a; 9.d; 10.a; 11.a; 12.c;
14.d; 15.a; 16.d; 17.a; 18.c; 19.a; 20.c; 21.a; 22.a; 23.a;
25.c; 26.a; 27.a; 28.d; 29.d; 30.c; 31.b; 32.a; 33.b; 34.d;
36.c; 37.d; 38.d; 39.c; 40.c; 41.c; 42.c; 43.d; 44.a; 45.d;
47.a; 48.b; 49.c; 50.b; 51.d; 52.b; 53.a; 54.d; 55.c; 56.d;
58.a; 59.c; 60.d; 61.c; 62.d; 63.d; 64.d; 65.c; 66.d; 67.d;
69.c; 70.d; 71.c; 72.d; 73.d; 74.e; 75.a; 76.b; 77.a; 78.a;
80.d; 81.c; 82.d

205

13.b;
24.a;
35.c;
46.d;
57.c;
68.b;
79.b;

You might also like