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

Giáo trình Java căn bản

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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×