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

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ự

pdf9 trang | Chia sẻ: candy98 | Lượt xem: 517 | 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 (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