Bài giảng Lập trình hướng đối tượng: Bài 8 - Nguyễn Khanh Văn
lượt xem 2
download
Bài giảng "Lập trình hướng đối tượng - Bài 8: Ngoại lệ và xử lý ngoại lệ" cung cấp cho sinh viên các kiến thức: 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. Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng: Bài 8 - Nguyễn Khanh Văn
- 8/24/2011 Mục tiêu của bài học Bộ môn Công nghệ Phần mềm Giải thích về ngoại lệ là gì và mô tả các lợi Viện CNTT & TT ích của việc xử lý ngoại lệ hướng đối tượng Trường Đại học Bách Khoa Hà Nội 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 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Hiểu và biết cách sử dụng ủy nhiệm ngoại lệ Bài 08. Ngoại lệ và xử lý ngoại lệ Biết cách tạo ra và sử dụng ngoại lệ tự định nghĩa 2 Nội dung Nội dung 1. Ngoại lệ 1. Ngoại lệ 2. Bắt và xử lý ngoại lệ 2. Bắt và xử lý ngoại lệ 3. Ủy nhiệm ngoại lệ 3. Ủy nhiệm ngoại lệ 4. Tạo ngoại lệ tự định nghĩa 4. Tạo ngoại lệ tự định nghĩa 3 4 1.1. Ngoại lệ là gì? 1.1. Ngoại lệ là gì? (2) Exception = Exceptional event ERROR !! Ví dụ: 5 6 1
- 8/24/2011 1.2. Cách xử lý lỗi truyền thống Ví dụ Viết mã xử lý tại nơi phát sinh ra lỗi int devide(int num, int denom, int *error) { Truyền trạng thái lên mức trên if (denom != 0){ error = 0; return num/denom; } else { error = 1; return 0; } } 7 8 Nhược điểm Nội dung 1. Ngoại lệ 2. Bắt và xử lý ngoại lệ 3. Ủy nhiệm ngoại lệ 4. Tạo ngoại lệ tự định nghĩa 9 10 2.1. Mục đích của xử lý ngoại lệ 2.1. Mục đích của xử lý ngoại lệ (2) Khi xảy ra ngoại lệ, nếu không có cơ chế xử lý thích hợp? ………… IF B IS ZERO GO TO ERROR C = A/B PRINT C GO TO EXIT ERROR: DISPLAY “DIVISION BY ZERO” Khối xử lý lỗi EXIT: END 11 12 2
- 8/24/2011 2.2. Mô hình xử lý ngoại lệ 2.2. Mô hình xử lý ngoại lệ (2) Hướng đối tượng 2 cách 13 14 2.3. Xử lý ngoại lệ trong Java 2.3. Xử lý ngoại lệ trong Java (2) Java có cơ chế xử lý ngoại lệ rất Các từ khóa mạnh try catch finally throw throws 15 16 2.3.1. Khối try/catch Ví dụ không xử lý ngoại lệ Khối try ... catch: class NoException { public static void main(String args[]) { try { String text = args[0]; // Doan ma co the gay ngoai le System.out.println(text); } } catch (ExceptionType e) { } // Xu ly ngoai le } 17 18 3
- 8/24/2011 Ví dụ có xử lý ngoại lệ Ví dụ chia cho 0 public class ChiaCho0Demo { public static void main(String args[]){ class ArgExceptionDemo { try { public static void main(String args[]) { int num = calculate(9,0); try { System.out.println(num); String text = args[0]; } System.out.println(text); catch(Exception e) { } System.err.println("Co loi xay ra: " + e.toString()); catch(Exception e) { } System.out.println(“Hay nhap tham so khi chay!"); } } static int calculate(int no, int no1){ } int num = no / no1; } return num; } } 19 20 a. Lớp Throwable 2.3.2. Cây phân cấp ngoại lệ trong Java Một số phương thức cơ bản? 21 22 public class StckExceptionDemo { b. Lớp Error public static void main(String args[]){ try { int num = calculate(9,0); System.out.println(num); Các lớp con: } VirtualMachineError: InternalError, OutOfMemoryError, StackOverflowError, catch(Exception e) { System.err.println(“Co loi xay ra :" + e.getMessage()); UnknownError e.printStackTrace(); } ThreadDeath } LinkageError: static int calculate(int no, int no1) { int num = no / no1; IncompatibleClassChangeError return num; AbstractMethodError, InstantiationError, NoSuchFieldError, } NoSuchMethodError… } … … 23 24 4
- 8/24/2011 c. Lớp Exception Một số lớp con của Exception Chứa các loại ngoại lệ ClassNotFoundException, SQLException java.io.IOException: nên/phải bắt và xử lý FileNotFoundException, EOFException… hoặc ủy nhiệm. RuntimeException: RuntimeException? NullPointerException, BufferOverflowException ClassCastException, ArithmeticException IndexOutOfBoundsException: ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException… IllegalArgumentException: NumberFormatException, InvalidParameterException… … 25 26 Ví dụ IOException 2.3.3. Khối try – catch lồng nhau import java.io.InputStreamReader; import java.io.IOException; public class HelloWorld{ try { // Doan ma co the gay ra IOException public static void main(String[] args) { try { InputStreamReader isr = new // Doan ma co the gay ra NumberFormatException } InputStreamReader(System.in); catch (NumberFormatException e1) { try { // Xu ly loi sai dinh dang so } System.out.print("Nhap vao 1 ky tu: "); } catch (IOException e2) { char c = (char) isr.read(); // Xu ly loi vao ra System.out.println("Ky tu vua nhap: " + c); } }catch(IOException ioe) { ioe.printStackTrace(); } } 27 28 } 2.3.4. Nhiều khối catch ExceptionType1 phải là lớp con hoặc ngang hàng với ExceptionType2 (trong cây phân cấp kế thừa) try { class MultipleCatch1 { public static void main(String args[]) // Doan ma co the gay ra nhieu ngoai { le try { String num = args[0]; } catch (ExceptionType1 e1) { int numValue = Integer.parseInt(num); System.out.println("Dien tich hv la: " // Xu ly ngoai le 1 + numValue * numValue); } catch (ExceptionType2 e2) { } catch(Exception e1) { System.out.println("Hay nhap canh cua hv!"); // Xu ly ngoai le 2 } catch(NumberFormatException e2){ System.out.println("Not a number!"); } ... } } } 29 30 5
- 8/24/2011 class MultipleCatch1 { class MultiCatch2 { public static void main(String args[]) public static void main( String args[]) { { try { try { // format a number String num = args[0]; // read a file int numValue = Integer.parseInt(num); // something else... System.out.println("Dien tich hv la: " } + numValue * numValue); } catch(ArrayIndexOutOfBoundsException e1) { catch(IOException e) { System.out.println(“Hay nhap canh cua hv!"); System.out.println("I/O error "+e.getMessage(); } catch(NumberFormatException e2){ } System.out.println(“Hay nhap 1 so!"); catch(NumberFormatException e) { } System.out.println("Bad data "+e.getMessage(); } } } catch(Throwable e) { // catch all System.out.println("error: " + e.getMessage();} } } 31 32 } ... public void openFile(){ 2.3.5. Khối finally try { // constructor may throw FileNotFoundException FileReader reader = new FileReader("someFile"); int i=0; while(i != -1) { //reader.read() may throw IOException i = reader.read(); System.out.println((char) i ); } reader.close(); System.out.println("--- File End ---"); } catch (FileNotFoundException e) { No exception finally //do something clever with the exception } catch (IOException e) { //do something clever with the exception try block } } catch block finally ... Exception 33 34 Cú pháp try ... catch ... finally class StrExceptionDemo { static String str; public static void main(String s[]) { try { try { // Khoi lenh co the sinh ngoai le System.out.println(“Truoc ngoai le"); staticLengthmethod(); } System.out.println(“Sau ngoai le"); catch(ExceptionType e) { } // Bat va xu ly ngoai le catch(NullPointerException ne) { } System.out.println(“Da xay ra loi"); finally { } finally { /* Thuc hien cac cong viec can thiet du System.out.println(“Trong finally"); ngoai le co xay ra hay khong */ } } } static void staticLengthmethod() { System.out.println(str.length()); } 35 } 36 6
- 8/24/2011 public void openFile(){ Nội dung try { // constructor may throw FileNotFoundException FileReader reader = new FileReader("someFile"); int i=0; 1. Ngoại lệ while(i != -1) { //reader.read() may throw IOException i = reader.read(); 2. Bắt và xử lý ngoại lệ } System.out.println((char) i ); 3. Ủy nhiệm ngoại lệ Tạo ngoại lệ tự định nghĩa } catch (FileNotFoundException e) { //do something clever with the exception 4. } catch (IOException e) { //do something clever with the exception } finally { reader.close(); System.out.println("--- File End ---"); } } 37 38 Hai cách làm việc với ngoại lệ 3.1. Ủy nhiệm ngoại lệ Xử lý ngay Ví dụ Ủy nhiệm cho vị trí gọi nó: public void myMethod(int param) throws Exception{ if (param < 10) { throw new Exception("Too low!"); } //Blah, Blah, Blah... } 39 40 3.1. Ủy nhiệm ngoại lệ (3) public class DelegateExceptionDemo { public static void main(String args[]){ int num = calculate(9,3); Ví dụ System.out.println(“Lan 1: ” + num); class Test { num = calculate(9,0); System.out.println(“Lan 2: ” + num); public void myMethod(int param) { } if (param < 10) { static int calculate(int no, int no1) throw new RuntimeException("Too throws ArithmeticException { low!"); if (no1 == 0) throw new } ArithmeticException("Khong the chia cho 0!"); //Blah, Blah, Blah... int num = no / no1; } return num; } } } Không lỗi? 41 42 7
- 8/24/2011 public class DelegateExceptionDemo { public static void main(String args[]){ int num = calculate(9,3); public class DelegateExceptionDemo { System.out.println(“Lan 1: ” + num); public static void main(String args[]){ num = calculate(9,0); try { System.out.println(“Lan 2: ” + num); int num = calculate(9,3); } System.out.println(“Lan 1: ” + num); static int calculate(int no, int no1) num = calculate(9,0); throws Exception { System.out.println(“Lan 2: ” + num); if (no1 == 0) } catch(Exception e) { throw new System.out.println(e.getMessage()); ArithmeticException("Khong the chia cho 0!"); } int num = no / no1; } return 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; } 43 } 44 3.1. Ủy nhiệm ngoại lệ (4) 3.2. Lan truyền ngoại lệ Ủy nhiệm nhiều hơn 1 ngoại lệ C() C() tung ngoại lệ public void myMethod(int tuoi, String ten) B() B() throws ArithmeticException, NullPointerException{ A() A() if (tuoi < 18) { main() throw new ArithmeticException(“Chua du tuoi!"); main() } Nếu C() gặp lỗi và tung ra ngoại lệ nhưng if (ten == null) { throw new NullPointerException(“Thieu ten!"); } //Blah, Blah, Blah... trong C() lại không xử lý ngoại lệ này, thì chỉ } còn một nơi có thể xử lý chính là nơi mà C() được gọi, đó là trong phương thức B(). … 45 46 3.3. Kế thừa và ủy nhiệm ngoại lệ 3.3. Kế thừa và ủy nhiệm ngoại lệ (2) Khi override một phương thức của lớp cha, class Disk { void readFile() throws EOFException {} phương thức ở lớp con không được phép } tung ra các ngoại lệ mới class FloppyDisk extends Disk { void readFile() throws IOException {} } class Disk { void readFile() throws IOException {} } class FloppyDisk extends Disk { void readFile() throws EOFException {} } 47 48 8
- 8/24/2011 3.4. Ưu điểm của ủy nhiệm ngoại lệ Nội dung 1. Ngoại lệ 2. Bắt và xử lý ngoại lệ 3. Ủy nhiệm ngoại lệ 4. Tạo ngoại lệ tự định nghĩa 49 49 50 4. Tạo ngoại lệ tự định nghĩa Sử dụng ngoại lệ người dùng định nghĩa public class MyException extends Exception { public MyException(String msg) { public class FileExample { super(msg); public void copyFile(String fName1,String fName2) } throws MyException public MyException(String msg, Throwable cause){ { super(msg, cause); if (fName1.equals(fName2)) } throw new MyException("File trung ten"); // Copy file } System.out.println("Copy completed"); } } 51 52 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()); } } } 53 9
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 140 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 87 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 100 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 104 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 15 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn