1. Trang chủ
  2. » Giáo Dục - Đào Tạo

bài giảng lập trình mạng

119 213 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 119
Dung lượng 0,91 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

L 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 2

M 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 3

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

PH 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 5

Ph 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 6

Tr ớ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 8

II 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 11

Ph 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 12

Nh 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 13

T 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 15

Ph 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 16

trì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 17

Cũ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 18

Khi 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 19

C 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 21

Ki ể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 22

CH 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 23

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

ký 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 25

Ngoà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 27

H 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 28

Mọ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 29

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

Cú 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 32

Subtracting 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 33

Variable 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 34

ph 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 35

Biể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 36

public 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 37

false

.

public class SwitchDemo {

public static void main(String[] args) {

Trang 38

Statement(s) initialization

Trang 39

Ví 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 40

public class DoWhileDemo {

public static void main(String[] args) {

String copyFromMe = "Copy this string until you " + "encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer();

Ngày đăng: 10/04/2016, 18:59

HÌNH ẢNH LIÊN QUAN

Hình 4.1 Khái ni m c ủ a String Pool. - bài giảng lập trình mạng
Hình 4.1 Khái ni m c ủ a String Pool (Trang 76)
Hình 4.2 Ví d  v  l p System   IV.1.8.L p Class - bài giảng lập trình mạng
Hình 4.2 Ví d v l p System IV.1.8.L p Class (Trang 87)
Hình 4.4 K t qu  c ủ a HashTableImplementer  IV.2.2.L p random - bài giảng lập trình mạng
Hình 4.4 K t qu c ủ a HashTableImplementer IV.2.2.L p random (Trang 93)
Hình 4.5 K t qu  c ủ a ch ng trình minh ho  l p Vector. - bài giảng lập trình mạng
Hình 4.5 K t qu c ủ a ch ng trình minh ho l p Vector (Trang 97)

TỪ KHÓA LIÊN QUAN

w