Các chương trình và ứng dụng hiện đại phải tích hợp và triệu gọi lẫn nhau trên m ạng Intranet mạng cục bộ, mạng Internet mạng toàn cầu và ngôn ngữ lập trình Java là m ột trong những lựa
Trang 1L I NÓI Đ U
Ngày nay, h ầu như việc viết một ứng dụng để chạy trên máy đơn cục bộ không còn được ưa chu ộng và thích hợp nữa Các chương trình và ứng dụng hiện đại phải tích hợp và triệu gọi lẫn nhau trên m ạng Intranet (mạng cục bộ), mạng Internet (mạng toàn cầu) và ngôn ngữ lập trình Java là m ột trong những lựa chọn tốt nhất để làm việc này Java là một ngôn ngữ lập trình không đơn giản, ngoài sự nổi tiếng về bản thân ngôn ngữ, nền tảng Java còn hướng đến các ứng dụng
m ạng như: giao tiếp trên mạng theo mô hình khách/chủ (client/server) … So với lập trình thông
th ường, lập trình mạng đòi hỏi người lập trình những hiểu biết và kỹ năng chuyên sâu hơn để tạo giao ti ếp và trao đổi dữ liệu giữa các máy tính với nhau
Để giúp sinh viên chuyên ngành CNTT trong Nhà trường có thể tiếp cận được với những kỹ thu ật mới này, chúng tôi đã mạnh dạn soạn thảo cuốn “Bài giảng Lập trình mạng” để đưa vào
gi ảng dạy cho sinh viên CNTT học năm thứ 3 trong Nhà trường Cuốn bài giảng này được soạn
th ảo dựa trên nền tảng các sinh viên CNTT sau 2 năm học đầu trong trường đã được trang bị đầy đủ các kiến thức về Ngôn ngữ lập trình hướng đối tượng, Mạng máy tính, Thiết kế Web Đây
là m ột môn học với đặc thù là kiến thức luôn đổi mới và cập nhật, do đó yêu cầu với môn học này
là sinh viên ph ải tự đọc thêm tài liệu, giáo viên chỉ là người hướng dẫn những vấn đề cơ bản
nh ất cho sinh viên
L ập trình mạng là môn học mới được đưa vào giảng dạy, nên trong quá trình soạn thảo bài
gi ảng không tránh khỏi bỡ ngỡ và thiếu sót Chúng tôi rất mong được sự giúp đỡ, đóng góp ý
ki ến của các đồng nghiệp và độc giả quan tâm để lần tái bản sau cuốn sách được hoàn thiện hơn
M ọi ý kiến đóng góp có thể gửi về theo địa chỉ email: qtmcn1@yahoo.com
Chúng tôi xin chân thành c ảm ơn!
Hà Nội 12/2005
Các tác gi ả
Trang 2M C L C
L I NÓI Đ U 1
M C L C 2
PH N 1: T NG QUAN V L P TRÌNH M NG 5
I Các giao thức mạng 5
I.1 Họ giao thức TCP/IP 5
I.2 Giao thức TCP và UDP 6
I.3 Dịch v từ phía máy ch và khái ni m c ng (PORT) 7
II Giao tiếp trên mạng theo mô hình khách/chủ (Client/Server) và khái niệm socket 8
II.1 Giao ti p theo mô hình khách/ch (Client/Server) 8
II.2 L p trình m ng thông qua Socket 8
II.3 Tìm hiểu một số lớp c n thi t c a gói th vi n Java.net 8
PH N 2: NGÔN NG L P TRÌNH JAVA 15
CH NG 1: T NG QUAN V J AVA 15
I Lịch sử Java 15
II Java là gì? 16
III Cấu trúc của Java 16
IV Các đặc tính chính của Java 18
IV.1 An ninh 18
IV.2 Giao di n l p trình ứng d ng chuẩn - Core API 19
IV.3 T ng thích với nhi u kiểu ph n cứng 19
IV.4 Đặc tính động và phân tán 19
IV.5 H ớng đối t ợng 19
IV.6 Đa lu ng (multi-threads) 20
IV.7 Qu n lý bộ nhớ và quá trình thu dọn 'rác' 20
CH NG 2: C ÁC THÀNH PH N C B N C A NGÔN NG L P TRÌNH JAVA 22
I Ghi chú (Comment) 22
II Câu lệnh và khối lệnh 23
II.1 Câu l nh 23
II.2 Khối l nh 24
III Tập ký tự dùng trong JAVA 24
IV Từ khóa và tên 25
IV.1 Tên 25
IV.2 Từ khóa 25
V Kiểu dữ liệu 25
V.1 Kiểu d li u c b n 26
V.2 Kiểu d li u d n xu t (Reference) 26
V.3 Giá trị mặc định 26
VI Hằng (literal) 27
VII Biến 27
VII.1 Kiểu bi n 28
VII.1.1 Bi n đối t ợng 28
VII.1.2 Bi n lớp 28
VII.1.3 Bi n c c bộ 28
VII.1.4 Ph m vi c a bi n 29
VIII Chuyển đổi kiểu dữ liệu 29
IX Biểu thức và Toán tử 30
IX.1 Các toán t s ố học: 30
IX.2 Các phép toán tăng gi m 2
IX.3 Toán t quan h và đi u ki n 2
IX.4 Toán t lu n lý 2
IX.5 Các toán t làm vi c với bit 2
IX.6 Toán t gán 33
IX.7 Một số toán t khác 33
IX.8 Phép toán trên kiểu chuối ( String) 34
IX.9 Độ u tiên các toán t 34
IX.10 Biểu thức 35
X Các câu lệnh điều khiển 35
Trang 3X.1 C u trúc rẽ nhánh 35
X.1.1 C u trúc đi u ki n rẽ nhánh if 35
X.1.2 C u trúc đi u ki n rẽ nhánh phức : switch 36
X.2 C u trúc lặp 38
X.2.1 Vòng lặp for 38
X.2.2 Vòng lặp while và do: 39
X.3 Ngo i l và câu l nh nắm bắt ngo i l 41
CH NG 3: APPLETS 43
I Đại cương về HTML 43
II Tổng quan về applet 43
II.1 Ví d v Applet 43
II.2 Vòng đ i c a một Applet 44
II.2.1 N p một Applet 44
II.2.2 R i khỏi và quay tr v trang web chứa applet 45
II.2.3 N p l i Applet (Reloading the Applet) 45
II.2.4 Thoát khỏi trình duy t 45
II.2.5 Tóm tắt 45
II.3 Các ph ng thức c b n 46
II.3.1 init() 46
II.3.2 start() 46
II.3.3 stop() 46
II.3.4 destroy() 46
II.4 Các ph ng thức vẽ và nắm bắt sự ki n 47
II.5 Các ph ng thức cho l p trình giao di n ng i dùng 47
II.5.1 Các thành ph n UI xây dựng sẵn 47
II.5.2 Các ph ng thức để s d ng các thành ph n UI trong các Applet 48
II.5.3 Thêm một Text Field không edit đ ợc vào applet Simple 48
II.6 Giới h n c a Applet 49
II.6.1 Giới h n v b o m t 49
II.6.2 Các kh năng c a Applet 50
II.7 Test một applet 50
III Các tính năng cao cấp của Applet API 51
III.1 Tìm ki m và n p các file d li u 52
III.2 Hiển thị chu i tình tr ng ngắn 52
III.3 Hi ển thị tài li u trong trình duy t 53
III.4 G i thông đi p tới các applet khác 54
III.5 Tìm một applet bằng tên: s d ng ph ng thức getApplet 55
III.6 Tìm t t c các applet trên một trang: s d ng ph ng thức getApplets 59
III.7 Đan xen vào các trang Web 60
III.7.1 Các thuộc tính (Attributes) 61
III.7.2 Các thông s ố c a applet 61
CH NG 4: CÁC GÓI & GIAO DI N 63
I Giới thiệu 63
II Các giao diện 63
II.1.Các b ớc để t o một giao di n 63
II.2.Hi n thực giao di n 64
III Các gói 66
III.1.T o một gói 68
III.2.Thi t l p đ ng d n cho lớp (classpath) 70
IV Gói và điều khiển truy xuất 72
IV.1 Gói java.lang 73
IV.1.1.Lớp String (lớp chuỗi) 74
IV.1.2.Chuỗi mặc định (String pool) 75
IV.1.3.Các ph ng thức c a lớp String 76
IV.1.4.Lớp StringBuffer 78
IV.1.5.Các ph ng thức lớp StringBuffer 80
IV.1.5.L ớp java.lang.Math 82
IV.1.6.Lớp Runtime (Th i gian thực hi n ch ng trình) 84
IV.1.7.Lớp System 85
IV.1.8.Lớp Class 87
IV.1.9.Lớp Object 88
IV.2 Gói java.util 89
IV.2.1.Lớp Hashtable (b ng băm) 90
IV.2.2.Lớp random 93
IV.2.3.Lớp Vector 94
IV.2.4.Lớp StringTokenizer 97
Trang 4PH N 3: L P TRÌNH SOCKET 102
CH NG 1: L P TRÌNH TCP S OCKET 102
I Xây dựng chương trình EchoServer 102
II Xây dựng chương trình EchoClient 103
CH NG 2: L P TRÌNH UDP S OCKET 105
I Xây dựng chương trình ExchangeRateServer 105
II Xây dựng chương trình ExchangeRateTable 106
PH N 4: L P TRÌNH TRÊN INTERNET 109
CH NG 1: JSP VÀ CÁC KHÁI NI M M Đ U 110
I Các c ơ chế hoạt động của trang JSP 110
II Xây dựng trang JSP 110
CH NG 2: C ÁC CÚ PHÁP C B N C A JSP 112
I Các đối tượng mặc định của JSP 112
II Các thẻ lệnh JSP 112
II.1 Th ẻ bọc mã <% %> 112
II.2 Thẻ hiển thị k t xu t <%= %> 113
II.3 Thẻ chỉ d n biên dịch trang <%@ page %> 114
II.4 Chèn chú thích vào mã trang JSP 114
II.5 Khai báo ph ng thức và bi n hằng <%! %> 116
III Truy xu ất cơ sở dữ liệu trong trang JSP 116
TÀI LI U THAM KH O 119
Trang 5Ph n 1: T ng quan v l p trình m ng
I.1 H ọ giao thức TCP/IP
Để hai hay nhi u máy có thể giao ti p đ ợc với nhau, chúng ph i dùng một ngôn ng chung:
chẳng h n máy này ph i g i nh ng tín hi u gì đ n máy kia và máy kia ph i g i tr l i nh ng tín
hi u nào để nh n bi t Trên Internet ngày nay vi c hai máy có thể trao đ i đ ợc với nhau đa số
đ u dựa theo quy ớc hay giao thức cốt lõi là TCP/IP (Transmission Control Protocol/ Internet Protocol) Theo giao thức này, mỗi máy sẽ đ ợc đặt cho một số riêng bi t gọi là địa chỉ IP (IP address) có vai trò t ng tự số đi n tho i, chẳng h n máy tính có tên là www.microsoft.com sẽ có địa chỉ IP là 207.46.230.219 Các số IP này là duy nh t và không máy nào đ ợc trùng nhau (trên toàn th giới) Khi b n muốn máy c a mình có địa chỉ IP để tham gia vào h thống Internet toàn
c u nh là một máy ch (host hay server) ta ph i đăng ký với t chức quốc t InterNIC (Internet Network Information Center) để nh n đ ợc một số IP riêng bi t
V y t i sao vừa có địa chỉ IP l i vừa có tên riêng cho từng máy? Dùng cái nào để xác định liên l c với một máy ch (nh trên, ta nên dùng www.microsoft.com hay số 207.46.230.219 để
k t nối với một máy ch c a công ty Microsoft) Th t ra tên và địa chỉ IP là một, nh ng địa chỉ IP
đ ợc ghi bằng số, còn tên c a máy ch l i đ ợc ghi bằng ch có ý nghĩa và g n gũi h n với con
ng i Với mỗi h thống đ u có sự chuyển đ i trực ti p từ tên vùng thành địa chỉ IP thích hợp
tr ớc khi d li u đ ợc g i đi
Ví d đối với Windows có thể tham kh o hai t p tin HOSTS và LMHOSTS đây là hai t p tin
văn b n (đ ợc coi nh một c s d li u) để l u tr t p hợp các số IP cùng với tên t ng ứng Ta
có thể tự thêm vào địa chỉ IP và tên máy ch cách nhau bằng kho ng trắng Khi có nhu c u truy
c p đ n một máy xa qua giao thức m ng TCP/IP n u gõ vào tên máy ch thì h thống sẽ tự tìm địa chỉ IP t ng ứng trong t p tin này:
một d u ch m (.) Công vi c theo dõi sự thay đ i tên đ ợc phân phối qua Internet nh các máy
ch lớn DNS (Domain Name System) theo dõi các máy ch khác trong vùng con c a chúng
Trang 6Tr ớc đây mỗi máy có thể tự mình l u tr một t p tin chứa ph n lớn các tên và địa chỉ c a nh ng máy ch thông d ng (nh trong Windows là t p tin HOSTS và LMHOSTS), nh ng ngày nay ta không làm nh v y n a mà đa số các tên vùng cũng nh địa chỉ IP đ ợc l y xuống từ các máy
ch DNS
Khi đọc tên vùng c a một máy ch ta đi từ trái qua ph i Ví d :
Nói chung là theo quy ớc từ ph n riêng bi t nh t đ n ph n chung nh t Tuy nhiên không bắt buộc là nh v y, ta v n có thể đặt tên theo cách khác, không nh t thi t là chỉ g m 3 hay 4 nhóm (ví d : here.is.along.name.address.co.vn là hợp l ) b i vì cuối cùng thì tên vùng cũng đ ợc h thống DNS chuyển thành địa chỉ IP mà thôi
Java.sun.com
tên máy tính tên t ch ức tên vùng
I.2 Giao th ức TCP và UDP
Quá trình chuyển d li u trên m ng là khá phức t p Chi ti t quá trình này di n ra t ng tự
nh trong thực t ta g i th hay b u phẩm, tr ớc h t ph i ghi rõ địa chỉ n i đ n (tr ng hợp này
là địa chỉ IP c a máy ch ), sau đó có thể g i thông th ng hoặc g i b o đ m (tùy theo cách g i
mà th hay b u phẩm có chắc chắn đ n đ ợc tay ng i nh n hay không), ng i nh n sau khi
nh n đ ợc có thể h i âm tr l i là đã nh n đ hoặc bị m t mát gì đó trong quá trình chuyển t i
Giao thức UDP ng ợc l i không đáng tin c y lắm, không có sự k t nối tr ớc nào gi a n i g i
và n i nh n, d li u g i đi mặc định rằng máy tính đ u nh n luôn tr ng thái sẵn sàng để ti p
Trang 7đón d li u g i đ n N u d li u g i đ n bị lỗi trong quá trình truy n hay không nh n đ ợc đ y
đ giao thức UDP cũng không có thông tin ph n h i gì l i cho n i g i Tuy nhiên UDP không đòi hỏi sự chính xác cao nh dịch v thông báo gi , tỉ giá hay các dịch v g i nhắn tin …
I.3 D ịch v từ phía máy chủ và khái ni m c ng (PORT)
Ta có thể k t nối vào Internet thông qua dịch v c a nhà cung c p còn gọi là ISP (nh FPT, Cnet ) bằng đ ng đi n tho i thông qua modem Các nhà dịch v này đóng vai trò nh nh ng máy ch (server) giúp d dàng truy c p d li u từ nh ng vùng khác nhau trên m ng
Khi k t nối vào máy ch ta có thể yêu c u máy ch nhi u dịch v khác nhau, nh dịch v truy tìm và đọc các trang Web trên Internet, dịch v g i nh n e-mail, dịch v dò tìm h thống tên vùng DNS Mỗi dịch v đ u có cách g i nh n d li u theo quy ớc riêng TCP và UDP chỉ chịu trách nhi m đ a d li u từ một máy tính này đ n một máy tính khác, còn d li u đó đ ợc g i cho dịch v nào thì ph i thông qua một dịch v n a gọi là c ng (hay port) Mỗi ch ng trình dịch v
sẽ s d ng một c ng khác để truy xu t thông tin C ng là một số nguyên d ng có giá trị từ 1 đ n
16383
Máy ch (server) sẽ quy định c ng đ ợc s d ng cho mỗi lo i dịch v Thông tin gi a máy khách (client) và máy ch (server) ph i s d ng c ng t ng ứng nhau thì mới trao đ i đ ợc với nhau Tuy nhiên, h u h t các ch ng trình dịch v n i ti ng hi n nay đ u có quy định chuẩn c ng dành riêng cho mình nh :
N u tự xây dựng một ứng d ng làm dịch v trên máy ch ta ph i chọn cho mình một số c ng
có các giá trị khác với nh ng giá trị c ng mà nh ng dịch v n i ti ng khác đã s d ng
Trang 8II Giao ti p trên m ng theo mô hình khách/ch ủ (Client/Server) và khái ni m socket
II.1 Giao ti p theo mô hình khách/ch ủ (Client/Server)
Có r t nhi u dịch v hỗ trợ trên Internet nh e-mail, nhóm tin (newsgroup), chuyển t p tin (file transfer), đăng nh p từ xa (remote login), truy tìm các trang Web Nh ng dịch v này đ ợc
t chức và ki n trúc theo mô hình khách/ch (mô hình Client/Server) Các ch ng trình máy khách (client) nh trình duy t (Web Browser) hay ch ng trình g i nh n e-mail sẽ t o ra k t nối (connection) với một máy ch xa (server) sau đó g i các yêu c u đ n máy ch , các ch ng trình dich v trên máy ch nh Web server hay Mail server sẽ x lý nh ng yêu c u này và g i
k t qu ng ợc v cho máy khách (chẳng h n Web theo địa chỉ mà máy khách đ a đ n còn Mail server thì l u gi và g i v cho máy khách nh ng bức e-mail mới) Thông th ng một dịch v trên máy ch ph c v cho r t nhi u khách
II.2 L p trình m ng thông qua Socket
Nh v y tr ớc khi yêu c u một dịch v trên máy ch thực hi n đi u gì đó, máy khách (client) ph i có kh năng k t nối đ ợc với máy ch Quá trình k t nối này đ ợc Java thực hi n thông qua một c ch trừu t ợng hóa gọi là Socket (t m gọi là “c ch cắm”) K t nối gi a máy khách và máy ch t ng tự nh vi c cắm phích đi n vào cắm đi n Máy khách th ng đ ợc coi
nh phích cắm đi n còn máy ch đ ợc coi nh cắm đi n, một cắm có thể cắm vào đó nhi u phích đi n khác nhau cũng nh một máy ch có thể k t nối và ph c v cho r t nhi u máy khách
N u k t nối socket thành công thì máy khách và máy ch có thể trao đ i d li u với nhau
thực hi n các yêu c u v dịch v trên máy ch Vi c k t nối theo c ch socket c n bi t hai thông tin ch y u đó là địa chỉ c a máy c n k t nối và số hi u c ng c a ch ng trình dịch v Java cung
c p lớp Socket (th ng đ ợc dùng nh “phich cắm đi n” cho máy khách) và lớp ServerSocket (th ng đ ợc dùng nh “ cắm đi n” đặt trên máy ch ) Hai lớp này đ ợc đặt trong gói th vi n Java.net
II.3 Tìm hi ểu một số l p c n thi t của gói th vi n Java.net
a L p InetAddress
Vì địa chỉ Internet theo số IP và theo tên r t th ng dùng khi k t nối vào m ng cho nên Java xây dựng hẳn một lớp InetAddress dành riêng cho vi c qu n lý địa chỉ theo tên và theo số Lớp InetAddress cung c p các ph ng thức static thông d ng nh t dùng để chuyển đ i và truy xu t
Trang 9địa chỉ IP (không có ph ng thức kh i dựng cho lớp này) Th ng ta sẽ quan tâm đ n các
ph ng thức sau:
• public static InetAddress getLocalHost ()
throws UnknownHostExceptiongetByName
Tr v đối t ợng InetAddress là địa chỉ c a máy c c bộ (local host)
• public static InetAddress getByName (String host)
• public byte[] getAddress()
Tr v địa chỉ IP c a đối t ợng InetAddress d ới d ng một dãy các byte Vị trí byte cao
nh t nằm byte 0
• public String getHostAddress()
Tr v địa chỉ IP c a đối t ợng InetAddress d ới d ng một chuỗi đ ợc dịnh d ng phân làm 4 nhóm %d.%d.%d.%d (Ví d : “172.16.11.12”)
D ới đây là ví d cho th y cách dùng lớp InetAddress để l y v các thông tin c a địa chỉ máy ch :
• public Socket (String host, int port)
throws UnknownHostException, IOException
T o ra một socket để k t nối máy có tên theo địa chỉ host và số c ng port
• public Socket(InetAddress address, int port) throws IOException
T o ra một socket k t nối địa chỉ là đối t ợng InetAddress và số c ng port
Trang 10• Public Socket(String host, int port, boolean stream) throws IOException
T o ra một socket k t nối theo địa chỉ host và số c ng port tham số stream cuối cùng để quy định k t nối theo TCP (stream=true) hay UDP (stream=false) Tuy nhiên n u áp d ng để t o socket cho giao thức UDP nên s d ng lớp thay th là DatagramSocket
Các ph ng thức khác hỗ trợ cho lớp Socket từ phía máy khách bao g m:
• InputStream get InputStream() throws IOException
L y v lu ng nh p để máy khách có thể nh p d li u tr v từ phía máy ch
• OutputStream get OutputStream() throws IOException
L y v lu ng xu t để máy khách có thể ghi d li u g i đ n máy ch
• InetAddress get InetAddress()
L y địa chỉ k t nối socket c a máy ch
Socket me=new Socket(“my.testing.server”, 1234);
// Lu ồng nhập thông tin để trả về máy chủ từ phía kết nối
DataInputstream in = new DataInputStream(me.getInputStream());
// Lu ồng xuất để ghi thông tin gửi đến máy chủ
DataOutputStream out = new DataOutputStream(me.getOutputStream());
• public ServerSocket(int port) throws IOException
port là số hi u c ng mà đối t ợng ServerSocket ph i lắng nghe để nh n bi t nh ng k t nối từ phía máy khách g i đ n
Để ch đợi k t nối từ các máy khách g i đ n đối t ợng ServerSocket th ng nh đ n ph ng
thức accept nh sau:
• Socket accept () throws IOException
Trang 11Ph ng thức này thực sự dừng l i ch đợi cho đ n khi nh n đ ợc thông tin k t nối sẻ tr v đối t ợng socket c a máy khách n i có yêu c u nối vào máy ch
Cuối cùng máy ch có thể cắt đứt mọi k t nối bằng cách gọi ph ng thức close c a đối t ợng ServerSocket
• Public void close () throws IOException
Ví d đo n mã sau sẽ t o một đối t ợng ServerSocket trê máy ch luôn lắng nghe k t nối từ phía máy khách g i đ n qua số c ng 1234
có thể bị lỗi trên đ ng truy n (c ch dùng DatagramSocket không an toàn bằng lớp Socket)
D ới đây là một số ph ng thức dùng c a lớp DatagramSocket:
• public DatagramSocket () throws SocketException
Ph ng thức kh i dựng để t o k t nối UDP
• public DatagramSocket (int port) throws SocketException
Ph ng thức kh i dựng để t o k t nối UDP với số hi u c ng port
• public void synchronized send (DatagramSocket p) throws IOException
G i gói d li u đi
• Public void synchronized receive (DatagramSocket p) throws IOException
Trang 12Nh n gói d li u v
• public void synchronized close ()
Đóng k t nối
e L p DatagramPackage
Lớp này dùng cho một gói d li u g i đi trên m ng theo k t nối DatagramSocket Một gói có
thể chứa các thông tin nh d li u, chi u dài gói, các địa chỉ IP và số c ng mà từ đó các gói d
li u đ ợc g i đi D ới đây là một số ph ng thức h u d ng c a lớp DatagramPackage này:
• public DatagramPackage(byte buff[], int len)
Ph ng thức kh i t o ra gói có d li u chứa trong bộ đ m buff[] và chi u dài gói d li u là
len
• public DatagramPackage (byte buff[], int len, InetAddress iaddr, int port)
Ph ng thức kh i t o ra gói có d li u chứa trong bộ đ m buff[] cùng với chi u dài vùng
đ m muốn l y, địa chỉ máy đích và số hi u c ng
• public InetAddress getAddress()
Tr v địa chỉ chứa trong gói d li u
• public byte[] getData()
Tr v d li u th t sự chứa trong gói
• public int getLength()
Tr v kích th ớc hay chi u dài gói d li u
• public int getPort()
Tr vể số hi u c ng chứa trong gói d li u
f L p URL
URL(Uniform Resource Locator) là địa chỉ định vị tài nguyên trên m ng, th ng một một URL nh đã đ c p bao g m 3 ph n: ph n nghi thức(protocol), ph n địa chỉ hay tên máy
ch (host name), và ph n chỉ định tên t p tin hay tài li u muốn l y từ máy ch v
Java đóng gói t t c nh ng đặc điểm này vào một lớp URL Đối t ợng URL đ ợc t o ra bằng
một trong nh ng ph ng thức kh i t o sau:
• public URL(String spec) throws MalformedURLException
T o một đối t ợng URL từ địa chỉ định vị là một chuỗi
• public URL(String protocol, String host, int port, String file) throws MalformedURLException
Trang 13T o một địa chỉ định vị tuy t đối với đ y đ nghi thức(protocol), máy ch (server), c ng(port),
đ ng d n(file) tới t p tin c n l y trên máy ch
• public URL(String protocol, String host, String file) throws MalformedURLException
T o một địa chỉ định vị tuy t đối với đ y đ nghi thức(protocol), máy ch (server), đ ng
d n(file) tới t p tin c n l y trên máy ch (bỏ qua thành ph n định vị c ng giao ti p, n u truy tìm trang web theo nghi thức http thì c ng ch ng trình web server mặc định là 80)
Các ph ng thức hỗ trợ khác dùng cho lớp URL là:
• public final Object getContent() throws IOException
l y v nội dung mà k t nối theo địa chỉ URL có đ ợc
L y v nội dung chuỗi tham kh o thêm trong chuỗi URL(đ ợc đặt sau d u # c a chuỗi)
• Public final InputStream openStream() throws IOException
M lu ng nh p để đọc thông tin tr v từ máy ch
Ví d đo n mã sau đây dùng để l y v nội dung trang web index.htm từ máy ch java.sun.com: try{
// M ở kết nối đến trang Web theo địa chỉ định vị URL
URL o = new URL(“http://java.sun.com/index.htm”);
// T ạo luồng nhập để đọc nội dung trang Web trả về từ máy chủ
BufferedReader inStream = new BufferedReader(new InputStreamReader(o.openStream()));
// In n ội dung trang Web index.htm ra màn hình
String line;
while((line = in.readLine()) != null) {
Trang 15Ph n 2: Ngôn ng l p trình Java
CH NG 1:
T ng quan v Java
Chúng ta bi t đ n Sun Microsystems nh một nhà s n xu t ph n cứng với các tr m làm
vi c UNIX Trên thực t , hãng Sun cũng phát triển ph n m m, đặc bi t n i ti ng là h đi u hành Solaris và h thống t p tin m ng (Network File System - NFS) Năm 1990, Sun Microsystems bắt
đ u thực hi n dự án có tên gọi Green nhằm phát triển ph n m m trong các thi t bị đi n t dân
d ng James Gosling, chuyên gia l p trình ph n m m m ng đ ợc giao trách nhi m thực hi n dự
án
Ban đ u, Gosling s d ng C++ để vi t ph n m m đi u khiển, hiển thị số cho thi t bị nh VCR (Video Cassette Recorder), PDA (Personal Digital Assistant) Nh ng ngay sau đó, Gosling phát hi n ra rằng C++ không ph i là ngôn ng thích hợp cho công vi c này Ngôn ng C++ đ
m m dẻo để đi u khiển h thống, nh ng nó l i d gây ra nh ng lỗi d n đ n treo h thống Một cách chi ti t h n, C++ xâm nh p trực ti p đ n tài nguyên h thống, yêu c u ng i l p trình ph i
tự mình qu n lý các tài nguyên này Đi u này t o thành một rào c n không cho C++ tr thành
một công c vi t các ph n m m có độ tin c y cao, tính t ng thích lớn, đặc bi t trong vi c đi u khiển các thi t bị đi n t dân d ng
Gosling gi i quy t v n đ này bằng cách t o ra một ngôn ng l p trình mới có tên là Oak Ngôn ng này có cú pháp giống nh C++, nh ng bỏ qua các tính năng "nguy hiểm" c a C++ nh truy c p trực ti p tài nguyên h thống, các phép toán với con trỏ, n p ch ng tác t Oak đ ợc thi t l p với m c đích t o tính t ng thích cao (ch y trên nhi u lo i chip khác nhau), giúp các nhà s n xu t thi t bị có thể thay đ i kiểu ph n cứng mà không ph i vi t l i ph n m m tr ớc đó
Khi ngôn ng Oak tr ng thành, World Wide Web cũng đang b ớc vào th i kỳ phát triển
m nh mẽ, và đội ngũ phát triển ph n m m c a Sun th y rằng đây cũng là ngôn ng đặc bi t thích
hợp cho Internet Vào năm 1994, họ đã đ a ra WebRunner, một trình duy t Web vi t bằng Oak (sau này trình duy t này đ ợc đ i tên thành HotJava và hi n nay v n đang đ ợc ti p t c phát triển)
Cuối cùng, vào năm 1995, Oak đ ợc đ i tên thành Java (do m c đích th ng m i) và đ a
ra trình di n t i SunWorld 95 Từ đó đ n nay, Java nhanh chóng phát triển Th m chí tr ớc khi
Trang 16trình dịch Java đ u tiên đ ợc đ a ra vào tháng 1 năm 1996, Java đã đ ợc coi là một chuẩn công nghi p cho Internet
Trong 6 tháng đ u năm 1996, nhi u nhà s n xu t ph n m m cũng nh ph n cứng đứng
đ u th giới đã mua b n quy n công ngh Java từ Sun, bao g m Adobe, Asymetrix, Borland, IBM, Macromedia, Metrowerks, Microsoft, Novel, Oracle, Spyglass và Symantec Các hãng này sẽ k t hợp Java vào các s n phẩm c a họ nh : các ph n m m, h đi u hành, công c phát triển
Java là công ngh cho phép t o ra các ph n m m phân tán (distributed software) Đây là
nh ng ph n m m đặt trên máy ch (server), đ ợc n p v qua k t nối m ng và thực hi n trên máy khách (client)
Mặc dù đ ợc t o ra từ nh ng năm 70, Internet chỉ thực sự quy n rũ các doanh nghi p vào
nh ng năm 90 nh có sự ra đ i c a World Wide Web Web cho phép ng i s d ng truy c p trực
ti p các thông tin trên Internet mà không c n ph i học các l nh phức t p, cung c p thông tin trực tuy n v nhi u lĩnh vực với hình nh, âm thanh, Sự ra đ i c a Java cho phép Web ti n xa h n
n a, bi n các trang Web tĩnh thành các ứng d ng sống động, có thể t ng tác với ng i s d ng
Nh ng lý do căn b n để mọi ng i chú ý đ n Java là:
+ Cho phép vi t các ch ng trình m nh và tin c y
+ Xây dựng ứng d ng ch y đ ợc trên h u h t các ph n cứng và h đi u hành khác nhau (multi-platform)
+ Phân phối các ứng d ng trên m ng với độ b o m t và an toàn cao
Nh v y, có thể nói Java đã thay đ i chức năng c a Internet, cũng giống nh Web đã thay đ i cách ti p c n vào Internet c a chúng ta Nói cách khác, Java đã chuyển m ng từ chỗ chỉ đ n thu n cung c p thông tin và chia sẻ tài nguyên sang đóng vai trò h đi u hành Đây chính là n n móng cho phép xây dựng các máy tính m ng (Network Computer - NC) c a Oracle, IBM và Sun
Sức m nh Java có đ ợc chính là nh c u trúc c a nó Java đ ợc thi t k nhằm m c đích tr ớc
h t là đ n gi n hoá công vi c c a ng i l p trình K đ n, do nhu c u ch y trên m ng, Java ph i
th t sự an toàn và n định, cũng nh có kh năng làm vi c đ ợc với nhi u kiểu ph n cứng, ph n
m m khác nhau C u trúc ngôn ng Java thực sự đã đ m b o đ ợc t t c các tính năng trên
Trang 17Cũng nh các ngôn ng l p trình khác, Java c n một trình biên dịch để chuyển đ i mã l nh cho ng i đọc (mã ngu n) sang ứng d ng thực thi đ ợc Các trình biên dịch thông th ng nh Microsoft Visual C++ cho Windows 95 sẽ biên dịch ch ng trình sang mã l nh thực hi n trên
một lo i ph n cứng nh t định nào đó (trong tr ng hợp này là mã l nh cho Intel x86) Trái l i, trình biên dịch Java l i chuyển ch ng trình ngu n Java thành các bytecode Các bytecode này
chỉ có thể ch y đ ợc trên máy o Java (Java Virtual Machine -JVM)
L u ý: Hi n nay, máy o Java (JVM) mới đ ợc t o dựng bằng ph n m m chứ không ph i
ph n cứng Sun Microsystems và một số công ty đi n t khác đang ti n hành nghiên cứu phát triển chip picoJava, nhằm m c đích t o máy o Java bằng ph n cứng Các chip này cho phép đ a Java vào các thi t bị đi n t một cách d dàng h n, đ ng th i làm tăng tốc độ tối đa cho các JVM
javac: Bộ biên dịch Java: Làm nhi m v chuyển mã ngu n Java sang bytecode
java: Bộ thông dịch Java: Thực thi các ứng d ng Java trực ti p từ t p tin lớp (class)
appletviewer: Một trình thông dịch Java thực thi các Java applet từ t p tin HTML
javadoc: T o tài li u d ng HTML từ mã ngu n cùng với các chú thích bên trong
jdb (Java debuger): Cho phép b n thực hi n từng dòng trong ch ng trình, đặt các điểm dừng (breakpoint), xem giá trị các bi n
javah: T o ra t p tin header c a C cho phép C gọi hàm Java hoặc ng ợc l i
javap: Trình dịch ng ợc java (disassembler): Hiển thị các hàm và d li u truy c p đ ợc bên trong một t p tin lớp đã dịch Nó cũng cho phép hiển thị nghĩa c a bytecode
Quá trình biên dịch Java nh sau: mã ngu n trong các t p tin *.java, qua trình biên dịch javac
đ ợc chuyển thành các bytecode Bytecode nằm trong t p tin *.class, đ ợc gọi là t p tin lớp (b i
mỗi t p tin chứa một lớp riêng bi t c a Java) Các ứng d ng Java có thể bao g m nhi u lớp khác nhau
Chú ý: Một lớp (class) c a Java cũng giống h t nh một lớp trong C++ Lớp chính là các bi n
d li u và th t c k t hợp với nhau thành một khối
Trang 18Khi thực hi n ch ng trình Java, máy o Java s d ng trình n p lớp (class loader) để đọc các bytecode từ đĩa hoặc k t nối m ng Các lớp đ ợc n p sẽ ph i đi qua trình kiểm tra lớp (class verifier) để chắc chắn rằng chúng sẽ không sinh ra các lỗi nh h ng đ n h thống khi thực thi Quá trình kiểm tra này làm tăng th i gian n p một lớp, tuy nhiên nó chỉ ph i thực hi n có một l n
mà thôi
Ph n thực hi n (execution unit) trong máy o Java sẽ thực thi các l nh quy định trong từng bytecode Bộ ph n thực thi đ n gi n nh t là một trình thông dịch, chuyển đ i từng bytecode sang các th t c c n làm trên từng h thống Cách này r t ch m vì trình thông dịch luôn ph i tra nghĩa
c a bytecode mà nó thực thi Để khắc ph c nh ợc điểm này, ng i ta đ a ra trình biên dịch in-time (JIT): Quá trình chuyển đ i từ bytecode sang mã l nh riêng c a từng h thống sẽ đ ợc làm luôn một l n ngay khi n p ch ng trình, do đó tăng đ ợc tốc độ đáng kể
Just-Ch ng trình vi t bằng Java có thể là ứng d ng riêng bi t (stand-alone application), hay là ứng d ng kí sinh trên Web (applet) hoặc đ ng th i c hai Applet là ch ng trình đ ợc nhúng trong trang Web, đ ợc đọc và thực hi n b i trình duy t hỗ trợ Java (Java-enabled Web browser) Khi trình duy t đọc tới trang Web này, applet sẽ đ ợc thực thi Trái l i, một ứng d ng Java riêng
bi t đ ợc ch y bằng dòng l nh (java Tên-lớp-c n-thực-thi Tham-số), không c n thông qua trình duy t Web
Một trình duy t Web hỗ trợ Java (Java-enabled browser) có máy o Java riêng Hi n nay, các trình duy t hỗ trợ Java nh v y khá nhi u: Netscape 2.0 tr lên, HotJava, Microsoft Internet Explorer 3.0 (b n beta 2 tr lên), Các trang Web nhúng Java applet có chứa đ ng d n kiểu URL tới t p tin lớp chính c a applet đó Trình duy t chỉ vi c kh i động máy o Java và cung c p cho trình n p lớp đ ng d n này Chú ý rằng mỗi lớp đ u đ a ra tên c a các lớp ph nó c n, do
đó trình n p lớp ph i n p một số lớp ph khác tr ớc khi thực hi n ch ng trình
Trong ph n này, chúng ta sẽ điểm qua b y đặc tính quan trọng khi n Java tr thành một công
c phát triển m nh, tin c y
IV.1 An ninh
An ninh là một v n đ khó khăn hàng đ u mà ng i l p trình m ng gặp ph i: Ng i s d ng luôn e ng i hai đi u: Thứ nh t, thông tin họ g i đi trên m ng có thể bị đọc lén và thứ hai, h
thống c a họ có thể bị xâm nh p và phá ho i C u trúc an ninh c a Java nhằm vào gi i quy t
đ ng th i hai v n đ trên
Trang 19C u trúc an ninh c a Java dựa vào ba thành ph n: Trình n p lớp, trình kiểm tra lớp và trình
qu n lý an ninh (SecurityManager) Chúng ta đã bi t rằng trình kiểm tra lớp làm nhi m v đ m
b o chắc chắn ch ng trình Java đ ợc biên dịch đúng đắn, khi thực hi n sẽ không gây lỗi nh
h ng đ n h thống cũng nh không đ ng ch m đ n nh ng d li u "riêng t " trên máy khách hàng
Bên c nh đó, trình n p lớp phân bi t rõ lớp nào đ n từ m ng, lớp nào nằm ngay trên máy khách hàng Đi u này ngăn lớp tới từ m ng "gi d ng" một lớp trên máy khách hàng để thực hi n các tác v bị c m đối với lớp này Ngoài ra nó còn giúp tách bi t ho t động c a các lớp khác nhau tới từ các máy ch khác nhau
Trình qu n lý an ninh kiểm soát các ho t động một máy o Java đ ợc quy n làm dới các đi u
ki n khác nhau Một ví d r t c b n là ho t động đọc/ghi t p tin (file I/O) đ ợc qu n lý chặt chẽ
b i trình qu n lý an ninh: Các applet chỉ có quy n đọc/ghi các t p tin t i máy server chứa nó mà thôi! Tuy nhiên, trình qu n lý an ninh cũng là một lớp trong Java, do đó chúng ta có thể vi t một
lớp an ninh riêng cho mình bằng cách t o một lớp d n xu t từ lớp SecurityManager
IV.2 Giao di n l p trình ứng d ng chuẩn - Core API
Java cung c p cho ng i l p trình một th vi n các hàm chuẩn, đó là Core API Các hàm chuẩn này đ ợc đặt trong các gói (package) - là t p hợp c a các lớp có mối quan h với nhau (ví
d nh gói java.awt chứa các lớp Abstract Windowing Toolkit, giúp ng i l p trình xây dựng ứng d ng với giao di n GUI trên các platform khác nhau)
IV.3 T ng thích v i nhi u ki ểu ph n cứng
Mã bytecode c a Java có thể ch y trên h u nh mọi lo i ph n cứng và h đi u hành hi n nay
nh : PC, Macintosh cũng nh các máy khác có ch y máy o Java Một điểm n a là th vi n các th t c chuẩn Java có chứa đ y đ các hàm có thể dùng chung cho các platform khác nhau
IV.4 Đặc tính động và phân tán
H đi u hành Windows cho phép các ch ng trình s d ng chung và n p tự động các th
vi n liên k t động DLL Chia sẻ t p tin DLL làm gi m dung l ợng bộ nhớ cũng nh đĩa c n dùng
và tăng tính c u trúc c a ch ng trình Java cũng có đặc tính này: các lớp đ ợc n p tự động khi
c n và nhi u ch ng trình có thể dùng chung một lớp Nó còn hỗ trợ đặc tính phân tán, tức là các
ph n c a ch ng trình có thể nằm trên máy ch l n trên máy khách hàng
IV.5 H ng đối t ng
L p trình h ớng đối t ợng (OOP) là ph ng thức vi t các ứng d ng d b o trì, d nâng c p
và đặc bi t là có thể tái s d ng các mã l nh Java là một ngôn ng h ớng đối t ợng, do đó nó có
Trang 20đ y đ các đặc tính trên Ngoài ra, th vi n lớp Java cung c p khá đ y đ cho ng i l p trình để
bắt đ u một dự án mới
IV.6 Đa lu ng (multi-threads)
Các ứng d ng vi t bằng Java có thể có nhi u ti n trình đ ợc x lý cùng một lúc Một ứng
d ng đ n lu ng chỉ có thể thực hi n một tác v t i một th i điểm: Gi s ứng d ng đang b n l y
từ trên m ng xuống một t p tin m t vài phút, trong th i gian này ứng d ng không thể làm các
vi c khác nh vẽ l i màn hình Với ứng d ng vi t bằng Java, b n có thể t o hai ti n trình song song làm vi c: một ti n trình n p t p tin, một ti n trình khác làm nhi m v c p nh t màn hình
IV.7 Qu n lý b ộ nh và quá trình thu dọn 'rác'
Qu n lý bộ nhớ là một v n đ khá phức t p đối với C và C++ Trong th i gian thực hi n
ch ng trình, ng i l p trình chịu trách nhi m kh i t o các vùng nhớ, sau khi dùng xong l i gi i phóng chúng Chỉ c n một lỗi nhỏ trong đó cũng có thể làm c n ki t tài nguyên hay d n đ n treo
h thống Java đã vứt bỏ gánh nặng này cho ng i l p trình: Các vùng nhớ đ ợc t o ra trong
ch ng trình sẽ tự động đ ợc gi i phóng thông qua quá trình thu dọn "rác" (Garbage Collection) Các vùng nhớ tự động đ ợc gi i phóng n u nh nó không đ ợc quy chi u đ n b i b t cứ đối t-ợng đang ho t động nào
Các qu n lý bộ nhớ c a Java c ng cố thêm tính an ninh c a các máy o Trong C và C++,
ng i l p trình có thể truy c p đ n h thống thông qua con trỏ (pointer) Với Java, phép toán với con trỏ bị c m, do đó con trỏ luôn chỉ đ n d li u c n thi t c a ứng d ng trên máy o, ngăn ngừa ứng d ng truy xu t đ n tài nguyên bên ngoài máy o
C u trúc và các đặc tính trên đây c a Java cho th y Java có nh ng điểm m nh và y u riêng Tuy nhiên, chúng ta có thể tin rằng, trong t ng lai, Java sẽ d n d n hoàn thi n nh ng nh ợc điểm, phát triển và ti p t c làm thay đ i bộ mặt c a Internet cũng nh Intranet
Trang 21Ki ểm tra sự ti n bộ
1 B n có thể vi t các ch ng trình d ng th t c bằng Java Đúng/Sai
2 Java là ngôn ng có kiểu d li u chặt chẽ Đúng/Sai
3 .là ch ng trình Java ch y độc l p, và s d ng giao di n đ họa để ng i s
d ng nh p d li u
4 .s d ng JDBC API để k t nối c s d li u
5 .hiểu một dòng các l nh máy tính trừu t ợng
6 Coalescing và Compaction là gì?
7 L nh đ ợc s d ng để dịch file mã ngu n java
8 Lớp ph i là lớp cha c a các applet, applet là ch ng có thể nhúng vào trang Web hay
Trang 22CH NG 2:
Văn ph m Java chỉ định cách vi t nh sau:
- L i chú thích: Đ ợc thêm vào b i ng i l p trình với m c đích gi i thích
- Các câu l nh: Mỗi l nh là dòng đ n c a ch ng trình
- Khối l nh: Đặt các câu l nh nhóm l i cùng với nhau nh một khối
- C u trúc file: Các bộ ph n c u thành c a một file Java ngu n và l nh là đ ợc xác định rõ
- Các từ khóa: Các từ đ ợc định nghĩa tr ớc trong ngôn ng Java (không đ ợc s d ng nh danh hi u)
- Danh hi u: Các tên b n đặt ra cho các lớp, các bi n và các hàm Danh hi u không h n ch các kí tự theo chỉ định, nh ng ch a ph i đ ợc s d ng tùy ý, có vài qui ớc cho danh hi u
- Hằng (literals): Các giá trị hằng đ ợc vi t một cách khác nhau tùy thuộc vào kiểu d li u
Ví d : để phân bi t các kí tự "123" với số 123
- Biểu thức: Sự k t hợp nhi u mối quan h để t o ra một giá trị d li u
- Toán t : Các toán t đ ợc thực hi n nh phép cộng, trừ, nhân, các toán t toán học và không toán học khác
Mỗi khái ni m văn ph m trên sẽ đ ợc mô t trong các ph n sau:
Các l i chú thích có thể đ ợc thêm vào trong mã ngu n Java bằng hai cách giống nh trong C++ Cách thứ nh t bắt đ u l i chú thích với d u /* và k t thúc */ cho phép đặt nhi u dòng chú thích trong cặp d u trên
Trang 23Trong ví d này chú thích đ u tiên k t thúc tr ớc bằng d u */ dòng hai không bắt đ u m
d u chú thích K t qu c a câu này là lỗi trong quá trình biên dịch
Nhi u dòng chú thích có ý nghĩa đặc bi t cho ti n ích javadoc khi kí hi u đ u tiên bên trong
/* */ Đo n code bị giới h n là ph n ghi chú
// Ghi chú trên 1 dòng, trình biên dịch bỏ qua từ // đ n cuối dòng
/** */ Ghi chú dành cho javadoc, trình biên dịch bỏ qua
Kho ng trống giới h n gi a các l nh có thể bao g m b t kì số kí tự trống nào Các kí tự trống
là các kho ng trống, các d u tab, các d u v đ u dòng, xuống dòng
Chú ý: Trên h thống UNIX và Masintosh, mỗi dòng văn b n th ng k t thúc b i ký tự
xuống dòng (mã ASCII 13) Trong Windows, các dòng văn b n th ng không giới h n b i các
Trang 24ký tự xuống dòng, v đ u dòng (CR/CF hay mã ASCII là 13/10) Java biên dịch nh n ra các ký tự trên cũng nh các ký tự trống và không quan tâm đ n nh ng dòng văn b n đã k t thúc
II.2 Kh ối l nh
Các câu l nh đ n có thể nhóm l i thành các khối b i v y một khối l nh có thể d dàng kiểm soát sự thực hi n c a nhi u câu l nh khác Bộ l nh c a Java không giới h n trong cặp ngoặc nhọn {và } B n đã nhìn th y các khối l nh đ ợc dùng để t o thành nhóm các l nh thuộc một lớp:
//change the flight's heading by angle degree
void turnFlight (int angle){
heading = (heading + angle) % 360 ; // make sure angle is in the range 0-359 degrees
if (heading<0)
heading = heading + 360 ;
} //end turnFlight
} //end Flight
Nh b n th y các khối l nh có thể đặt trong các khối khác
T ng số các kho ng trống đặt gi a các d u ngoặc nhọn và các câu l nh là tùy ý nh ng cũng
có qui ớc là d u ngoặc nhọn bên trái ph i đặt sau một dòng (hay bắt đ u một dòng ti p theo),
d u ngoặc nhọn bên ph i là thuộc chính dòng đó và chỗ th t đ u dòng th ng dùng để làm n i
b t nhóm l nh
Mọi ngôn ng đ u đ ợc xây dựng từ một bộ ký tự nào đó Các ký tự đ ợc nhóm l i theo nhi u cách để t o nên các từ Đ n l ợt mình các từ l i đ ợc liên k t theo một quy tắc nào đó để
t o nên các câu l nh, từ khóa, tên
Ngôn ng JAVA đ ợc xây dựng trên bộ ký tự sau :
26 ch cái hoa : A Z và 26 ch cái th ng a z
10 ch số : 0 9
Các ký hi u toán học : +, -, *, /, %, =, ()
D u nối : _
Các ký hi u đặc bi t khác : ;, :, {}, [ ], ?, \, &, |, #, $
Trang 25Ngoài ra ngôn ng JAVA còn dùng bộ ký tự Unicode Đó là một bộ ký tự, nó không chỉ bao
g m nh ng ký tự đã có trong bộ ký tự ASCCI mà còn có vài tri u ký tự khác t ng ứng với h u
h t các b ng ch cái trên th giới
IV.1 Tên
Cũng t ng tự nh các ngôn ng l p trình khác nh C, C++, ngôn ng l p trình JAVA cũng
quy định cách đặt tên nh sau :
Tên có thể đ ợc bắt đ u bằng một ký tự, hoặc d u $, _ nh ng không thể bắt đ u bằng một
số và không có d u cách trong tên Ngoài ra nó còn có thể dùng bộ ký tự Unicode để đặt tên JAVA phân bi t ch hoa và ch th ng
IV.2 T ừ khóa
Từ khóa là nh ng từ có ý nghĩa xác định Th ng đ ợc s d ng để khai báo các kiểu d li u,
để vi t các toán t và các câu l nh
Sau đây li t kê một số từ khóa c a JAVA
default final generic byte
byvalue class double float
long rest outer swicth
this var int null
Chú ý:
- Không đ ợc dùng từ khóa để đặt tên cho hằng, bi n, m ng, hàm
- Từ khóa ph i vi t bằng ch th ng
Mỗi bi n ph i có một kiểu d li u Kiểu d li u c a bi n xác định các giá trị mà bi n có thể
chứa đựng và các toán t thao tác trên chúng
Trang 26÷9223372036854775807 +/-3.40282347E+38 ÷+/-1.40239846E-
45 +/-1.79769313486231570E ÷ +/-4.9065645841246544E-324
V.2 Ki ểu d li u d n xu t (Reference)
Array, class và interface đ u là kiểu d li u d n xu t Giá trị c a bi n kiểu d n xu t trái
ng ợc với kiểu d li u gốc, nó tham chi u tới (địa chỉ) một giá trị hay là t p hợp các giá trị mà
bi n khai báo
Một kiểu Reference đ ợc gọi là một con trỏ hay là một địa chỉ bộ nhớ c a ngôn ng l p trình khác Ngôn ng l p trình Java không hỗ trợ rõ ràng cách s d ng địa chỉ giống nh các ngôn ng khác Thay vào đó b n có thể s d ng tên bi n
V.3 Giá tr ị mặc định
Một lỗi hay gặp ph i khi l p trình là s d ng nh ng bi n ch a đ ợc kh i t o Đi u này
th ng gây ra lỗi khó đoán đ ợc b i vì nó có thể nh n b t kỳ giá trị nào trong vùng nhớ khi
ch ng trình bắt đ u ch y Java đã tránh đ ợc lỗi trên bằng cách kh i t o giá trị mặc định cho các bi n
Trang 27H u h t các ngôn ng đ u có một cách để khai báo bi n là hằng số (đó là giá trị không đ i) Java không là ngoài l Từ khóa final chỉ d n một bi n c c bộ hoặc bi n thành ph n không thể thay đ i M c đích chính s d ng c a bi n final nh là biểu thị một hằng số B n có thể thích
hằng số là tên, và tên đó đ ợc định nghĩa trong một chỉ định đ n trong mã ngu n c a b n N u sau này b n ph i thay đ i số trong mã ngu n c a b n, b n chỉ c n thay đ i t i bi n final đã định nghĩa
(Các hàm thành và các lớp có thể khai báo nh là final Một hàm thành ph n final không thể
ch ng lên nhau, và một lớp final không thể là lớp con)
Cú pháp:
final Type ConstName = Value;
Ví du:
final int MAX = 10;
L u ý: C hai cách khai báo hằng trong C và C++ là #define và const đ u không dùng trong JAVA
Một ch ng trình tham chi u tới giá trị c a bi n bằng tên bi n Tên bi n ph i là duy nh t trong cùng một ph m vi, có thể có nhi u bi n cùng tên nh ng khai báo các ph m vi khác nhau
Trang 28Mọi bi n c n đ ợc khia báo tr ớc khi s d ng Vi c khai báo đ ợc thực hi n theo m u sau
Là nh ng vị trí trong bộ nhớ mà giá trị có thể đ ợc l u tr đó chúng có tên và kiểu giá trị
Th ng dùng để định nghĩa thuộc tính, tr ng thái cho một đối t ợng nó có thể là bi n toàn
c c c a một đối t ợng Khai báo nh sau :
Type Variable;
VII.1.2 Bi n l p
T ng tự nh bi n đối t ợng, nh ng giá trị c a nó nằm trong chính lớp đó Nó nh h ng toàn c c đ n một lớp và t t c các đối t ợng trong lớp R t thích hợp để trao đ i thông tin gi a các đối t ợng khác nhau trong cùng một lớp hay theo dõi tr ng thái toàn c c c a một đối t ợng
Để khai báo một bi n là bi n lớp ta dùng từ khóa static nh sau :
static Type Variable;
VII.1.3 Bi n c c b ộ
Đ ợc khai báo và s d ng trong thân ph ng thức Bi n c c bộ bắt buộc ph i gán giá trị
tr ớc khi s d ng Không gi ng nh các ngôn ng l p trình khác JAVA không có bi n toàn c c
Bi n đối t ợng hay bi n lớp đ ợc dùng để truy n thông tin toàn c c gi a hai hay nhi u đối
t ợng
Trang 29VII.1.4 Ph m vi c ủa bi n
Giống nh ngôn ng COBOL t t c các bi n đ u là bi n toàn c c Bi n toàn c c là một bi n
có thể truy c p b t cứ từ đâu trong một ch ng trình và do v y mà bi n toàn c c ph i là bi n có tên độc nh t Do t t c các bi n trong COBOL là toàn c c nên mỗi bi n trong ch ng trình COBOL là duy nh t Từ đó, trong thực tiển vi c s d ng một bi n đ n cho nhi u m c đích khác nhau trong từng ph n c a ch ng trình Vi c kiểm soát bi n toàn c c là một công vi c khó khăn
và làm nhi u ch ng trình tr nên khó chịu Đặc bi t, một thay đ i trong một ph n nhỏ c a mã có
thể nh h ng b t lợi đ n h u h t các ph n khác c a ch ng trình
Gi i pháp cho v n đ rắc rối c a bi n toàn c c là s d ng bi n c c bộ, bi n này có th i gian
t n t i giới h n và quan h chỉ trong ph n nhỏ c a mã B n có thể dùng hai bi n c c bộ có cùng tên định danh trong các ph n khác nhau c a ch ng trình
Các bi n đ ợc định nghĩa với một hàm thành ph n là c c bộ liên quan đ n hàm thành ph n, vì
v y b n có thể dùng cùng tên bi n trong vài hàm thành ph n, nh ví d sau:
int Second() { int j; // local variable // i và j đều có thể truy cập từ đây return 2;
}
Bi n j định nghĩa trong hàm First() đ ợc t o ra khi hàm này đ ợc gọi và m t đi khi hàm này thoát Đi u này cũng đúng cho bi n c c bộ j trong hàm Second() Bi n j xu t hi n đ ng th i trong c hai hàm nh ng chúng không gây xung đột b i vì hai bi n c c bộ hoàn toàn độc l p với nhau Có một cách khác để nghĩ là: t ng t ợng trình biên dịch sẽ đ i tên các bi n c c bộ đó (j)
để tên c a mỗi bi n là duy nh t (nh ví d : j1 và j2)
Trong JAVA có các kiểu d li u c b n, kiểu đối t ợng Do đó ta có 3 d ng chuyển đ i kiểu
d li u
- Chuyển đ i cho các kiểu d li u c b n
Trang 30Cú pháp : (NewType ) Value;
- Chuyển đ i kiểu cho các đối t ợng: Đối t ợng c a một lớp có thể đ ợc chuyển đ i kiểu để
tr thành một đối t ợng c a một lớp khác Với đi u ki n các đối t ợng muốn đ i kiểu ph i thuộc các lớp thừa k nhau
Cú pháp : (NewClass) Object ;
- Chuyển đ i kiểu d li u c b n sang đối t ợng và ng ợc l i: Thông th ng ta không thể chuyển đ i đ ợc nh ng trong gói java.lang có sẵn nh ng lớp đặc bi t t ng ứng với từng kiểu nguyên th y Nh lớp Integer cho kiểu int, lớp Float cho kiểu float do đó ta có thể t o ra các đối t ợng t ng đ ng bằng cách dùng toán t new
ví d : int Intobj = new Integer (32);
Khi muốn l y l i giá trị ban đ u ta dừng ph ng thức có sẵn trong lớp t ng đ ng Nh intValue() cho kiểu int
Toán t là nh ng ký hi u đặc bi t mà thông th ng đ ợc dừng trong biểu thức Nh +,-,/,*
% op1 % op2 Chia l y d
Ví d :
public class ArithmeticDemo {
public static void main(String[] args) {
//a few numbers
int i = 37;
int j = 42;
double x = 27.475;
Trang 31//computing the remainder resulting from dividing numbers
System.out.println("Computing the remainder ");
i + j = 79
x + y = 34.695
Trang 32Subtracting i / j = 0
i - j = -5 x / y = 3.8054
x - y = 20.255 Computing the remainder
i % j = 37 Multiplying x % y = 5.815
i * j = 1554 Mixing types
x * y = 198.37 j + y = 49.22
IX.2 Các phép toán t ăng gi m
Dùng các toán t ++ và để tăng gi m giá trị c a bi n
IX.3 Toán t quan h và đi u ki n
IX.5 Các toán t làm vi c v i bit
Giống C và C++, nh ng toán t làm vi c với bit đ ợc dùng để thể hi n từng bit riêng bi t đối với số nguyên Ta có b ng nh ng toán t làm vi c với bit nh sau :
Trang 33Variable Operator = Value
Đi u này t ng đ ng với:
Variable = Variable Operator Value;
Ví d : a + = 4; t ng đ ng với a = a + 4;
&= op1 &= op2 op1 = op1 & op2
<<= op1 <<= op2 op1 = op1 << op2
>>= op1 >>= op2 op1 = op1 >> op2
>>>= op1 >>>= op2 op1 = op1 >>> op2
Trang 34ph n t có kiểu là type
[] type[ op1 ] T o một m ng với op1 ph n t Ph i đ ợc s
d ng với toán t new
[] op1[ op2 ] Truy c p đ n một ph n t c a m ng op1 với
chỉ số op2
op1.op2 Một sự tham kh o tới hàm thành ph n op2 c a
op1
() op1(params)
Định nghĩa hoặc gọi một ph ng thức có tên là
op1 với các tham số là params Danh sách các
tham số có thể là danh sách rỗng Các ph n t trong danh sách cách nhau bằng d u phẩy
(type) (type) op1
Chuyển đ i kiểu d li u c a op1 với kiểu mới
là type Một ngo i l sẽ x y ra n u kiểu c a op1 không t ng thích với type
new new op1 Kh i t o một đối t ợng hay một mãng op1 là
một constructor hay một m ng
instanceof op1 instanceof op2 Tr v true n u op1 là một an instance c a op2
IX.8 Phép toán trên ki ểu chuối ( String)
Một biểu thức đặc bi t trong Java là dùng toán t "+" để t o hay ghép nối các chuỗi
Ví d :
System.out.println(name+ "is a" + color );
N u có ph n t con nào không ph i là kiểu String thì nó tự động chuyển sang kiểu String
Mô t ph n này các b n tham kh o ph n đối t ợng và các kiểu d li u đối t ợng
IX.9 Độ u tiên các toán t
( ), []
++, , !, -, instanceof new (type) Bi ểu_thức
*, /, % +, -
<<, >>, >>>
< >
Trang 35Biểu thức là sự k t nối các bi n, các từ khóa hay các kí hi u để tr v một giá trị c a một
kiểu nào đó Giá trị này có thể là số, chuỗi, hoặc kiểu d li u khác B n có thể hiểu rằng một biểu thức là một cái gì đó d ợc vi t bên ph i c a một l nh gán
Trong ví d này giá trị 25 đ ợc gán cho bi n a và 25 cũng đ ợc gán cho bi n b
Có các lo i biểu thức nh biểu thức logic, biểu thức số học, biểu thức gán
Ví d : a <= 10;
- Biểu thức gán: Variable1= Variable2= =Value;
- Biểu thức đi u ki n :
Expression ? Expression_when_true : Expression_when_false;
Trang 36public class IfElseDemo {
public static void main(String[] args) {
Expression ph i là biểu thức logic tr v giá trị kiểu boolean ( true hoặc false) T ng tự
nh C và C++ các câu l nh đi u ki n có thể l ng nhau tùy ý
Trang 37false
.
public class SwitchDemo {
public static void main(String[] args) {
Trang 38Statement(s) initialization
Trang 39Ví d :
public class ForDemo {
public static void main(String[] args) {
public class WhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer();
int i = 0;
flase
Trang 40public class DoWhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer();