Tải bản đầy đủ (.pdf) (249 trang)

Java 2 enterprise edition tiếng việt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.22 MB, 249 trang )

Trang 1
Tr-ờng đại học s- phạm kỹ thuật h-ng yên
khoa công nghệ thông tin
ooo
Đề c-ơng bài giảng Java
Nhúm biờn son: 1. Hong Trng Th
2. Nguyn Duy Tõn
Trang 2
C LC
Chng 1: CÁC KHÁI NIM C BN 5
BÀI 1. LÀM QUEN VI JAVA 5
I. Lch s java 5
II. Java em là ai 5
II. Mt sc trng ca java 5
III. Các kiu ng dng Java 7
IV. Máy o Java (JVM-Java Virtual Machine) 7
BÀI 2 NN TNG CA JAVA 9
I. Tp ký t dùng trong java 9
II. T khoá ca Java 9
III. nh danh (tên) 10
IV. Cu trúc mt chng trình java 10
V. Chng trình JAVA u tiên 12
VI. Chú thích trong chng trình 14
VII. Kiu d liu 15
VII. Mt s phép toán trên kiu d liu nguyên thu 17
IX. Toán t chuyn kiu 23
X. Các hàm toán hc 24
XI. Các phép toán trên kiu kí t 26
BÀI 3. IU KHIN LUNG CHNG TRÌNH 27
I. Cu trúc r nhánh 27
II. Cu trúc lp while và do-while 30


III. Cu trúc for 32
IV. Lnh break và continue 34
Chng 2: LP TRÌNH HNG I TNG 37
BÀI 1. NH NGHA LP 38
I. Khai báo lp 38
II. Chi tit v khai báo mt phng thc 40
III. T khoá this 43
IV. T khoá super 43
V. S dng lp 44
VI. iu khin vic truy cp n các thành viên ca mt lp 44
BÀI 2. KHI U VÀ DN DP 47
I. Phng thc to dng (constructor) 47
II. Khi khi u vô danh và khi khi u tnh 49
III. Dn dp: kt thúc và thu rác 51
BÀI 3. CÁC THÀNH PHN TNH 52
I. Thuc tính tnh 52
II. Phng thc tnh 52
BÀI 4. NP CHNG PHNG THC 53
I. Khái nim v phng thc bi ti 53
Trang 3
II. Yêu cu ca các phng thc bi ti 53
BÀI 5. K THA (INHERITANCE) 54
I. Lp c s và lp dn xut 54
II. Cách xây dng lp dn xut 54
III. Tha k các thuc tính 54
IV. Tha k phng thc 54
V. Khi u lp c s 54
VI. Ghi è phng thc ( Override ) 56
VI. Thành phn protected 56
VII. T khoá final 56

BÀI 6. LP C S TRU TNG 61
BÀI 7. A HÌNH THÁI 62
BÀI 8. GIAO DIN, LP TRONG, GÓI 63
I. Giao din 63
II. Lp trong 65
Bài 9. MNG, XÂU KÝ T, TP HP 67
I. Mng 67
II. Xâu ký t 70
III. Lp StringTokenizer 75
IV. Mt s lp c bn ca Java 77
V. Các lp tp hp 83
Chng 3: X LÝ NGOI L 92
I. Mc ích ca vic x lý ngoi l 92
II. Mô hình s lý ngoi l ca java 92
III. c t ngoi l 93
III. Ném ra ngoi l 93
IV. Bt ngoi l 93
V. Khi ‘finally’ 95
VI. Mt s lp ngoi l chun ca Java 96
Chng 4: LP TRÌNH A TUYN 97
I. Các kin thc liên quan 97
II. Lp trình a tuyn trong Java 98
Chng 5: NHP XUT (Input/Output) 104
I. Lp lung 105
II. Lp File 113
Chng 6: LP TRÌNH  HO AWT 120
I. Gii thiu v h thng  ho ca Java 120
II. Trình qun lý hin th trong Java 124
III. X lý s kin trong Java 125
Chng 7 LP TRÌNH C S D LIU 143

I. Tng quan 143
II. Các ku trình iu khin JDBC 143
Trang 4
III. Các lp trong JDBC API dùng  truy cp CSDL 146
IV. Kt ni CSDL vi JDBC 147
V. Tng tác vi CSDL 152
VI. Qun lý giao dch 160
Chng 8: LP TRÌNH SOCKET 164
I. Các kin thc liên quan 164
II. Kho sát mt s lp trong gói java.net 164
2. Lp URL và URI 171
3. Lp Socket 176
4. Lp ServerSocket 182
5. Lp DatagramSocket 185
6. Lp DatagramPacket 185
III. TCP Socket 185
Chng 9: JAVA MAIL 205
I. Các khái nim MAIL 205
II. Gi mail vi th vin có sn ca java 206
III. Gii thiu java mail API 207
III. Gi mail 212
IV. Nhn mail 215
V. Xoá mail 221
Chng 10: LP TRÌNH PHÂN TÁN VI 222
JAVA RMI ( REMOTE METHOD INVOKE) 222
I. RMI và lp trình phân tán i tng 222
II. Gi phng thc t xa và các vn  phát sinh 223
III. Vai trò ca các lp trung gian 223
IV. Cài t i tng phân tán 224
Chng 11: JAVA JSP (JAVA SERVLET) 233

Chng 12: EJB (ENTERPRISE JAVA BEANS) 234
I. Tng quan v JavaBean 234
II. Xây dng thành phn JavaBean 234
III. Tìm hiu Instrospector 247
IV. óng gói JavaBean 249
Trang 5
Chng 1: CÁC KHÁI NIM C BN
BÀI 1. LÀM QUEN VI JAVA
I. Lch s java
Java là mt ngôn ng lp trình c Sun Microsystems gii thiu vào tháng 6 nm
1995. Tó, nó ã tr thành mt công c lp trình ca các lp trình viên chuyên nghip.
Java c xây dng trên nn tng ca C và C++. Do vy nó s dng các cú pháp ca C và
các c trng hng i tng ca C++.
Ban u Java c thit k làm ngôn ng vit chng trình cho các sn phm
in t dân dng nhu video, tivi, n thoi, máy nhn tin . Tuy nhiên vi s mãnh
m ca Java ã khin nó ni ting n mc vt ra ngoài s tng tng ca các nhà thit
k ra nó.
Java khi thu tên là Oak- là cây si mc  phía sau vn phòng ca nhà thit k
chính ông Jame Gosling, sau này ông thy rng ã có ngôn ng lp trình tên Oak ri, do
vy nhóm thit k quyt nh i tên, “Java” là cái tên c chn, Java là tên ca mt
quán cafe mà nhóm thit k java hay n ó ung.
II. Java em là ai
Java là ngôn ng lp trình hng i tng, do vy không th dùng Java  vit
mt chng trình hng chc nng. Java có th gii quyt hu ht các công vic mà các
ngôn ng khác có th làm c.
Java là ngôn ng va biên dch va thông dch. u tiên mã ngun c biên dch
bng công c JAVAC  chuyn thành dng ByteCode. Sau ó c thc thi trên tng
loi máy c th nh chng trình thông dch JAVA. Mc tiêu ca các nhà thit k Java là
cho phép ngi lp trình vit chng trình mt ln nhng có th chy trên bt c phn
cng c th, th nên khu hiu ca các nhà thit k Java là “Write One, Run Any Where”.

Ngày nay, Java c s dng rng rãi  vit chng trình chy trên Internet. Nó là
ngôn ng lp trình hng i tng c lp thit b, không ph thuc vào hu hành.
Java không ch dùng  vit các ng dng chy n l hay trong mng mà còn  xây
dng các trình iu khin thit b cho n thoi di ng, PDA, …
II. Mt sc trng ca java
1n gin
Nhng ngi thit k mong mun phát trin mt ngôn ng d hc và quen thuc
vi a s ngi lp trình. Java ta nh C++, nhng ã lc bi các c trng phc tp,
không cn thit ca C và C++ nh: thao tác con tr, thao tác nh ngha chng toán t
(operator overloading),… Java không s dng lnh “goto” cng nh file header (.h). Cu
trúc “struct” và “union” cng c loi b khi Java. Nên có ngi bo Java là “C++ “,
ng ý bo java là C++ nhng ã bi nhng th phc tp, không cn thit.
2. Hng i tng
Có th nói java là ngôn ng lp trình hoàn toàn hng i tng, tt cc trong java
u là s vt, âu âu cng là s vt.
3. c lp vi h nn
Mc tiêu chính ca các nhà thit k java là c lp vi h nn hay còn gi là c
lp phn cng và hu hành. ây là kh nng mt chng trình c vit ti mt máy
nhng có th chy c bt kâu
Trang 6
Tính c lp vi phn cng c hiu theo ngha mt chng trình Java nu chy
úng trên phn cng ca mt h máy nào ó thì nó cng chy úng trên tt c các h máy
khác. Mt chng trình ch chy úng trên mt s h máy c thc gi là ph thuc
vào phn cng.
Tính c lp vi hu hành c hiu theo ngha mt chng trình Java có th
chy c trên tt c các hu hành. Mt chng trình ch chy c trên mt s h
iu hành c gi là ph thuc vào hu hành.
Các chng trình vit bng java có th chy trên hu ht các h nn mà không cn
phi thay i gì, iu này ã c nhng ngi lp trình t cho nó mt khu hiu vit
mt ln, chy mi n, iu này là không th có vi các ngôn ng lp trình khác.

i vi các chng trình vit bng C, C++ hoc mt ngôn ng nào khác, trình biên
dch s chuyn tp lnh thành mã máy (machine code), hay lnh ca b vi x lý. Nhng
lnh này ph thuc vào CPU hin ti trên máy bn. Nên khi mun chy trên loi CPU
khác, chúng ta phi biên dch li chng trình.
4. Mnh m
Java là ngôn ng yêu cu cht ch v kiu d liu, vic ép kiu tng ba bãi ca
C, C++ nay c hn ch trong Java, u này làm chng trình rõ ràng, sáng sa, ít li
n.Java kim tra lúc biên dch và c trong thi gian thông dch vì vy Java loi b mt
mt s loi li lp trình nht nh.Java không s dng con tr và các phép toán con tr.
Java kim tra tt c các truy nhp n mng, chui khi thc thi m bo rng các truy
nhp ó không ra ngoài gii hn kích thc.
Trong các môi trng lp trình truyn thng, lp trình viên phi t mình cp phát
b nh. Trc khi chng trình kt thúc thì phi t gii phóng b nhã cp. Vn  ny
sinh khi lp trình viên quên gii phóng b nhã xin cp trc ó. Trong chng trình
Java, lp trình viên không phi bn tâm n vic cp phát b nh. Qúa trình cp phát, gii
phóng c thc hin tng, nh dch v thu nht nhng i tng không còn s dng
na (garbage collection).
 ch by li ca Java giúp n gin hóa qúa trình x lý li và hi phc sau li.
5. H tr lp trình a tuyn
ây là tính nng cho phép vit mt chng trình có nhiu n mã lnh c chy
song song vi nhau. Vi java ta có th vit các chng trình có kh nng chy song song
mt cách d dàng, hn th na vic ng b tài nguyên dùng chung trong Java cng rt
ng gin. u này là không th có i vi mt s ngôn ng lp trình khác nh C/C++,
pascal …
6. Phân tán
Java h try  các mô hình tính toán phân tán: mô hình client/server, gi th
tc t xa…
7. H tr internet
Mc tiêu quan trng ca các nhà thit k java là to u kin cho các nhà phát trin
ng dng có th vit các chng trình ng dng internet và web mt cách d dàng, vi

java ta có th vit các chng trình s dng các giao thc TCP, UDP mt cách d dàng, v
lp trình web phía máy khách java có công ngh java applet, v lp trình web phía máy
khách java có công ngh servlet/JSP, v lp trình phân tán java có công ngh RMI,
CORBA, EJB, Web Service.
Trang 7
8. Thông dch
Các chng trình java cn c thông dch trc khi chy, mt chng trình java
c biên dch thành mã byte code mã c lp vi h nn, chng trình thông dch java s
ánh x mã byte code này lên mi nn c th, u này khin java chm chp i phn nào.
III. Các kiu ng dng Java
Vi Java ta có th xây dng các kiu ng dng sau:
1. ng dng Applets
Applet là chng trình Java c to ra  s dng trên Internet thông qua các trình
duyt h tr Java nh IE hay Netscape. Applet c nhúng bên trong trang Web. Khi
trang Web hin th trong trình duyt, Applet sc ti v và thc thi ti trình duyt.
2. ng dng dòng lnh (console)
Các chng trình này chy t du nhc lnh và không s dng giao din ha.
Các thông tin nhp xut c th hin ti du nhc lnh.
3. ng dng  ha
ây là các chng trình Java chy c lp cho phép ngi dùng tng tác qua giao
din  ha.
4. JSP/Servlet
Java thích hp  phát trin ng dng nhiu lp. Applet là chng trình  ha
chy trên trình duyt ti máy trm.  các ng dng Web, máy trm gi yêu cu ti máy
ch. Máy ch x lý và gi kt qu tr li máy trm. Các Java API chy trên máy ch chu
trách nhim x lý ti máy ch và tr li các yêu cu ca máy trm. Các Java API chy trên
máy ch này m rng kh nng ca các ng dng Java API chun. Các ng dng trên máy
ch này c gi là các JSP/Servlet. hoc Applet ti máy ch. X lý Form ca HTML là
cách s dng n gin nht ca JSP/Servlet. Chúng còn có thc dùng  x lý d liu,
thc thi các giao dch và thng c thc thi thông qua máy ch Web.

5. ng dng c s d liu
Các ng dng này s dng JDBC API  kt ni ti c s d liu. Chúng có th là
Applet hay ng dng, nhng Applet b gii hn bi tính bo mt.
6. ng dng mng
Java là mt ngôn ng rt thích hp cho vic xây dng các ng dng mng. Vi th
vin Socket bn có th lp trình vi hai giao thc: UDP và TCP.
7. ng dng nhiu tng
Vi Java bn có th xây dng phân tán nhiu tng vi nhiu h tr khác nhau nh:
RMI, CORBA, EJB, Web Service
8. ng dng cho các thit b di ng
Hin nay phn ln các thit b di ng nh: in thoi di ng, máy tr giúp cá
nhân… u h tr Java. Th nên bn có th xây dng các ng dng chy trên các thit b
di ng này. ây là mt kiu ng dng khá hp dãn, bi vì các thit b di ng này ngày
càng ph bin và nhu cu có các ng dng chy trên ó, c bit là các ng dng mang
tính cht gii trí nh game
IV. Máy o Java (JVM-Java Virtual Machine)
Máy o là mt phn mm mô phng mt máy tính tht (máy tính o). Nó có tp
hp các lnh logic  xác nh các hot ng ca máy tính và có mt hu hành o.
Ngi ta có th xem nó nh mt máy tính tht (máy tính có phn cng o, hu hành
Trang 8
o). Nó thit lp các lp tru tng cho: Phn cng bên di, hu hành, mã ã biên
dch.
Trình biên dch chuyn mã ngun thành tp các lnh ca máy o mà không ph thuc
vào phn cng và hu hành c th. Trình thông dch trên mi máy s chuyn tp lnh
này thành chng trình thc thi. Máy o to ra mt môi trng bên trong  thc thi các
lnh bng cách:
Ø Np các file .class
Ø Qun lý b nh
Ø Dn “rác”
Vic không nht quán ca phn cng làm cho máy o phi s dng ngn xp  lu tr

các thông tin sau:
Ø Các “Frame” cha các trng thái ca các phng thc.
Ø Các toán hng ca mã bytecode.
Ø Các tham s truyn cho phng thc.
Ø Các bin cc b.
Khi JVM thc thi mã, mt thanh ghi cc b có tên “Program Counter” c s dng.
Thanh ghi này tr ti lnh ang thc hin. Khi cn thit, có th thay i ni dung thanh
ghi i hng thc thi ca chng trình. Trong trng hp thông thng thì tng lnh
mt ni tip nhau sc thc thi.
Mt khái nim thông dng khác trong Java là trình biên dch “Just In Time-JIT”. Các
trình duyt thông dng nh Netscape hay IE u có JIT bên trong  tng tc  thc thi
chng trình Java. Mc ích chính ca JIT là chuyn tp lnh bytecode thành mã máy c
th cho tng loi CPU. Các lnh này sc lu tr và s dng mi khi gi n.
Trang 9
BÀI 2 NN TNG CA JAVA
I. Tp ký t dùng trong java
Mi ngôn ng nói chung, ngôn ng lp trình nói riêng u phi xây dng trên mt
tp hp ch cái (hay còn gi là bng ch cái), các kí tc nhóm li theo mt cách nào
ó  to thành các t, các t li c nhóm li thành các câu (trong ngôn ng lp trình
gi là câu lnh), mt chng trình máy tính tính là mt tp các câu lnh c b trí theo
mt trt t mà ngi vit ra chúng sp t
Ngôn ng java c c xây dng trên bng ch cái unicode, do vy ta có th
dùng các kí t unicode t tên cho các nh danh.
II. T khoá ca Java
Mi ngôn ng lp trình có mt tp các t khoá, ngi lp trình phi s dng t
khoá theo úng ngha mà ngi thit k ngôn ngã  ra, ta không thnh ngha li
ngha ca các t khoá, nh s dng nó t tên bin, hàm
Sau ây là mt s t khoá thng gp:
T khóa Mô t
abstract

S dng  khai báo lp, phng thc tru tng
boolean
Kiu d liu logic
break
c s dng  kt thúc vòng lp hoc cu trúc switch
byte
kiu d liu s nguyên
case
c s dng trong ln switch
cast
Cha c s dng ( dành cho tng lai)
catch
c s dng trong x lý ngoi l
char
kiu d liu ký t
class
Dùng  khai báo lp
const
Cha c dùng
continue
c dùng trong vòng lp  bt u mt vòng lp mi
default
c s dng trong lnh switch
do
c dùng trong vòng lp u kin sau
double
kiu d liu s thc
else
kh nng la chn th hai trong câu lnh if
extends

ch rng mt lp c k tha t mt lp khác
false
Gía tr logic
final
Dùng  khai báo hng s, phng thc không th ghi è, hoc lp không
th k tha
finally phn cui ca khi x lý ngoi l
float
kiu s thc
for
Câu lnh lp
goto
Cha c dùng
if
Câu lnh la chn
implements
ch rng mt lp trin khai t mt giao din
import
Khai báo s dng th vin
instanceof
kim tra mt i tng có phi là mt th hin ca lp hay không
interface
s dng  khai báo giao din
long
kiu s nguyên
native
Khai báo phng thc c vit bng ngông ng biên dch C++
new
to mt i tng mi
Trang 10

null mt i tng không tn ti
package
Dùng  khai báo mt gói
private
c t truy xut
protected
c t truy xut
public
c t truy xut
return
Quay t phng thc v ch gi nó
short
kiu s nguyên
static
Dùng  khai báo bin, thuc tính tnh
super
Truy xut n lp cha
switch
lnh la chn
synchronized
mt phng thc c quyn truy xut trên mt i tng
this
Ám ch chính lp ó
throw
Ném ra ngoi l
throws
Khai báo phng thc ném ra ngoi l
true
Giá tr logic
try

s dng  bt ngoi l
void
Dùng  khai báo mt phng thc không tr v giá tr
while
Dùng trong cu trúc lp
III. nh danh (tên)
Tên dùng  xác nh duy nht mt i lng trong chng trình. Trong java tên c
t theo quy tc sau:
- Không trùng vi t khoá
- Không bt u bng mt s, tên phi bt u bng kí t hoc bt u bng kí $,_
- Không cha du cách, các kí t toán hc nh +, -, *,/, %
- Không trùng vi mt nh danh khác trong cùng mt phm vi
Chú ý:
- Tên nên t sao cho có th mô tc i tng trong thc t
- Ging nh C/C++, java có phân bit ch hoa ch thng
- Trong java ta có tht tên vi  dài tu ý
- Ta có th s dng các kí t ting vit t tên
Quy c v t tên trong java
Ta nên t tên bin, hng, lp, phng thc sao cho ngha ca chúng rõ ràng, d hiu,
khoa hc và mang tính c l quc t. Do java có phân bit ch hoa, ch thng nên ta
phi cn thn và chú ý.
Sau ây là quy c t tên trong java (chú ý ây ch là quy c do vy không bt buc
phi tuân theo quy c này):
- i vi bin và phng thc thì tên bao gi cng bt u bng ký t thng, nu tên
có nhiu t thì ghép li thì: ghép tt c các t thành mt, ghi tu tiên ch thng,
vit hoa kí tu tiên ca mi t theo sau trong tên, ví d area, radius, readInteger…
-i vi tên lp, giao din ta vit hoa các kí tu tiên ca mi t trong tên, ví d lp
WhileTest, Circle
- Tên hng bao gi cng vit hoa, nu tên gm nhiu t thì chúng c ni vi hau bi
kí t ghch di ‘_’, ví d PI, MAX_VALUE

IV. Cu trúc mt chng trình java
- Mi ng dng Java bao gm mt hoc nhiu n v biên dch (mi n v biên dch
là mt tp tin có phn m rng Java)
- Mi n v biên dch bao gm mt hoc nhiu lp
Trang 11
- Mi ng dng c lp phi có duy nht mt phng thc main (m bt u ca ng
dng)
- Mi n v biên dch có nhiu nht mt lp c khai báo là public, nu nh trong
n v biên dch có lp public thì tên ca n v biên dch phi trùng vi tên ca lp
public (ging ht nhau c ký t hoa ln ký t thng)
- Bên trong thân ca mi lp ta khai báo các thuc tính, phng thc ca lp ó, Java
là ngôn ng hng i tng, do vy mã lnh phi nm trong lp nào ó. Mi lnh u
c kt thúc bng du chm phy “;”.
- Trong ngôn ng Java, lp là mt n v mu có cha d liu và mã lnh liên quan n
- mt thc th nào ó. Khi xây dng mt lp, thc cht bn ang to ra mt mt kiu d
liu. Kiu d liu mi này c s dng  xác nh các bin mà ta thng gi là “i
ng”. i tng là các th hin (instance) ca lp. Tt c các i tng u thuc v
mt lp có chung c tính và hành vi. Mi lp xác nh mt thc th, trong khi ó mi
i tng là mt th hin thc s.
- Khi ban khai báo mt lp, bn cn xác nh d liu và các phng thc ca lp ó.
V c bn mt lp c khai báo nh sau:
//Nhp khu các th vin
import th_vin;
//Xây dng các lp
public class clsMain{

public static void main(String args[])
{
//m bt u ca chng trình
}


}
class lp1
{

}
class lp2
{

}
t n v biên dch là mt tp
tin .java
Trang 12
Cú pháp:
class classname
{ var_datatype variablename;

<met_datatype> methodname (parameter_list){ }

}
Trong ó:
class - T khoá xác nh lp
classname - Tên ca lp
var_datatype - kiu d liu ca bin
variablename - Tên ca bin
met_datatype - Kiu d liu tr v ca phng thc
methodname - Tên ca phng thc
parameter_list – Các tham sc ca phng thc
- Bn còn có thnh ngha mt lp bên trong mt lp khác. ây là lp xp lng nhau,
các th hin (instance) ca lp này tn ti bên trong th hin ca mt lp che ph chúng.

Nó chi phi vic truy nhp n các thành phn ca lp bao ph chúng. Có hai loi lp
trong ó là lp trong tnh “static” và lp trong không tnh “non static”
+ Lp trong tnh (static)
Lp trong tnh c nh ngha vi t khoá “static”. Lp trong tnh có th truy nhp
vào các thành phn tnh ca lp ph nó.
+ Lp trong không tnh (non static)
Lp bên trong (không phi là lp trong tnh) có th truy nhp tt c các thành phn ca
lp bao nó, song không th ngc li.
V. Chng trình JAVA u tiên
 có th biên dch và chy các chng trình java ta phi cài
- JRE (Java Runtime Enviroment) môi trng thc thi ca java, nó bao gm: JVM (Java
Virtual Machine) máy o java vì các chng trình java c thông dch và chy trên
máy o java và tp các th vin cn thit  chy các ng dng java.
- B công c biên dch và thông dch JDK ca Sun Microsystem
Sau khi cài t JDK (gi s th mc cài t là C:\JDK1.4) ta s nhn c mt cu trúc
th mc nh sau:
- biên dch mt chng trình java sang mã byte code ta dùng lnh
C:\JDK1.4\BIN\javac TênTp.java
- thông dch và chy chng trình ta s dng lnh
Trang 13
C:\JDK1.4\BIN\java TênTp
 biên dch và chy chng trình Java n gin ta nên thit t hai bin môi trng
“paht” và “classpath” nh sau:
-i vi dòng WinNT:
+ R-Click vào My Computerà chn Propertiesà chn AdvancedàEnviroment
Variables
+ Trong phn System variables chn new  thêm bin môi trng mi, trong hp
thoi hin ra gõ “classpath” vào ô Variable Name và
“.;C:\jdk1.4\lib\tools.jar;C:\jdk1.4\lib\dt.jar;C:\jdk1.4\jre\lib\rt.jar” trong ô variable
value (chú ý không gõ du “ vào, mc ích  cho d nhìn mà thôi)

+ Cng trong phn System variables tìm n phn path trong danh sáchàchn edit
 sa li giá tr hin có, trong ô value ta thêm vào cui “;C:\jdk1.4\bin”
Công vic t các bin môi trng ã xong,  thy c tác dng ca các bin môi
tng ta cn phi khi ng li máy
-i vi dòng Win9X:
M tp C:\Autoexec.bat sau ó thêm vào hai dòng sau:
+classpath=.;C:\jdk1.4\lib\tools.jar;C:\jdk1.4\lib\dt.jar;C:\jdk1.4\jre\lib\rt.jar
+ path=…;c:\jdk1.4\bin
Khi ng li máy  thy c tác dng ca các bin môi trng này
Ví du tiên: chng trình Hello World (chng trình khi chy s in ra màn hình li
chào Hello World)
Các bc:
Trang 14
- M mt chng trình son tho vn bn h tr asciii, nh notepad, wordpad,
EditPlus… và gõ vào các dòng sau:
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World");
}
}
- Ghi li vi cái tên C:\HelloWorld.java (chú ý tên tp phi trùng vi tên lp, k c ch
hoa ch thng, phn m rng là java)
- M ca s DOS Prompt
+ Chuyn vào th mc C:\
+ Gõ lnh javac HelloWorld.java  biên dch chng trình, nu vic biên dch
thành công (chng trình không có li cú pháp) thì ta s thu c tp
HelloWorld.class trong cùng th mc, nu trong chng trình còn li cú pháp
thì trong bc này ta s nhn c mt thông báo li và lúc này tp
HelloWorld.class cng không c to ra
+ Gõ lnh java HelloWorld (chú ý không gõ phn m rng)  chy chng trình

HelloWorld.
Sau khi thông dch và chy ta nhn c
VI. Chú thích trong chng trình
Trong java ta có 3 cách  ghi chú thích
Cách 1: s dng cp /* và */ ý ngha ca cp chú thích này ging nh ca C, C++
Cách 2: s dng cp // ý ngha ca cp chú thích này ging nh ca C, C++
Cách 3: s dng cp /** và */, ây là kiu chú thích tài liu (không có trong C/C++), nó
dùng  to ra tài liu chú thích cho chng trình.
Vi cách th nht và cách ba ta có th vit chú thích trên nhiu dòng, vi cách chú thích
hai ta ch có th chú thích trên mt dòng.
Chú ý: Trong java ta có tht chú thích âu?, câu tr li là: âu có tht c mt
du cách thì ó có tht chú thích.
Trang 15
VII. Kiu d liu
1. Các kiu d liu nguyên thu
T khoá Mô t Kích c Ti thiu Ti a
Lp bao
(kiu s nguyên)
byte s nguyên mt byte 8 bit -128 127 Byte
short s nguyên ngn 16 bit -2
15
2
15
-1 Short
int s nguyên 32 bit -2
31
2
31
-1 Integer
long s nguyên dài 64 bit -2

63
-2
63
-1 Long
(kiu s thc)
float ki
u thc vi  chính
xác n
32 bit IEEE754 IEEE75
4
Float
double Double-precision
floating point
64 bit IEEE754 IEEE75
4
Double
(kiu khác)
char kiu kí t 16 bit Unicode 0
Unicode
2
16
-1
Character
boolean kiu logic true hoc false - - Boolean
void - - - - Void
c m ca các bin có kiu nguyên thy là vùng nh ca chúng c cp phát  phn
stack. Do vy vic truy xut vào mt bin kiu nguyên thy rt nhanh.
2. Kiu tham chiu
Trong Java có 3 kiu d liu tham chiu
Kiu d liu Mô t

Mng (Array) Tp hp các d liu cùng kiu.
Lp (Class) Là s cài t mô t v mt i tng trong bài toán.
Giao din
(Interface)
Là mt lp thun tru tng c to ra cho phép cài t
a tha k trong Java.
c m ca các bin kiu tham chiu là nó cha a ch ca i tng mà nó tr
n.
u nguyên thu
kiu logic boolean
Kiu s
Kiu s thc
Kiu kí t
Kiu s
boolean
char
byte short
int
long
float
doubl
e
Trang 16
Vùng nh ca bin tham chiu c cp phát  vùng nh stack còn vùng nh ca
i tng c cp phát  vùng nh heap. Vic truy xt vào vùng nh heap chm hn truy
xt vào vùng nh stack tuy nhiên java có c ch cho phép truy cp vào vùng nh heap vi
tc  xp x bng tc  truy cp vào vùng nh stack.
VIII. Khai báo bin
1. Khai báo bin
ng t ngôn ng C/C++,  khai báo bin trong java ta s dng cú pháp sau:

type name [=InitValue];
trong ó:
- type là kiu d liu cu bin
- name là tên ca bin, tên bin là mt xâu kí tc t theo quy tc t tên ca java
- InitValue là giá tr khi to cho bin, ây là phn tu chn, nu b qua phn này thì giá
tr ban u ca bin c khi to giá tr mc nh
Chú ý:
- Nu cn khai báo nhiu bin có cùng mt kiu d liu ta có tht các khai báo các bin
trên mt dòng, các bin này c phân cách nhau bi du phy
- Java s x lý các bin không c khi u giá tr nh sau:
+ i vi thuc tính (bin c khai báo trong phm vi ca lp) thì Java s tng
khi gán giá tr cho các bin theo quy tc sau:
+ giá tr 0 cho kiu d liu s
+ false cho kiu logic
+ kí t null (mã 0) cho kí t
+ giá tr null cho kiu i tng
+ i vi các bin cc b thì bin không c khi gán giá tr mc nh, tuy nhiên
Java s báo li nu ta s dng mt bin cha c nhn giá tr
2. Phm vi bin
Mi bin c khai báo ra có mt phm vi hot ng, phm vi ca bin là ni mà
bin có thc truy cp, u này xác nh c tính thy c và thi gian sng ca bin.
Bin tham chiu
i tng
Trang 17
Ø Bin phm vi lp là bin c khai báo bên trong lp nhng bên ngoài các phng
thc và hàm to, tuy nhiên vic khai báo phi xut hin trc khi bin c s dng
Ø Bin phm vi cc b là bin c khai báo bên trong mt khi, phm vi ca bin tính
tm bin c khai báo cho n cui khi mà bin c khai báo
Ví d:
{

int i=1; // ch có i sn sàng s dng
{
int j=10; // c i và j u sn sàng
}
// ch có i sn sàng
// j không sn sàng vì nm ngoài phm vi
}
Chú ý: Ta không th làm iu sau cho dù nó có th trong C/C++
{
int i=1;
{ int i=10;// không c phép vì ã có mt bin cùng tên vi nó }
}
Nhng ngi thit k java cho rng u ó có th gây ln ln, do vy hã quyt
nh không cho phép che giu mt bin  phm vi ln hn.
Chú ý:
thi gian sng ca các i tng không tuân theo quy lut thi gian sng ca các
bin kiu nguyên thu.
VII. Mt s phép toán trên kiu d liu nguyên thu
1. Phép gán
Cú pháp Bin=BiuThc;
Phép gán c thc hin bng toán t ‘=’, nó có ngha là “ hãy tính toán giá tr biu
thc bên phi du gán, sau ó a giá tró vào ô nh có tên nm  bên trái du gán’
Chú ý:
+ Câu lnh gán gm mt du ‘=’
+ Kiu ca biu thc bên phi du gán phi tng thích vi kiu d liu ca bin
+ Trong java ta có th thc hin mt dy gán nh sau:
i = j = 10; // c i và j u có giá tr 10
Trang 18
2. Toán t toán hc
Ngôn ng java cng có các phép toán s hc nh các ngôn ng khác: + ( phép cng), - (

phép tr ), * ( phép nhân ),/ ( phép chia ), % ( phép toán chia ly phn nguyên)
Ta mô t tóm tt các phép toán s hc qua bng tng kt sau:
Phép toán S dng Mô t
+ op1 + op2 Cng op1 viop2
- op1 - op2 Tr op1 cho op2
* op1 * op2 Nhân op1 vi op2
/ op1/ op2 chia op1 cho op2
% op1 % op2 Tính phn d ca phép chia op1 cho op2
3. Toán t tng, gim
Ging nh ngôn ng C/C++, java cng có phép toán tng, gim, ta có th mô t
tóm tt qua các bng sau:
Phép toán S dng
Mô t
++ op++
ng op lên 1 n v, giá tr ca op c tng lên trc khi biu
thc cha nó c tính
++ ++op
ng op lên 1 n v, giá tr ca op c tng lên sau khi biu thc
cha nó c tính
op
Gim op xung1 n v, giá tr ca op c gim xung trc khi
biu thc cha nó c tính
op
Gim op xung1 n v, giá tr ca op c gim xung sau khi
biu thc cha nó c tính
Chú ý: nu toán t tng trc, tng sau(gim trc, gim sau) ng mt mình(không
nm trong biu thc ) thì chúng hot ng nh nhau, chúng ch khác nhau khi chúng nm
trong biu thc
4. Phép toán quan h
Phép toán quan h bao gi cng cho kt qu boolean, phép toán quan h s so sánh

2 giá tr, nó xác nh mi quan h gia chúng, ví d! = s tr v true nu 2 toán hng là
khác nhau.
Ta tóm tt các phép toán qua bng sau:
Phép toán S dng Nhn v giá tr true khi
> op1 > op2 op1 ln hn op2
>= op1 >= op2 op1 ln hn hoc bng op2
< op1 < op2 op1 nh hn op2
<= op1 <= op2 op1 nh hn hoc bng op2
== op1 == op2 op1 bng op2
!= op1! = op2 op1 khác op2
Ví d: S dng các phép toán quan h
public class RelationalDemo {
public static void main(String[] args) {
// a few numbers
Trang 19
int i = 37;
int j = 42;
int k = 42;
System.out.println("Variable values ");
System.out.println(" i = " + i);
System.out.println(" j = " + j);
System.out.println(" k = " + k);
//greater than
System.out.println("Greater than ");
System.out.println(" i > j = " + (i > j)); // false
System.out.println(" j > i = " + (j > i));// true
System.out.println(" k > j = " + (k > j));// false, they are equal
//greater than or equal to
System.out.println("Greater than or equal to ");
System.out.println(" i >= j = " + (i >= j));// false

System.out.println(" j >= i = " + (j >= i));// true
System.out.println(" k >= j = " + (k >= j));// true
//less than
System.out.println("Less than ");
System.out.println(" i < j = " + (i < j));// true
System.out.println(" j < i = " + (j < i));// false
System.out.println(" k < j = " + (k < j));// false
//less than or equal to
System.out.println("Less than or equal to ");
System.out.println(" i <= j = " + (i <= j));// true
System.out.println(" j <= i = " + (j <= i));// false
System.out.println(" k <= j = " + (k <= j));// true
//equal to
System.out.println("Equal to ");
System.out.println(" i == j = " + (i == j));// false
System.out.println(" k == j = " + (k == j));// true
//not equal to
System.out.println("Not equal to ");
System.out.println(" i! = j = " + (i! = j));// true
System.out.println(" k! = j = " + (k! = j));// false
}
}
ây làu ra ca chng trình
Variable values
i = 37
j = 42
k = 42
Greater than
i > j = false
j > i = true

k > j = false
Greater than or equal to
i >= j = false
j >= i = true
k >= j = true
Less than
Trang 20
i < j = true
j < i = false
k < j = false
Less than or equal to
i <= j = true
j <= i = false
k <= j = true
Equal to
i == j = false
k == j = true
Not equal to
i! = j = true
k! = j = false
5. Phép toán logic
Java h tr 6 phép toán logic c ch ra trong bng sau:
Phép toán S dng Nhn v giá tr true khi
&& op1 && op2
C op1 và op2 u là true, giá tr ca op2 chc tính
khi op1 là true
|| op1 || op2
Hoc op1 hoc op2 là true, giá tr ca op2 chc tính
khi op1 là false
! ! op op là false

& op1 & op2
C op1 và op2 u là true, giá tr ca op2 luôn c tính
k c khi op1 là false
| op1 | op2
Hoc op1 hoc op2 là true, giá tr ca op2 luôn luônc
tính k c khi op1 là true
^ op1 ^ op2 Nu op1 khác op2
Nhn xét:
+ Phép toán && ( & ) ch nhn giá tr true khi và ch khi c hai toán hng u là true
+ Phép toán || ( | ) ch nhn giá tr false khi và ch khi c hai toán hng là false
+ Phép toán ^ ch nhn giá tr true khi và ch khi hai toán hng khác nhau
6. phép toán thao tác trên bit
6.1. Phép toán dch bit
Ta s mô t phép toán dch chuyn qua bng sau:
Phép toán S dng Kt qu
>> op1 >> op2
Dch chuyn op1 sang phi op2 bit, op2 bit phía bên phi s
c n bng các bít 0
<< op1 << op2
Dch chuyn op1 sang trái op2 bit(gi nguyên du ca op1),
op2 bit nm bên trái sc n bng các bít 0
>>> op1>>> op2 Dch chuyn op1 sang phi op2 bit, op2 bit
Sau ây là hình minh ho phép toán dch bít
Trang 21
Ví d:
13>>1=6 vì 13=11012 do vy khi dch phi mt bit ta sc 1102=6
5<<1=10 vì 5=1012 do vy khi dch trái 1 bit ta sc 10102=10
5<<2=100 vì 5=1012 do vy khi dch trái 2 bit ta sc 101002=100
Nhn xét: phép toán dch trái mt bit chính là phép nhân vi 2, còn dch phi chính là
phép chia cho 2

6.2. Phép toán logic trên bit
Các phép toán thao tác bit cho phép ta thao tác trên tng bit riêng l trong mt kiu d liu
thích hp, các phép toán thao tác bit thc hin i s boolean trên các bit tng ng ca 2
toán hng  to ra kt qu
Ta tóm tt các phép toán trong bng sau:
Phép toán S dng Thc hin
& op1 & op2 Thc hin phép and các bit tng ng ca op1 vi op2
| op1 | op2 Thc hin phép or các bit tng ng ca op1 vi op2
^ op1 ^ op2 Thc hin phép xor các bit tng ng ca op1 vi op2
~ ~op2 Thc hin phép lt not các bit ca op2
Bng giá tr chân lý ca các phép toán ái s boolean:
Trang 22
Phép AND
op1 op2 Result
0 0 0
0 1 0
1 0 0
1 1 1
Phép XOR
op1 op2 Result
0 0 0
0 1 1
1 0 1
1 1 0
op1 op2 Result
0 0 0
0 1 1
1 0 1
1 1 1
Ví d:

1101// 13
& 1100// 12

1100// 12
1101// 13
| 1100// 12

1101// 13
1101// 13
^ 1100// 12

0001// 1
! 10101=01010
7. Toán t gán tt
Ging nh C/C++ java cng có toán t gán, ta tóm tt các toán t gán qua bng
sau:
Phép gán S dng ng ng
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1/ = op2 op1 = op1/ op2
%= op1 %= op2 op1 = op1 % op2
Phép NOT
op1 Result
0 1
1 0
Trang 23
&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2

<<= op1 <<= op2 op1 = op1 << op2
>>= op1 >>= op2 op1 = op1 >> op2
>>>= op1 >>>= op2 op1 = op1 >>> op2
8. Th t u tiên ca các phép toán
Th t u tiên ca các phép toán xác nh trình t tính toán giá tr ca mt biu thc, java
có nhng quy tc riêng  xác nh trình t tính toán ca biu thc, ta phi nh quy tc
sau:
Ø Các phép toán mt ngôi bao gi cng c thc hin trc tiên
Ø Trong mt biu thc có nhiu phép toán thì phép toán nào có  u tiên cao hn s
c thc hin trc phép toán có  u tiên thp
Ø Trong mt biu thc có nhiu phép toán có  u tiên ngang nhau thì chúng sc
tính theo trình t t trái qua phi
Ta có bng tóm tt th t u tiên ca các phép toán trong bng sau:
postfix operators []. (params) expr++ expr
unary operators ++expr expr +expr -expr ~!
creation or cast new (type)expr
multiplicative */ %
additive + -
shift << >> >>>
relational < > <= >= instanceof
equality ==! =
Bitwise AND &
Bitwise exclusive OR ^
Bitwise inclusive OR |
Logical AND &&
Logical OR ||
Conditional ?:
Assignment = += -= *=/ = %= &= ^= |= <<= >>= >>>=
Trong bng trên th t u tiên ca các phép toán c gim t trên xung di,
trên cùng mt hàng thì chúng có  u tiên ngang nhau.

• Toán t dy
Không ging nh C/C++, trong java ch duy nht mà ta có tht toán t dy là bên trong
cp ngoc tròn ca cu trúc for( sc mô t chi tit trong chng sau )
IX. Toán t chuyn kiu
9.1 Chuyn i kiu không tng minh
Vic chuyn i kiu thng c din ra mt cách tng trong trng hp biu
thc gm nhiu toán hng có kiu d liu khác nhau. u này ôi khi làm cho bn khá
ngc nhiên vì nhn c mt kt qu không theo ý mun. Ví d ta xét n trình sau:
int two=2, three=3;
Trang 24
float result=1.5 +three/two;
kt qu nhn c ca result là 2.5. iu mà bn mong mun là 3.0 ch không phi là 2.5.
Kt qu 2.5 nhn c là do three và two là hai giá tr nguyên nên kt qu ca phép chia
three/two cho ta mt giá tr nguyên bàng 1 ch không phi là 1.5.  nói rng kt qu ca
phép chia three/two là mt giá tr thc ch không phi là mt giá tr nguyên thì mt trong
hai toán hng ca phép chia này phi là mt s thc. Do vy ta cn phi chuyn kiu ca
mt trong hai toán hng này hoc c hai thành s thc.  nhn c kt quúng trong
trng hp này bn cn vit nh sau:
float result=1.5 + (float) three/two; hoc
float result=1.5 + three/ (float)two; hoc
float result=1.5 +(float)three/(float)two;
Lý do mà ta vit nh trên là nu trong mt phép toán có s tham gia ca nhiu toán hng
có kiu khác nhau thì java s chuyn kiu tng cho các toán hng mt cách tng
theo quy tc sau:
byte -> short -> int -> long -> float -> double
9.2. Chuyn i kiu tng minh
 chuyn i kiu mt cách tng minh ta s dng cú pháp sau:
(type) biu_thc;
khi gp câu lnh này java s tính toán giá tr ca biu thc sau ó chuyn i kiu giá tr
ca biu thc thành kiu type.

Ví d:
(int) 2.5 * 2 = 4
(int) 2.5 * 2.5 = 5
(int)(2.5 * 2.5) = 6
1+(float)5/2=1+5/(float)2=1+(float)5/(float)2=3.5
Chú ý:
- Phép toán chuyn kiu là phép toán có  u tiên cao, nên (int)3.5*2≠(int)(3.4*2)
- Cn chú ý khi chuyn mt biu thc kiu d liu có min giá tr ln sang mt kiu
có min giá tr nh hn. Trong trng hp này có th bn s b mt thông tin.
X. Các hàm toán hc
Các hàm toán hc nh sin, cos, sqrt c java vit sn trong lp Math. Lp này nm trong
gói java.lang (gói mc nh) do vy bn không cn phi thêm câu lnh import u
chng trình  có th s dng lp này. Các hàm này c vit là các phng thc tnh do
vy ta không cn phi to ra th hin ca lp Math.
Bng sau lit kê mt s phng thc tnh trong lp Math:
Tên phng thc Mô t ý ngha Kiu tham s Kiu tr v
sin(arg)
tính sin ca arg arg là mt biu thc kiu
double th hin mt cung
theo radians
double
cos(arg) tính cos ca arg arg là mt biu thc kiu
double th hin mt cung
theo radians
double
tan(arg)
tính tang ca arg arg là mt biu thc kiu
double th hin mt cung
theo radians
double

asin(arg)
tính sin-1 (arcsin) arg là mt biu thc kiu double trong h
Trang 25
arg double th hin mt cung
theo radians
radians
acos(arg)
tính cos-1
(arccosin) ca arg
arg là mt biu thc kiu
double th hin mt cung
theo radians
double trong h
radians
atan(arg)
tính tan-1
(arctang) ca arg
arg là mt biu thc kiu
double th hin mt cung
theo radians
double trong h
radians
atan2 (arg1,arg2)
tính tan-1
(arctang) ca
arg1/arg2
arg1,arg2 là các biu thc
kiu double th hin mt
cung theo radians
double trong h

radians
abs(arg)
tính tr tuyt i
ca arg
arg là mt biu thc kiu
int, long, float, hoc double
The same type as
the argument
max (arg1,arg2)
Nhn v giá tr ln
trong hai tham s
arg1, arg2 là mt biu thc
kiu int, long, float, hoc
double
Nhn v kiu
cùng kiùu vi
tham s
min (arg1,arg2)
Nhn v giá tr
nh trong hai tham
s
arg1, arg2 lµ mét biùu thøc
kiùu int, long, float, hoÆc
double
Nhn v kiu
cùng kiùu vi
tham s
ceil(arg)
Nhn v giá tr
nguyên nh hn

hoc bng arg
arg là biu thc kiu float
hoc double
double
floor(arg)
Nhn v giá tr
nguyên ln hn
hoc bng arg
arg là biu thc kiu float
hoc double
double
round(arg)
Tr v giá tr
nguyên gn arg
nht, giá tr này
chính là giá tr ca
arg sau khi ã làm
tròn
arg là biu thc kiu float
hoc double
Nhn v kiu int
nu arg kiêu float,
nhn v kiùu long
nu arg kiu
double
rint(arg)
Ging nh
round(arg)
arg là biu thc kiu double double
sqrt(arg)

tính cn bc hai
ca arg
arg là biu thc kiu double
double
pow (arg1,arg2)
tính arg1arg2 C arg1 và arg2 là các biu
thc kiu double
double
exp(arg)
tính earg arg là biu thc kiu double double
log(arg)
tính logarithm s
e ca arg
arg là biu thc kiu double double
random()
Nhn v mt s
gi ngu nhiên
nm trong khon
[0, 1)
Không có tham s double
Ví d v các hàm toán hc trong lp Math, bn hãy gõ on chng trình sau và cho chy
th thy c kt qu tính toán ca các hàm toán hc.

×