Professional Documents
Culture Documents
2 ND02 Exception
2 ND02 Exception
• Ngoại lệ
• Các loại ngoại lệ
• Một số lớp ngoại lệ
• Quá trình xử lý ngoại lệ
• Ví dụ
• Bài tập 1
Ngoại lệ (Exception)
Chương trình thường gặp những trường hợp không
mong muốn
Người dùng nhập dữ liệu không hợp lệ
Đĩa cứng bị đầy
File cần mở không được tìm thấy
Mất kết nối mạng trong quá trình truyền dữ liệu
…
=> gây ra các lỗi trong chương trình
Java hạn chế các lỗi sinh ra từ việc "thao tác không chắc
chắn" bằng cơ chế Ngoại lệ (Exception).
Khi có ngoại lệ xảy ra, nếu không xử lý thì chương trình
sẽ kết thúc trả quyền cho Hệ điều hành
2
Các loại Ngoại Lệ
Các loại ngoại lệ:
Ngoại lệ unchecked: Là các ngoại lệ không bắt
buộc phải được kiểm tra khi biên dịch. Gồm
RuntimeException, Error và các lớp con. Được
phát hiện khi thực thi.
Ngoại lệ checked: Là các ngoại lệ bắt buộc phải
được kiểm tra khi biên dịch. Gồm các ngoại lệ
còn lại.
3
Xử Lý Ngoại Lệ
Lớp Throwable
Có một biến String để lưu thông tin chi tiết về
ngoại lệ đã xảy ra
Một số phương thức cơ bản
Throwable(String s); // Tạo một ngoại lệ có tên là s.
String getMessage(); // Lấy thông tin về ngoại lệ
void printStackTrace(); // In ra tất cả các thông tin liên
quan đến ngoại lệ
4
Một Số Lớp Ngoại Lệ
Cấu trúc gói:
java.lang.Throwable
5
Một số lớp ngoại lệ
Lớp Exception
Có nhiều ngoại lệ thuộc lớp con của Exception.
Người dùng có thể tạo ra các ngoại lệ kế thừa từ
Exception.
Lớp Error
Chỉ những lỗi nghiêm trọng và không dự đoán
trước được như ThreadDead, LinkageError,
VirtualMachineError...
Lỗi được coi như những trường hợp ngoại lệ
(exceptional conditions).
6
RuntimeException: Chỉ các ngoại lệ
có thể xảy ra khi thực thi.
NullPointException: con trỏ null
OutOfMemoryException: hết bộ nhớ
ArithmeticException: lỗi toán học, lỗi
chia không…
ClassCastException: lỗi ép kiểu
ArrayIndexOutOfBoundsException:
vượt quá chỉ số mảng
7
Quá trình xử lý ngoại lệ
Từ khóa dùng trong xử lý ngoại lệ: try, catch,
finally, throws và throw
Xử lý ngoại lệ bao gồm ba hoạt động:
Khai báo ngoại lệ
Ném một ngoại lệ
Bắt một ngoại lệ.
8
Khai báo ngoại lệ
Một phương thức được khai báo các loại ngoại lệ
kiểm tra thông qua các từ khóa throws.
Bên trong phương thức có thể ném ra các đối
tượng ngoại lệ thông qua từ khóa throw.
11
Bắt ngoại lệ(tt)
Phương thức methodC() gọi phương thức methodD()
Phương thức method D phải đặt trong try-catch hoặc try-catch-finally
public void methodC() { // no exception declared
......
try {
......
// uses methodD() which declares IOException & RemoteException
methodD();
......
} catch (IOException ex) {
// Exception handler for IOException
......
} catch (RemoteException ex} {
// Exception handler for RemoteException
......
} finally {
// optional // These codes always run, used for cleaning up
......
}
......
} 12
Mô hình try-catch-finally
try {
Các thao tác vào ra có thể sinh ra các ngoại lệ.
}catch (Kiểu_Ngoại_Lệ_01 biến) {
Ứng xử khi ngoại lệ Kiểu_Ngoại_Lệ_01 sinh ra
}catch (Kiểu_Ngoại_Lệ_02 biến) {
Ứng xử khi ngoại lệ Kiểu_Ngoại_Lệ_02 sinh ra
}finally {
Công việc luôn luôn được thực hiện
}
No exception finally
try block
14
Ví dụ: Check exception
15
Sử dụng throws-try-catch
17
Ví dụ: Unchecked exceptions
Output: thực thi chương trình
18
Ví dụ: throws-throw-try-catch-finally
Output:
19
Ví dụ: throws-throw-try-catch-finally
Output:
20
Danh Sách các ngoại lệ
21
Một số ngoại lệ phổ biến
ArithmeticException: tính toán số học sai, như chia cho 0
int a=50/0; //ArithmeticException
NullPointerException: truy cập đối tương null
String s=null;
System.out.println(s.length());//NullPointerExcep
tion
NumberFormatException: lỗi chuyển đổi chuỗi số không
hợp lệ sang số
String s="abc";
int i=Integer.parseInt(s);//NumberFormatException
ArrayIndexOutOfBoundsException: lỗi chỉ số mảng
int a[]=new int[5];
a[10]=50; //ArrayIndexOutOfBoundsException
22
Bài tập
Sinh viên làm lại bài tập buổi 1 có phần phát
sinh ngoại lệ. Giúp chương trình an toàn hơn.
Sự khác biệt giữa throws và throw ?
Sự khác biệt khi dùng throws và try-catch?
23
Tham khảo
Slide bài giảng tổng quan về java Bộ Môn
TTMMT- DHCT, Thái Minh Tuấn
Java core
http://www.ntu.edu.sg/home/ehchua/programm
ing/java/j5a_exceptionassert.html
24