1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình hướng đối tượng OOP bai08

63 306 3

Đ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

Thông tin cơ bản

Định dạng
Số trang 63
Dung lượng 1,07 MB

Nội dung

BỘ MÔN CÔNG NGHỆ PHẦN MỀM ViỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 08 Ngoại lệ xử lý ngoại lệ Cao Tuấn Dũng -Nguyễn Thị Thu Trang Mục tiêu học • Giải thích ngoại lệ mơ tả lợi ích việc xử lý ngoại lệ hướng đối tượng • Giải thích mơ hình xử lý ngoại lệ • Sử dụng khối try/catch/finally để bắt xử lý ngoại lệ Java • Hiểu biết cách sử dụng ủy nhiệm ngoại lệ • Biết cách tạo sử dụng ngoại lệ tự định nghĩa Nội dung Ngoại lệ Bắt và xử lý ngoại lệ Ủy nhiệm ngoại lệ Tạo ngoại lệ tự định nghĩa 1.1 Ngoại lệ gì? • Exception = Exceptional event • Định nghĩa: Ngoại lệ là một kiện xảy quá trình thực thi chương trình, nó phá vỡ luồng bình thường chương trình ERROR !! Ví dụ: 1.1 Ngoại lệ gì? (2) • Ngoại lệ là mợt lỡi đặc biệt • Khi xảy mợt ngoại lệ, khơng xử lý thì chương trình kết thúc trả lại quyền điều khiển cho hệ điều hành Ngoại lệ • Lỡi xảy thời điểm chạy chương trình (runtime) • Kết thúc bất thường chương trình • Kết thực thi khơng mong muốn 1.2 Cách xử lý lỗi truyền thống • Viết mã xử lý nơi phát sinh lỗi ▫ Làm cho chương trình trở nên rối ▫ Khơng phải lúc đầy đủ thông tin để xử lý ▫ Khơng thiết phải xử lý • Truyền trạng thái lên mức ▫ Thông qua tham số, giá trị trả lại hoặc biến tổng thể (flag) ▫ Dễ nhầm ▫ Vẫn cịn khó hiểu Ví dụ int devide(int num, int denom, int *error) { if (denom *error return } else { *error return } } != 0){ = 0; num/denom; = 1; 0; Nhược điểm • Khó kiểm sốt hết trường hợp ▫ Lỡi số học, lỡi bợ nhớ,… • Lập trình viên thường quên không xử lý lỗi ▫ Bản chất người ▫ Thiếu kinh nghiệm, cố tình bỏ qua 10 Nội dung Ngoại lệ Bắt và xử lý ngoại lệ Ủy nhiệm ngoại lệ Tạo ngoại lệ tự định nghĩa 49 3.1 Ủy nhiệm ngoại lệ (3) • Tại vị trí gọi phương thức có ủy nhiệm ngoại lệ (trừ RuntimeException): ▫ Hoặc là phương thức chứa vị trí đó phải ủy nhiệm tiếp cho vị trí gọi mình ▫ Hoặc là ví trí gọi phải bắt ngoại lệ ủy nhiệm (hoặc lớp cha) và xử lý try catch (finally cần) 50 Run public class DelegateExceptionDemo { public static void main(String args[]){ int num = calculate(9,3); System.out.println(“Lan 1: ” + num); num = calculate(9,0); System.out.println(“Lan 2: ” + num); } static int calculate(int no, int no1) throws ArithmeticException { if (no1 == 0) throw new ArithmeticException("Khong the chia cho 0!"); int num = no / no1; return num; } } 51 Compile public class DelegateExceptionDemo { public static void main(String args[]){ int num = calculate(9,3); System.out.println(“Lan 1: ” + num); num = calculate(9,0); System.out.println(“Lan 2: ” + num); } static int calculate(int no, int no1) throws Exception { if (no1 == 0) throw new ArithmeticException("Khong the chia cho 0!"); int num = no / no1; return num; } } G:\Java Example\DelegateExceptionDemo.java:3: unreported exception java.lang.Exception; must be caught or declared to be thrown int num = calculate(9,3); ^ G:\Java Example\DelegateExceptionDemo.java:5: unreported exception java.lang.Exception; must be caught or declared to be thrown num = calculate(9,0); 52 public class DelegateExceptionDemo { public static void main(String args[]){ try { int num = calculate(9,3); System.out.println(“Lan 1: ” + num); num = calculate(9,0); System.out.println(“Lan 2: ” + num); } catch(Exception e) { System.out.println(e.getMessage()); } } static int calculate(int no, int no1) throws ArithmeticException { if (no1 == 0) throw new ArithmeticException("Khong the chia cho 0!"); int num = no / no1; return num; } } 53 3.1 Ủy nhiệm ngoại lệ (4) • Mợt phương thức có thể ủy nhiệm nhiều ngoại lệ public void myMethod(int tuoi, String ten) throws ArithmeticException, NullPointerException{ if (tuoi < 18) { throw new ArithmeticException(“Chua du tuoi!"); } if (ten == null) { throw new NullPointerException(“Thieu ten!"); } //Blah, Blah, Blah } 54 3.2 Lan truyền ngoại lệ • Tình huống: ▫ Giả sử main() gọi phương thức A(), A() gọi B(), B() gọi C() Khi một ngăn xếp phương thức tạo ▫ Giả sử C() xảy ngoại lệ 55 3.2 Lan truyền ngoại lệ (2) C() C() tung ngoại lệ B() B() A() A() main() main() Nếu C() gặp lỗi tung ngoại lệ C() lại khơng xử lý ngoại lệ này, cịn mợt nơi xử lý nơi mà C() gọi, đó phương thức B() Nếu B() khơng xử lý phải xử lý ngoại lệ A()… Quá trình gọi lan truyền ngoại lệ Nếu đến main() không xử lý ngoại lệ tung từ C() chương trình phải dừng lại 56 3.3 Kế thừa ủy nhiệm ngoại lệ • Khi override mợt phương thức lớp cha, phương thức lớp không phép tung ngoại lệ  Phương thức ghi đè lớp phép tung ngoại lệ giống hoặc là lớp hoặc tập các ngoại lệ tung lớp cha 57 3.3 Kế thừa ủy nhiệm ngoại lệ (2) class Disk { void readFile() throws EOFException {} } class FloppyDisk extends Disk { void readFile() throws IOException {} // ERROR! } class Disk { void readFile() throws IOException {} } class FloppyDisk extends Disk { void readFile() throws EOFException {} //OK } 58 3.4 Ưu điểm ủy nhiệm ngoại lệ • Dễ sử dụng ▫ Làm chương trình dễ đọc an tồn ▫ Dễ dàng chuyển điều khiển đến nơi có khả xử lý ngoại lệ ▫ Có thể ném nhiều loại ngoại lệ • • • • Tách xử lý ngoại lệ khỏi đoạn mã thơng thường Khơng bỏ sót ngoại lệ (ném tự động) Gom nhóm và phân loại các ngoại lệ Làm chương trình dễ đọc an tồn 58 59 Nội dung Ngoại lệ Bắt và xử lý ngoại lệ Ủy nhiệm ngoại lệ Tạo ngoại lệ tự định nghĩa 60 Tạo ngoại lệ tự định nghĩa • Các ngoại lệ hệ thống xây dựng khơng đủ để kiểm sốt tất lỡi  Cần phải có lớp ngoại lệ người dùng định nghĩa ▫ Kế thừa từ một lớp Exception hoặc lớp nó ▫ Có tất phương thức lớp Throwable public class MyException extends Exception { public MyException(String msg) { super(msg); } public MyException(String msg, Throwable cause){ super(msg, cause); } } 61 Sử dụng ngoại lệ người dùng định nghĩa Khai báo khả tung ngoại lệ public class FileExample { public void copyFile(String fName1,String fName2) throws MyException { if (fName1.equals(fName2)) throw new MyException("File trung ten"); // Copy file System.out.println("Copy completed"); } } Tung ngoại lệ 62 Sử dụng ngoại lệ người dùng định nghĩa • Bắt và xử lý ngoại lệ public class Test { public static void main(String[] args) { FileExample obj = new FileExample(); try { String a = args[0]; String b = args[1]; obj.copyFile(a,b); } catch (MyException e1) { System.out.println(e1.getMessage()); } catch(Exception e2) { System.out.println(e2.toString()); } } } 65 Kết luận (3) • Các dạng xử lý ngoại lệ: ▫ Khắc phục lỗi gọi lại phương thức xảy lỗi ▫ Khắc phục lỗi tiếp tục thực phương thức ▫ Xử lý theo một cách khác thay cho việc bỏ qua kết ▫ Thoát khỏi chương trình ... phát khơng giải phóng 19 2.2 Mơ hình xử lý ngoại lệ • Hướng đối tượng ▫ Đóng gói điều kiện khơng mong đợi một đối tượng ▫ Khi xảy ngoại lệ, đối tượng tương ứng với ngoại lệ tạo chứa thông tin chi... ngoại lệ mạnh • Xử lý ngoại lệ Java thực theo mơ hình hướng đối tượng: ▫ Tất ngoại lệ thể một lớp kế thừa từ lớp Throwable lớp ▫ Các đối tượng có nhiệm vụ chuyển thông tin ngoại lệ (loại và...2 Mục tiêu học • Giải thích ngoại lệ mơ tả lợi ích việc xử lý ngoại lệ hướng đối tượng • Giải thích mơ hình xử lý ngoại lệ • Sử dụng khối try/catch/finally để bắt xử lý ngoại

Ngày đăng: 12/01/2016, 21:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

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

TÀI LIỆU LIÊN QUAN

w