1. Khái niệm
2 Các loại lỗi
3. Xử lý ngoại lệ
4. Cấu trúc các lớp quản lý lỗi
5. Lớp Throwable
6. Lớp Exception
7. Bắt ngoại lệ
8. Lan truyền lỗi
9. Ném ra ngoại lệ
10. Tự định nghĩa Exception
1. Khái niệm
Ngoại lệ (Exception): là những điều
không mong muốn xảy khi th ra khi thự
9 trang |
Chia sẻ: candy98 | Lượt xem: 531 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Lập trình hướng đối tượng (OOP) - Chương 7: Xử lý ngoại lệ - Văn Thị Thiên Trang, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1Chương 7.
XỬ LÝ NGOẠI LỆ
Mục tiêu
Giải thích được lỗi cú pháp và lỗi thực thi
chương trình.
Giải thích được mô hình đối tượng Exception
của Java.
Giải thích được cú pháp bẫy lỗi bằng
try...catch... finally.
Sử d đ th à th t d ụng ược row v rows rong co e,
Tự định nghĩa được Exception.
2/34
Nội dung
1. Khái niệm
2 Cá l i lỗi. c oạ
3. Xử lý ngoại lệ
4. Cấu trúc các lớp quản lý lỗi
5. Lớp Throwable
6. Lớp Exception
7. Bắt ngoại lệ
8. Lan truyền lỗi
9. Ném ra ngoại lệ
10. Tự định nghĩa Exception
3/34
1. Khái niệm
Ngoại lệ (Exception): là những điều
khô ố ả khi thự hiệ ng mong mu n x y ra c n
chương trình Java.
Lỗi thi hành là một dạng ngoại lệ
Ví dụ:
• Thực hiện phép chia cho 0.
• Khi đọc một tập tin không tồn tại.
• Khi thao tác vượt quả chỉ số mảng.
4/34
21. Khái niệm
5/34
1. Khái niệm
6/34
2. Các loại lỗi
Syntax errorBEGIN
Bài toán Code
Hiện
thực Compile
No
Syntax errorWrong result
Chương trìnhRun
Correct resultEND
Run-time error
( Eception )
?
7/34
2. Các loại lỗi
Compile-time error = Syntax error
i ì h h ố bấ Run-t me error = Exception, t n u ng t
bình thường đã xẩy ra trong khi chương trình
thực thi.
Khi có Exception:
• Có thể là máy bị treo (halt).
• Chương trình ngắt đột ngột, điều khiển trả về cho
OS, OS thu hồi bộ nhớ của chương trình.
Cần có cơ chế điều khiển tình huống này.
8/34
3 Java là ngôn ngữ mạnh (robust) bắt các
ngoại lệ
3. Xử lý ngoại lệ
.
Khi có run-time error, thông tin về lỗi này
được máy ảo tự động phát ra thông qua
một đối tượng Exception. Đối tượng này có
thể bẫy từ chương trình nhờ cơ chế giao
tiếp giữa máy ảo và chương trình.
Java cung cấp một tập rất nhiều lớp mô tả
các lỗi trong gói java.lang.
Tham khảo Java Documentation.
9/34
4. Cấu trúc các lớp quản lý lỗi
10/34
5. Lớp Throwable
Các lớp Exception đều được dẫn ra từ
lớ àp n y.
Chứa các hành vi giúp truy xuất thông
tin về lỗi như:
• nội dung mô tả lỗi : getMesage(),
toString()
• nội dung stack lúc gây lỗi:
getStackTrace(), printStackTrace(),
• ....
11/34
6. Lớp Exception
Khi xảy ra ngoại lệ, Java ném ra một đối
tượng ứng với ngoại lệ.
Các đối tượng ngoại lệ sinh ra từ các lớp con
của lớp Exception.
Lớp Exception là lớp cơ sở cho các ngoại lệ.
Các phương thức của lớp Exception.
• printStackTrace(): in chi tiết thông báo ngoại lệ.
• toString(): trả về xâu thông báo ngoại lệ.
12/34
4class Giải thích
Exception Lớp nền của các run time error
6. Lớp Exception
-
RuntimeException Lớp nền của nhiều lớp run-time
error
ArithmeticException Lỗi do thực thi một phép toán
IllegalArgumentException Lỗi sai đối số của hàm
ArrayIndexOutOfBoundsExcepti Lỗi do chỉ số ngoài tầm của
on mảng
NullPointerException Lỗi do truy xuất một đối tượng
mà chưa khởi tạo
SecurityException Lỗi do truy cập bị cấm
ClassNotFoundException Lỗi do không tìm thấy file.class
13/34
class Giải thích
6. Lớp Exception
NumberFormatExceptio
n
Lỗi do không đúng dạng số
IOException Lỗi xuất nhập
FileNotFoundException Lỗi do không tìm thấy file
EOFException Lỗi do cố truy cập nội dung 1 file
khi đã ở cuối file
IllegalAccessException Lỗi do truy cập 1 class bị cấm
NoSuchMethodExceptio
n
Lỗi do viết sai tên hành vi
InterruptedException Lỗi do ngắt ngang 1 luồng lệnh
đang được thực thi
14/34
Có thể bắt và xử lý ngoại lệ bằng khối try ..
Catch:
7. Bắt ngoại lệ
Try{
Khối lệnh có khả năng xuất hiện ngoại lệ
}
Catch(Exception e1){ xử lý ngoại lệ e1 }
Catch(Exception e2){ xử lý ngoại lệ e2 }
C t h(E ti ){ Xử lý i lệ }a c xcep on en ngoạ en
Finally{ Thực hiện sau khi xử lý ngoại lệ }
15/34
Chức năng:
7. Bắt ngoại lệ
• Nếu các lệnh trong khối try{..} có ngoại lệ
ném ra thì sẽ so sánh với các loại ngoại lệ
trong catch(..).
• Nếu đúng ngoại lệ trong catch thì thực
hiện các lệnh xử lý ngoại lệ tương ứng.
• Các lệnh trong khối finally được thực hiện
dù có hay không có ngoại lệ.
16/34
57. Bắt ngoại lệ
17/34
7. Bắt ngoại lệ
18/34
7. Bắt ngoại lệ
Mảng 5 phần tử mà
lại truy cập a[10]
Bẫy lỗi mức tổng quát
19/34
7. Bắt ngoại lệ
Mảng 5 phần tử
mà lại truy cập
a[10]
Bẫy lỗi cụ thể
20/34
67. Bắt ngoại lệ
Luyện tập
ế ì í ă ậ ủ ộ• Vi t chương tr nh t nh c n b c hai c a m t
số đưa vào từ dòng lệnh và xử lý những
ngoại lệ của chương trình.
21/34
7. Bắt ngoại lệ
22/34
8. Lan truyền lỗi
Exception propagation
Lỗi lan truyền từ trong ra cho đến khi gặp
bẫy lỗi hoặc tới main và ứng dụng bị ngưng.
A()
B() Chiều lan truyền lỗi
catch(...)
C()
D() Exception
Chiều gọi hàm
23/34
8. Lan truyền lỗi
main(...)
output(...)
getPos(...)
24/34
78. Lan truyền lỗi
Bẫy lỗi
và chương trình tiếp tục
25/34
9. Ném ra ngoại lệ
Exception thường do JVM xuất ra.
C d hươ t ì h ó thể ất hủ độ o e c ng r n c xu c ng
xuất ra một đối tượng exception bằng từ
khóa throws, throw
Khi viết một phương thức mà các lệnh có khả
năng ném ra ngoại lệ.
Lệ h é i lệ n n m ra ngoạ
throw new LớpNgoạiLệ(“Thông báo ngoại lệ);
26/34
9. Ném ra ngoại lệ
Khai báo:
throws<ds ngoại
lệ>{
//các lệnh của phương thức
}
Ví dụ:
public void hamNgoạiLe()throws
Exception{
}
27/34
9. Ném ra ngoại lệ
Các lời gọi phương thức có ném ra
i lệ hải bắt i lệngoạ p ngoạ .
Ví dụ:
Try{
hamNgoạiLe();
}catch(Exception e){ } ..
28/34
89. Ném ra ngoại lệ
Hoặc nằm trong một phương thức ném
i lệ đóra ngoạ .
Ví dụ:
public void anotherMethod() throws
Exception{
hamNgoaiLe();
}
29/34
9. Ném ra ngoại lệ
30/34
9. Ném ra ngoại lệ
gán message
cho Exception
31/34
10. Tự định nghĩa Exception
Người lập trình có thể định nghĩa ngoại
lệ ủ iê ì hc a r ng m n .
Lớp ngoại lệ phải kế thừa từ Exception.
Ví dụ:
Class myException extends Exception{
Public myException (String msg){
Super(msg);
}
}
32/34
910. Tự định nghĩa Exception
33/34
10. Tự định nghĩa Exception
Luyện tập
á ớ ù ể é• Khai b o l p PSException d ng đ n m ra
ngoại lệ của lớp PS.
• Khai báo lớp PS với phương thức
ganMau(..) ném ra ngoại lệ PSException
khi gán 0 cho mẫu.
• Phương thức giaTri() ném ra ngoại lệ
PSException khi mẫu số bằng 0.
• Sử dụng lớp PS bắt các ngoại lệ cần thiết
34/34