● Ngoại lệ
● Xử lí ngoại lệ
● Lớp Throwable
● Ưu điểm của ngoại lệ
Ngoại lệ
● Ngoại lệ (exception), là lỗi có thể phát sinh trong quá
trình thực hiện chương trình.
● Mỗi ngoại lệ cũng được mô hình hóa bởi một đối
tượng thuộc lớp Exception.
● Ví dụ, các thao tác sau đều sinh ngoại lệ: truy cập
mảng ở vị trí -1, chia cho 0.
14 trang |
Chia sẻ: candy98 | Lượt xem: 562 | 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 - Bài 7: Quản lí ngoại lệ - Lê Hồng Phương, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 7: Quản lí ngoại lệ
Lê Hồng Phương
phuonglh@gmail.com
Khoa Toán-Cơ-Tin học
Trường Đại học Khoa học Tự nhiên Hà Nội
2012-2013 Object-Oriented Programming: Exception 2
Nội dung
● Ngoại lệ
● Xử lí ngoại lệ
● Lớp Throwable
● Ưu điểm của ngoại lệ
2012-2013 Object-Oriented Programming: Exception 3
Ngoại lệ
● Ngoại lệ (exception), là lỗi có thể phát sinh trong quá
trình thực hiện chương trình.
● Mỗi ngoại lệ cũng được mô hình hóa bởi một đối
tượng thuộc lớp Exception.
● Ví dụ, các thao tác sau đều sinh ngoại lệ: truy cập
mảng ở vị trí -1, chia cho 0.
2012-2013 Object-Oriented Programming: Exception 4
Ngoại lệ
● Khi xảy ra ngoại lệ trong một phương thức, phương
thức tạo ra một đối tượng ngoại lệ và chuyển nó cho
hệ thống.
● Đối tượng ngoại lệ chứa các thông tin về lỗi: kiểu lỗi,
trạng thái của chương trình khi xảy ra lỗi.
● Việc tạo ra đối tượng lỗi và chuyển nó cho hệ thống
được gọi là ném ngoại lệ.
2012-2013 Object-Oriented Programming: Exception 5
Ngoại lệ
● Khi một ngoại lệ được ném ra, hệ thống sẽ tìm đoạn
mã có nhiệm vụ xử lí ngoại lệ.
– Lập trình viên cần dự kiến trước các ngoại lệ có thể
xảy ra và cung cấp những mã xử lí phù hợp.
– Ví dụ, chương trình lấy dữ liệu người dùng nhập
vào một JTextField với kì vọng là một số nguyên
dương, nhưng người dùng nhập sai (nhập số âm,
nhập chuỗi kí tự...)
● Đoạn mã xử lí ngoại lệ được gọi là bộ xử lí ngoại lệ
(exception handler).
2012-2013 Object-Oriented Programming: Exception 6
Xử lí ngoại lệ
● Bộ xử lí ngoại lệ có thể nằm ở
phương thức khác phương thức
ném ngoại lệ.
● Khi xảy ra ngoại lệ, hệ thống sẽ
tìm bộ xử lí ngoại lệ bằng cách
lần theo ngăn xếp chứa các lời
gọi phương thức, xuất phát từ
phương thức ném ngoại lệ.
main()
Phương thức chứa
bộ xử lí ngoại lệ
Phương thức không
chứa bộ xử lí ngoại lệ
Phương thức ném
ngoại lệ
Gọi phương thức
Tìm bộ xử lí ngoại lệ
thích hợp
2012-2013 Object-Oriented Programming: Exception 7
Xử lí ngoại lệ
● Bộ xử lí ngoại lệ có 3 thành phần
– Khối try, (các) khối catch, khối finally
● Khối try chứa các lệnh có thể sinh ngoại lệ.
● Các khối catch đi ngay sau khối try chứa các lệnh xử
lí ngoại lệ.
– Vì khối try có thể sinh nhiều kiểu ngoại lệ khác
nhau nên có thể có nhiều khối catch.
● Khối finally chứa các lệnh luôn được thực hiện khi đã
thực hiện hết các lệnh trong khối try.
2012-2013 Object-Oriented Programming: Exception 8
Xử lí ngoại lệ
● Trong chương trình liệt kê các số nguyên tố, trường
văn bản chờ người dùng nhập vào một số nguyên
dương n.
● Nếu người dùng nhập chuỗi kí tự không chuyển
được thành số, ví dụ xyz?
– Xảy ra ngoại lệ kiểu NumberFormatException
– Chương trình cần xử lí ngoại lệ này.
2012-2013 Object-Oriented Programming: Exception 9
Xử lí ngoại lệ
@Override
public void actionPerformed(ActionEvent event) {
int n = 0;
try {
n = Integer.parseInt(nTextField.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(PrimeNumberFrame.this,
"Number format error!", "Error",
JOptionPane.ERROR_MESSAGE);
return;
}
String primes = pn.listPrimeNumbers(n);
resultTextArea.setText(primes);
}
2012-2013 Object-Oriented Programming: Exception 10
Xử lí ngoại lệ
● Đôi khi phương thức chứa đoạn mã có thể ném
ngoại lệ không thực hiện xử lí ngoại lệ.
● Khi đó, nó cần được khai báo các kiểu ngoại lệ có
khả năng sinh ra để phương thức khác sử dụng nó
thực hiện xử lí chúng.
● Khai báo:
public void writeList() throws IOException,
ArrayIndexOutOfBoundsException {
// do something
}
Phương thức này có thể
sinh hai kiểu ngoại lệ.
Không cần có các khối
try, catch để xử lí các ngoại lệ.
2012-2013 Object-Oriented Programming: Exception 11
Xử lí ngoại lệ
Xử lí ngoại lệ
IOException
Xử lí ngoại lệ
ArrayIndexOutOfBoundsException
public void useWriteList() {
try {
writeList();
} catch (IOException e) {
// do something
} catch (ArrayIndexOutOfBoundsException e) {
// do something
}
}
2012-2013 Object-Oriented Programming: Exception 12
Ném ngoại lệ
● Mọi mã nguồn đều có thể ném ngoại lệ bằng lệnh
throw.
● Java cung cấp nhiều lớp ngoại lệ khác nhau, tất cả
đều là lớp con của lớp Throwable.
● Cú pháp:
– throw someThrowableObject;
– Trong đó, someThrowableObject là đối tượng
thuộc một lớp con của lớp Throwable.
2012-2013 Object-Oriented Programming: Exception 13
Throwable
Object
Throwable
Error Exception
... ... RuntimeException
...
IllegalAccessException,
NegativeArraySizeException NullPointerException,
ArithmeticException
2012-2013 Object-Oriented Programming: Exception 14
Ưu điểm của ngoại lệ
● Việc sử dụng ngoại lệ có một số ưu điểm sau:
– Tách các đoạn mã xử lí lỗi ra khỏi các đoạn mã thông
thường.
– Lan truyền lỗi ngược theo các lời gọi phương thức.
Chỉ những phương thức quan tâm tới loại lỗi nào đó
mới phải xử lí lỗi đó.
– Nhóm các kiểu lỗi khác nhau thành các khối catch.
● Những ưu điểm này giúp chương trình dễ đọc, dễ phát
triển hơn.