Giáo trình Lập trình mạng

1
Trong chương này  
•
•
•
•
•
•
•
Các khái niệm căn bản về mạng  
Lịch sử phát triển của Java  
Cấu trúc máy ảo Java  
Các đặc trưng của ngôn ngữ lập trình Java  
Các ấn bản Java  
Công cụ Java  
Các kiểui ứng dụng trong Java  
CÁC KHÁI NIỆM CĂN BẢN VỀ MẠNG VÀ JAVA  
I. CÁC KHÁI NIỆM CĂN BẢN VỀ MẠNG  
Mạng máy tính Là tập hợp các máy tính được nối với nhau bởi các đường truyền vật lý và  
theo một kiến trúc nào đó.  
Kiến trúc mạng Đề cập tới hai khía cạnh là Hình trạng mạng và Giao thức mạng.  
Hình trạng mạng: Là cách nối các máy tính với nhau. Người ta phân loại mạng theo hình  
trạng mạng như mạng sao, mạng bus, mạng ring…  
Giao thức mạng: Là tập hợp các qui tắc qui ước truyền thông của mạng mà tất cả các thực  
thể tham gia truyền thông phải tuân theo.  
Giao thức TCP/IP  
IP (Internet Protocol)-Giao thức cung cấp khả năng kết nối các mạng con thành liên mạng.  
TCP Là giao thức hướng liên kết (connection oriented) bắt buộc phải có giai đoạn thiết lập  
và giải phóng liên kết.  
Host Máy tính được kết nối với Internet được gọi là host.  
Địa chỉ IP: Mỗi host được định danh duy nhất trên mạng và định danh này được gọi là địa chỉ  
Internet hay địa chỉ IP.  
Ví dụ Máy tính có hostname là www.microsoft.com có địa chỉ IP là 207.46.230.219  
Máy chủ DNS  
Tiền thân của mạng Internet là mạng Arpanet của Bộ quốc phòng Mỹ. Thời kỳ đó số máy tính  
ở mức đủ để liệt kê chúng trong một tệp tin văn bản và lưu trên từng máy kết nối vào mạng.  
Thông tin trong tập tin này bao gồm địa chỉ IP và hostname. Tuy nhiên do quy mô của mạng  
2
PDF created with pdfFactory Pro trial version www.pdffactory.com  
ngày càng mở rộng người ta cần có các máy tính chuyên dụng để lưu trữ và phân giải tên  
miền. Các máy tính có chức năng như vậy được gọi là Máy chủ DNS.  
Dịch vụ tên miền (Domain Name Service) Là tập hợp nhiều máy tính được liên kết với nhau  
và phân bố rộng trên mạng Internet. Các máy tính này được gọi là name server. Chúng cung  
cấp cho người dùng tên, địa chỉ IP của bất kỳ máy tính nào nối vào mạng Internet hoặc tìm ra  
những name server có khả năng cung cấp thông tin này.  
Cơ chế truy tìm địa chỉ IP thông qua dịch vụ DNS  
Giả sử trình duyệt cần tìm tập tin hay trang Web của một máy chủ nào đó, khi đó cơ chế truy  
tìm địa chỉ sẽ diễn ra như sau:  
1. Trình duyệt yêu cầu hệ điều hành trên client chuyển hostname thành địa chỉ IP.  
2. Client truy tìm xem hostname có được ánh xạ trong tập tin localhost, hosts hay  
không?  
-Nếu có client chuyển đổi hostname thành địa chỉ IP và gửi về cho trình duyệt.  
-Nếu không client sẽ tìm cách liên lạc với máy chủ DNS.  
3. Nếu tìm thấy địa chỉ IP của hostname máy chủ DNS sẽ gửi địa chỉ IP cho client.  
4. Client gửi địa chỉ IP cho trình duyệt.  
5. Trình duyệt sử dụng địa chỉ IP để liên lạc với Server.  
6. Quá trình kết nối thành công. Máy chủ gửi thông tin cho client.  
Cổng (Port)  
Khi kết nối vào máy chủ ta có thể yêu cầu nhiều dịch vụ khác nhau. Mỗi dịch vụ đều có cách  
gửi và nhận dữ liệu theo qui ước riêng. TCP/UDP chỉ chịu trách nhiệm gửi dữ liệu từ máy  
tính này tới máy tính khác. Việc gửi dữ liệu cho dịch vụ nào thì thông qua cổng (port).  
Mỗi máy tính với một địa chỉ IP có 65535 cổng. Mỗi cổng được dành cho một dịch vụ đặc  
biệt. Chẳng hạn dịch vụ Web được chạy trên cổng 80.  
Socket  
Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu  
dịch vụ và một chương trình cung cấp dịch vụ trên mạng LAN, WAN, hay Internet và đôi khi  
là giữa các tiến trình trong cùng một máy tính. Thông tin của một Socket bao gồm địa chỉ IP  
và số hiệu cổng.  
URL (Uniform Resource Locator) là một con trỏ chỉ tới một tài nguyên cụ thể trên Internet ở vị  
trí xác định.  
Cú pháp của URL:  
protocol://hostname [:80]/path/filename#section  
3
PDF created with pdfFactory Pro trial version www.pdffactory.com  
II. LỊCH SỬ PHÁT TRIỂN CỦA JAVA  
Lịch sử phát triển của Java bắt đầu năm 1991 khi SUN tiến hành các dự án lập trình cho vi  
xử lý dùng trong các thiết bị điện tử khác nhau. C++ không đáp ứng được các yêu cầu này vì  
C++ chỉ tính khả chuyển về mã nguồn nhưng sau khi biên dịch lại hoàn toàn phụ thuộc vào  
từng bộ vi xử lý cụ thể. Vi xử lý dùng trong các thiết bị điện tử rất đa dạng và có vòng đời khá  
ngắn ngủi. Việc thay đổi bộ xử lý dẫn đến cần phải thay đổi trình biên dịch C++, điều này gây  
lên tốn kém. SUN đã thiết kế một ngôn ngữ lập trình mới có tính khả chuyển cao hơn đó  
chính là Java. Java là tên địa phương nơi xuất xứ của một loại cà phê ngon nổi tiếng.  
Java được chính thức công bố năm 1995 và ngay lập tức đã tạo lên một trào lưu mới  
trên toàn thế giới và từ đó đến nay vẫn tạo được sức cuốn hút mạnh mẽ. Bởi vì Java không  
chỉ đơn thuần là một ngôn ngữ lập trình mà nó là giải pháp cho nhiều vấn đề.  
III. CẤU TRÚC CỦA MÁY ẢO JAVA  
Chương trình ứng dụng hoạt động bằng cách sử dụng các đối tượng của Java (Java Object).  
Máy ảo Java tạo thành một lớp ngăn cách giữa trình ứng dụng và hệ điều hành.  
Cấu trúc của máy ảo Java (Java Virtual Machine)  
Máy ảo Java bao gồm các thành phần sau : Trình nạp lớp (Class Loader), Trình kiểm tra lớp  
(Class Verifier), và Trình thực thi (Execution Unit).  
Trình nạp lớp: đọc bytecode từ đĩa hoặc từ kết nối mạng.  
Trình kiểm tra lớp: (Class Verifier) Kiểm tra các lớp sẽ không sinh ra các lỗi ảnh hưởng tới hệ  
thống khi thực thi.  
Trình thực thi sẽ thực hiện các lệnh được quy định trong từng bytecode.  
IV. CÁC ĐẶC TRƯNG CỦA NGÔN NGỮ LẬP TRÌNH JAVA  
Java là một môi trường độc lập (Independent Platform)  
Do cấu trúc của Java nên ta có thể soạn thảo chương trình trên bất kỳ hệ thống nào. Sau khi  
đã được biên dịch thành tệp tin lớp (*.class) ứng dụng có thể thực thi ở bất kỳ hệ thống nào.  
Đó là đặc tính mà các ngôn ngữ khác không có.  
Java là một ngôn ngữ lập trình hướng đối tượng  
Java là một ngôn ngữ lập trình hướng đối tượng thuần túy, mọi thứ trong Java đều là đối  
tượng.  
Java là một ngôn ngữ khả chuyển (Portibility)  
Java có tính khả chuyển đối với cả mã nguồn và bản thân mã biên dịch (bytecode)  
Java là môi trường xử lý phân tán  
Bytecode không phụ thuộc vào hệ thống vì vậy bytecode có thể nằm phân tán trên mạng.  
Việc liên kết với thư viện chỉ được thực hiện vào lúc chạy chương trình do vậy mã byte  
4
PDF created with pdfFactory Pro trial version www.pdffactory.com  
thường gọn nhẹ. Chương trình Java được nạp dần một cách linh hoạt nên không gây quá tải  
cho mạng. Ngoài ra, Java còn cho phép xử lý đa tuyến đoạn. Cơ chế truyền thông điệp thuận  
tiện cho việc tổ chức mạng.  
Java là môi trường an toàn  
Khi phát triển các ứng dụng phân tán thì một trong nhừng vấn đề được quan tâm hàng đầu là  
an toàn hệ thống. Java được thiết kế để đảm bảo an toàn cho người dùng Java trên mạng.  
Java có bốn tầng bảo an:  
Tầng 1: Mức ngôn ngữ và trình biên dịch. Java không có kiểu con trỏ. Trình biên dịch kiểm  
tra kiểu rất chặt chẽ. Mọi chuyển đổi kiểu đều phải được thực hiện một cách tường minh.  
Trình biên dịch Java từ chối sinh ra mã byte nếu mã nguồn không tuân thủ nghiêm ngặt các  
quy tắc an toàn.  
Tầng 2: Trình nạp lớp (Class Loader) Có khả năng phân biệt những lớp đến từ mạng và  
những lớp nạp từ hệ thống. Nhờ khả năng phân biệt như vậy lớp được nạp qua mạng được  
khống chế chặt chẽ, không được phép thực hiện các thao tác mức thấp.  
Tầng 3: Trình kiểm tra mã byte. Trình này sẽ kiểm tra mã byte vào lúc chạy chương trình bảo  
đảm chương trình Java đã được biên dịch một cách đúng đắn. Khi thực hiện sẽ không gây lỗi  
ảnh hưởng tới hệ thống cũng như không đụng chạm tới dữ liệu riêng tư trên máy khách.  
Tầng 4: Trình bảo an. Kiểm tra mã byte vào lúc chạy nhằm bảo đảm mã đang xét không vi  
phạm qui tắc an toàn đã được thiết lập. Các thao tác của ứng dụng được liệt vào khả năng  
gây nguy hiểm như đọc, xóa tệp đều phải được Trình bảo an cho phép.  
Java cung cấp cho người lập trình một thư viện khủng lồ  
Java cung cấp cho người lập trình một thư viện khổng lồ các hàm chuẩn, gọi là core API.  
Các hàm chuẩn này được đặt trong các gói.  
Java có cơ chế quản lý bộ nhớ tự động.  
Quản lý bộ nhớ là một trong những vấn đề phức tạp đối với C và C++. Khi 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 phải giải phóng  
các vùng nhớ này. Chỉ cần một lỗi nhỏ có thể làm cạn kiệt tài nguyên dẫn đến treo hệ thống.  
Java đã loại bỏ gánh nặng này cho người lập trình. Các vùng nhớ được tự động giải phóng  
nếu như nó không tham chiếu đến bất kỳ đối tượng nào đang hoạt động  
Chi phí phát triển ứng dụng bằng Java thấp  
Khi phát triển ứng dụng dựa trên công nghệ Java thì sẽ có rất nhiều công cụ phát triển và  
dịch vụ được cung cấp miễn phí.  
5
PDF created with pdfFactory Pro trial version www.pdffactory.com  
V. CÁC ẤN BẢN JAVA  
J2SE ( Java 2 Platform, Second Edition)  
Đây là ấn bản chuẩn, bao gồm một môi trường thời gian chạy và một tập hợp các API để xây  
dựng một loạt các ứng dụng khác nhau từ applet, cho tới các ứng dụng độc lập chạy trên các  
nền khác nhau, ứng dụng cho client cho các ứng dụng doanh nghiệp khác nhau.  
J2EE (Java 2 Platform, Enterprise Edition (J2EE)  
J2EE là nền tảng để xây dựng các ứng dụng phía server.  
J2ME (Java 2 Platform, Micro Edition )  
Ấn bản này cho phép xây dựng các ứng dụng Java cho các “vi thiết bị” (các thiết bị có màn  
hình hiển thị và hỗ trợ bộ nhớ tối thiểu, như điện thoại di độngm và các thiết bị trợ giúp cá  
nhân).  
VI. CÔNG CỤ JAVA  
Sun cung cấp một số tiện ích cho phép biên dịch bắt lỗi và tạo tài liệu cho một ứng dụng  
Java. JDK bao gồm:  
Javac: Bộ biên dịch để chuyển mã nguồn thành bytecode.  
Java: Bộ thông dịch để thực thi các ứng dụng Java trực tiếp từ tập tin lớp.  
Apppletviewer: Thực thi Java Applet từ tài liệu html.  
VII. CÁC KIỂU ỨNG DỤNG TRONG JAVA  
Có hai kiểu ứng dụng  
Ứng dụng độc lập (Standalone Applicaiton) Cho phép lập trình như các ngôn ngữ lập trình  
khác như Pascal, C.  
Ứng dụng ký sinh (Applet) Cho phép tạo ra chương trình liên kết với các văn bản Web và  
được khởi động bởi trình duyệt hỗ trợ Java.  
6
PDF created with pdfFactory Pro trial version www.pdffactory.com  
2
Trong chương này  
•
•
•
•
•
•
Định danh, kiểu dữ liệu và khai báo biến  
Cấu trúc lệnh trong Java  
Quản lý ngoại lệ  
Các lớp và các đối tượng trong Java  
Các luồng vào ra  
Lập trình tuyến đoạn trong Java  
NGÔN NGỮ LẬP TRÌNH JAVA  
I. ĐỊNH DANH, KIỂU DỮ LIỆU VÀ KHAI BÁO BIẾN  
Định danh (Identifier)  
Tên gọi của các thành phần trong chương trình được gọi là định danh  
Định danh thường được sử dụng để xác định biến, kiểu, phương thức, lớp  
Qui tắc cho định danh:  
§
Định danh là một dãy các ký tự gồm các chữ cái, chữ số và các ký tự khác: ‘_’,  
$,...  
§
§
§
Định danh không bắt đầu bằng chữ số.  
Độ dài của định danh không giới hạn.  
Java phân biệt chữ hoa và chữ thường.  
Qui ước đặt tên  
§
Định danh cho các lớp: chữ cái đầu của mỗi từ trong định danh đều viết hoa  
Ví dụ: MyClass, HocSinh, SocketServer, URLConnection,...  
§
Định danh cho các biến, phương thức, đối tượng: chữ cái đầu của mỗi từ trong  
định danh đều viết hoa trừ từ đầu tiên.  
Ví dụ: hoTen (họ tên), namSinh (năm sinh), tinhTong (tính tổng).  
7
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Chú thích  
Chú thích trong các chương trình để giải thích công việc hoặc cách thực hiện để người đọc  
dễ hiểu và tiện theo dõi.  
§
Chú thích trên một dòng  
//Đây là chú thích dòng  
Chú thích trên nhiều dòng  
§
/* Đây là chú thích khối nhiều dòng */  
Các kiểu dữ liệu nguyên thủy (primitive datatype)  
Kiểu dữ liệu cơ bản định nghĩa sẵn được gọi là kiểu nguyên thủy  
Kiểu nguyên thủy bao gồm các kiểu:  
§
§
§
Kiểu nguyên: char (ký tự), byte, short, int, long.  
Kiểu số thực: float, double.  
Kiểu logic: boolean.  
Kiểu dữ liệu  
char  
Độ rộng  
16  
byte  
short  
int  
8
16  
32  
long  
float  
doube  
64  
32  
64  
Chú ý:  
§
§
§
Các giá trị kiểu nguyên thủy không phải là đối tượng.  
Mỗi kiểu dữ liệu có miền xác định và các phép toán xác định trên nó.  
Mỗi kiểu dữ liệu nguyên thủy có một lớp gói (wrapper class) để sử dụng các kiểu  
nguyên thủy như là các đối tượng.  
8
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Kiểu dữ liệu  
char  
Lớp gói  
Char  
byte  
Byte  
short  
int  
Short  
Integer  
Long  
long  
float  
Float  
double  
Double  
Khai báo các biến  
a. Các loại biến trong Java  
•
Các biến thành phần: là các thành phần của lớp và được khởi tạo giá trị mỗi  
khi một đối tượng của lớp được tạo ra.  
Ví dụ:  
URL u ;  
HocSinh hs = new HocSinh(“Tuan Anh”);  
•
Các biến tham chiếu đối tượng (Object Reference) là biến được sử dụng để  
xử lý các đối tượng.  
•
•
Các biễn tĩnh (static variable) là biến của lớp đại diện cho cả lớp.  
Các biến cục bộ: là biến được khai báo trong các phương thức và trong các  
khối.  
b. Khai báo biến  
kieu_du_lieu bien;  
Ví dụ:  
int i;  
char b,c;  
float giaBan, dienTich;  
c. Khởi tạo giá trị cho các biến  
Các giá trị mặc định cho các biến thành phần  
Kiểu dữ liệu  
Giá trị mặc định  
false  
boolean  
9
PDF created with pdfFactory Pro trial version www.pdffactory.com  
char  
‘\u000’  
byte, short, int, long  
float, double  
0
+0.0F,+0.0D  
null  
tham chiếu đối tượng  
Qui tắc chuyển đổi kiểu trong Java  
(<kieu>)<bieu_thuc>  
Ví dụ  
float f = (float)100.15D;  
Mở rộng và thu hẹp kiểu  
byte  
short  
char  
int  
long  
float  
double  
Ví dụ 1:Mở rộng kiểu  
char c = ‘A’;  
int k =c;  
Ví dụ 2:Thu hẹp kiểu  
int k =10;  
char c=(char)k;  
II. CẤU TRÚC LỆNH TRONG JAVA  
Khối lệnh  
Khối lệnh trong Java tương tự như khối lệnh trong C/C++.  
§
Lệnh gán  
Ví dụ  
int a, b, c,d;  
d=b*b-4*a*c;  
Khối lệnh  
§
10  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Một khối lệnh nằm trong cặp ngoặc { }  
Biểu thức điều kiện  
§
§
Biểu thức điều kiện A?B:C trả về giá trị B nếu A có giá trị true, trả về giá trị C nếu A có giá  
trị false.  
Các lệnh điều khiển dòng thực hiện trong Java  
-
Các lệnh điều khiển rẽ nhánh chương trình  
Lệnh if đơn giản  
Cú pháp  
if<biểu_thức_đk> <câu_lệnh>  
Lệnh if – else  
Cú pháp  
if <biểu_thức_đk>  
<câu_lệnh_1>;  
else  
<câu_lệnh_2>;  
Ví dụ  
Hàm tính tổng các số dương của một mảng  
public double tongDuong(double[] v)  
{
if(v.length>1)  
{
for(int i=0; i<v.length; i++)  
if(v[i]>0) tong+=v[i];  
}
else  
{
tong = v[0];  
}
return tong;  
}
Lệnh switch  
11  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Lệnh này cho phép rẽ nhánh theo nhiều nhánh tuyển chọn dựa trên các giá trị nguyên của  
biểu thức.  
Cú pháp:  
switch(<biểu_thức_nguyên>)  
{
case nhan_1:<câu_lệnh_1>;  
case nhan_2:<câu_lệnh_2>;  
case nhan_3:<câu_lệnh_3>;  
...  
case nhan_n:<câu_lệnh_n>;  
default:<câu_lệnh>;  
}
Lệnh lặp  
Lệnh lặp cho phép một khối các câu lệnh thực hiện một số lần lặp lại.  
Lệnh while  
while (<Điều_kiện>) <Thân_chu_trình>  
Chú ý:  
Có thể <Thân_chu_trình> không được thực hiện lần nào nếu ngay từ đầu  
<Điều_kiện> có giá trị false.  
<Điều_kiện> là biểu thức boolean.  
Ví dụ: Lập chương trình in ra dãy số Fibonaci có các giá trị nhỏ hơn 50.  
class Fibonaci  
{
public static void main(String[] args)  
{
int lo=1;  
int hi =1;  
System.out.println(lo);  
while(hi<50)  
{
System.out.println(hi);  
12  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
hi=lo+hi;  
lo=hi-lo;  
}
}
}
Lệnh do – while  
Cú pháp  
do  
{
//Các lệnh  
}
while(<Điều_kiện>);  
Chú ý:  
Thân chu trình được thực hiện ít nhất một lần  
Lệnh for  
Cú pháp  
for(<Biểu_thức_bắt_đầu>; <Điều_kiện_lặp>; <Biểu_thức_gia_tăng>)  
<Thân_chu_trình>  
•
<Biểu_thức_bắt_đầu>: Khai báo và gán các giá trị khởi đầu cho các  
biến điều khiển quá trình lặp.  
•
<Điều_kiện_lặp>:Biếu thức logic.  
Sự tương đương giữa vòng for và while  
{
<Biểu_thức_bắt_đầu>;  
while(<Điều_kiện_lặp>)  
{
<lệnh>;  
<Biểu_thức_gia_tăng>;  
}
Lệnh lặp vô hạn:  
for(;;)<lệnh>  
13  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Ví dụ:  
Tính tổng 10 phần tử đầu tiên của một mảng số nguyên a.  
int tong=0;  
for(int i=0; i<10; i++) tong +=a[i];  
Các câu lệnh chuyển vị  
Câu lệnh break  
Được sử dụng trong các khối được gán nhãn, các chu trình lặp, và lệnh switch để điều khiển  
thực hiện chương trình ra khỏi khối trong cùng chứa nó.  
Ví dụ: Viết phương thức để kiểm tra xem một số có phải là số nguyên tố không?  
class SoNguyenTo  
{
public boolean soNguyenTo(int n)  
{ boolean nt;  
nt =true;  
for(int i=2;i<Math.sqrt(n);i++)  
if((n%i)==0){  
nt=false;  
break;  
}
return nt;  
}
public static void main(String[] args)  
{
SoNguyenTo nt = new SoNguyenTo();  
if(nt.soNguyenTo(Integer.parseInt(args[0])))  
System.out.println(args[0]+ " la so nguyen to");  
else  
System.out.println(args[0]+" khong la so nguyen to");  
}
14  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
}
Lệnh return  
Được sử dụng để kết thúc việc thực hiện của hàm hiện thời và chuyển điều khiển  
chương trình về lại sau lời gọi hàm  
Ví dụ  
protected double giaTriKhongAm(double v)  
{
if(v<0)  
return 0;  
else  
return v;  
}
III. QUẢN LÝ NGOẠI LỆ  
Trong quá trình xử lý, các ứng dụng có thể bất ngờ gặp các lỗi với các mức độ nghiêm trọng  
khác nhau. Khi một phương thức tác động trên một đối tượng, đối tượng có thể phát hiện các  
vấn đề trạng thái bên trong (chẳng hạn các giá trị không nhất quán, như lỗi chia 0), phát hiện  
các lỗi với các đối tượng hay dữ liệu mà nó thao tác (như file hay địa chỉ mạng) xác định nó  
vi phạm các qui tắc cơ bản (như đọc dữ liệu từ một luồng đã bị đóng),...Rất nhiều người lập  
trình không thể kiểm tra tất cả các trạng thái lỗi có thể xảy ra.  
Exception cung cấp một cách để kiểm tra các lỗi mà không chia cắt mã. Exception cũng đưa  
ra một cơ chế báo lỗi một cách trực tiếp chứ không sử dụng các cơ chế báo lỗi trực tiếp chứ  
không sử dụng các cờ hay các hiệu ứng phụ.  
Các ngoại lệ trong Java  
Trong Java có một lớp Exception, mọi lớp ngoại lệ là lớp con của lớp này. Lớp Exception là  
lớp con của lớp Throwable  
Throwable  
Exception  
15  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Lớp Throwable chứa một xâu được sử dụng để mô tả ngoại lệ. Ngoại lệ được phân thành hai  
loại: Ngoại lệ được kiểm tra (checked exception) và ngoại lệ không được kiểm tra  
(unchecked exception).  
Ngoại lệ được kiểm tra là ngoại lệ mà trình biên dịch sẽ kiểm tra phương thức của người lập  
trình chỉ đưa ra ngoại lệ khi chúng được thông báo để đưa ra.  
Ngoại lệ không được kiểm tra là lớp con của các lớp Error; RuntimeException.  
Java cung cấp một mô hình quản lý các ngoại lệ cho phép kiểm tra các lỗi ở các vị trí có liên  
quan.  
try và catch  
Cú pháp  
Khối try  
Bao gồm một tập hợp các lệnh có thể phát sinh ngoại lệ trong khi xử lý. Một phương thức, có  
thể đưa ra một ngoại lệ cũng được đặt try  
Các khối try lồng nhau  
try{  
stmt1;  
stmt2;  
try{  
stmt3;  
stmt4;  
}
catch(Exception e)  
{
}
}
catch(Exception e)  
{
}
Khi các khối try được lồng nhau, khối try bên trong được xử lý trước và một ngoại lệ được  
đưa ra trong khối đó được đón bắt trong các khối try catch con. Nếu khối catch bên trong  
không thỏa mãn thì các khối try bên ngoài được kiểm tra. Nếu một khối catch phù hợp được  
16  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
tìm thấy, thì ngoại lệ được quản lý trong khối đó ngược lại thì môi trường Java Runtime quản  
lý ngoại lệ.  
try  
{
doFileProcessing();  
displayResults();  
}
catch(Exception e)  
{
System. er.println(e.getMessage());  
}
Bất kỳ lỗi nào xảy ra trong quá trình xử lý doFileProcessing() hay displayResult() thì sẽ đựơc  
đón bắt bởi khối catch và được xử lý.  
Nếu có lỗi xảy ra trong quá trình xử lý doFileProcessing(), phương thức displayResult() sẽ  
không bao giờ được gọi, và khối catch sẽ được xử lý.  
Một khối try có thể có nhiều khối catch và xử lý các kiểu khác nhau  
try  
{
}
catch(Exception e)  
{
}
catch(Exception e)  
{
}
finally  
{
//Thực hiện công việc thu dọn  
}
Ví dụ:  
17  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
class TryCatch  
{
public static void main(String[] args)  
{int x,y;  
try{  
x=Integer.parseInt(args[0]);  
y=Integer.parseInt(args[1]);  
x=x/y;  
System.out.println("x="+x);  
}
catch(ArithmeticException e)  
{
System.out.println("Khong the chia cho 0");  
System.err.println(e);  
}
}
}
Kết quả 1  
C:\MyJava\Baitap>java TryCatch 18 9  
x=2  
Kết quả 2  
C:\MyJava\Baitap>java TryCatch 9 0  
Khong the chia cho 0  
java.lang.ArithmeticException: / by zero  
Khối finally  
Khối finally là khối mà chúng ta thấy các lệnh trả về các tài nguyên cho hệ thống và các  
lệnh khác để in ra bất kỳ thông báo nào.  
Các lệnh trong khối finanally có thể là:  
§
§
Đóng một file.  
Đóng một resultset (Lập trình cơ sở dữ liệu).  
18  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
§
Ngắt liên kết được thiết lập với cơ sở dữ liệu.  
…
Khối finally luôn được xử lý dù ngoại lệ có xảy ra hay không  
Mệnh đề throw  
Các ngoại lệ được đưa ra bằng cách sử dụng lệnh throw, nó nhận một đối tượng làm  
tham số, đối tượng thuộc lớp là lớp con của lớp Throwable  
Ví dụ:  
class ArraySizeException extends NegativeArraySizeException  
{
ArraySizeException()  
{
super("Nhap kich thuoc mang khong hop le");  
}
}
class ThrowDemo  
{
int size, a[];  
ThrowDemo(int s)  
{
size =s;  
try{  
checkSize();  
}
catch(ArraySizeException e)  
{
System.out.println(e);  
}
}
19  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
void checkSize() throws ArraySizeException  
{
if(size<0) throw new ArraySizeException();  
a= new int[3];  
for(int i=0;i<3;i++)a[i]=i+1;  
}
public static void main(String[] args)  
{
new ThrowDemo(Integer.parseInt(args[0]));  
}
}
Kết quả thực hiện chương trình  
C:\MyJava\Baitap>java ThrowDemo -1  
ArraySizeException: Nhap kich thuoc mang khong hop le  
Giải thích:  
Chúng ta đã tạo ra một lớp có tên ArraySizeException, lớp này là lớp con của lớp  
NegativeArraySizeException. Bằng cách tạo ra một đối tượng của lớp này, chúng ta đã in ra  
thông báo ngoại lệ. Phương thức checkSize() có thể đưa ra ngoại lệ ArraySizeException.  
try  
không có ngoại lệ  
có ngoại lệ  
finally  
catch  
finally  
Ví dụ:  
class FinallyDemo  
{
20  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
String name;  
int x,y;  
FinallyDemo(String s[])  
{
try{  
name = new String("try catch finally demo");  
x = Integer.parseInt(s[0]);  
y=Integer.parseInt(s[1]);  
System.out.println(name);  
System.out.println("Ket qua "+x/y);  
}
catch(ArithmeticException e)  
{
System.err.println("Khong the chia 0!");  
}
finally  
{
name = null;  
System.out.println("Xu ly khoi finally");  
}
}
public static void main(String[] args)  
{
new FinallyDemo(args);  
}
}
Kết quả 1  
C:\MyJava\Baitap>java FinallyDemo 16 0  
try catch finally demo  
Khong the chia 0!  
21  
PDF created with pdfFactory Pro trial version www.pdffactory.com  
Tải về để xem bản đầy đủ
pdf 99 trang Thùy Anh 21580 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình mạng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_lap_trinh_mang.pdf