You are on page 1of 322

GIO TRNH BI GING

MN HC : LP TRNH JAVA

M U

GII THIU S
LC LP TRNH
HNG I TNG

Mc Tiu Bi Hc

Th no l lp trnh hng i tng


Tm hiu v tru tng d liu
nh ngha lp v i tng
Constructor v Destructor
Tm hiu v tnh lu tr, bao bc d liu,
tnh k tha v a hnh
Cc u im ca phng php lp trnh
hng i tng

Lp Trnh Hng i Tng


Ly i tng lm nn tng c s ca
phng php lp trnh
Phng php thit k v thc hin bng cc
h phn mm

Tru Tng D Liu


L tin trnh xc nh v tp hp cc tnh cht
v cc hnh ng ca mt thc th c lin quan
n ng dng
Li ch :

Tp trung vo vn

Xc nh nhng tnh cht v hnh ng thit yu

Loi tr nhng chi tit khng cn thit

Tru Tng D Liu


Cc tnh cht ca
mt i tng
Ngi

Cc tnh cht ca
mt i tng
Khch hng

Tn
a ch
Tui
Chiu cao
Mu tc

Tn
a ch

Tru Tng D Liu (tip


theo)
Cc thuc tnh

Cc hnh ng

Tn ca khch hng

Nhp tn ca khch hng

a ch ca khch hng

Nhp a ch ca khch hng

i xe hi mua

Nhp i xe hi mua c

Ngi bn xe hi

Nhp tn ngi bn xe hi
Lp ho n

Lp
Lp l mt nhm cc i tng c chung nhng
tnh cht v hnh ng

Lp Khch hng
Tn khch hng
a ch khch hng
i xe hi mua
Tn ngi bn xe hi
Nhp tn
Nhp a ch
Nhp i ca xe hi mua c
Nhp tn ca ngi bn xe hi
Lp ha n

i Tng
i tng l mt th hin ca lp
Ton
Anh
Tun

i Tng ( tip theo )


Thuc tnh
Tnh cht m t mt i tng

Hnh ng
Dch v m i tng c th p ng

Phng thc
c t cch p ng bng hnh ng khi c yu cu

Thng ip
Yu cu mt hnh ng

Bin c
S kch thch t i tng ny gi sang i tng khc

Lp V i Tng
Lp l mt thc th, cn i tng l mt thc
th thc t
Lp l mt m hnh nim nh r cc tnh cht
v cc hnh ng c quy nh bi mt i
tng, cn i tng l mt m hnh thc s
Lp l khun mu t i tng c to ra
Tt c cc i tng trong cng mt lp c cc
tnh cht v cc hnh ng nh nhau

Constructor
Tin trnh to ra mt i tng c gi l
Constructor
Mt Constructor:

Cp pht vng nh
Khi gn nhng thuc tnh (nu c)
Cho php truy cp nhng thuc tnh v phng
thc

Destructor
Tin trnh hy mt i tng gi l
Destructor
Mt Destructor:

Gii phng b nh

Cm truy cp thuc tnh v phng thc

Tnh Lu Tr
Tnh lu tr l kh nng ca i tng c
th lu li d liu ca n sau khi b hy

Tnh Bao Bc D Liu


Tin trnh che du nhng chi tit hin thc
mt i tng c gi l tnh bao bc
u im:
Tt c nhng thuc tnh v phng thc cn
thit u c to
Mt lp c th c nhiu tnh cht v phng
thc nhng ch mt s trong c hin th
cho ngi dng

Tnh K Tha
LP SINH VIN LP NHN
VIN

LP KHCH
HNG

Tn

Tn

Tn

a ch

a ch

a ch

im mn 1

Lng

Sn phm mua
c

im mn 2

Chc v

Nhp tn

Nhp tn

Nhp tn

Nhp a ch

Nhp a ch

Nhp a ch

Nhp m sn phm

Nhp im

Nhp lng

Lp ha n

Tnh tng s im

Tnh lng

Tnh K Tha (tip theo)


Lp Ngi
Tn
a ch
Nhp tn
Nhp a ch

Tnh K Tha ( tip theo )


LP NGI
Tn
a ch
Nhp tn
Nhp a ch
+

=
Thm cc thuc tnh v hnh ng
cn thit vo lp khch hng
Nhp m sn phm mua
Lp ha n

Lp Khch Hng

Tnh K Tha ( tip theo )


Tnh Tha k

L c ch cho php mt lp chia s nhng thuc tnh v


nhng hnh ng nh ngha trong mt hoc nhiu lp
khc

Lp con

L lp tha k t lp khc

Lp cha
L lp t mt lp khc tha k cc ng x ca n

a tha k
Khi mt lp con tha k t hai hoc nhiu lp

Tnh a Hnh

Tnh a hnh l thuc tnh cho php


mt hnh ng ng x khc nhau trn
cc lp khc nhau
Hnh ng
Display

Text
How are you?

Line

Picture

Cc u im ca phng
php hng i tng
Chia s trong phm vi mt ng dng
y mnh s dng li ca cc i tng
khi hin thc nhng ng dng mi
V lu di, chi ph gim ng k
Gim li v rc ri trong bo tr
iu chnh nhanh hn

TNG KT
Tip cn hng i tng a ra mt gii php ton
din cho mt bi ton c th
Tru tng d liu l mt tin trnh xc nh v tp
hp cc tnh cht v cc hnh ng c quan h vi
mt thc th c th
Lp m t mt thc th, cn i tng l mt thc
th thc t
Constructor v Destructor
Tnh lu tr, bao bc d liu, tnh k tha v a hnh

Chng 1

Gii thiu ngn ng


lp trnh Java

Gii thiu
S pht trin ca Java
Hng ti ngi dng
Ging vi C / C++

Cc c trng ca Java

n gin
Hng i tng
c lp phn cng
Mnh
Bo mt
Phn tn
a lung
ng

Cc chng trnh dch


truyn thng

Chng trnh dch Java

Java Translation and Execution


Java source
code

Java
compiler

Java
bytecode

Java
interpreter

Bytecode
compiler

Machine
code

28

Cc loi chng trnh Java

Applets

ng
dng
Application)

lp

(console

ng dng giao din (GUI Application)

Servlet
ng dng c s d liu

My o Java
L mt phn mm da trn c s my tnh o
L tp hp cc lnh logic xc nh hot
ng ca my tnh
c xem nh l mt h iu hnh thu nh
N thit lp lp tru tng cho:
Phn cng bn di
H iu hnh
M bin dch

Qu trnh dch chng trnh Java


Trnh bin dch chuyn m ngun thnh tp
cc lnh khng ph thuc vo phn cng c
th
Trnh thng dch trn mi my chuyn tp
lnh ny thnh chng trnh thc thi
My o to ra mt mi trng thc thi cc
lnh bng cch:
Np cc file .class
Qun l b nh
Dn rc

Trnh dch Java


Java Development Kit
Java 1.0 - S dng ln u vo nm
1995
Java 1.1 a ra nm 1997
Java 2
..............

B cng c JDK
Trnh bin dch, 'javac'

javac [options] sourcecodename.java

Trnh thng dch, 'java'

java [options] classname

Trnh dch ngc, 'javap'

javap [options] classname

Cng c sinh ti liu, 'javadoc'

javadoc [options] sourcecodename.java

Chng trnh tm li - Debug, 'jdb


jdb [options] sourcecodename.java

OR
jdb -host -password [options]
sourcecodename.java

Chng trnh xem Applet ,


'appletviewer
appletviewer [options]
sourcecodename.java / url

Cc gi chun ca Java

java.lang General support


java.applet - Creating applets for the web
java.awt - Graphics and graphical user interfaces
java.io
java.util Utilities(tien-ich)
java.net - Network communication
java.awt.event
java.rmi
java.security
java.sql

Chng 2
Cc kin thc c bn - Cu trc chng
trnh ca ngn ng Java

Cu trc mt
chng trnh Java
Xc lp thng tin mi trng
Khai bo lp i tng (Class)
Cc thnh phn (Tokens):
nh danh
T kha / t d phng
K t phn cch
Hng (Literals)
Ton t

Java Program Structure


//

comments about the class

public class MyProgram


{
//

comments about the method

public static void main (String[] args)


{

method body

method header

}
}

38

V d mt chng trnh Java


mu
// This is a simple program called Ex1.java
// import java.lang.*;
class Ex1
{
public static void main(String args[])
{
System.out.println(My first program in Java);
}
}

Bin dch chng trnh java


..\jdk\bin>javac Ex1.java
..\jdk\bin>java Ex1
Kt qu:
My first program in Java

Truyn i s dng lnh


class Ex2
{
public static void main(String parameters[])
{
System.out.println(parameters[0]);
System.out.println(parameters[1]);
System.out.println(parameters[2]);
}
}

Truyn i s trong dng lnh


(Tip theo)

Cc phn t c bn ca ngn
ng Java
Lp v phng thc

(Classes & Methods)


Kiu d liu
Bin s
Ton t
Cu trc iu khin

Lp trong Java
//

comments about the class

public class MyProgram


{

class header
class body

Comments can be added almost anywhere


}

44

Lp trong Java
C php khai bo lp (Class)
class tnlp
{
kiu tnbin;
:
met_datatype tnphngthc(dsthams)
:
}

Cc lp ni (Nested Classes)
Mt lp c nh ngha bn trong mt
lp khc. Lp c gi l lp ni
(Nesting)
Cc kiu lp ni:
Static
Non-static

Kiu d liu

Kiu d liu c s (Primitive Data Types)

Kiu d liu tham chiu (Reference data


types)

Kiu d liu c s

byte
char
boolean
short
int
long
float
double

Kiu d liu c s
4 kiu integers:
byte, short, int, long

2 kiu s thc:
float, double

1 kiu characters:
char

1 kiu boolean :
boolean

Kiu d liu c s
Type
byte
short
int
long
float
double

Storag
e
8 bits
16 bits
32 bits
64 bits
32 bits
64 bits

Min Value

Max Value

-128
-32,768
-2,147,483,648
< -9 x 1018

127
32,767
2,147,483,647
> 9 x 1018

+/- 3.4 x 1038 with 7 significant digits


+/- 1.7 x 10308 with 15 significant digits

Characters
Character literals are delimited by single
quotes:
'a'

'X'

'7'

'$'

','

'\n'

The ASCII characters :


uppercase letters
lowercase letters
Punctuation
digits
special symbols
control characters

A, B, C,
a, b, c,
period, semi-colon,
0, 1, 2,
&, |, \,
carriage return, tab, ...

51

Boolean
A boolean value represents a true or
false condition
A boolean can also be used to represent any
two states, such as a light bulb being on or
off
The reserved words true and false
are the only valid values for a boolean type
boolean done = false;

52

Kiu d liu tham chiu


Mng (Array)
Lp (Class)
Interface

p kiu (Type Casting)


Kiu d liu ny c chuyn i
sang mt kiu d liu khc
V d
float c = 34.89675f;
int b = (int)c + 10;

Bin s
C php
datatype identifier [=value][, identifier[=value]...];

Khai bo bin s gm 3 thnh phn:


Kiu d liu ca bin s
Tn bin
Gi tr ban u ca bin (khng bt buc)

B t kha ca Java

Khai bo mng
Ba cch khai bo mng:
datatype identifier [ ];
datatype identifier [ ] = new datatype[size];
datatype identifier [ ]= {value1,value2,.valueN};

Phng thc
(Methods in Classes)
Phng thc c nh ngha nh l
mt hnh ng hoc mt tc v tht s
ca i tng
C php
access_specifier modifier datatype method_name(parameter_list)
{
//body of method
}

V d v s dng phng thc


class Ex3 {
int x = 10;
// variable
public void show( ) { // method
System.out.println(x);
}
public static void main(String args[ ]) {
Ex3 t = new Ex3( );
// tao doi tuong t
t.show( );
// method call
Ex3 t1 = new Ex3( );
// tao doi tuong t1
t1.x = 20;
t1.show( );
}

Cc ch nh truy xut ca phng


thc (Access specifiers)
Cng cng (public)
Ring t (private)
Bo v (protected)

Nhng phng thc c np chng :


(Methods Overloading)

Nhng phng thc c np chng :

Cng trong mt lp
C cng tn
Khc nhau v danh sch tham s

Nhng phng thc c np chng


l mt hnh thc a hnh trong qu trnh
bin dch (compile time)

Ghi phng thc


(Methods Overriding)
Nhng phng thc c ghi :

C mt trong lp cha (superclass) cng


nh lp k tha (subclass)
c nh ngha li trong lp k tha
(subclass)

Nhng phng thc c ghi l


mt hnh thc a hnh trong qu trnh
thc thi (Runtime)

Phng thc khi to


(Class Constructors)
L mt phng thc c bit dng khi
to gi tr cho cc bin thnh vin ca lp
i tng
C cng tn vi tn lp v khng c gi tr
tr v
c gi khi i tng c to ra
C 2 loi:
Tng minh (Explicit constructors)
Ngm nh (Implicit constructors)

Phng thc khi to ca lp dn xut


(Derived class constructors)

C cng tn vi lp dn xut (subclass)


Nu lp dn xut mun gi hm
constructor ca lp c s th cu lnh
gi hm constructor ca lp c s phi
l cu lnh u tin trong hm
constructor ca lp dn xut - dng t
kho super

Cc ton t
Cc loi ton t:
Ton t s hc (Arithmetic operators)
Ton t dng Bit (Bitwise operators)
Ton t so snh (Relational operators)
Ton t logic (Logical operators)
Ton t iu kin (Conditional operator)
Ton t gn (Assignment operator)

Ton t s hc
Arithmetic Operators
+ Addition (Php cng)
- Subtraction (Php tr)
* Multiplication (Php nhn)
/ Division (Php chia)
% Modulus (Ly s d)
++ Increment (Tng dn)
-- Decrement (Gim dn)

+=
-=
*=
/=
%=

Php cng v gn
Php tr v gn
Php nhn v gn
Php chia v gn
Php ly s d v gn

Ton t Bit
(Bitwise Operators)
~
&
|
^
>>
<<

Ph nh (NOT)
V (AND)
Hoc (OR)
Exclusive OR (XOR)
Dch sang phi (Shift right)
Dch sang tri (Shift left)

Ton t so snh
(Relational Operators)
==
!=
<
>
<=
>=

So snh bng
So snh khc
Nh hn
Ln hn
Nh hn hoc bng
Ln hn hoc bng

Ton t Logic
(Logical Operators )
&&
||
!

Logical AND
Logical OR
Logical unary NOT

Ton t iu kin
(Conditional Operator)
C php
Biu thc 1 ? Biu thc 2 : Biu thc 3;
Biu thc 1
iu kin kiu Boolean tr v gi tr True hoc False
Biu thc 2
Tr v gi tr nu kt qu ca mnh 1 l True
Biu thc 3
Tr v gi tr nu kt qu ca mnh 1 l False

Ton t gn
(Assignment Operator)
= Assignment (Php gn)
Gi tr c th c gn cho nhiu bin s
V d
a = b = c = d = 90;

Th t u tin ca cc ton t
Th t
1.
2.
3.

Ton t
trong ngoc tnh trc
Cc ton t n nh +,-,++,-Cc ton t s hc v cc ton t dch nh
*,/,+,-,<<,>>

4.
5.
6.

Cc ton t quan h nh >,<,>=,<=,= =,!=


Cc ton t logic v Bit nh &&,II,&,I,^
Cc ton t gn nh =,*=,/=,+=,-=

Th t ca cc ton t c th c thay i
bng cch s dng cc du ngoc n trong
mnh

Operator Precedence
What is the order of evaluation in the following expressions?

a + b + c + d + e
1
2
3
4

a - b / c + d * e
3
1
4
2

a / (b + c) - d % e
2
1
4
3
a / (b * (c + (d - e)))
4
3
2
1

Assignment Revisited
The assignment operator has a lower precedence
than the arithmetic operators
First the expression on the right hand
side of the = operator is evaluated
answer

=
4

sum / 4 + MAX * lowest;


1

Then the result is stored in the


variable on the left hand side

Assignment Revisited
The right and left hand sides of an
assignment statement can contain the same
variable
First, one is added to the
original value of count
count

count + 1;

Then the result is stored back into count


(overwriting the original value)

Cc k t nh dng xut d liu


(Escape Sequences)
Escape
Sequence
\n
\r
\t
\\
\
\

M t
Xung dng mi
Chuyn con tr n u dng hin hnh
Chuyn con tr n v tr dng Tab k tip
(k t Tab)
In du \
In du nhy n ()
In du nhy kp ()

Cc lnh iu khin
iu khin r nhnh:
Mnh if-else
Mnh switch-case

Vng lp (Loops):
Vng lp while
Vng lp do-while
Vng lp for

Lnh if-else
C php
if (condition)
{
action1 statements;
}
else
{
action2 statements;
}

Lnh switch-case
C php
switch (expression)
{
case 'value1': action1 statement(s);
break;
case 'value2': action2 statement(s);
break;
:
:
case 'valueN': actionN statement(s);
break;
default: default_action statement(s);
}

Lnh lp while

C php
while(condition)
{
action statements;
:
:
}

Lnh lp do-while
C php
do
{
action statements;
:
:
} while(condition);

Vng lp for
C php
for(initialization statements ; condition ; increment statements)
{
action statements;
:
:
}

Chng 3

Gi & Interface
(Packages & Interfaces)

Gii thiu
Nhng thnh phn c bn ca 1 chng trnh Java:
Gi (Packages)
Giao din (Interfaces)
Nhng phn ca mt chng trnh Java:
Lnh khai bo gi(package )
Lnh ch nh gi c dng (Lnh import)
Khai bo lp public (mt file java ch cha 1 lp public
class)
Cc lp khc (classes private to the package)

Tp tin ngun Java c th cha tt c hoc mt


vi trong s cc phn trn.

Interfaces
Interface chnh l lp abstract thun tu
Khai bo nhng phng thc m lp s dng
Trong Java 1 lp ch c th dn xut t 1 lp
duy nht ti cng mt thi im, nhng c
th dn xut cng lc nhiu Interface
Trong Interface khng cha nhng phng
thc c th (concrete methods)
interface cn phi c implements.

Cc bc to interface
nh ngha Interface
Bin dch Interface
Implements Interface
Tnh cht ca interface:

Tt c phng thc trong interface phi l


public.
Cc phng thc phi c nh ngha
trong lp dn xut interface .

S dng Interface
Interface khng th dn xut t lp khc,
nhng c th dn xut t nhng interface
khc
Nu mt lp dn xut t mt interface m
interface dn xut t cc interface khc th
lp phi nh ngha tt c cc phng thc
c trong cc interface . Nu khng lp
tr thnh lp abstract
Khi nh ngha mt interface mi c ngha l
mt kiu d liu tham chiu mi c to ra.

Gi (Packages)
Gi c xem tng t nh th mc
lu tr nhng lp, nhng interfaces v
cc gi con khc.

Nhng u im khi dng gi


(Package):

Cho php t chc cc lp vo nhng n


v nh hn
Gip trnh c tnh trng trng lp khi t
tn lp, tn interfaces .
Cho php bo v cc lp.
Tn gi (Package) c th c dng
nhn dng chc nng ca cc lp.

Nhng lu khi to gi:


M ngun phi bt u bng lnh package
M ngun phi nm trong cng th mc mang tn
ca gi

Tn gi nn bt u bng k t thng (lower case)


phn bit gia tn lp i tng v tn gi

Nhng lnh khc phi vit pha di dng khai bo


gi l mnh import, k n l cc lnh nh
ngha lp i tng

Nhng lp i tng trong gi cn phi c bin


dch.
chng trnh Java c th s dng nhng gi
ny, ta phi import gi vo trong m ngun

Import gi (Importing packages):


C 2 cch:
Xc nh lp hoc interface ca gi cn
c import.
- Hoc c th import ton b gi
vd : import java.util.Vector;
import java.util.*;

Cc bc to ra gi
(Package)
Khai bo gi
Import nhng gi chun cn thit
Khai bo v nh ngha cc lp i
tng c trong gi
Lu thnh tp tin .java, v bin dch
nhng lp i tng c nh
ngha trong gi.

S dng nhng gi do ngi dng nh


ngha (user-defined packages)
M ngun ca nhng chng trnh ny phi
cng th mc ca gi do ngi dng nh
ngha. Nu khng ta phi thit lp ng dn.
nhng chng trnh Java khc s dng
nhng gi ny, import gi vo trong m ngun
Import nhng lp i tng cn dng
Import ton b gi
To tham chiu n nhng thnh vin ca gi

Thit lp ng dn - xc lp CLASSPATH
L danh sch cc th mc, gip cho
vic tm kim cc tp tin lp i tng
tng ng
Nn xc lp CLASSPATH trong lc
thc thi (runtime), v nh vy n s xc
lp ng dn cho qu trnh thc thi
hin hnh

Gi v iu khin truy xut


(Packages & Access Control)

Gi java.lang
Gi java.lang c import mc nh.
Nhng lp Wrapper cho cc kiu d
liu nguyn thy:

Lp String
Phng thc khi to (Constructor):

String str1 = new String();


String str2 = new String(Hello World);
char ch[ ] = {A,B,C,D,E};
String str3 = new String(ch);
String str4 = new String(ch,0,2);

String Pool
String Pool i din cho tt c cc k
t c to ra trong chng trnh
Khi nim String Pool

Nhng phng thc ca lp String

charAt( )//
startsWith()
endsWith( )
copyValueOf( )
toCharArray( )
indexOf( )
toUpperCase( )
toLowerCase( )
trim( )
equals( )

Lp StringBuffer
Cung cp nhng phng thc khc nhau thao
tc trn i tng string (chui k t)
Nhng i tng ca lp ny kh linh hot
Cung cp nhng phng thc khi to (constructor)
c np chng (overloaded)
Nhng phng thc ca lp StringBuffer:

append( ) // noi chuoi


insert( ) //chen
charAt( )// ktra ky tu ko?
setCharAt( ) //thietlapktu
setLength( )
getChars( )
reverse( ) //dao chuoi

Lp java.lang.Math

abs()
ceil()// lam tron tren
floor()// lam tron duoi
max()
min()
round()

random()
sqrt()
sin()
cos()
tan()

Lp Runtime
ng gi (Encapsulates) mi trng thc thi
Dng qun l b nh, v thi hnh nhng
tin trnh cng thm
Phng thc:

exit(int)
freeMemory( )
getRuntime( )
gc( )
totalMemory( )
exec(String)

Lp System
Cung cp nhng lung chun nh nhp (Input), xut
(Output) v cc lung li(Error Streams)
Cung cp kh nng truy xut n nhng thuc tnh
ca h thng thc thi Java, v nhng thuc tnh mi
trng nh phin bn, ng dn, nh cung cp
Phng thc:
exit(int)
gc()
getProperties()
setProperties()
currentTimeMillis()
arraCopy(Object, int, Object, int, int)

Lp Class
i tng ca lp ny che giu trng
thi thc thi ca i tng trong mt ng
dng Java
i tng ca lp ny c th to ra bng
1 trong 3 cch sau:
S dng phng thc getClass( ) ca i tng
S dng phng thc tnh forName( ) ca lp
to ra mt i tng ca lp trong lc t tn
cho lp
S dng i tng ClassLoader np mt lp mi

Lp Object
L lp cha ti cao ca tt c cc lp
Phng thc:

equals(Object)
finalize()
notify()
notifyAll()
toString()
wait()

Gi java.util
Cung cp phn ln nhng lp Java
hu dng v thng xuyn cn n
trong hu ht cc ng dng
Gii thiu nhng lp tru tng sau:

Hashtable
Random
Vector
StringTokenizer

Lp Hashtable
Dn xut t lp tru tng Dictionary
Dng ni kt nhng kha vo nhng
gi tr c th
Phng thc khi to Hashtable:
Hashtable(int)
Hashtable(int, float)
Hashtable( )

Nhng phng thc ca lp


Hashtable

clear()
done()
contains(Object)
containsKey(Obj
ect)
elements()
get(Object key)
isEmpty()

keys()
put(Object, Object)
rehash()
remove(Object
key)
size()
toString()

Lp Random
Nhng phng thc nhn gi tr ngu nhin:
nextDouble( )
nextFloat( )
nextGaussian( )
nextInt( )
nextLong( )
Phng thc khi to (Constructors):
random()
random(long)

Nhng phng thc ca lp


Random

nextDouble()
nextFloat()
nextGaussian()
nextInt()
nextLong()
setSeed(long)

Lp Vector
Cung cp kh nng co gin cho mng khi thm
phn t vo mng
Lu tr nhng thnh phn ca kiu Object
Mt Vector ring r c th lu tr nhng phn
t khc nhau, l nhng instance ca nhng
lp khc nhau
Phng thc khi to (Constructors):
Vector(int)
Vector(int, int)
Vector()

Nhng phng thc ca lp


Vector
isEmpty( )
addElement(Object)

capacity( )
clone( )
contains(Object)
copyInto(Object [ ])
elementAt(int)
elements( )
ensureCapacity(int)
firstElement( )
indexOf(Object)
indexOf(Object, int)
insertElementAt(Object,
int)

lastElement( )
lastIndexOf(Object)
lastIndexOf(Object, int)
removeAllElements( )
removeElement(Object)
removeElementAt(int)
setElementAt(Object,
int)
setSize(int)
size( )
toString( )
trimToSize( )

Lp StringTokenizer
C th c dng tch mt chui thnh nhng
thnh phn cu thnh ca n (constituent tokens)
K t phn cch c th c ch nh khi mt i
tng StringTokenizer c khi to
Phng thc khi to (Constructors):
StringTokenizer(String)
StringTokenizer(String, String)
StringTokenizer(String, String, Boolean)

Lp StringTokenizer s dng giao din lit k


(enumeration interface)

Nhng phng thc ca lp


StringTokenizer

countTokens( )
hasMoreElements( )
hasMoreTokens( )
nextElement( )
nextToken( )
nextToken(String)

Chng 4

X l bit l

Gii thiu v bit l


L mt kiu li c bit
N xy ra trong thi gian thc thi on
lnh
Thng thng cc iu kin thc thi
chng trnh gy ra bit l
Nu cc iu kin ny khng c x l,
th vic thc thi c th kt thc t ngt

Mc ch ca vic x l bit l
Gim thiu vic kt thc bt thng ca h
thng v ca chng trnh.
V d, thao tc xut/nhp trong mt tp tin,
nu vic chuyn i kiu d liu khng thc
hin ng, mt bit l s xy ra v chng
trnh b hy m khng ng tp tin. Lc
tp tin s b h hi v cc ngun ti nguyn
c cp pht cho tp tin khng c thu
hi li cho h thng.

X l bit l
Khi mt bit l xy ra, i tng tng ng vi bit
l s c to ra.
i tng ny sau c truyn ti phng thc
ni m bit l xy ra.
i tng ny cha cc thng tin chi tit v bit l.
Thng tin ny c th nhn c v x l.
Lp throwable m Java cung cp l lp trn nht
ca lp bit l.

M hnh x l bit l
M hnh c bit n l m hnh catch and
throw
Khi mt li xy ra, bit l s uc chn v
c vo mt khi.
T kha x l bit l:

try
catch
throw
throws
finally

Cu trc ca m hnh x l bit l


C php
try { . }
catch(Exception e1) { . }
catch(Exception e2) { . }
catch(Exception eN) { . }
finally { . }

M hnh Catch and Throw nng cao


Ngi lp trnh ch quan tm ti cc li
khi cn thit.
Mt thng bo li c th c cung cp
trong exception-handler.

Khi try v catch


c s dng thc hin trong m
hnh catch and throw ca x l bit l.
Khi lnh try gm tp hp cc lnh
thc thi
Mt hoc nhiu khi lnh catch c th
tip theo sau mt khi lnh try
Cc khi lnh catch ny bt bit l
trong khi lnh try.

Khi lnh try v catch (tt)


bt bt k loi bit l no, ta c th ch ra
kiu bit l l Exception
catch(Exception e)
Khi bit l b bt khng bit thuc kiu no,
chng ta c th s dng lp Exception
bt bit l .
Li s c truyn thng qua khi lnh try
catch cho ti khi chng bt gp mt catch
tham chiu ti n, nu khng chng trnh s
b kt thc

Khi lnh cha nhiu Catch


Cc khi cha nhiu catch() x l cc kiu
bit l khc nhau mt cch c lp.
V d
try
{
doFileProcessing();
displayResults();
} catch(LookupException e)
{ handleLookupException(e);
}
catch(Exception e)
{ System.err.println(Error:+e.printStackTrace());

Khi lnh cha nhiu Catch


(tt)
Khi s dng cc try lng nhau, khi try bn
trong c thc thi trc.
Bt k bit l no b chn trong khi lnh try
s b bt trong khi lnh catch tip ngay sau.
Nu khi lnh catch thch hp khng c
tm thy, th cc khi catch ca khi try bn
ngoi s c xem xt
Ngc li, Java Runtime Environment s x
l bit l.

Khi finally
Thc hin tt c cc vic thu dn khi bit l
xy ra
C th s dng kt hp vi khi try
Cha cc cu lnh thu hi ti nguyn v cho
h thng hay lnh in ra cc cu thng bo:

ng tp tin
ng li b kt qu (c s dng trong chng
trnh c s d liu)
ng li cc kt ni c to trong c s d liu.

Khi finally (tt)


V d
try
{
doSomethingThatMightThrowAnException( );
}
finally
{
cleanup( );
}

Khi finally (tt)


Khi ny ty chn c hoc khng c
c t sau khi catch cui cng.
Khi finally bo m lc no cng c
thc hin bt chp bit l c xy ra hay
khng.

Cc bit l c nh ngha
vi lnh throw v throws
Cc bit l nm ra vi s tr gip ca t
kho throw.
Throw l mt i tng ca mt lp bit l.
V d ca lnh throw
try{
if (flag < 0)
{
throw new MyException( ) ;// user-defined
}
}

Cc bit l c nh ngha vi
lnh throw v throws(tt)
Lp Exception implements interface
Throwable v cung cp cc tnh nng
hu dng phn phi cho cc bit l.
Mt lp con ca lp Exception l mt
bit l mi.

Danh sch cc bit l

RuntimeException
ArithmeticException
IllegalAccessException
IllegalArgumentException
ArrayIndexOutOfBoundsException
NullPointerException
SecurityException
ClassNotFoundException

Danh sch cc bit l (tt)

NumberFormatException
AWTException
IOException
FileNotFoundException
EOFException
NoSuchMethodException
InterruptedException

Chng V
LP TRNH GIAO DIN VI AWT

GII THIU V AWT

AWT vit tt ca Abstract Windowing

Toolkit

AWT l tp hp cc lp Java cho php


chng ta to mt GUI
Cung cp cc thnh phn khc nhau to
chng trnh GUI nh:
Containers
Components
Layout managers
Graphics v drawing capabilities
Fonts
Events

AWT bao gm cc lp, interfaces v cc gi


khc

Components
Tt c cc thnh phn cu to nn chng
trnh GUI c gi l component.
V d
Containers,
textfields, labels, checkboxes, textareas
scrollbars, scrollpanes, dialog

Containers
L thnh phn m c th cha cc
thnh phn khc
C cc frames, panes,latches, hooks
Java.awt cha mt lp c tn l
Container. Lp ny c 2 lp dn
xut trc tip v khng trc tip gm:

Frames
Panels

Frames
L cc ca s
L lp con ca lp Windows
c hin th trong mt ca s v c ng
vin

Panels
L cc vng cha trong mt ca s.
Hin th trong mt ca s m trnh duyt
hoc appletviewer cung cp v khng c
ng vin.
c s dng nhm mt s cc thnh
phn
Mt panel khng th nhn thy v th chng
ta cn phi thm n vo frame.

Dialog
L mt lp con ca lp Window
i tng dialog c cu trc nh sau :
Frame myframe = new Frame(My frame);
String title = Title;
boolean modal = true;
Dialog dlg = new Dialog( myframe, title, modal);

Cc Components khc
V d
textfields, labels, checkboxes, textareas
scrollbars, scrollpanes, dialog

Label
c dng hin th chui (String)
Cc hm to dng:

Label( )
Label(String labeltext)
Label(String labeltext, int alignment)

Cc phng thc:
setFont(Font f)
setText(String s)
getText( )

TextField
L iu khin text, cho php hin th text hoc
cho user nhp d liu vo.
Cc hm dng:

TextField( )
TextField(int columns)
TextField(String s)
TextField(String s, int columns)

Cc phng thc:
setEchoChar(char)
setText(String s)
getText( )
setEditable(boolean)
isEditable( )

TextArea
c dng khi chui hin th c t hai
dng tr ln.

TextArea (tt)
Cc hm dng:

TextArea( )
TextArea(int rows, int cols )
TextArea(String text)
TextArea(String text, int rows, int cols)

Cc phng thc ca
TextArea

setText(String)
getText( )
setEditable(boolean)
isEditable( )
insertText(String, int)
replaceText(String, int, int)

Button
Cc nt n l cch d nht ly cc
s kin ca ngi dng.
Cc hm to dng:

Button( )
Button(String text)

Checkboxes v RadioButtons
Checkboxes cho php ngi dng a ra
nhiu chn la
Radiobuttons ch cho php ngi dng duy
nht mt chn la
Cc hm dng to checkbox:

Checkbox( )
Checkbox(String text)

to radiobutton, ta phi to i tng


CheckBoxGroup trc khi to button

Choice
Lp Choice cho php ta to danh sch c
nhiu chn la
V d
Choice colors=new Choice( );
colors.addItem(Red);
colors.addItem(Green);

Layout Manager
Cc loi layout manager khc nhau:

Flow Layout
Border Layout
Card Layout
Grid Layout
GridBag Layout

Layout manager c thit lp bng


cch gi phng thc setLayout( )

FlowLayout
FlowLayout l layout manager mc nh cho

cc applet v cc panel
Vi FlowLayout cc component s c
sp xp t gc tri trn n gc phi di
ca mn hnh theo tng hng.
Cc constructor:
FlowLayout mylayout = new FlowLayout();
FlowLayout exLayout = new
flowLayout(FlowLayout.RIGHT);

BorderLayout
BorderLayout mc nh cho Window,
Frame v Dialog
Trnh qun l ny c th b tr
container thnh 5 vng, NORTH, EAST,
SOUTH, WEST v CENTER.
V d: thm mt thnh phn vo
vng North ca container
Button b1= new Button(North Button);
setLayout(new BorderLayout( ));
add(b1, BorderLayout.NORTH);

CardLayout

C th lu tr mt danh sch cc kiu


layout khc nhau
Mi layout c xem nh mt th (card)
Th thng l i tng Panel
Mt thnh phn c lp nh button s iu
khin cc th c t pha trn nht
Cc bc to CardLayout:

B tr layout ca panel chnh l CardLayout


Ln lt thm cc panel khc vo panel chnh

GridLayout
H tr vic chia container thnh mt li
Cc thnh phn c b tr trong cc ca
li.
Mt li nn cha t nht mt thnh phn
Kiu layout ny c s dng khi tt c cc
components c cng kch thc
Hm constructor
GridLayout gl = new GridLayout(no. of rows, no. of columns);

GridBagLayout
B tr cc thnh phn mt cch chnh xc
Cc thnh phn khng cn c cng kch
thc
Cc thnh phn c sp xp trong mt
li cha cc dng v cc ct
Th t t cc thnh phn khng tun theo
hng t tri-sang-phi v trn-xung-di
Hm constructor
GridBagLayout gb = new GridBagLayout( );

GridBagLayout
s dng layout ny, bn cn phi
bit thng tin v kch c v cch b tr
ca cc thnh phn
Lp GridBagLayoutConstraints lu
tr tt c cc thng tin m lp
GridLayout yu cu: V tr v kch
thuc mi thnh phn

Cc lp qun l cch t chc cc thnh phn giao din


Tn lp

M t

FlowLayout

Xp cc thnh phn giao din trc tin theo hng t tri qua phi, sau
theo ct t trn xung di. Cch sp xp ny l mc nh i vi Panel v
Applet.

GridLayout

Cc thnh phn giao din c sp xp trong cc li hnh ch nht ln


lt theo hng t tri qua phi v theo ct t trn xung di trong mt
phn t cha. Mi thnh phn giao din cha trong mt .

BorderLayout

Cc thnh phn giao din (t hn 5) c t vo cc v tr theo cc hng:


north (bc), south (nam), west (ty), east (ng) v center (trung tm)).
Cch sp xp ny l mc nh i vi lp Window, Frame v Dialog.

GridBagLayout

Cho php t cc thnh phn giao din vo li hnh ch nht, nhng mt


thnh phn c th chim nhiu .

Cc phng php thit k layout


bit layout hay t li layout cho chng trnh ng dng, chng ta c th
s dng hai hm ca lp Container:
LayoutManager getLayout();
void setLayout(LayoutManager mgr);
Cc thnh phn giao din sau khi c to ra th phi c a vo mt
phn t cha no . Hm add() ca lp Container c np chng thc
hin nhim v a cc thnh phn vo phn t cha.
Component add(Component comp)
Component add(Component comp, int index)
Component add(Component comp, Object constraints)
Component add(Component comp, Object constraints, int index)
Trong , i s index c s dng ch ra v tr ca cn t thnh phn
giao din comp vo. i s constraints xc nh cc hng a comp vo
phn t cha.

<Tip theo>
Ngc li, khi cn loi ra khi phn t cha mt thnh phn giao din th s
dng cc hm sau:
void remove(int index)
void remove(Component comp)
void removeAll()

Lp FlowLayout
Lp FlowLayout c cc hm to lp sp hng cc thnh phn giao din:
FlowLayout()
FlowLayout(int aligment)
FlowLayout(int aligment, int horizongap, int verticalgap)
public static final int LEFT
public static final int CENTER
public static final int RIGHT

<Tip theo>
Lp GridLayout
Lp GridLayout cung cp cc hm to lp sp hng cc thnh phn giao
din:
GridLayout()
GridLayout(int rows, int columns)
GridLayout(int rows, int columns, int hoiongap, int verticalgap)
To ra mt li hnh ch nht c rows columns c khong cch gia cc
hng cc ct l horizongap, verticalgap. Mt trong hai i s rows hoc columns
c th l 0, nhng khng th c hai, GridLayout(1,0) l to ra li c mt hng.

<Tip theo>
V d: M t cch s dng GridLayout
import java.awt.*;
import java.applet.*;
public class GridLayoutApplet extends Applet {
public void init() {
//Cread a list of colors
Label xLabel = new Label("X coordinate: ");
Label yLabel = new Label("Y coordinate: ");
TextField xInput = new TextField(5);
TextField yInput = new TextField(5);

<Tip theo>
// To ra li hnh ch nht c 4 v t layout sp xp cc thnh phn
// xLabel, xInput, yLabel, yInput

setLayout(new GridLayout(2,2));
add(xLabel);

// t xLabel vo th nht

add(xInput);

// t xInput vo th hai

add(yLabel);

// t yLabel vo th ba

add(yInput);

// t yInput vo th t

}
}

<Tip theo>
Lp BorderLayout
Lp BorderLayout cho php t mt thnh phn giao din vo mt trong bn
hng: bc (NORTH), nam (SOUTH), ng (EAST), ty (WEST) v gia
(CENTER).
BorderLayout()
BorderLayout(int horizongap, int verticalgap)
To ra mt layout mc nh hoc c khong cch gia cc thnh phn
(tnh bng pixel) l horizongap theo hng v verticalgap theo ct.
Trng hp mc nh l CENTER, ngc li, c th ch nh hng
t cc thnh phn comp vo phn t cha theo constraint l mt trong cc
hng trn.

<Tip theo>
V d: t mt nt Button c tn V trn (NORT), trng vn bn Hin
th thng bo di (SOUTH) v hai thanh trt (SCROLLBAR) hai bn
cnh (WEST v EAST).
import java.awt.*;
import java.applet.*;
public class BorderLayoutApplet extends Applet {
public void init() {
TextField msg = new TextField("Hien thi thong bao");
msg.setEditable(false);
Button nutVe = new Button("Ve");
Canvas vungVe = new Canvas();
vungVe.setSize(150, 150);// t kch thc cho vungVe v tranh
vungVe.setBackground( Color.white); // t mu nn l trng

<Tip theo>
Scrollbar sb1=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100);
Scrollbar sb2=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100);

setLayout(new BorderLayout());
add(nutVe, BorderLayout.NORTH);// t nutVe trn (NORT)
add(msg, BorderLayout.SOUTH); // t msg di (SOUTH)
add(vungVe,BorderLayout.CENTER);// t vungVe gia (CENTER)

}
}

add(sb1, BorderLayout.WEST);

// t sb1 bn tri (WEST)

add(sb2, BorderLayout.EAST);

// t sb2 bn phi (EAST)

X l s kin
Cc ng dng vi GUI thng c hng dn bi cc s
kin (event). Vic nhn mt nt, m, ng cc Window
hay g cc k t t bn phm, v.v. u to ra cc s kin
(event) v c gi ti cho chng trnh ng dng.
Cc s kin (Events) c x l bng cc cng c sau:
Abstract Windowing Toolkit
Trnh duyt.
Cc trnh x l s kin do ngi dng to ring.
Cc ng dng cn ng k trnh x l s kin vi i
tng
Cc trnh x l ny c gi khi c mt s kin tng ng
xy ra

X l cc s kin
Event Listener s lng nghe mt s kin c
th m mt i tng to ra
Mi event listener cung cp cc phng
thc x l cc s kin ny
Lp c ci t listener cn nh ngha
nhng phng thc ny

X l cc s kin
Cc bc cn tun th s dng m hnh
Event Listener:

Ci t Listener tng ng
Nhn din c tt c cc thnh phn to s kin
Nhn din c tt c cc s kin c x l
Ci t cc phng thc ca listener, v vit cc
on m x l s kin trong cc phng thc

Interface nh ngha cc phng thc khc


nhau x l mi s kin

Cc s kin v Listener tng


ng

ActionEvent
AdjustmentEvent
ComponentEvent
FocusEvent
ItemEvent
WindowEvent
TextEvent
MouseEvent

KeyEvent

ActionListener
AdjustmentListener
ComponentListener
FocusListener
ItemListener
WindowListener
TextListener
MouseListener
MouseMotionListener
KeyListener

X l cc s kin
Trong Java cc s kin c th hin bng cc i tng.
Lp c s nht, lp cha ca tt c cc lp con ca cc s kin
l lp java.util.EventObject.
Cc lp con ca AWTEvent c chia thnh hai nhm:
1.
2.

Cc lp m t v ng ngha ca cc s kin
Cc lp s kin mc thp

Cc lp x l s kin
java.lang.Object
java.util.EventObject
java.awt.AWTEvent
java.awt.event

ActionEvent

ContainerEvent

AdjustmentEvent

FocusEvent

KeyEvent

ComponentEvent

InputEvent
{abstract}

ItemEvent

TextEvent

PaintEvent

WindowEvent

MouseEvent

1. Cc lp ng ngha
a/ ActionEvent

S kin ny c pht sinh bi nhng hot ng thc hin trn cc thnh phn ca GUI. Cc thnh phn gy ra cc s kin hnh ng bao gm:

Button - khi mt nt button c kch hot


List - khi mt mc trong danh sch c kch hot p
MenuItem - khi mt mc trong thc n c chn
TextField - khi g phm ENTER trong trng vn bn (text).
Lp ActionEvent c cc hm:
String getActionCommand()
Cho bit tn ca lnh tng ng vi s kin xy ra, l tn ca nt, mc hay text.
b/ AdjustmentEvent
Thnh phn gy ra s kin cn chnh (adjustment):

Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar.


Lp ny c hm:
int getValue()
Cho li gi tr hin thi c xc nh bi ln cn chnh sau cng.

<TT>
c/ ItemEvent
Cc thnh phn ca GUI gy ra cc s kin v cc mc gm c:

Checkbox - khi trng thi ca hp kim tra Checkbox thay i

CheckboxMenuItem - khi trng thi ca hp kim tra Checkbox ng vi mc ca thc n thay i,

Choice - khi mt mc trong danh sch c chn hoc b loi b

List - khi mt mc trong danh sch c chn hoc b loi b.


Lp ItemEvent c hm:
Object getItem()
Cho li i tng c chn hay va b loi b.
d/ TextEvent
Cc thnh phn ca GUI gy ra cc s kin v text gm c:

TextArea - khi kt thc bng nhn nt ENTER,


TextField - khi kt thc bng nhn nt ENTER.

<Tip theo>
Kiu s kin

Ngun gy ra
s kin

AcitionEvent

Button
List
TexField
Scrollbar

AdjustmentEvent
ItemEvent

TextEvent

Choice
Checkbox
CheckboxMen
uItem
List
TextArea
TexField

Cc hm n nhn v di
di cc s kin

addComponentlistener

Giao din Listener tng


ng

AcitionListener

remove ActiontListener
AdjustmentListener
addAdjustmentListener
removeAdjustmentListener
addItemListener
removeItemListener

ItemListener

TextListener
addTexListener
removeTextListener

2. Cc s kin mc thp
a/ ComponentEvent
S kin ny xut hin khi mt thnh phn b che giu, hin th hay thay i
li kch thc. Lp ComponentEvent c hm:
Component getComponent()
Cho li i tng tham chiu kiu Component.
b/ ContainerEvent
S kin ny xut hin khi mt thnh phn c b sung hay b loi b khi
phn t cha (Container).
c/ FocusEvent
S kin ny xut hin khi mt thnh phn nhn c mt nt t bn phm.
d/ KeyEvent
Lp KeyEvent l lp con ca lp tru tng InputEvent c s dng
x l cc s kin lin quan n cc phm ca bn phm.
int getKeyCode()
i vi cc s kin KEY_PRESSED hoc KEY_RELEASED, hm ny
c s dng nhn li gi tr nguyn tng ng vi m ca phm trn
bn phm.
char getKeyChar()
i vi cc s kin KEY_PRESSED, hm ny c s dng nhn li gi
tr nguyn, m Unicode tng ng vi k t ca bn phm.

<Tip theo>
e/ MouseEvent
Lp MouseEvent l lp con ca lp tru tng InputEvent c s dng
x l cc tn hiu ca chut. Lp ny c cc hm:
int getX()
int getY()
Point getPoint()
Cc hm ny c s dng nhn li ta x, y ca v tr lin quan n
s kin do chut gy ra.
void translatePoint(int dx, int dy)
Hm translate() c s dng chuyn ta ca s kin do chut gy
ra n (dx, dy).
int getClickCount()
Hm getClickCount() m s ln kch chut.
f/ PaintEvent
S kin ny xut hin khi mt thnh phn gi hm paint()/ update() v.
g/ WindowEvent
S kin loi ny xut hin khi thao tc vi cc Window. Lp ny c hm:
Window getWindow()
Hm ny cho li i tng ca lp Window ng vi s kin lin quan n
Window xy ra.

<Tip theo>
Cc hm x l cc s kin mc thp
Kiu s kin

Ngun gy
ra s kin

ComponentEvent

Component

ContainerEvent

Container
Component

FocusEvent
Component
KeyEvent
Component
MouseEvent
Window
WindowEvent

Cc hm n nhn v di di
cc s kin
addComponentListener
removeComponentListener
addContainerListener
removeContainerListener
addFocusListener
removeFocusListener
addkeyListener
removeKeyListener
addMouseListener
remoMouseListener
addMouseMotionListener
remoMouseMotionListener
addWindowListener
removeWindowListener

Giao din Listener


tng ng
ComponentListener
ContainerListener
FocusListener
KeyListener
MouseMotionListener
WindowListener

<Tip theo>
V d: Xy dng ng dng c giao din ha GUI

<Tip theo>
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
interface IGeometryConstants { // nh ngha Interface gm cc hng cho
trc
int SQUARE = 0;
int CIRCLE = 1;
int ELLIPSE = 2;
String[] shapeNames = {"Square", "Circle" , "Ellipse"};
int SMALL = 0;
int MEDIUM = 1;
int LARGE = 2;
String[] sizeNames = {"Small", "Medium" , "Large"};
}
public class DemoApplet extends Applet implements
IGeometryConstants {
// Khai bo mt Panel cha cc Checkbox tng ng vi cc loi hnh
shape
Panel
shapePanel;// Khai bo mt Panel
CheckboxGroup shapeCBG; // Khai bo mt CheckboxGroup
Checkbox
squareCB; // Khai bo mt Checkbox ng vi hnh vung
Checkbox
circleCB; // Khai bo mt Checkbox ng vi hnh trn
Checkbox
ellipseCB; // Khai bo mt Checkbox ng vi hnh ellipse
// Khai bo mt Panel cha cc Label v cc TextField
Panel
xyPanel;
// Khai bo mt Panel xyPanel
Label
xLabel;
// Khai bo mt Label xLabel
TextField
xInput;
// Khai bo mt TextField xInput
Label
yLabel;
// Khai bo mt Label yLabel
TextField
yInput;
// Khai bo mt TextField yInput 180

<Tip theo>

// Khai bo mt Panel cha cc Label , Choice v Checkbox


Panel
sizePanel;
Label
sizeLabel;
Choice
sizeChoices;
Checkbox fillCB;
// Khai bo mt Panel cha shape, coordinates, size and fill Panel
leftPanel
Panel
leftPanel;
// Khai bo mt Panel cha Massage display, draw button and canvas
Panel
rightPanel;
Button
drawButton;
DrawRegion drawRegion;
TextField messageDisplay;
// nh ngha li hm init()
public void init() {
makeShapePanel();
makeXYPanel();
makeSizePanel();
makeLeftPanel();
makeRightPanel();
// Gi hm x l cc s kin
addListeners();
// a cc Panel vo h thng
add(leftPanel);
add(rightPanel);

<Tip theo>
// a cc thnh phn v cc shape vo shapePanel
void makeShapePanel() {
shapePanel = new Panel();
shapeCBG
= new CheckboxGroup();
squareCB
= new Checkbox(shapeNames[SQUARE], shapeCBG, true);
circleCB
= new Checkbox(shapeNames[CIRCLE], shapeCBG, false);
ellipseCB = new Checkbox(shapeNames[ELLIPSE], shapeCBG, false);
shapePanel.setLayout(new FlowLayout());
shapePanel.add(squareCB);
shapePanel.add(circleCB);
shapePanel.add(ellipseCB);
}
// a cc thnh phn v cc x,y coordinates vo xyPanel
void makeXYPanel() {
xyPanel = new Panel();
xLabel = new Label("X Coordinate:");
yLabel = new Label("Y Coordinate:");
xInput = new TextField(5);
yInput = new TextField(5);
xyPanel.setLayout(new GridLayout(2,2));
xyPanel.add(xLabel);
xyPanel.add(xInput);
xyPanel.add(yLabel);
xyPanel.add(yInput);
}

<Tip theo>
// a cc thnh phn v size v fill vo sizePanel
void makeSizePanel() {
sizePanel = new Panel();
sizeLabel = new Label("Size:");
sizeChoices = new Choice();
sizeChoices.add(sizeNames[0]);
sizeChoices.add(sizeNames[1]);
sizeChoices.add(sizeNames[2]);
fillCB = new Checkbox("Fill", false);
sizePanel.setLayout(new FlowLayout());
sizePanel.add(sizeLabel);
sizePanel.add(sizeChoices);
sizePanel.add(fillCB);
}
// a cc thnh phn vo leftPanel
void makeLeftPanel(){
leftPanel = new Panel();
leftPanel.setLayout(new BorderLayout());
leftPanel.add(shapePanel, "North");
leftPanel.add(xyPanel, "Center");
leftPanel.add(sizePanel, "South");
}

<Tip theo>
// a cc thnh phn vo rightPanel
void makeRightPanel(){
rightPanel = new Panel();
messageDisplay = new TextField("MESSAGE DISPLAY");
messageDisplay.setEditable(false);
messageDisplay.setBackground(Color.yellow);
drawButton = new Button("Draw");
drawButton.setBackground(Color.lightGray);
drawRegion = new DrawRegion();
drawRegion.setSize(150, 150);
drawRegion.setBackground(Color.white);
rightPanel.setLayout(new BorderLayout());
rightPanel.add(drawButton, BorderLayout.NORTH);
rightPanel.add(messageDisplay, BorderLayout.SOUTH);
rightPanel.add(drawRegion, BorderLayout.CENTER);
}

<Tip theo>
// X l cc s kin tng ng vi cc vic thc hin trn cc thnh phn
ha
void addListeners(){
drawButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
int shape, xCoord, yCoord, width;
messageDisplay.setText("");
if(squareCB.getState())
shape = SQUARE;
else if (circleCB.getState())
shape = CIRCLE;
else if (ellipseCB.getState())
shape = ELLIPSE;
else {
messageDisplay.setText("Unknow shape");
return;
}
try{
xCoord = Integer.parseInt(xInput.getText());
yCoord = Integer.parseInt(yInput.getText());
}catch(NumberFormatException e){
messageDisplay.setText("Illegal coordinate");
return;
}

<Tip theo>
switch(sizeChoices.getSelectedIndex()){
case SMALL: width = 30; break;
case MEDIUM: width = 60; break;
case LARGE: width = 120; break;
default:
messageDisplay.setText("Unknow size");
return;
}
messageDisplay.setText("Drawing..."+shapeNames[shape]);
drawRegion.doDraw(shape,xCoord,yCoord,
fillCB.getState(),width);
}
});
xInput.addTextListener(new TextListener(){
public void textValueChanged(TextEvent evt){
checkTF(xInput);
}
});
yInput.addTextListener(new TextListener(){
public void textValueChanged(TextEvent evt){
checkTF(yInput);
}
});
}// Kt thc hm addListener()

186

<Tip theo>
void checkTF(TextField tf){
messageDisplay.setText("");
try{
Integer.parseInt(tf.getText());
}catch(NumberFormatException e){
messageDisplay.setText("Illegal coordinate ");
}
}
}
// nh ngha lp DrawRegion m rng lp Canvas v s dng cc hng giao
din
class DrawRegion extends Canvas implements IGeometryConstants{
private int shape,xCoord, yCoord;
private boolean fillFlag;
private int width;
public DrawRegion(){
setSize(150, 150);
setBackground(Color.white);
}
// nh ngha hm doDraw() v
public void doDraw(int h, int x, int y, boolean f, int w){
this.shape = h;
this.xCoord = x;
this.yCoord = y;
this.fillFlag = f;
this.width = w;
repaint();
}

<Tip theo>
public void paint(Graphics g){
switch(shape){
case SQUARE:
if(fillFlag)
g.fillRect(xCoord,
yCoord,
width,width);
else g.drawRect(xCoord, yCoord, width,width);
break;
case CIRCLE:
if(fillFlag)
g.fillOval(xCoord,
yCoord,
width,width);
else g.drawOval(xCoord, yCoord, width,width);
break;
case ELLIPSE:
if(fillFlag)
g.fillOval(xCoord,yCoord,width,width/2);
else g.drawOval(xCoord, yCoord, width,width/2);
break;
}
}
}

Menus
Cc loi menu :

Pull-down
Pop-up menu

Ch c th t cc thanh menubar vo
trong cc Frame m thi
Cc thnh phn ca menu:

Menubar
MenuItems

Thnh phn Menu


Lp abstract class MenuComponent l lp c s cho tt c cc lp thc hin nhng
vn lin quan n thc n (menu).
Lp MenuBar ci t thanh thc n v trong c th cha cc thc n pull-down.
Lp MenuItem nh ngha tng mc ca thc n.
Lp Menu ci t cc thc n pull-down c th a vo mt thc n bt k.
Lp PopUpMenu biu din cho thc n pop-up .
Lp CheckboxMenuItem cha cc mc c chn kim tra trong cc mc.
Vic to lp mt thanh thc n cho mt frame c thc hin nh sau:
1. To ra mt thanh thc n,
MenuBar thanhThDon = new MenuBar();
2. To ra mt thc n,
Menu thucDon = new Menu(Cac loai banh);
3.
To ra cc mc trong thc n v a vo thc n,
MenuItem muc = new MenuItem(Banh day);
thucDon.add(muc); // a muc vo thucDon
4. a cc thc n vo thanh thc n,
thanhThDon.add(thucDon); // a thucDon vo thanhThDon
5. To ra mt frame v a thanh thc n vo frame .
Frame frame = new Frame(Cac mon an);
frame.add(thanhThDon); // a thanhThDon vo frame 190

Thnh phn Menu


V d: To lp v s dng cc thc n.
import java.awt.*;
import java.applet.*;
public class MenuDemo extends Applet{
public static void main(String args[]){
MenuBar thanhThDon = new MenuBar();
Menu thucDon = new Menu("Cac loai banh");
MenuItem b1 = new MenuItem("Banh day");
thucDon.add(b1);
MenuItem b3 = new MenuItem("Banh khoai");
thucDon.add(b3);
thucDon.addSeparator();// To ra mt thanh phn cch
MenuItem b4 = new MenuItem("Banh gio");
thucDon.add(b4);
thucDon.add(new CheckboxMenuItem("Banh ran"));
thanhThDon.add(thucDon);
Frame frame = new Frame("Cac mon an");
frame.setMenuBar(thanhThDon);
frame.pack(); frame.setVisible(true);}
}

Chng VI

Applets

Applets
L mt chng trnh Java m chy vi s
h tr ca trnh duyt web hoc
appletviewer
Tt c cc applets l lp con ca lp
Applet
to mt applet, bn cn import gi sau:
java.applet

Cu trc applet
nh ngha mt applet t bn s kin xy ra
trong qu trnh thc thi
i vi mi s kin c nh ngha bi mt
phng thc tng ng.
Cc phng thc:

init( )
start( )
stop( )
destroy( )

Cc phng thc khc:

paint( )
repaint( )
showStatus( )
getAppletInfo( )

Cc phng thc init(), start(), stop(),


destroy(), and paint() c tha k t applet.
Mi phng thc ny mc nh l rng. V th
cc phng thc ny phi c np chng.

Bin dch v thc thi applet


Mt applet th c bin dch theo c php
sau
javac Applet1.java

thc thi mt applet, to mt tp tin HTML


c s dng th applet
Th applet c hai thuc tnh:

Width
Height

truyn tham s ti applet, s dng th param,


v tip theo l th value

Applet c th c thc thi bng applet viewer

im khc bit gia applet v mt ng dng


Cc ng dng khi thc thi phi s dng trnh
bin dch Java, trong khi cc applets thc thi
c trn bt k trnh duyt no m h tr
Java, hoc s dng AppletViewer trong
JDK.
Mt ng dng bt u vi phng thc
main(). Cn i vi applet th khng s
dng phng thc ny
Mt ng dng s dng System.out.println()
hin th, trong khi mt applet th s dng
cc phng thc ca lp Graphics.

Nhng hn ch v bo mt
trong applet
Khng th c hoc vit cc tp tin trn h
thng tp tin ca ngi s dng
Khng th giao tip vi mt site trn internet.
M ch giao tip vi mt dch v trn trang
web c applet.
Khng th chy bt k chng trnh no trn
h thng ca ngi c
Khng th load bt k chng trnh no
c lu trn h thng ca ngi s dng

Chu trnh sng ca applet

Truyn tham s ti mt applet


truyn tham s, s dng PARAM
trong th HTML
V d
<applet code = "Mybutton1" width = 100 height = 100>
<PARAM NAME = Mybutton value = Display Dialog>
</applet>

Lp ha
c cung cp bi gi AWT
Cung cp mt tp hp cc phng thc
v nh sau:

Oval
Rectangle
Square
Circle
Lines
Text in different fonts

Graphical Background
Cc phng thc v nn :
getGraphics( )
repaint( )
update(Graphics g)
paint(Graphics g)

Hin th chui, k t v bytes


Phng thc v hoc hin th mt chu i
trn frame
C php
drawString(String str, int xCoor, int yCoor);

Phng thc v hoc hin th cc k t


trn frame
C php
drawChars(char array[ ], int offset, int length, int xCoor, int yCoor);

Phng thc v hoc hin th bytes trn


frame
C php
drawBytes(byte array[ ], int offset, int length, int xCoor, int yCoor);

V cc hnh th
Phng thc c s dng v
ng thng nh sau
C php
drawLine(int x1, int y1, int x2, int y2);

Cc phng thc c s dng v


ng trn nh sau
C php
drawOval(int xCoor, int yCoor, int width, int height);
setColor(Color c);
fillOval(int xCoor, int yCoor, int width, int height);

Phng thc s dng v hnh


vung:
C php
drawRect(int xCoor, int yCoor, int width, int
height);
fillRect(int xCoor, int yCoor, int width, int
height);

Cc phng thc c s dng


v hnh vung c gc trn
C php
drawRoundRect(int xCoor, int yCoor, int width, int height, int
arcWidth, int arcHeight);
fillRoundRect (int xCoor, int yCoor, int width, int height, int
arcWidth, int arcHeight);

3D Rectangles & Arcs


Cc phng thc c s dng v
hnh 3D C php

draw3DRect(int xCoord, int yCoord, int


width, int height, boolean raised);

drawArc(int xCoord, int yCoord, int width,


int height, int arcwidth, int archeight);

fillArc(int xCoord, int yCoord, int width, int


height, int arcwidth, int archeight);

Drawing PolyLines
Cc phng thc c s dng v
nhiu on thng
C php

drawPolyline(int xArray[ ], int yArray[ ], int


totalPoints);

g.setFont(new Font("Times Roman",


Font.BOLD,15));

V v t cc hnh a gic
Cc phng thc v v t cc hnh a gic
C php

drawPolygon(int x[ ], int y[ ], int


numPoints);

fillPolygon(int x[ ], int y[ ], int numPoints);

Mu
Java s dng mu RGB
Bng cc gi tr mu
Element
Red
Green
Blue

Range
0-255
0-255
0-255

C php ca hm dng to mt mu
color(int red, int green, int blue);

Bng trnh by cc gi tr mu RGB thng thng


Color

Red

Green

Blue

White

255

255

255

Light Gray 192

192

192

Gray

128

128

128

Dark Gray

64

64

64

Black

Pink

255

175

175

Orange

255

200

Yellow

255

255

Magenta

255

255

Font
Gi java.awt package cung cp bi lp
Font
Cc phng thc ca lp Font:

getAllFont( )
getLocalGraphicsEnvironment( )
getFont( )
getFontList( )

Hm dng Font nhn 3 tham s


Tn font trong chui nh dng; tn ny c
trong phng thc getFontList( ).
Kiu ca font.
V d : Font.BOLD, Font.PLAIN, Font.ITALIC
Kch thc ca font.

V d
Font f1 = new Font("SansSerif", Font.ITALIC, 16);
g.setFont(f1);

Lp FontMetrics
o cc k t khc nhau hin th trong
cc font khc nhau.
Vic o bao gm height, baseline,
ascent, descent v leading ca font.
N khng c th v n l mt lp tru
tng

Lp FontMetrics (tip theo)


Phng thc:

getFontMetrics(f1)
getHeight( )
getAscent( )
getDescent( )
getLeading( )
getName( )

Kiu v
C 2 kiu v.
XOR
setXORMode(Color c)

Paint
setPaintMode( )

Chng VII

Lp trnh a tuyn

Lp trnh a lung
a nhim, tin trnh v lung
X l a lung trong Java
Mc u tin ca lung,
Vn ng b ho v bi ton tc
nghn

a tuyn
L kh nng lm vic vi nhiu tuyn
a tuyn chuyn s dng cho vic
thc thi nhiu cng vic ng thi
a tuyn gim thi gian ri ca h
thng n mc thp nht.

Tin trnh, a nhim v a lung

a nhim: cng mt thi im c nhiu hn mt chng


trnh thc hin ng thi trn cng mt my tnh. C hai k
thut a nhim:
+ a nhim da trn cc tin trnh
+ a nhim da trn cc lung
Mi tc v c thc hin theo mt tin trnh, c xem nh
mt chng trnh n.
Mt tin trnh c th bao gm nhiu lung. Cc tin trnh c
cc tp ring cc bin d liu. Cc lung ca mt tin trnh c
th chia s vi nhau v khng gian a ch chng trnh, cc
on d liu v mi trng x l, ng thi cng c vng d
liu ring thao tc.
Trong mi trng n lung, mi thi im ch cho php mt
tc v thc thi. K thut a nhim cho php tn dng c
nhng thi gian ri ca CPU thc hin nhng tc v khc.

<Tip theo>

K thut a nhim da trn cc lung c mt s u im hn


da trn cc tin trnh:
+ Cc lung c th chia s cng mt khng gian a ch
+ Vic dch chuyn ng cnh thc hin gia cc lung yu
cu chi ph r hn
+ S truyn thng gia cc lung thng yu cu chi ph r
hn.
a nhim c th thc hin c theo hai cch:
+ Ph thuc vo h iu hnh, n c th cho tm ngng
chng trnh m khng cn tham kho cc chng trnh .
+ Cc chng trnh ch b dng li khi chng t nguyn
nhng iu khin cho chng trnh khc.
Nhiu h iu hnh hin nay h tr a lung nh: SUN
Solaris, Window NT, Window 95, OS/2, v.v.
Java h tr a nhim da trn cc lung v cung cp cc c
tnh mc cao cho lp trnh a lung.

To lp lung

Java cung cp hai gii php to lp lung:


1. Thit lp lp con ca Thread
2. Ci t lp x l lung t giao din Runnable.
(i) Cch th nht: Trong Java c mt lp c xy dng sn l Thread,
lp c s xy dng nhng lp kt tha mi to cc lung.
class MyClass extends Thread{
// Mt s thuc tnh
public void run(){
// Cc lnh cn thc hin theo lung
}
// Mt s hm khc c vit hay c b sung
}
Khi chng trnh chy n s gi mt hm c bit c khai bo
trong Thread l start() bt u mt lung c to ra.

To lp lung
(ii) Cch th hai:
Java gii quyt hn ch trn bng cch xy dng lp to ra cc
lung thc hin trn c s ci t giao din h tr lung. Giao din h
tr thc hin theo lung l Runnable. Ngi lp trnh thit k cc lp
thc hin theo lung bng cch ci t theo giao din Runnable.
class MyClass implements Runnable{
// Cc thuc tnh
// Np chng hay vit mt s hm
// Vit hm run()
. . .
}

Cc trng thi ca Thread


Mt lung c th mt trong cc trng thi sau:
+ New: Khi mt lung mi c to ra vi ton t new() v sn sng
hot ng.
+ Runnable: Trng thi m lung ang chim CPU thc hin,
khi bt u th n gi hm start(). B lp lch phn lung ca h iu
hnh s quyt nh lung no s c chuyn v trng thi Runnable v
hot ng. Cng cn lu rng mt thi im, mt lung trng thi
Runnable c th hoc khng th thc hin.
+ Non runnable (blocked): T trng thi runnable chuyn sang
trng thi ngng thc hin (b chn) khi gi mt trong cc hm:
sleep(), suspend(), wait(), hay b chn li Input/output. Trong trng
thi b chn c ba trng thi con:
+ Waiting: khi trng thi Runnable, mt lung thc hin hm wait()
th n s chuyn sang trng thi ch i (Waiting).
+ Sleeping: khi trng thi Runnable, mt lung thc hin hm
sleep() th n s chuyn sang trng thi ng (Sleeping).
+ Blocked: khi trng thi Runnable, mt lung b chn li bi
nhng yu cu v ti nguyn, nh yu cu vo/ra (I/O), th n s chuyn
sang trng b chn (Blocked).

Cc trng thi ca Thread


Mi lung phi thot ra khi trng thi Blocked quay v trng thi
Runnable, khi
o
Nu mt lung c cho i ng (sleep) sau khong thi
gian bng s micro giy n c truyn vo tham s ca hm sleep(n).

o
Nu mt lung b chn li v vo/ra v qu trnh ny kt thc.
o
Nu lung b chn li khi gi hm wait(), sau c thng bo
tip tc bng cch gi hm notify() hoc notifyAll().
o
Nu mt lung b chn li ch monitor ca i tng ang b
chim gi bi lung khc, khi monitor c gii phng th lung b
chn ny c th tip tc thc hin (khi nim monitor c cp phn
sau).
o
Nu mt lung b chn li bi li gi hm suspend(), mun thc
hin th trc phi gi hm resume().
Nu ta gi cc hm khng ph hp i vi cc lung th JVM s pht
sinh ra ngoi l IllegalThreadStateException.
Dead: Lung chuyn sang trng thi cht khi n kt thc hot ng bnh
thng, hoc gp phi ngoi l khng thc hin tip c. Trong trng
hp c bit, bn c th gi hm stop() kt thc (git cht) mt
lung.

<Tip theo>

Non runnable

sleep
yield
start

New

Waiting Sleeping

suspend
resume
B chn bi I/O

wait
notify
Runnable

Kt thc I/O

Dead

stop

Blocked

Cc mc u tin ca cc lung

Trong Java, mi lung c mt mc u tin thc hin nht nh.


Khi chng trnh chnh thc hin s to ra lung chnh, lung
cha. Lung ny s to ra cc lung con, v c th tip tc.
Theo mc nh, mt lung s k tha mc u tin ca lung
cha ca n. Bn c th tng hay gim mc u tin ca lung
bng cch s dng hm setPriority().
Mc u tin ca cc lung c th t li trong khong t
MIN_PRIORITY (Trong lp Thread c mc nh bng 1) v
MAX_PRIORITY (mc nh bng 10), hoc NORM_PRIORITY
(mc nh l 5).
Lung c mc u tin cao nht tip tc thc hin cho n khi:
+ N nhng quyn iu khin cho lung khc bng cch gi
hm yield()
+ N dng thc hin (b dead hoc chuyn sang trng thi b
chn).
C mt lung vi mc u tin cao hn vo trng thi Runnable.

Cc mc u tin ca cc lung
Vn ny sinh l chn lung no thc hin khi c
nhiu hn mt lung sn sng thc hin v c cng mt
mc u tin cao nht? Ni chung, mt s c s s
dng b lp lch la chn ngu nhin, hoc la chn
chng thc hin theo th t xut hin.
V d: Chng ta hy xt chng trnh hin th cc qu bng
mu xanh hoc ny (chuyn) theo nhng ng nht
nh. Mi khi nhn nt Blue ball th c 5 lung c
to ra vi mc u tin thng thng (mc 5) hin th
v di chuyn cc qu bng xanh. Khi nhn nt Red
ball th cng c 5 lung c to ra vi mc u tin
(mc 7) cao hn mc thng thng hin th v di
chuyn cc qu bng . kt thc tr chi bn nhn
nt Close.

Cc mc u tin ca cc lung
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Bounce{
public static void main(String arg[]){
JFrame fr = new BounceFrame();
fr.show();
}
}
class BounceFrame extends JFrame{
public BounceFrame(){
setSize(300, 200);
setTitle("Bong chuyen");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

Cc mc u tin ca cc lung
Container contentPane = getContentPane();
canvas = new JPanel();
contentPane.add(canvas, "Center");
JPanel p = new JPanel();
addButton(p, "Blue ball", new ActionListener(){
public void actionPerformed(ActionEvent evt){
for(int i = 0; i < 5; i++){
Ball b = new Ball(canvas, Color.blue);
b.setPriority(Thread.NORM_PRIORITY);
b.start();
}
}
});
addButton(p, "Red ball", new ActionListener(){
public void actionPerformed(ActionEvent evt){
for(int i = 0; i < 5; i++){
Ball b = new Ball(canvas, Color.red);
b.setPriority(Thread.NORM_PRIORITY + 2);
b.start();
}
}
});

Cc mc u tin ca cc lung
addButton(p, "Close", new ActionListener(){
public void actionPerformed(ActionEvent evt){
canvas.setVisible(false);
System.exit(0);
}
});
contentPane.add(p, "South");
}
public void addButton(Container c, String title, ActionListener a){
JButton b = new JButton(title);
c.add(b);
b.addActionListener(a);
}
private JPanel canvas;
}

Cc mc u tin ca cc lung
class Ball extends Thread{
public Ball(JPanel b, Color c){
box = b; color = c;
}
public void draw(){
Graphics g = box.getGraphics(); g.setColor(color);
g.fillOval(x, y, XSIZE, YSIZE); g.dispose();
}
public void move(){
if(!box.isVisible()) return;
Graphics g = box.getGraphics();
g.setXORMode(box.getBackground()); g.setColor(color);
g.fillOval(x, y, XSIZE, YSIZE);
x += dx;
y += dy;
Dimension d = box.getSize();
if(x < 0){
x = 0; dx = -dx;
}
if(x + XSIZE >= d.width){
x = d.width - XSIZE; dx = -dx;
}
if(y < 0){
y = 0; dy = -dy; }

Cc mc u tin ca cc lung
if(y + YSIZE >= d.height){
y = d.height - YSIZE; dy = -dy;
}
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void run(){
try{
for(int i = 1; i <= 1000; i++){
move();
sleep(5);
}
}catch(InterruptedException e){
}
}
private JPanel box;
private static final int XSIZE = 10;
private static final int YSIZE = 10;
private int x = 0;
private int y = 0;
private int dx = 2;
private int dy = 2;
private Color color;
}

Cc mc u tin ca cc lung (TT)

Chy chng trnh trn chng ta nhn thy hnh nh nhng qu bng ny nhanh
hn v cc lung thc hin chng c mc u tin cao hn.
Lu : Cc lung c mc u tin thp hn s khng c c hi thc hin nu nhng lung
cao hn khng nhng, hoc nhng bng hm yield(). Nu c nhng lung
ang trng thi Runnable m c mc u tin t nht bng mc u tin ca
lung va nhng th mt trong s chng c xp lch thc hin.
+ B lp lch thng xuyn tnh li mc u tin ca cc lung ang thc hin
+ Tm lung c mc u tin cao nht thc hin.

To v qun l tuyn (1)


Khi chng trnh Java thc thi hm
main() tc l tuyn main c thc thi.
Tuyn ny c to ra mt cch t
ng, ti y :
- Cc tuyn con s c to ra t
- N l tuyn cui cng kt thc vic thc
thi. Ngay khi tuyn main ngng thc thi,
chng trnh b chm dt

Tuyn c th c to ra bng 2 cch:

Dn xut t lp Thread
Dn xut t Runnable.

Trng thi ca tuyn v cc


phng thc ca lp Thread
trng thi:
born
ready to run
running
sleeping
waiting
ready
blocked
dead

Phng thc:
start( )
sleep( )
wait( )
notify( )
run( )
stop( )

Cc phng thc Khc

enumerate(Thread t)
getName( )
isAlive( )
getPriority( )
setName(String name)
join( )
isDaemon( )
setDaemon(Boolean on)
resume( )
sleep( )
start( )

Phn chia thi gian gia cc tuyn


CPU thc thi ch mt tuyn ti mt thi
im nht nh.
Cc tuyn c u tin bng nhau th
c phn chia thi gian s dng b vi
x l.

Tuyn Daemon(ngm)
Hai kiu tuyn trong mt chng trnh
Java:
Cc tuyn ngi s dng

tuyn ngm

tuyn ngm dn rc

a tuyn vi Applets
Cc chng trnh Java da trn Applet
thng s dng nhiu hn mt tuyn
Trong
a
tuyn
vi Applets,
Lp
java.applet.Applet l lp con c to ra
mt Applet ngi s dng nh ngha
Lp con ca Applet khng th dn xut c
trc tip t lp Thread.
Cch lp con Applet l tuyn:
implements Runnable
Truyn i tng Runnable vo hm constructor
ca Thread.

S ng b
Thm nhp cc ti nguyn/d liu bi
nhiu tuyn
S ng b (Synchronization)
S quan st (Monitor)

M ng b
thm nhp s quan st ca mt i
tng, lp trnh vin s dng t kha
synchronized khi khai bo phng
thc.
Khi mt tuyn ang c thc thi
trong phm vi mt phng thc ng
b (synchronized), bt k tuyn khc
hoc phng thc ng b khc m
c gng gi n trong thi gian s
phi i

Khuyt im ca cc phng
thc ng b
Trnh bin dch Java t Sun khng
cha nhiu phng thc ng b
Cc phng thc ng b chm hn
so vi cc phng thc tng ng
khng ng b.

ng b ho

Cc lung chia s vi nhau cng mt khng gian b nh, ngha l chng


c th chia s vi nhau cc ti nguyn.
Khi c nhiu hn mt lung cng mun s dng mt ti nguyn s xut
hin tnh trng cng thng, ch cho php mt lung c quyn truy
cp.
cho cc lung chia s vi nhau c cc ti nguyn v hot ng hiu
qu, lun m bo nht qun d liu th phi c c ch ng b chng.
Java cung cp c ch ng b mc cao iu khin truy cp ca cc
lung vo nhng ti nguyn dng chung.

1.

Cc hm ng b

Khi nim semaphore thng c s dng iu khin ng b cc


hot ng truy cp vo nhng ti nguyn dng chung.
Mt lung mun truy cp vo mt ti nguyn dng chung (nh bin d
liu) th trc tin n phi yu cu c c monitor ring.
Khi c c monitor th lung nh c c cha kho m ca vo
min tranh chp (ti nguyn dng chung) s dng nhng ti nguyn
.

ng b ho (TT)
C ch monitor thc hin hai nguyn tc ng b chnh:
+ Khng mt lung no khc c phn monitor khi c mt
lung yu cu v ang chim gi. Nhng lung c yu cu
monitor s phi ch cho n khi monitor c gii phng.
+ Khi c mt lung gii phng (ra khi) monitor, mt lung
ang ch monitor c th truy cp vo ti nguyn dng chung
tng ng vi monitor .
Mi i tng trong Java u c monitor, mi i tng c
th c s dng nh mt kho loi tr nhau, cung cp kh
nng ng b truy cp vo nhng ti nguyn chia s.
Trong lp trnh c hai cch thc hin ng b:
+ Cc hm (hm) c ng b
+ Cc khi c ng b

ng b ho (TT)
(i) Cc hm ng b
Hm ca mt lp ch cho php mt lung c thc hin mt thi im
th n phi khai bo synchronized, c gi l hm ng b.
Mt lung mun thc hin hm ng b th n phi ch c c
monitor ca i tng c hm .
Trong khi mt lung ang thc hin hm ng b th tt c cc lung
khc mun thc hin hm ny ca cng mt i tng, u phi ch cho
n khi lung thc hin xong v c gii phng. Bng cch , nhng
hm c ng b s khng bao gi b tc nghn.
Nhng hm khng c ng b ca i tng c th c gi thc hin
mi lc bi bt k i tng no.
Khi chy, chng trnh s thi hnh tun t cc lnh cho n khi kt thc
chng trnh.
Trong Java, hm ng b c th khai bo static. Cc lp cng c th c
cc monitor tng t nh i vi cc i tng.
Mt lung yu cu monitor ca lp trc khi n c th thc hin vi mt
hm c ng b tnh (static) no trong lp, ng thi cc lung khc
mun thc hin nhng hm nh th ca cng mt lp th b chn li.

ng b vic truy cp vo cc ti nguyn chia s


V d: H thng ngn hng c 10 ti khon, trong c cc giao
dch chuyn tin gia cc ti khon vi nhau mt cch ngu
nhin. Chng trnh to ra 10 lung cho 10 ti khon. Mi giao
dch c mt lung phc v s chuyn mt lng tin ngu
nhin t mt ti khon sang ti khon khc.
Nu chng trnh thc hin vi 10 lung hot ng khng ng
b chuyn tin gia cc ti khon trong ngn hng.
Vn s ny sinh khi c hai lung ng thi mun chuyn tin
vo cng mt ti khon. Gi s hai lung cng thc hin:
accounts[to] += amount;
y khng phi l thao tc nguyn t. Cu lnh ny c thc
hin nh sau:
1.
Np accounts[to] vo thanh ghi.
2.
Cng s tin trong ti khon accounts vi amount
3.
Lu li kt qu cho accounts[to].

ng b vic truy cp vo cc ti nguyn chia s (TT)


Chng ta c th gi thit lung th nht thc hin bc 1 v 2 vi
amount = 500, sau n b ngt. Lung th hai c th thc hin trn
vn c ba bc trn vi amount = 100, sau lung th nht kt
thc vic cp nht bng cch thc hin nt bc 3. Qu trnh ny
c m t nh hnh 1.3.
Lung 1 Lung 2
accounts[to]
Thanh ghi 1
Thanh ghi 2
5000
Np
5000
5000
Cng
Np 5500
5000
5000
Cng
Lu li
Lu li

5500

6000

5000

6000

6000
5500

Kt thc lung th nht, accounts[to]c 6000, nhng ngay sau lung th


hai kt thc th cng chnh ti khon cha chuyn tin i ay c, nhng li ch
cn 5500. ng ra n phi l 6500

247

ng b vic truy cp vo cc ti nguyn chia s (TT)


Java s dng c ch ng b kh hiu qu l monitor. Mt
hm s khng b ngt nu bn khai bo n l synchronized.

public synchronized void transfer(int from, int to, int


amount){
if(accounts[from] < amount) return;
accounts[from] -= amount;
accounts[to] += amount;
numTransacts++;
if(numTransacts % NTEST == 0) test();
}
public synchronized void test(){
int sum = 0;
for(int i = 0; i < accounts.length; i++)
sum += accounts[i];
System.out.println("Giao dich: " + numTransacts
+ " tong so: " + sum);
}

ng b vic truy cp vo cc ti nguyn chia s (TT)


Khi c mt lung gi hm c ng b th n c m bo rng hm ny
phi thc hin xong th lung khc mi c s dng i vi cng mt i
tng.
Hot ng ca cc lung khng ng b v ng b ca hai lung thc hin
gi hm transfer()
Khng c ng b
c ng b
Thread 1
Thread 2
Thread 1
Thread 2

transfer()
transfer()

transfer()
transfer()

Cc kho i tng
Khi mt lung gi mt hm c ng b th i tng ca n b kho, ging nh
kho ca phng.
Nh vy, khi mt lung khc mun gi hm c ng b ca cng i tng th
s khng m c.
Sau khi thc hin xong, lung bn trong gii phng hm c ng b va s
dng, ra khi i tng v a cha kho ra ngoi bc ca nhng lung khc c
th tip tc cng vic ca mnh.
Mt lung c th gi nhiu kho i tng cng mt thi im, nh trong khi
ang thc hin mt li gi hm ng b ca mt i tng, n li gi tip hm ng
b ca i tng khc.
Nhng, ti mi thi im, mi kho i tng ch c mt lung s hu.
Chng ta hy phn tch chi tit hn hot ng ca h thng ngn hng. Mt giao
dch chuyn tin s khng thc hin c nu khng cn tin. N phi ch cho
n cc ti khon khc chuyn tin n v khi c th mi thc hin c giao
dch .

public synchronized void transfer(int from, int to, int amount){


while(accounts[from] < amount)
wait();
// Chuyn tin
}

Cc kho i tng (TT)


Chng ta s lm g khi trong ti khon khng c tin? Tt nhin l
phi ch cho n khi c tin trong ti khon. Nhng transfer() l hm
c ng b. Do , khi mt lung chim c kho i tng th
lung khc s khng c c hi s hu tr n, cho n khi lung trc
gii phng kho .
Khi wait() c gi trong hm c ng b (nh transfer()), lung
hin thi s b chn li v trao li kho i tng cho lung khc.
C s khc nhau thc s gia lung ang ch s dng hm ng b
vi hm b chn li bi hm wait().
Khi mt lung gi wait() th n c a vo danh sch hng i.
Cho n khi cc lung cha c a ra khi danh sch hng i th b lp
lch s b qua v do vy chng khng th tip tc c.
a mt lung ra khi danh sch hng i th phi c mt lung khc gi
notify() hoc notifyAll() trn cng mt i tng.

notify() a mt lung bt k ra khi danh sch hng i.


notifyAll() a tt c cc lung ra khi danh sch hng i.

Cc kho i tng (TT)


Nhng lung a ra khi danh sch hng i s c b lp lch kch
hot chng. Ngay tc khc lung no chim c kho i tng th s
bt u thc hin. Nh vy, trong hm transfer() chng ta gi notifyAll()
khi kt thc vic chuyn tin mt trong cc lung c th c tip tc
thc hin v trnh b tc.
Cui cng chng trnh s dng c ch ng b c vit li nh sau.
public class SynBankTransfer{
public static void main(String arg[]){
Bank b = new Bank(NACCOUNTS, INI_BALANCE);
for(int i = 0; i < NACCOUNTS; i++){
TransferThread t = new TransferThread(b, i, INI_BALANCE);
t.setPriority(Thread.NORM_PRIORITY + i % 2);
t.start();
}
}

public static final int NACCOUNTS = 10;


public static final int INI_BALANCE = 10000;
}

Cc kho i tng (TT)


class Bank{
public static final int NTEST = 1000;
private int[] accounts;
private long numTransacts = 0;
public Bank(int n, int initBalance){
accounts = new int[n];
for(int i = 0; i < accounts.length; i++)
accounts[i] = initBalance;
numTransacts = 0;
}
public void transfer(int from, int to, int amount){
while(accounts[from] < amount) wait();
accounts[from] -= amount;
accounts[to] += amount;
numTransacts++;
notifyAll();
if(numTransacts % NTEST == 0) test();
}

Cc kho i tng (TT)


public synchronized void test(){
int sum = 0;
for(int i = 0; i < accounts.length; i++)
sum += accounts[i];
System.out.println("Giao dich: " + numTransacts + " tong so: " + sum);
}
public int size(){
return accounts.length;
}
}
class TransferThread extends Thread{
private Bank bank;
private int fromAcc;
private int maxAmount;
public TransferThread(Bank b, int from, int max){
bank = b;
fromAcc = from;
maxAmount = max;
}

Cc kho i tng (TT)


public void run(){
try{
while(!interrupted()){
int toAcc = (int)(bank.size() * Math.random());
int amount = (int)(maxAmount * Math.random());
bank.transfer(fromAcc, toAcc, amount);
sleep(1);
}
}catch(InterruptedException e){
}
}
}

Nu bn chy chng trnh vi cc hm transfer(), test() c ng b


th mi vic s thc hin chnh xc ng theo yu cu. Tuy nhin, bn
cng c th nhn thy chng trnh s chy chm hn cht t bi v phi
tr gi cho c ch ng b nhm m bo cho h thng hot ng chnh
xc, m bo nht qun d liu, hoc trnh gy ra tc nghn.

K thut wait-notify
Tuyn chia cc tc v thnh cc n v
ring bit v hp l.
trnh trng hp kim sot vng,
Java s dng cc phng thc wait(),
notify() v notifyAll() :

wait( )
notify( )
notifyAll( )

K thut wait-notify
Tuyn u tin cao nht chy u tin
C php ca cc phng thc:

final void wait( ) throws IOException


final void notify( )
final void notifyAll( )

Deadlock
Mt deadlock xy ra khi hai tuyn c
mt ph thuc vng quanh trn mt cp
i tng ng b

Vn cht tc
C ch ng b trong Java l rt tin li, kh mnh, nhng khng gii quyt c mi vn
ny sinh trong qu trnh x l a lung.
V d, hy xt tnh hung: Account 1 c 2000$, Account 2 c 3000$ v Thread 1 cn chuyn
3000$ t Account 1 sang Account 2, ngc li Thread 1 cn chuyn 3500$ t Account 2 sang
Account 1.
Khi , Thread 1 v Thread 2 ri vo tnh trng cht tc,hoc tc nghn v chng chn ln
nhau.
Mt h thng m tt c cc lung (tin trnh) b chn li ch ln nhau v khng mt lung
(tin trnh) no thc hin tip th c gi l h thng b cht tc (tc nghn).
Trong tnh hung trn, c hai lung u phi gi wait() x l hai ti khon u khng s
tin chuyn.
Trong chng trnh SynBankTransfer.java, hin tng tc nghn khng xut hin bi
mt l do n gin. Mi giao dch chuyn tin nhiu nht l 10000$. C 10 ti khon vi tng
s tin l 100000$. Do , mi thi im u c t nht mt ti khon c khng t hn 10000$,
ngha l lung ph trch ti khon c php thc hin.
Tuy nhin, khi lp trnh ta c th gy ra tnh hung khc c th lm xut hin tc nghn, v d
trong SynBankTransfer.java thay v gi notifyAll() ta gi notify(). Nh trn
phn tch, notifyAll() thng bo cho tt c cc lung ang ch c tin chuyn i c
th tip tc thc hin, cn notify() ch bo cho mt lung c tip tc. Khi , nu lung
c thng bo li khng th thc hin, v khng tin chuyn chng hn, th tt c cc
lung khc cng s b chn li.

Vn cht tc
Chng ta hy xt kch bn sau:
+ Account 1: 19000$
+ Tt c cc Account cn li u c 9000$
+ Thread 1: chuyn 9500$ t Account 1 sang Account 2
+ Tt lung khc u chuyn sang ti khon khc mt lng tin l 9100$.
Ch c Thread 1 tin chuyn cn cc lung khc b chn li. Thread 1 thc hin
chuyn tin xong ta c:
+ Account 1: 9500$
+ Account 2: 18500$
+ Tt c cc Account cn li u c 9000$
Gi s Thread 1 gi notify(). Hm ny ch thng bo cho mt lung ngu nhin n c
th tip tc thc hin. Gi s l Thread 3. Nhng lung ny cng khng chuyn c v
khng tin ti khon Account 3, nn phi ch (gi wait()). Thread 1 vn tip tc
thc hin. Mt giao dch mi ngu nhin li c to ra. V d
Thread 1: chuyn 9600$ t Account 1 sang Account 2.
By gi Thread li gi wait(), v nh vy tt c cc lung u ri vo tnh trng tc
nghn.
Qua v d trn cho thy, mt ngn ng lp trnh c c ch h tr ng b l cha gii
quyt vn tc nghn. Quan trng l khi thit k chng trnh, ta phi m bo rng mi
thi im c t nht mt lung (tin trnh) tip tc thc hin.

Thu dn rc (Garbage collection)


Gii phng b nh b chim gi bi
cc i tng m cc i tng ny
khng s dng trong thi gian di
S dn rc thc thi nh l mt tuyn
ring bit c quyn u tin thp
S dng cu lnh sau tt i s dn
rc trong ng dng:
java noasyncgc

Phng thc finalize()


Java cung cp mt cch lm sch mt tin
trnh trc khi iu khin tr li h iu hnh
Phng thc finalize(), nu hin din, s c
thc thi trn mi i tng, trc khi s dn
rc
Cu lnh ca phng thc finalize() nh sau :

protected void finalize( ) throws Throwable

Tham chiu khng phi l s dn rc; ch cc


i tng mi c dn rc

Chng VIII

Cc lung I/O

Cc lung
Cc lung l nhng ng ng gi v
nhn thng tin trong cc chng trnh java.
Khi mt lung c hoc ghi, cc lung khc
b kho.
Nu li xy ra trong khi c hoc ghi lung,
mt bit l s c to ra.
Lp java.lang.System nh ngha lung nhp
v xut chun.

Cc lp lung I/O
Lp System.out.
Lp System.in.
Lp System.err.

Lp InputStream
L lp tru tng
nh ngha cch nhn d liu
Cung cp s phng thc dng c v
cc lung d liu lm u vo.
Cc phng thc:
read( )
available( )
close ( )
mark ( )
markSupported( )
reset( )
skip( )

Lp OutputStream
L lp tru tng.
nh ngha cch ghi d liu vo lung.
Cung cp tp cc phng thc tr gip
trong vic to, ghi v x l cc lung xut.
Cc phng thc:

write(int)
write(byte[ ])
write(byte[ ], int, int)
flush( )
close( )

Nhp mng cc Byte


S dng cc m b nh
Lp ByteArrayInputStream
To ra mt lung nhp t m b nh
v mng cc byte.

Khng h tr cc phng thc mi


Cc phng thc np chng ca lp
InputStream, ging nh read(), skip(),
available() v reset().

Byte Array Output


s dng cc vng m b nh
Lp ByteArrayOutputStream
To ra mt lung kt xut trn mng byte
Cung cp cc kh nng b sung cho
mng kt xut tng trng nhm cha
ch cho d liu mi ghi vo.
Cng cung cp cc phng thc
chuyn i lung ti mng byte, hay i
tng String.

Phng thc ca lp
ByteArrayOutputStream :

reset( )
size( )
writeTo( )

Cc lp nhp/xut tp tin
Cc lp ny tr gip trong Java h tr cc
thao tc nhp v xut:

File
FileDescriptor
FileInputStream
FileOutputStream

Cc
lp
File,
FileDescriptor,
v
RandomAccessFile c s dng h tr
trc tip hoc truy cp nhp/xut ngu nhin.

Lp tp tin
c s dng truy cp cc i tng tp tin
v th mc
Nhng tp tin c tn c t tn theo qui
c ca h iu hnh.
Lp ny cung cp phng thc khi to
to ra cc th mc v tp tin
Tt c cc thao tc th mc v tp tin u
c s dng cc phng thc truy cp v
cc phng thc th mc m cc lp tp tin
cung cp

Lp FileDescriptor
Cung cp vic truy cp ti cc tp tin
m t
Khng cung cp bt k tnh r nt no
ti thng tin m h iu hnh duy tr.
Cung cp ch mt phng thc gi l
valid( )

Lp FileInputStream
Cho php u vo c t mt tp tin
trong mt mu ca mt dng
Cc i tng c to ra s dng
chui tn tp tin, i tng
FileDescriptor nh mt tham s.
Cc phng thc np chng ca lp
InputStream, n cung cp phng thc
finalize( ) v getFD( )

Lp FileOutputStream
Cho php kt xut ghi ra mt lung
tp tin
Cc i tng cng to ra s dng mt
chui tn tp tin, hay i tng
FileDescriptor nh mt tham s.
Lp ny np chng cc phng thc
ca lp OutputStream v cung cp
phng thc finalize( ) v getFD( )

Nhp / xut lc
Lc:
L kiu lung sa i cch iu qun mt
lung hin c.
v c bn c s dng thch ng cc
lung theo cc nhu cu ca chng trnh
c th.
B lc nm gia lung nhp v lung xut.
Thc hin mt s tin trnh c bit trn
cc byte c chuyn giao t u vo
n kt xut.
C th phi hp thc hin mt dy cc
tu chn lc.

Lp FilterInputStream
L lp tru tng.
L cha ca tt c cc lp lung nhp lc.
Cung cp kh nng to ra mt lung t
lung khc.
Mt lung c th c v cung cp di
dng kt xut cho lung khc.
Duy tr mt dy cc i tng ca lp
InputStream
Cho php to ra nhiu b lc kt xch

Lp FilterOutputStream
L
dng
b
tr
cho
lp
FilterInputStream.
L cha ca tt c cc lp lung kt xut.
Duy tr i tng ca lp
OutputStream nh l mt bin out.
D liu ghi ra lp ny c th sa i
thc hin cc thao tc lc, v sau
phn hi n i tng OutputStream.

Vng m nhp/xut
Vng m:
L kho lu tr d liu.
C th cung cp d liu thay v quay tr li ngun
d liu gc ban u.
Java s dng vng m nhp v kt xut tm
thi lp cache d liu c c hoc ghi vo mt
lung.
Trong khi thc hin vng m nhp:
S lng byte ln c c cng thi im v lu
tr trong mt vng m nhp.
Khi chng trnh c lung nhp, cc byte nhp
c c vo vng m nhp.

Vng m nhp/xut (tt)


Trong trng hp vng m kt xut, mt
chng trnh ghi ra mt lung.
D liu kt xut c lu tr trong mt vng
m kt xut.
D liu c lu tr cho n khi vng m tr
nn y, hay lung kt xut c x trng.
Kt thc, vng m kt xut c chuyn gi
n ch ca lung xut.

Lp BufferedInputStream
T ng to ra v duy tr vng m h tr
vng m nhp.
Lp BufferedInputStream l mt b m, n
c th p dng cho mt s cc i tng nht
nh ca lp InputStream.
Cng c th phi hp cc tp tin u vo
khc.
S dng vi bin trin khai vng m nhp.

Lp BufferedInputStream
(Contd)
nh ngha hai phng thc thit lp:

Mt ch php ch nh kch thc ca vng m nhp.


phng thc kia th khng.

C hai phng thc thit lp u tip nhn mt


i tng ca lp InputStream nh mt tham
s.
Np chng cc phng thc truy cp m
InputStream cung cp, v khng a vo bt k
phng thc mi no.

Lp BufferedOutputStream
Thc hin vng m kt xut theo cch
tng ng vi lp BufferedInputStream.
nh ngha hai phng thc thit lp. N cho
php chng ta n nh kch thc ca vng
m xut trong mt phng thc thit lp,
cng ging nh cung cp kch thc vng
m mc nh.
Np chng tt c phng thc ca lp
OutputStream v khng a vo bt k
phng thc no.

Lp Reader v Writer
L cc lp tru tng.
Chng nm ti nh ca h phn cp
lp, h tr vic c v ghi cc lung k
t 2 bytes.

Lp Reader
H tr cc phng thc sau:

read( )
reset( )
skip( )
mark( )
markSupported( )
close( )
ready( )

Lp Writer
H tr cc phng thc sau :

write( )
flush( )
close( )

Nhp/xut chui v mng k


t
H tr nhp v xut t cc vng m
b nh
H tr 8 bt k t nhp v kt xut
Lp CharArrayReader khng b sung
phng thc mi vo cc phng
thc m lp Reader cung cp.

Nhp/xut chui v mng k t


Lp CharArrayWriter b sung phng
thc sau y vo phng thc ca lp
Writer cung cp:

reset( )
size( )
toCharArray( )
toString( )
writeTo( )

Nhp/xut chui v mng k t


(tt)
Lp StringReader tr gip c cc k t u
vo t su chui.
N khng b sung bt k phng thc no
m lp Reader cung cp.
Lp StringWriter tr gip ghi lung kt
xut k t ra mt i tng StringBuffer.
Lp ny b sung thm cc phng thc sau:

getBuffer( )
toString( )

Lp PrinterWriter
Thc hin mt kt xut.
Lp ny c phng thc b sung , tr gip in cc
kiu d liu c bn .
Lp PrintWriter thay th lp PrintStream
Thc t ci thin lp PrintStream; lp ny dng mt
du tch dng ph thuc nn tng im cc dng
thay v k t \n.
Cung cp phn h tr cho cc k t unicode so vi
PrintStream.
Cc phng thc:
checkError( )
setError( )

Giao din DataInput


c s dng c cc byte t
lung nh phn
Cho php chng ta chuyn i d liu
t t khun dng UTF-8 c sa i
Java n dng chui
nh nghi s phng thc, bao gm
cc phng thc c cc kiu d
liu nguyn thu.

Nhng phng thc Interface


DataInput
boolean readBoolean( ) float readFloat( )
byte readByte( )

int readInt( )

char readChar( )

double readDouble( )

short readShort( )

String readUTF( )

long readLong( )

String readLine( )

Interface DataOutput
c s dng xy dng li d liu mt s
kiu d liu nguyn thu vo trong dy cc
byte
Ghi cc byte d liu vo lung nh phn
Cho php chng ta chuyn i mt chui vo
khun dng UTF-8 c sa i Java v vit
n vo trong mt dy.
nh ngha mt s phng thc v tt c
phng thc kch hot IOException trong
trng hp li.

Cc phng thc giao din


DataOutput
void writeBoolean(boolean b)
void writeByte( int value)
void writeChar(int value)
void writeShort(int value)
void writeLong(long value)
void writeFloat(float value)
void writeInt(int value)
void writeDouble(double value)
void writeUTF(String value)

Lp RandomAccessFile
Cung cp kh nng thc hin I/O theo cc v
tr c th bn trong mt tp tin.
d liu c th c hoc ghi ngu nhin
nhng v tr bn trong tp tin thay vi mt kho
lu tr thng tin lin tc.
phng thc seek( ) h tr truy cp ngu
nhin.
Thc hin c c v ghi d liu.
H tr cc cp php c v ghi tp tin c
bn.
K tha cc phng thc t cc lp
DataInput v DataOutput

Cc phng thc ca lp
RandomAccessFile
seek( )
getFilePointer( )
length( )

Gi java.awt.print
Gm c cc interface
Pageable:

nh ngha cc phng thc dng cc i tng


biu th cc trang s c in.
Ch nh s trang c in, v trang hin ti hay l
tranh gii trang c in

Printable:

Chi nh phng thc print( ) s dng in mt trang


trn i tng Graphics

PrinterGraphics:

Cung cp kh nng truy cp i tng PrinterJob

interface PrinterGraphics cung cp cc lp


sau:

Paper
Book
PageFormat
PrinterJob

Gi java.awt.print kch hot cc ngoi l:

PrinterException
PrinterIOException
PrinterAbortException

Chng IX
KT NI CSDL
Java Database Connectivity

Tng quan
JDBC cung cp tp cc lp v interface
cho php chng trnh Java c th lm
vic c vi h CSDL
Tp cc lp ca JDBC
c th lm vic c vi
mi h csdl.

C 3 bc chnh kt ni CSDL
Np database drivers
To ni kt, To i tng Connection
To i tng Statement thc thi cc
lnh sql..

V d
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//np driver
Connection con=DriverManager.getConnection("jdbc:odbc:CSDL"); //to ni kt
Statement stmt = con.createStatement();//to i tng Statement
:
:
:
:

Database URL
Database URL l mt chui c dng
kt ni csdl.
c php :

jdbc:subprotocol_name:other_stuff
The subprotocol_name c dng tu
vo loi driver s dng kt ni csdl.
v d : subprotocol name l odbc nu
driver l cu ni jdbcodbc
Other_stuff cng ph thuc vo loi
driver no c s dng. v d nu
driver l cu ni jdbcodbc th thnh phn
ny l tn ca i tng ODBC

Database Driver
Bo m ng dng java tng tc vi mi csdl
di mt cch thc chun v duy nht.
Bo m nhng yu cu t chng trnh s
c biu din trong csdl di mt ngn ng
m csdl hiu c
Nhn cc yu cu t client, chuyn n n vo
nh dng m csdl c th hiu c v th hin
trong csdl.
Nhn cc phn hi, chuyn n ngc li nh
dng d liu java v th hin trong ng dng.

Np Driver
Lp DriverManager chu trch nhim np
driver v to kt ni n csdl.
DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());

hoc
Class.forName(String);
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Tng ng
new sun.jdbc.odbc.JdbcOdbcDriver();

JDBC Driver
C 4 loi JDBC Driver
Loi 1: JDBC/ODBC
Loi 2: Native-API
Loi 3: Open Protocol-Net
Loi 4: Proprietary-Protocol-Net
Loi 2,3,4 ni chung c vit bi nh
cung cp csdl, hiu qu hn loi 1
nhng thc hin phc tp hn.

Loi I JDBC/ODBC
jdk h tr cu ni jdbc-odbc (jdbc-odbc
bridge).
Mm do nhng khng hiu qu.
Aplication
Aplication
JDBC
JDBCDriver
Driver

Client

Disk
Disk

ODBC
ODBCDriver
Driver
Network Interface

Network Interface
Database
Database

Server

Loi 2: Native-API
Tt hn loi 1, loi ny cho php JDBC giao
tip trc tip vi cc driver hay cc hm API
ca CSDL.
Aplication
Aplication
JDBC
JDBCDriver
Driver

Client

Disk
Disk

Native
NativeDatabase
DatabaseLibrary
Library

Network Interface

Network Interface
Database
Database

Server

Loi 3: Open Protocol-Net


Drivers
C th chuyn cc yu cu n cc csdl nm
xa.
C th giao tip vi nhiu loi CSDL.
Khng phi ca nh cung cp csdl
Client
Aplication
Aplication
Tt c bng m java
JDBC
JDBCDriver
Driver
Client
Client

Disk
Disk

Network Interface

Serve
r
Databa
Databa
se
se

Network Interface

JDBC
JDBCDriver
Driver
Server
Server

Native
NativeDatabase
Database
Library
Library

Loi 4: Proprietary-Protocol Net


100% java
C kh nng giao tip trc tip vi h
CSDL khng cn chuyn i
Aplication
Aplication
JDBC
JDBCDriver
Driver

Client

Disk
Disk

Network Interface

Network Interface
Database
Database

Server

Gi Java.sql
Cung cp tp hp cc lp v interface lm
vic vi CSDL.
Cc lp

DriverManager
Date, Time
Timestamp
Types

Cc Interfaces

Driver
Connection
DatabaseMetaData
Statement

PreparedStatement
CallableStatement
ResultSet
ResultSetMetaData

i tng Statement
i tng Connection cha lin kt trc
tip n csdl.
S dng i tng Connection to
i tng Statement.
Statement s = con.createStatement();

i tng ny c nhim v gi cc cu
lnh sql n csdl.
executeQuery(String) or
executeUpdate(String) method
Cng mt i tng Statement c th s
dng cho nhiu cu lnh sql khc nhau.

C 3 phng thc thc thi


executeQuery()
executeUpdate()
execute()

The executeQuery()
Nhn cu lnh SQL (select) lm i s, tr li i
tng ResultSet

ResultSet rs = s.executeQuery(SELECT *
FROM Books);

Phng thc executeUpdate()


Nhn cc cu lnh sql dng cp nht
Tr li s nguyn biu th s hng c
cp nht.
UPDATE, INSERT, or DELETE.

Phng thc execute()


c p dng cho trng hp khng r
loi sql no c thc hin.
c p dng cho trng hp cu lnh
sql c to ra t ng bi chng trnh.

ResultSet
Cha mt hoc nhiu hng d liu t vic
thc hin cu lnh truy vn.
C th ly d liu tng hng d liu mt trong
ResultSet.
S dng phng thc next() di chuyn
n hng d liu tip theo trong ResultSet.
Hm next() tr li true ch rng hng cha d
liu, tr li false hng cui cng, khng cha
d liu.
Thc hin
while (rs.next()){
// examine a row from the results
}

ly d liu cc ct trn mi hng


ca ResultSet, ta dng cc phng
thc
gettype(int | String)
i s l ch s ct tnh t 1.
p dng cho cc ct c kiu d liu l int, float,
Date.....

V d :
String isbn = rs.getString(1); // Column 1
float price = rs.getDouble(Price);

ResultSetMetadata
i tng ny cho bit thng tin v ResultSet
ResultSet rs = stmt.executeQuery(SQLString);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
getColumnName(int column)

Cc i tng Statement
khc
Prepared Statements
Callable Statement

Database Metadata
i tng ny cho bit thng tin v
csdl.

Chng trnh mu

import java.sql.*;
class JDBCDemo1 {
public static void main(String[] args) {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:Accserver");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(args[0]);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
for(int j=1; j<=numberOfColumns;j++) {
System.out.println(rsmd.getColumnLabel(j));
}
while(rs.next()) {
for(int i=1; i<=numberOfColumns;i++){
System.out.println(rs.getObject(i));
}}
rs.close();
stmt.close();
} catch(Exception e){ System.out.println("Error " + e);
}
}

TI BI TP LN JAVA
1. Qun l bi xe
2. Qun l bn v tu
3. QL sinh vin
4. Qun l bn xe
5. Qun l tin in
6. Qun l k tc x
7. Qun l cp pht thuc

8. Qun l phng my
9. Qun l lch ging dy
10. Qun l xut nhp kho
11. Qun l thu bao internet
12. Qun l th vin
13. Xy dng chng trnh m phng my
ATM
.................................................................

You might also like