Bài giảng Lập trình hướng đối tượng: Chương 6 - Trần Thị Huế

39 11 0
Bài giảng Lập trình hướng đối tượng: Chương 6 - Trần Thị Huế

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình hướng đối tượng - Chương 6: Xử lý ngoại lệ. Chương này gồm có những nội dung cụ thể sau: Khái niệm về xử lý ngoại lệ (exception handling), ném và bắt ngoại lệ, khai báo ngoại lệ, ném lại ngoại lệ, định nghĩa ngoại lệ mới, xử lý ngoại lệ trong constructor.

Xử lý ngoại lệ Nội dung Khái niệm xử lý ngoại lệ (exception handling)  Ném bắt ngoại lệ  Khai báo ngoại lệ  Ném lại ngoại lệ  Định nghĩa ngoại lệ  Xử lý ngoại lệ constructor  Xử lý ngoại lệ Tài liệu tham khảo Thinking in Java, chapter  Java how to program, chapter 15  Xử lý ngoại lệ Lỗi ngoại lệ  Mọi đoạn chương trình tiềm ẩn khả sinh lỗi  lỗi chủ quan: lập trình sai  lỗi khách quan: liệu, trạng thái hệ thống   Ngoại lệ: trường hợp hoạt động khơng bình thường Xử lý ngoại lệ  làm để tiếp tục (tái) thực Xử lý ngoại lệ Cách xử lý lỗi truyền thống  Cài đặt mã xử lý nơi phát sinh lỗi     Truyền trạng thái lên mức     thông qua tham số, giá trị trả lại biến tổng thể (flag) dễ nhầm cịn khó hiểu Khó kiểm sốt hết trường hợp   làm cho chương trình trở nên khó hiểu khơng phải lúc đầy đủ thông tin để xử lý không thiết phải xử lý lỗi số học, lỗi nhớ,… Lập trình viên thường quên không xử lý lỗi   chất người thiếu kinh nghiệm, cố tình bỏ qua Xử lý ngoại lệ Ví dụ (C++) int devide(int num, int denom, int& error) { if (0 != denom) { error = 0; return num/denom; } else { error = 1; return 0; } } Xử lý ngoại lệ Xử lý ngoại lệ (Exception handling) Java  Dựa chế ném bắt ngoại lệ  ném ngoại lệ: dừng chương trình chuyển điều khiển lên mức (nơi bắt ngoại lệ)  bắt ngoại lệ: xử lý với ngoại lệ  Ngoại lệ: đối tượng mang thông tin lỗi xảy  ngoại lệ ném tự động  ngoại lệ ném tường minh Xử lý ngoại lệ Phả hệ ngoại lệ Java Xử lý ngoại lệ Ưu điểm ném bắt ngoại lệ  Dễ sử dụng  Dễ dàng chuyển điều khiển đến nơi có khả xử lý ngoại lệ  ném nhiều loại ngoại lệ  Tách xử lý ngoại lệ 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 Xử lý ngoại lệ Ưu điểm ném bắt ngoại lệ readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } Xử lý ngoại lệ 10 Ném lại ngoại lệ  Sau bắt ngoại lệ, thấy cần thiết ném lại ngoại lệ vừa bắt chương trình mức tiếp tục xử lý try { } catch (Exception e) { System.out.println(e.getMessage()); throw e; } Xử lý ngoại lệ 25 Lần vết ngoại lệ StackTrace  Có thể sử dụng phương thức printStackTrace() để lần vết vị trí phát sinh ngoại lệ  debug chương trình Xử lý ngoại lệ 26 public class Test4 { void methodA() throws Exception { methodB(); throw new Exception(); } void methodB() throws Exception { methodC(); throw new Exception(); } void methodC() throws Exception { throw new Exception(); } public static void main(String[] args) { Test4 t = new Test4(); try { t.methodA(); } catch(Exception e) { e.printStackTrace(); } } } Xử lý ngoại lệ 27 Ném ngoại lệ từ main()   Nếu khơng có phương thức bắt ngoại lệ, ngoại lệ truyền lên phương thức main() cần xử lý Nếu khơng muốn xử lý ngoại lệ, để ngoại lệ truyền lên mức điều khiển máy ảo cách khai báo main() ném ngoại lệ  chương trình bị dừng hệ thống in thông tin ngoại lệ Console (printStackTrace()) Xử lý ngoại lệ 28 Ví dụ import java.io.*; public class Echo { public static void main(String[] args) throws IOException { InputStreamReader reader; BufferedReader bufReader; reader = new InputStreamReader(System.in); bufReader = new BufferedReader(reader); String s; while( null != (s = bufReader.readLine()) System.out.println(s); } } Xử lý ngoại lệ 29 Hai loại ngoại lệ   Java phân biệt hai loại ngoại lệ ngoại lệ cần kiểm tra ngoại lệ không cần kiểm tra Ngoại lệ cần kiểm tra: chương trình dịch ln kiểm tra xem có viết code xử lý với ngoại lệ không (try catch/ throws)  IOException  Ngoại lệ không cần kiểm tra: ngoại lệ loại trừ viết chương trình tốt  RuntimeException Xử lý ngoại lệ 30 Ví dụ: Checked Exception InputStreamReader reader; BufferedReader bufReader; reader = new InputStreamReader(System.in); bufReader = new BufferedReader(reader); try { String s = bufReader.readLine(); } catch (IOException e) { } Xử lý ngoại lệ 31 Ví dụ: Unchecked Exception int num1 = Integer.ValueOf(str1).intValue(); int num2 = Integer.ValueOf(str2).intValue(); int num3 = num1 / num2;  Hầu hết ngoại lệ thuộc lớp RuntimeException hệ thống ném tự động  lỗi số học  lỗi số Xử lý ngoại lệ 32 Hốn đổi ngoại lệ  Có thể đổi ngoại lệ cần kiểm tra thành ngoại lệ không cần kiểm tra  chưa biết nên làm void wrapException() { try { throw new IOException(); } catch (IOException e) { throw new RuntimeException(e); } } Xử lý ngoại lệ 33 try { wrapException(); } catch (RuntimeException e) { try { throw e.getCause(); } catch (IOException e1) { … } } Xử lý ngoại lệ 34 Tự định nghĩa ngoại lệ Chúng ta tạo lớp ngoại lệ để phục vụ mục đích riêng  Lớp ngoại lệ phải kế thừa từ lớp Exception lớp dẫn xuất lớp  Có thể cung cấp hai constructor   constructor mặc định (không tham số)  constructor nhận tham số String truyền tham số cho phương thức khởi tạo lớp sở Xử lý ngoại lệ 35 Ví dụ class SimpleException extends Exception { } class MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); } } Xử lý ngoại lệ 36 Khởi tạo đối tượng xử lý ngoại lệ  Làm để thông báo hàm khởi tạo đối tượng gặp lỗi  khơng có giá trị trả lại Một cách khởi tạo với trạng thái đặc biệt hi vọng có mã chương trình kiểm tra trạng thái  Cách hợp lý ném ngoại lệ  Xử lý ngoại lệ 37 class InputFile { public InputFile(String fname) throws IOException { } } try { InputFile fin = new InputFile(”data.txt”); } catch (IOException e) { System.err.println(e.getMessage); } Xử lý ngoại lệ 38 Bài tập thực hành Tìm hiểu phả hệ ngoại lệ Java  Thực hành   ném bắt ngoại lệ  khai báo phương thức ném ngoại lệ  constructor ném ngoại lệ  tự định nghĩa ngoại lệ Xử lý ngoại lệ 39 ... ngoại lệ 36 Khởi tạo đối tượng xử lý ngoại lệ  Làm để thông báo hàm khởi tạo đối tượng gặp lỗi  khơng có giá trị trả lại Một cách khởi tạo với trạng thái đặc biệt hi vọng có mã chương trình kiểm... hiểu Khó kiểm sốt hết trường hợp   làm cho chương trình trở nên khó hiểu lúc đầy đủ thông tin để xử lý không thiết phải xử lý lỗi số học, lỗi nhớ,… Lập trình viên thường qn khơng xử lý lỗi  ... cần kiểm tra: chương trình dịch ln kiểm tra xem có viết code xử lý với ngoại lệ không (try catch/ throws)  IOException  Ngoại lệ khơng cần kiểm tra: ngoại lệ loại trừ viết chương trình tốt 

Ngày đăng: 09/05/2021, 22:02

Từ khóa liên quan

Mục lục

  • Xử lý ngoại lệ

  • Nội dung

  • Tài liệu tham khảo

  • Lỗi và ngoại lệ

  • Cách xử lý lỗi truyền thống

  • Ví dụ (C++)

  • Xử lý ngoại lệ (Exception handling) trong Java

  • Phả hệ ngoại lệ trong Java

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

  • Slide 10

  • Slide 11

  • Slide 12

  • Ném ngoại lệ (tường minh)

  • Cú pháp try - catch

  • Ví dụ

  • Cú pháp try catch finally

  • Slide 17

  • Slide 18

  • Ném ngoại lệ khỏi phương thức

  • Slide 20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan