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

Bài giảng Lập trình hướng đối tượng: Bài 10 - Ngoại lệ và xử lý ngoại lệ

62 6 0

Đ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 62
Dung lượng 806,84 KB

Nội dung

Bài giảng Lập trình hướng đối tượng: Bai 10 - Ngoại lệ và xử lý ngoại lệ được biên soạn với mục tiêu giải thích về ngoại lệ là gì và mô tả các lợi ích của việc xử lý ngoại lệ hướng đối tượng; Giải thích được mô hình xử lý ngoại lệ; Sử dụng khối try/catch/finally để bắt và xử lý ngoại lệ trong Java; Hiểu và biết cách sử dụng ủy nhiệm ngoại lệ; Biết cách tạo ra và sử dụng ngoại lệ tự định nghĩa. Mời các bạn cùng tham khảo bài giảng.

Bài 10 Ngoại lệ xử lý ngoại lệ 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 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 sự kiện xảy quá trình thực thi chương trình, nó phá vỡ luồng bình thường của 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 ngoại lệ, nếu 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 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 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 != 0){ error = 0; return num/denom; } else { error = 1; return 0; } } Nhược điểm ❖ Khó kiểm sốt hết trường hợp ▪ Lỗi số học, lỗi 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 Nợi dung Ngoại lệ Bắt xử lý ngoại lệ Ủy nhiệm ngoại lệ Tạo ngoại lệ tự định nghĩa 10 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 ngăn xếp phương thức tạo ▪ Giả sử C() xảy ngoại lệ 48 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 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 49 3.3 Kế thừa ủy nhiệm ngoại lệ ❖ Khi override phương thức của 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 tập của các ngoại lệ được tung ở lớp cha 50 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 } 51 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ệ ❖ KL: Làm chương trình dễ đọc an tồn 52 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 53 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ừ lớp Exception hoặc lớp của 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); } } 54 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ệ 55 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()); } } } 56 Tổng kết ❖ Bất có lỗi xảy thực chương trình ngoại lệ xuất ❖ Mọi ngoại lệ đề phải xử lý khơng muốn chương trình kết thúc cách bất thường ❖ Xử lý ngoại lệ cho phép kết hợp xử lý lỗi nơi ❖ Java sử dụng khối try/catch để quản lý ngoại lệ 57 Tổng kết (2) ❖ Các câu lệnh khối try tung ngoại lệ, việc xử lý ngoại lệ diễn khối catch ❖ Nhiều khối catch sử dụng để xử lý tách biệt loại ngoại lệ khác ❖ Từ khóa throws sử dụng để liệt kê danh sách ngoại lệ mà phương thức tung ❖ Từ khóa throw sử dụng để tung ngoại lệ ❖ Khối finally để thực công việc cần thiết dù có ngoại lệ xảy hay khơng 58 Bài tập 59 Bài tập ❖ Hệ thống liên tục nhận các giá trị đầu vào là xâu đại diện cho một số nguyên, yêu cầu mỗi lần nhận được một sớ thì tính trung bình cợng của các giá trị đã nhận ❖ Xây dựng phương thức: ▪ public double getAverage(string x) với tḥc tính average, N có sẵn lớp ❖ Hãy cài đặt phương thức đó có xử lý các ngoại lệ xảy ra: ▪ Xâu đầu vào là xâu rỗng ▪ Xâu đầu vào không phải là số ▪ Xâu đầu vào không phải là số nguyên 60 60 Bài tập ❖ Hệ thống cần đọc file để lấy một dãy các số (mỡi dịng mợt sớ ngun) ▪ Dịng của file là số lượng các số có file ▪ Mỗi dịng là mợt sớ ngun ❖ Xây dựng phương thức đọc dãy số: ▪ public void readListIntegers(String fileName) ❖ Hãy xử lý các ngoại lệ: ▪ ▪ ▪ ▪ Xâu tên file là xâu rỗng Không tìm thấy file Không mở được file Các xâu từng dòng của file không phải là đại diện cho số 61 61 Bài tập ❖ Hệ thống cần đọc file đầu vào để lấy một dãy các số (mỗi dịng mợt sớ ngun), sau đó tách thành phần bằng và ghi các file khác ▪ Dịng của file đầu vào là sớ lượng các sớ có file Mỡi dịng sau đó là một số nguyên ▪ Xây dựng phương thức phân tách dãy sớ: • public void splitListIntegers(String fileName) ❖ Hãy xử lý các ngoại lệ: Xâu tên file là xâu rỗng Không tìm thấy file Không mở được file Các xâu từng dịng của file khơng phải là đại diện cho số ▪ Không ghi được file mới ▪ ▪ ▪ ▪ 62 62 ... Mơ hình xử lý ngoại lệ (2) ❖ Ngoại lệ cần phải xử lý phương thức sinh ngoại lệ ủy nhiệm cho phương thức gọi đến 14 2.3 Xử lý ngoại lệ Java ❖ Java có chế xử lý ngoại lệ mạnh ❖ Xử lý ngoại lệ Java... 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. .. 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 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

Ngày đăng: 26/01/2023, 17:44

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

TÀI LIỆU LIÊN QUAN