You are on page 1of 352

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
Tn a ch Tui Chiu cao Mu tc Cc tnh cht ca mt i tng Khch hng
Tn a ch

Tru Tng D Liu (tip theo)


Cc thuc tnh
Tn ca khch hng a ch ca khch hng i xe hi mua Ngi bn xe hi

Cc hnh ng
Nhp tn ca khch hng Nhp a ch ca khch hng Nhp i xe hi mua c 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
Tn a ch im mn 1 im mn 2 Nhp tn Nhp a ch Nhp im Tnh tng s im Tn a ch Lng Chc v Nhp tn Nhp a ch Nhp lng Tnh lng

LP KHCH HNG
Tn a ch Sn phm mua c Nhp tn Nhp a ch Nhp m sn phm Lp ha n

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 L lp tha k t lp khc

Lp con

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

Line

Picture

How are you?

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 bytecode

Java compiler

Java interpreter

Bytecode compiler

Machine code

28

Cc loi chng trnh Java


Applets ng dng c lp (console Application) 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 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 Java 1.1 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 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

Cc thnh phn c bn
1. TP K T CA JAVA 2. T KHO 3. TN, LI CH THCH 4. CU LNH V DU CHM CU 5. CU TRC CA CHNG TRNH JAVA 6. MT S CHNG TRNH JAVA MU

Tp k t ca java
Mi ngn ng u c xy dng trn b k t. B k t ca Java nh sau: + Cc ch ci in hoa: A, B, C, Y, Z + Cc ch ci in thng: a, b, c, y, z + Cc ch s: 0, 1, 2, ,9 + Cc du cu: , ; : / ? . [ ] { }! ~ @ # $ % ^ & * ( ) -+=<> + Cc du ngn cch khng nhn thy: du cch, du tab, du xung hng enter + Du gch ni di _ Ch : + Java phn bit ch in hoa v ch in thng. + C th dng cc k t khc nh , , , , , hay c ting Vit trong chng trnh Java

B t kha ca Java

Tn v Li ch thch
* Tn :
- Tn dng xc nh cc i lng khc nhau trong mt chng trnh. - Mi tn c s dng trong chng trnh u phi c khai bo. - Tn hp l l dy k t lin nhau, c th gm cc ch ci (a..,z, A..,Z), cc ch s (0..9), k t gch di (_). - Tn phi bt u bng ch ci hoc du gch di. - Tn khng c trng vi t kho. V d : Nghiem_x, hoan_doi, y_1, y2,.. l tn hp l.

Tn v Li ch thch
* Li ch thch :
- Khng c tc dng to ra m ca chng trnh, gip d dng trong vic tm kim, kim tra, sa chng trnh - Li ch thch c th c t bt k u trong chng trnh - Cch ghi li ch thch: Cch 1 : Ch thch cho nhiu dng /* li ch thch -------------*/ Cch 2 : Ch thch cho mt dng // li ch thch

Cu lnh v Du chm cu
Mt cu lnh thng gm phn m t d liu v phn lnh theo quy nh ca Java. C hai loi: + Cu lnh n gin: l nhng lnh khng cha cc lnh khc : lnh gn, lnh gi phng thc, ... + Cu lnh cu trc: gm khi lnh, lnh r nhnh, lnh lp Khi lnh l gm nhiu lnh c t trong du { } Cc cu lnh cch nhau bi du ; Du chm phy ; dng ngn cch cc lnh, ngha l cui mi lnh, mi khai bo u c chm phy

Cu lnh v Du chm cu
php gn cu lnh n gin li gi phng thc

lnh nhy

cu lnh
khi lnh if (...) else ... switch ...

cu lnh cu trc

lnh la chn

lnh lp

for (...) ... do ... while ( ) while (...) ...

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 method comments about the class public class MyProgram

public static void main (String[] args) {

method body
} }

method header

45

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 s[]) { System.out.println(s[0]); System.out.println(s[1]); System.out.println(s[2]); } }

Truyn i s trong dng lnh (Tip theo)

Chng trnh tnh cn bc hai ca m


import java.io.*; public class canbachai { public static void Tinhcb2(int m) { double n=0.0; n=Math.sqrt(m); System.out.println("Can bac hai cua " +m+ "la" +n); } public static void main(String args[]) { // tao doi tuong de goi canbachai t=new canbachai(); t.Tinhcb2(9); t.Tinhcb2(16); } }

Chng trnh tnh n10


import java.io.*; class Tinh_n_mu10{ public static long Tinh(int n) { long tg=1; for(int i=1;i<=10;i++) tg*=n; return tg; } public static void main(String [] arg){ Tinh_n_mu10 t=new Tinh_n_mu10 (); System.out.println("Luy thua 10 cua so la :"+t.Tinh(2)); } }

Chng trnh kim tra mt s c phi bi ca 5 khng


import java.io.*; public class Boi5 { public static void Kiemtraboi5(int m) { if(m%5!=0) System.out.println(m+"Khong la boi so cua 5"); else System.out.println(m+"La boi cua 5"); } public static void main(String[] args) { Boi5 dt1=new Boi5();// tao doi tuong dt1 dt1.Kiemtraboi5(9); Boi5 dt2=new Boi5();// tao doi tuong dt2 dt2.Kiemtraboi5(10); } }

Chng trnh nhn cc k t g vo t bn phm v ch nhn cc k t s.


class Convert { public static void main (String [] args) throws java.io.IOException { System.out.print ("Please enter a number: "); int num = 0; int ch; while ((ch = System.in.read ()) != '\n') if (ch >= '0' && ch <= '9') { num *= 10; num += ch - '0'; } else break; System.out.println ("num = " + num + "num squared = " + num * num); } }//class

Kiu d liu
Kiu d liu c s (Primitive Data Types) Kiu d liu tham chiu (Reference data types)

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 Storage 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Min Value -128 -32,768 -2,147,483,648 < -9 x 1018 Max Value 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, ...

57

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;
58

Kiu d liu tham chiu


Mng (Array) Lp (Class) Interface

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 so snh (Relational Operators)


== != < > <= >= So snh bng So snh khc Nh hn Ln hn Nh hn hoc bng Ln hn hoc bng

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 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. 4. 5. 6.

Ton t trong ngoc tnh trc Cc ton t n nh +,-,++,-Cc ton t s hc v cc ton t dch nh *,/,+,-,<<,>> 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 3 2

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)

p kiu (Type Casting)


Kiu d liu ny c chuyn i sang mt kiu d liu khc C php: (kiu_mi)biu_thc; V d : int m=8, n=2; float x1,x2; x1 = m/n; // x1 nhn gi tr l s nguyn; x2 = m/float(n); // x2 nhn gi tr l s thc; V d : float c = 34.29675; int b = (int)c + 10;

Cc k t nh dng xut d liu (Escape Sequences)


Escape M t Sequence \n Xung dng mi \r \t \\ \ \ 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 ()

Hng, Bin, Biu thc


* Hng : Hng l i lng c gi tr khng thay i trong sut qu trnh thc thi ca chng trnh * Bin : Bin l i lng c gi tr thay i trong sut qu trnh thc thi ca chng trnh Khai bo bin chng trnh dnh ring vng nh thch hp cho bin . Mi lnh truy cp n bin l truy cp n gi tr ca n.

Hng, Bin, Biu thc


* Bin : C php khai bo bin :
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)

Hng, Bin, Biu thc


* Biu thc : L mt dy cc ton t v ton hng + Ton hng: c th l hng, hm, bin, ... + Ton t : +, -, *, / , $ , %, & ... Mi biu thc s c gi tr thuc mt kiu d liu no u tin cao nht cho biu thc con trong cp ngoc n

Khai bo mng
* Mng mt chiu:
datatype identifier [ ]; datatype identifier [ ] = new datatype[size]; datatype identifier [ ]= {value1,value2,.valueN};

* Mng hai chiu :


datatype identifier [ ][ ]; Datatype [ ][ ] identifier;

Lp v phng thc (Classes & Methods)

Lp trong Java
// { comments about the class public class MyProgram

class header

class body

Comments can be added almost anywhere


}

79

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

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( ) { 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 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 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 m i

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

Danh sch cc bit l (tt)

Chng V LP TRNH GIAO DIN VI AWT-SWING

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, panels,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 trnxung-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 FlowLayout M t 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. 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 .

GridLayout

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); add(xInput); add(yLabel); add(yInput); } } // t xLabel vo th nht // t xInput vo th hai // t yLabel vo th ba // 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); // t sb1 bn tri (WEST) // 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

AdjustmentEvent

ComponentEvent

ItemEvent

TextEvent

ContainerEvent

FocusEvent

InputEvent {abstract}

PaintEvent

WindowEvent

KeyEvent

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 Cc hm n nhn v di di cc s kin Giao din Listener tng ng

AcitionEvent

AdjustmentEvent ItemEvent

Button List TextField Scrollbar Choice Checkbox CheckboxMen uItem List TextArea TexField

addComponentlistener remove ActiontListener

AcitionListener

AdjustmentListener addAdjustmentListener removeAdjustmentListener addItemListener removeItemListener ItemListener

TextEvent

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 Component Container 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

ComponentEvent ContainerEvent

FocusEvent KeyEvent MouseEvent

Component Component Component

MouseMotionListener

WindowEvent

Window

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 192 TextField yInput; // Khai bo mt TextField yInput

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

198

<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); 202 frame.add(thanhThDon); // a thanhThDon vo frame

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>

L p h a
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 chui 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 White Light Gray Gray Dark Gray Black Pink Orange Yellow Magenta Red 255 192 128 64 0 255 255 255 255 Green 255 192 128 64 0 175 200 255 0 Blue 255 192 128 64 0 175 0 0 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 tuyn
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

Tin trnh, a nhim v a lung


Tin trnh : l mt chng trnh chy trn h iu hnh v c qun l thng qua cc th Tiu trnh : l mt n v x l c bn ca h thng. Mt tin trnh s hu nhiu tiu trnh n nhim : ti mt thi im ch c mt tin trnh a nhim: cng mt thi im c nhiu hn mt tin 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

Tin trnh, a nhim v a lung


Mt tin trnh c th bao gm nhiu lung. 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>

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, Java h tr a nhim da trn cc lung v cung cp cc c tnh mc cao cho lp trnh a lung.

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

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

Phn chia thi gian gia cc lung


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

Lp trnh a lung Java


Vi Java ta c th xy dng cc chng trnh a lung Mt ng dng c th bao gm nhiu lung, mi lung c gn cng vic c th v c thc thi ng thi vi cc lung khc 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.

Lp trnh a lung Java


Cch th nht: To ra mt lp k tha t lp Thread v ghi phng thc run ca lp Thread nh sau: 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.

Lp trnh a lung Java


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. + To ra mt lp trin khai t giao din Runnable, ci t phng thc run class MyClass implements Runnable { // Cc thuc tnh // Np chng hay vit mt s hm public void run() { . . . } }

Trng thi 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 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:

<Tip theo>

sleep yield

Non runnable
Waiting Sleeping

New

start suspend resume wait

Blocked

B chn bi I/O notify

Runnable Kt thc I/O

Dead

stop

Cc trng thi ca Thread


Mt lung c th mt trong cc trng thi sau: + 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 + 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). + Nu mt lung b chn li v vo/ra v qu trnh ny kt thc. + Nu lung b chn li khi gi hm wait(), sau c thng bo tip tc bng cch gi hm notify() hoc notifyAll(). + 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).

Cc trng thi ca Thread


+ Nu mt lung b chn li bi li gi hm suspend(), mun thc hin th trc phi gi hm resume(). + Hm suspend() c tc dng tm ngng tuyn, t c dng do khng nh ti nguyn ca h thng, d dn n deaklock. 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.

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.

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.

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

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

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

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

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

Mc u tin ca cc lung

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.

a tuyn vi Applets
Trong Java ta c th to ra cc tuyn thi hnh song song bng cch trin khai giao din Runnable Java khng h tr k tha bi Mun k tha t mt lp no m li mun a tuyn th bt buc s dng giao din Runnable 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
Khi nhiu tuyn truy cp ti nguyn dng chung Ti nguyn khng th chia x, khi ti nguyn c th b ph hng V d : Mt lung c d liu, trong khi lung khc li thay i Cn cho php mt lung hon thnh tc v ca n, ri cho php lung k tip thc thi

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

S ng b
thm nhp s quan st ca mt i tng, lp trnh vin s dng t kha synchronized khi khai bo phng thc. Mi mt i tng s c mt b qun l kha, ch cho mt phng thc synchronized ca i tng chy ti mt thi im 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

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.

ng b ho
Mu cht ca s ng b l khi nim monitor (gim st) hay cn gi l semaphore (c hiu) 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 s dng nhng ti nguyn .

ng b ho
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 c ng b + Cc khi c ng b

ng b ho
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.

ng b ho
Cc hm ng b
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 ha
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; 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 ha
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 = 1000, sau lung th nht kt thc vic cp nht bng cch thc hin nt bc 3. Qu trnh ny c m t nh hnh sau : Lung 1 Lung 2 accounts[to] Thanh ghi 1 Thanh ghi 2 5000 5000 Np 5000 5500 Cng Np 5000 5000 Cng 5000
6000 6000 6000 5500

Lu li

5500

Lu li
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 263 i u c, nhng li ch cn 5500. ng ra n phi l 6500

ng b ha
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 ha
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 Thread 1 Thread 2 c ng b 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.

Cc kho i tng
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
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
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
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
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
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.

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 : Account 1 c 2000$, Account 2 c 3000$ v Thread 1 cn chuyn 3000$ t Account 1 sang Account 2, ngc li Thread 2 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.

Vn cht tc
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

Vn cht tc
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.

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.

Cc lp lung I/O
x l mi loi d liu, java chia lung thnh 2 loi : lung byte ( byte stream) v lung k t (character stream) Lp InputStream v OutputStream l hai lp c s cho mi lung nhp xut hng byte Lp Reader/ Writer hai lp c s cho vic c ghi hng k t

Lp nhp xut hng k t


Reader v Writer l hai lp c s tru tng cho lung hng k t Cung cp mt giao din chung cho tt c cc lp c ghi hng k t Mi ln c/ghi ra lung th c 2 byte tng ng vi mt k t

M hnh phn cp c/ghi hng k t

Lp Reader
Lp Reader v InputStream c mt giao din ging nhau, chng ch khc nhau v kiu d liu u vo Lp Reader c cc phng thc c mt k t hoc mng cc k t Cc phng thc:
int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length)

Lp Writer
Lp Writer v OutputStream c mt giao din ging nhau, chng ch khc nhau v kiu d liu u vo Lp Writer nh ngha cc phng thc ghi mt k t hoc mng cc k t ra lung Cc phng thc:
int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length)

Lp Writer
H tr cc phng thc sau :

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


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 hng byte
c th c ghi 1 byte, ta s dng lung hng byte Hai lp InputStream v OutputStream l hai lp c s tru tng cho cc lung hng byte Mi ln c/ghi ra lung th c 8 bits ra lung

M hnh phn cp c/ghi hng byte

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. Trong lp InputStream c cc phng thc cho vic c mt byte hoc mng cc byte Cc phng thc:
int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length)

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. Lp OutputStream c cc phng thc ghi mt byte hoc mng cc byte ra lung Cc phng thc:

write(int c) write(byte cbuf[ ]) write(byte[ ], int offset, int length)

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().

Xut mng cc Byte


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 FileReader FileWriter

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 tp tin
x l tp tin ngoi tr, ta s dng cc lung lin quan n tp tin nh : FileInputStream, FileOutputStream, FileReader, FileWriter FileInputStream v FileOutputStream phc v cho vic c ghi tp tin hng Byte FileReader v FileWriter phc v cho vic c ghi tp tin hng k t

Cc hm to ca cc lp tng ng lin kt lung vi mt tp tin c th


public void FileInputStream ( String FileName) public void FileInputStream ( File file) public void FileOutputStream ( String FileName) public void FileOutputStream (File file) public void FileWriter ( String FileName) public void FileWriter (File file) public void FileReader ( String FileName) public void FileReader (File file)

Nhp / xut lc
Lc: 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
V cc thao tc vi cng, mng thng lu hn so vi thao tc b nh trong K thut s dng vng m nhm tng tc c/ghi Vi k thut vng m s gim c s ln c/ghi lung Trong Java ta c th to ra vng m ca cc lp : BufferInputStream BufferOutputStream BufferReader BufferWriter

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.

Vng m nhp/xut
Cc phng thc to dng lung m : public BufferInputStream( InputStream ) public BufferInputStream (InputStream in, int bufferSize) public BufferOutputStream ( OutputStream out) public BufferOutputStream ( OutputStream out, int bufferSize) public BufferReader ( Reader in) public BufferReader ( Reader in, int bufferSize) public BufferWriter ( Writer out) public BufferWriter ( Writer out, int bufferSize)

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 (tt)
nh ngha hai phng thc thit lp: - Mt cho 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 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.

Giao din DataInput

Giao din 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.

Giao din DataOutput

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 Chi nh phng thc print( ) s dng in mt trang trn i tng Graphics Cung cp kh nng truy cp i tng PrinterJob

Printable:

PrinterGraphics:

interface PrinterGraphics cung cp cc lp sau:


Paper Book PageFormat PrinterJob PrinterException PrinterIOException PrinterAbortException

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


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.

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 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.

JDBC Driver
C 4 loi JDBC Driver Loi 1 : JDBC s dng cu ni ODBC Loi 2 : JDBC kt ni trc tip vi cc trnh iu khin Loi 3 : JDBC kt ni thng qua cc ng dng mng trung gian Loi 4 : JDBC kt ni thng qua cc trnh iu khin c th xa Loi 2,3,4 ni chung c vit bi nh cung cp csdl, hiu qu hn loi 1 nhng thc hin phc tp hn.

JDBC s dng cu ni ODBC


jdk h tr cu ni jdbc-odbc (jdbc-odbc bridge). Mm do nhng khng hiu qu.
Aplication Aplication JDBC JDBCDriver Driver ODBC ODBCDriver Driver
Network Interface Client

Disk Disk

Network Interface
Database Database

Server

JDBC s dng cu ni ODBC

JDBC kt ni trc tip vi cc trnh iu khin csdl


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
Native NativeDatabase DatabaseLibrary Library

Client

Disk Disk

Network Interface

Network Interface
Database Database

Server

JDBC kt ni trc tip vi cc trnh iu khin csdl

JDBC kt ni thng qua cc ng dng mng trung gian 100% java C kh nng giao tip trc tip vi h CSDL khng cn chuyn i
Aplication Aplication JDBC JDBCDriver Driver
Network Interface Client

Disk Disk

Network Interface
Database Database

Server

JDBC kt ni thng qua cc ng dng mng trung gian

JDBC kt ni thng qua cc trnh iu khin c th xa


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 Tt c bng m java
Aplication Aplication JDBC JDBCDriver Driver Client Client
Network Interface Client

Disk Disk

Network Interface

Server
Database Database

JDBC JDBCDriver Driver Server Server

Native NativeDatabase Database Library Library

JDBC kt ni thng qua cc trnh iu khin c th xa

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

Gi Java.sql

Gi Java.sql

Cc bc kt ni CSDL
Np trnh iu khin To thng tin kt ni v i tng Connection To i tng Statement thc thi cc lnh sql..

Np Driver
Lp DriverManager chu trch nhim np driver v to kt ni n csdl. np v ng k trnh iu khin, ta gi lnh : Class.forName(String) V d :
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());

Hoc: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Tng ng new sun.jdbc.odbc.JdbcOdbcDriver(); Ch :Vi cc trnh iu khin khc nhau th String ca phng thc Class.forName(String) s khc nhau

To thng tin kt ni
Tip tc to i tng Connection bng cch gi phng thc getConnection ca lp DriverManager yu cu trnh iu khin np bi Class.forName() trc tip nhn thng tin v thc thi kt ni nh sau :
conn = DriverManager.getConnection(url, username, password );

Trong : + url : chui nu ln c im csdl c dng jdbc:subprotocol:subname - subprotocol :giao thc con tng ng vi csdl - subname : tn csdl + username : tn ng nhp csdl + password : mt khu ng nhp csdl

To thng tin kt ni
V d : Np trnh iu khin ca MySQL :
Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://ServrName/DBName?user=UserName&password=Pass");

Np trnh iu khin ca SQL :


Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection conn = DriverManager.getConnection(" jdbc:microsoft:sqlserver://ServerName:ServerPort; DatabaseName=DBName","UserName","Password");

Np trnh iu khin ca Access :


Class.forName("sun.jdbc.odbc. JdbcOdbcDriver "); Connection conn = DriverManager.getConnection(" jdbc:odbc:MyDB");

i tng Statement
Tt c cc lnh tc ng n c s d liu u c th thc hin thng qua mt trong 3 i tng :

i tng Statement
i tng Connection cha lin kt trc tip n csdl. S dng i tng Connection to i tng Statement.
Statement state = 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 }

ResultSet

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)

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

import java.sql.*; import javax.sql.*; public class Connect { public static void main(String args[]) throws ClassNotFoundException,SQLException { System.out.println("Ket noi CSDL"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url="jdbc:odbc:myDatabase"; Connection conn=DriverManager.getConnection(url,"login","password"); Statement stmt=conn.createStatement(); String sql0="INSERT INTO KhachHang(Id,TenKH,DiaChi,Luong) VALUES('8',Nguyen C',HCM','900')"; stmt.executeUpdate(sql0); //Cap nhat du lieu String sql2="UPDATE Khachhang SET Luong=Luong+luong*0.2"; int n=stmt.executeUpdate(sql2); if (n < 1) System.out.println("Khong co ban ghi nao duong cap nhat"); else System.out.println("Co "+ n +" ban ghi duong cap nhat");

Chng trnh mu

Chng trnh mu
String sql="SELECT Id,TenKH,DiaChi,Luong FROM KhachHang"; ResultSet rs=stmt.executeQuery(sql); while (rs.next()) { int id=rs.getInt("Id"); double l=rs.getDouble("Luong"); String s=rs.getString("TenKH"); String d=rs.getString("DiaChi"); System.out.println("ID=" +id +" " + s+ " " + d + " Luong=" + l) ; } } catch(SQLException e) {System.out.println("Loi thao tac CSDL");} } }

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(); String sql=Select * from Table1; ResultSet rs = stmt.executeQuery(sql); 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); } } }

Chng trnh mu

Ht !!!

You might also like