[LTM] Chương 3.2 : Xử lý Ngoại lệ

Ngoại lệ là gì?

Khi một ngoại lệ xảy ra, chương trình kết thúc đột ngột, điều khiển được trả về cho OS
Trình xử lý ngoại lệ được thực hiện để xác định lỗi và bẫy nó 
Trình xử lý ngoại lệ – Ví dụ
Một đoạn mã giả
…………
IF B IS ZERO GO TO ERROR
C = A/B
PRINT C
GO TO EXIT

ERROR:
DISPLAY “DIVISION BY ZERO”

EXIT:
END

Trình xử lý ngoại lệ trong Java

1.Các lớp Error và Exception xử lý các lỗi trong Java
2. Khi một ngoại lệ xảy ra:
  • một thể hiện biểu diễn ngoại lệ đó được tạo ra. 
  • Thể hiện này sau đó được truyền cho phương thức rút trích và xử lý thông tin
3. Trình xử lý ngoại lệ Java được quản lý thông qua năm từ khoá: try, catch, throw, throws, và finally. 

  • khối try : chứa các lệnh trong chương trình cần được khảo sát ngoại lệ 
  • Từ khoá catch: có thể bắt ngoại lệ và xử lý nó một cách hợp lý
  • Throw: Để ném bằng tay một ngoại lệ
  • Mệnh đề Throws: được dùng trong một phương thức để xác định phương thức này sẽ ném một ngoại lệ 
  • Khối finally: ta có thể xác định mã lệnh thực sự cần thực thi trước khi một phương thức trả về 
Phân cấp các lớp Exception

Mô hình xử lý ngoại lệ
Hai cách xử lý ngoại lệ trong Java
  1. Các lệnh có thể ném các ngoại lệ nằm trong khối try  và các lệnh xử lý ngoại lệ trong khối catch
  2. Một phương thức có thể được đặc tả theo cách sao cho khi ngoại lệ xảy ra thì việc thực thi nó bị cấm
Khối try và catch – Ví dụ

Ex Ngoại lệ

Các phương thức trong ví dụ
  1. toString() rút trích biểu diễn thông tin lưu trong một đối tượng Exception dưới dạng String 
  2. printStackTrace() dùng để in ra nguyên nhân gây ngoại lệ và dòng lệnh tạo ra nó
Nhiều khối catch

Ví dụ

Khối try - catch lồng nhau
  • Đôi khi một phần của khối có thể gây ra một lỗi và toàn bộ khối có thể gây ra một lỗi khác
  • Trong trường hợp đó, các trình xử lý ngoại lệ phải lồng nhau 
  • Khi các khối try lồng nhau được dùng, khối try bên trong sẽ thực  thi trước
Ví dụ

Khối finally

  • Đảm bảo rằng tất cả các việc dọn dẹp được thực hiện khi một ngoại lệ xảy ra
  • Dùng kết hợp với khối try 
  • Được đảm bảo thực thi bất kể ngoại lệ có xảy ra hay không


try {
catch(Exception1 e1) {
}
catch(Exception2 e2) {
}
finally {
}
Khối finally – Ví dụ


Sử dụng throw

Một phương thức có thể ném ra nhiều ngoại lệ
Sử dụng throws

Từ khoá throws liệt kê các ngoại lệ mà phương thức chặn.

Ngoại lệ do người dùng định nghĩa
Cần có lớp ngoại lệ do người dùng định nghĩa:
  • Nên là lớp con của lớp Exception 
  • Kiểu ngoại lệ mới có thể được bắt độc lập với những lớp con khác của Throwable
  • Được tạo ra sẽ có tất cả các phương thức của lớp Throwable

Một số ngoại lệ thường gặp 

Ưu điểm của ném bắt ngoại lệ


  • „ Dễ sử dụng: …dàng chuyển điều khiển đếnnơi có khả năng xử lý ngoại lệ + …có thể ném nhiều loại ngoại lệ
  • „ Tách xử lý ngoạilệ khỏi thuật toán: … tách mã xử lý +… sử dụng cú pháp khác
  • „ Không bỏ sót ngoại lệ (ném tự động)
  • „ Làm chương trình dễ đọc hơn, an toàn hơn