You are on page 1of 24

Ngoại lệ (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.

public void methodD() throws IOException, RemoteException {


// bên trong phương thức throw IOException, RemoteException
}

 methodD() có thể xuất hiện 2 ngoại lệ: IOException,


RemoteException
 Một điều kiện bất thường bên trong methodD sẽ kích hoạt exception
9
Ném ngoại lệ
 Khi chương trình Java gặp tình huống bất thường, phương
thức chứa câu lệnh lỗi sẽ tạo ra một đội tượng ngoại lệ
thích hợp và nén ra lúc thực thi thông qua từ khóa Throw
public void methodD() throws IOException, RemoteException {
// method's signature // method's body
...
// IOException occurs
if ( ... )
throw new IOException(...);
// construct an IOException object and throw to JVM
...
// RemoteException occurs
if ( ... )
throw new RemoteException(...);
// construct an RemoteException object and throw to JVM
...
} 10
Bắt ngoại lệ
 Khi có ngoại lệ ném ra, JVM đi tìm kịch bản xử lý
tương ứng với ngoại lệ. Mỗi ngoại lệ được xử lý
bởi một lớp củ thể, nếu ngoại lệ không được xử
lý chương trình sẽ dừng.
 Để xử dụng phương thức methodD (phương
thức được khai báo throws), phải đặt phương
methodD trong khối try-catch hoặc try-catch-
finally.

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

catch block finally


Exception 13
Ví dụ: try-catch-finally

Thực thi chương trình

14
Ví dụ: Check exception

Tại sao biên dịch sinh lỗi?


 Trong quá trình biên dịch
Checked exceptions kiểm
tra ngoại lệ phát hiện lỗi

Output: khi biên dịch chương trình

15
Sử dụng throws-try-catch

IOException là lớp cha


của class
FileNotFoundException

public static void main(String args[]) throws IOException, FileNotFoundException.


16
Ví dụ: Unchecked exceptions

Output: thực thi chương trình

17
Ví dụ: Unchecked exceptions
Output: thực thi chương trình

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

You might also like