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

● 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.

pdf14 trang | Chia sẻ: candy98 | Lượt xem: 574 | Lượt tải: 0download
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.