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.
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 đủ
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:
giao_trinh_lap_trinh_mang.pdf

