Professional Documents
Culture Documents
MN HC : LP TRNH JAVA
M U
GII THIU S
LC LP TRNH
HNG I TNG
Mc Tiu Bi Hc
Tp trung vo vn
Cc tnh cht ca
mt i tng
Khch hng
Tn
a ch
Tui
Chiu cao
Mu tc
Tn
a ch
Cc hnh ng
Tn ca khch hng
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
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
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 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
=
Thm cc thuc tnh v hnh ng
cn thit vo lp khch hng
Nhp m sn phm mua
Lp ha n
Lp Khch Hng
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
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
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
Java
compiler
Java
bytecode
Java
interpreter
Bytecode
compiler
Machine
code
28
Applets
ng
dng
Application)
lp
(console
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
B cng c JDK
Trnh bin dch, 'javac'
OR
jdb -host -password [options]
sourcecodename.java
Cc gi chun ca Java
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
method body
method header
}
}
38
Cc phn t c bn ca ngn
ng Java
Lp v phng thc
Lp trong Java
//
class header
class body
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
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
Characters
Character literals are delimited by single
quotes:
'a'
'X'
'7'
'$'
','
'\n'
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
Bin s
C php
datatype identifier [=value][, identifier[=value]...];
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
}
Cng trong mt lp
C cng tn
Khc nhau v danh sch tham s
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.
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
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;
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)
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:
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.
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.
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 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 Pool
String Pool i din cho tt c cc k
t c to ra trong chng trnh
Khi nim String Pool
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:
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( )
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)
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()
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)
countTokens( )
hasMoreElements( )
hasMoreTokens( )
nextElement( )
nextToken( )
nextToken(String)
Chng 4
X l bit l
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
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.
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.
RuntimeException
ArithmeticException
IllegalAccessException
IllegalArgumentException
ArrayIndexOutOfBoundsException
NullPointerException
SecurityException
ClassNotFoundException
NumberFormatException
AWTException
IOException
FileNotFoundException
EOFException
NoSuchMethodException
InterruptedException
Chng V
LP TRNH GIAO DIN VI AWT
Toolkit
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)
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
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
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
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
BorderLayout
GridBagLayout
<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);
add(sb2, BorderLayout.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
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:
<TT>
c/ ItemEvent
Cc thnh phn ca GUI gy ra cc s kin v cc mc gm c:
<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
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
<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>
<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
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( )
paint( )
repaint( )
showStatus( )
getAppletInfo( )
Width
Height
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
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)
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);
Drawing PolyLines
Cc phng thc c s dng v
nhiu on thng
C php
V v t cc hnh a gic
Cc phng thc v v t cc hnh a gic
C php
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);
Red
Green
Blue
White
255
255
255
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( )
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
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.
<Tip theo>
To lp lung
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()
. . .
}
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
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;
}
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.
Dn xut t lp Thread
Dn xut t Runnable.
Phng thc:
start( )
sleep( )
wait( )
notify( )
run( )
stop( )
enumerate(Thread t)
getName( )
isAlive( )
getPriority( )
setName(String name)
join( )
isDaemon( )
setDaemon(Boolean on)
resume( )
sleep( )
start( )
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
1.
Cc hm ng b
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.
5500
6000
5000
6000
6000
5500
247
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 .
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:
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.
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( )
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.
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:
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( )
reset( )
size( )
toCharArray( )
toString( )
writeTo( )
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( )
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.
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:
Printable:
PrinterGraphics:
Paper
Book
PageFormat
PrinterJob
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
Disk
Disk
Network Interface
Serve
r
Databa
Databa
se
se
Network Interface
JDBC
JDBCDriver
Driver
Server
Server
Native
NativeDatabase
Database
Library
Library
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.
The executeQuery()
Nhn cu lnh SQL (select) lm i s, tr li i
tng ResultSet
ResultSet rs = s.executeQuery(SELECT *
FROM Books);
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
}
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
.................................................................