Mục tiêu<br />
<br />
Chương 7.<br />
<br />
Giải thích được lỗi cú pháp và lỗi thực thi<br />
chương trình<br />
trình.<br />
Giải thích được mô hình đối tượng Exception<br />
của Java.<br />
Giải thích được cú pháp bẫy lỗi bằng<br />
try...catch... finally.<br />
finally.<br />
Sử d<br />
dụng đ<br />
được th<br />
throw và th<br />
à throws trong code,<br />
t<br />
d<br />
Tự định nghĩa được Exception.<br />
<br />
XỬ LÝ NGOẠI LỆ<br />
<br />
2/34<br />
<br />
Nội dung<br />
<br />
1. Khái niệm<br />
Ngoại lệ (Exception): là những điều<br />
khô<br />
không mong muốn xảy ra khi thực hiệ<br />
ố<br />
ả<br />
thự hiện<br />
chương trình Java.<br />
Lỗi thi hành là một dạng ngoại lệ<br />
Ví dụ:<br />
<br />
1. Khái niệm<br />
<br />
2. Các l i<br />
2 Cá loại lỗi<br />
3. Xử lý ngoại lệ<br />
4. Cấu trúc các lớp quản lý lỗi<br />
5. Lớp Throwable<br />
6. Lớp Exception<br />
7. Bắt ngoại lệ<br />
8. Lan truyền lỗi<br />
9. Ném ra ngoại lệ<br />
10. Tự định nghĩa Exception<br />
<br />
• Thực hiện phép chia cho 0<br />
0.<br />
• Khi đọc một tập tin không tồn tại.<br />
• Khi thao tác vượt quả chỉ số mảng.<br />
3/34<br />
<br />
4/34<br />
<br />
1<br />
<br />
1. Khái niệm<br />
<br />
1. Khái niệm<br />
<br />
5/34<br />
<br />
2. Các loại lỗi<br />
<br />
Bài toán<br />
<br />
Hiện<br />
thực<br />
<br />
Code<br />
<br />
?<br />
<br />
CompileCompile-time error = Syntax error<br />
<br />
Correct result<br />
<br />
Run- i<br />
Run-time error = Exception, tình h ố<br />
ì h huống bấ<br />
bất<br />
bình thường đã xẩy ra trong khi chương trình<br />
thực thi.<br />
<br />
Compile<br />
No<br />
Syntax error<br />
<br />
Wrong result<br />
END<br />
<br />
2. Các loại lỗi<br />
<br />
Syntax error<br />
<br />
BEGIN<br />
<br />
Run<br />
<br />
6/34<br />
<br />
Chương trình<br />
<br />
Run-time error<br />
( Eception )<br />
<br />
Khi có Exception:<br />
• Có thể là máy bị treo (<br />
y ị<br />
(halt).<br />
)<br />
• Chương trình ngắt đột ngột, điều khiển trả về cho<br />
OS, OS thu hồi bộ nhớ của chương trình.<br />
<br />
Cần có cơ chế điều khiển tình huống này.<br />
7/34<br />
<br />
8/34<br />
<br />
2<br />
<br />
3. Xử lý ngoại lệ<br />
<br />
4. Cấu trúc các lớp quản lý lỗi<br />
<br />
Java là ngôn ngữ mạnh (robust) bắt các<br />
ngoại lệ<br />
lệ.<br />
Khi có run-time error, thông tin về lỗi này<br />
runđược máy ảo tự động phát ra thông qua<br />
một đối tượng Exception. Đối tượng này có<br />
thể bẫy từ chương trình nhờ cơ chế giao<br />
tiếp giữa máy ảo và chương trình.<br />
Java cung cấp một tập rất nhiều lớp mô tả<br />
các lỗi trong gói java.lang.<br />
Tham khảo Java Documentation.<br />
9/34<br />
<br />
5. Lớp Throwable<br />
<br />
10/34<br />
10/34<br />
<br />
6. Lớp Exception<br />
<br />
Các lớp Exception đều được dẫn ra từ<br />
lớp à<br />
lớ này.<br />
Chứa các hành vi giúp truy xuất thông<br />
tin về lỗi như:<br />
• nội dung mô tả lỗi : getMesage(),<br />
g()<br />
toString()<br />
• nội dung stack lúc gây lỗi:<br />
getStackTrace(), printStackTrace(),<br />
• ....<br />
<br />
Khi xảy ra ngoại lệ, Java ném ra một đối<br />
tượng ứng với ngoại lệ.<br />
lệ.<br />
Các đối tượng ngoại lệ sinh ra từ các lớp con<br />
của lớp Exception.<br />
Exception.<br />
Lớp Exception là lớp cơ sở cho các ngoại lệ.<br />
lệ.<br />
Các phương thức của lớp Exception.<br />
Exception.<br />
• printStackTrace(): in chi tiết thông báo ngoại lệ.<br />
printStackTrace():<br />
lệ.<br />
• toString(): trả về xâu thông báo ngoại lệ.<br />
toString():<br />
lệ.<br />
<br />
11/34<br />
11/34<br />
<br />
12/34<br />
12/34<br />
<br />
3<br />
<br />
6. Lớp Exception<br />
class<br />
<br />
6. Lớp Exception<br />
<br />
Giải thích<br />
<br />
Exception<br />
<br />
Lớp nền của các run-time error<br />
run-<br />
<br />
RuntimeException<br />
<br />
Lớp nền của nhiều lớp run-time<br />
runerror<br />
<br />
ArithmeticException<br />
<br />
Lỗi do thực thi một phép toán<br />
<br />
IllegalArgumentException<br />
<br />
Lỗi sai đối số của hàm<br />
<br />
class<br />
<br />
Giải thích<br />
<br />
SecurityException<br />
<br />
Lỗi do truy cập bị cấm<br />
<br />
ClassNotFoundException<br />
<br />
Lỗi xuất nhập<br />
<br />
FileNotFoundException<br />
<br />
Lỗi do không tìm thấy file<br />
Lỗi do cố truy cập nội dung 1 file<br />
khi đã ở cuối file<br />
Lỗi do truy cập 1 class bị cấm<br />
<br />
NoSuchMethodExceptio<br />
n<br />
<br />
Lỗi do viết sai tên hành vi<br />
<br />
InterruptedException<br />
<br />
Lỗi do truy xuất một đối tượng<br />
mà chưa khởi tạo<br />
<br />
IOException<br />
<br />
IllegalAccessException<br />
<br />
NullPointerException<br />
<br />
Lỗi do không đúng dạng số<br />
<br />
EOFException<br />
<br />
ArrayIndexOutOfBoundsExcepti Lỗi do chỉ số ngoài tầm của<br />
on<br />
mảng<br />
<br />
NumberFormatExceptio<br />
n<br />
<br />
Lỗi do ngắt ngang 1 luồng lệnh<br />
đang được thực thi<br />
<br />
Lỗi do không tìm thấy file.class<br />
<br />
13/34<br />
13/34<br />
<br />
7. Bắt ngoại lệ<br />
<br />
14/34<br />
14/34<br />
<br />
7. Bắt ngoại lệ<br />
<br />
Có thể bắt và xử lý ngoại lệ bằng khối try ..<br />
Catch:<br />
Try{<br />
Khối lệnh có khả năng xuất hiện ngoại lệ<br />
}<br />
Catch(Exception e1){ xử lý ngoại lệ e1 }<br />
Catch(Exception e2){ xử lý ngoại lệ e2 }<br />
Catch(Exception en){ Xử lý ngoại lệ en }<br />
C t h(E<br />
ti<br />
){<br />
i<br />
Finally{ Thực hiện sau khi xử lý ngoại lệ }<br />
<br />
Chức năng:<br />
• Nếu các lệnh trong khối try{..} có ngoại lệ<br />
ném ra thì sẽ so sánh với các loại ngoại lệ<br />
trong catch(..).<br />
• Nếu đúng ngoại lệ trong catch thì thực<br />
hiện các lệnh xử lý ngoại lệ tương ứng.<br />
• Các lệnh trong khối finally được thực hiện<br />
dù có hay không có ngoại lệ.<br />
<br />
15/34<br />
15/34<br />
<br />
16/34<br />
16/34<br />
<br />
4<br />
<br />
7. Bắt ngoại lệ<br />
<br />
7. Bắt ngoại lệ<br />
<br />
17/34<br />
17/34<br />
<br />
7. Bắt ngoại lệ<br />
<br />
18/34<br />
18/34<br />
<br />
7. Bắt ngoại lệ<br />
<br />
Mảng 5 phần tử mà<br />
lại truy cập a[10]<br />
Bẫy lỗi mức tổng quát<br />
<br />
19/34<br />
19/34<br />
<br />
Mảng 5 phần tử<br />
mà lại truy cập<br />
a[10]<br />
Bẫy lỗi cụ thể<br />
<br />
20/34<br />
20/34<br />
<br />
5<br />
<br />