Exception trong lập trình nâng cao

4 311 1
Exception trong lập trình nâng cao

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

Thông tin tài liệu

1 Introduction to Java 2 / Session / 1 of 16 Xử lý lỗi – ngoại lệ Chuyên đề Lập trình Java Chương 5 Biên soạn: Th.S Nguyễn văn Lành 2 of 16 3:00 PM Nội dung ¾ Khái niệm Error & Exception ¾ Cấu trúc try – catch – finally ¾ Mệnh đề throw & throws ¾ Định nghĩa lớp Exception ¾ Exception và overriding 3 of 16 3:00 PM Khái niệm Error - Exception ¾ Phân loại 9 Error : các lỗi không bình thường, khó dựđoán, không có khả năng phục hồi: y hết bộ nhớ, lỗi hệ thống, môi trường 9 Exception: các tình huống có thể xảy ra làm ảnh hưởng đến logic bình thường của chương trình y lỗi logic, lỗi lập trình ¾ Các loại lỗi & ngoại lệđều được biểu diễn bởi các lớp Error & Exception kế thừa từ lớp java.lang.Throwable ¾ Exception chứa thông tin về tình huống lỗi, bao gồm kiểu lỗi, trạng thái của CT khi lỗi xảy ra. ¾ Hệ thống JVM chịu trách nhiệm tìm kiếm mã chương trình dành cho việc xử lý ngoại lệ 4 of 16 3:00 PM Khái niệm Error - Exception ¾ Cấu trúc phân cấp các lớp lỗi-ngoại lệ trong Java 9 Throwable: quẳng đi được 2 5 of 16 3:00 PM Exception ¾ Phân loại Exception 9Runtime exceptions: y lỗi khi chạy CT, thường do viết mã chưa chuẩn truy xuất vượt phạm vi mảng y Có thể dựđoán tránh được khi viết mã nguồn y RuntimException & các lớp con của nó y không cần xử lý 9Checked exceptions y lỗi đã được kiểm tra dự báo lỗi nhập liệu, vào ra y Exception và các lớp con - ngoại trừ RuntimeException y phải có mã xử lý: 6 of 16 3:00 PM Tạo ra Exception, ném ngoại lệ ¾ Trong Java tạo ra 1 đối tượng Exception khi có lỗi và chuyển nó vào môi trường JVM tại thời điểm chạy CT được gọi là ném ngoại lệ - throwing an exception. ¾ Dựđoán lỗi có thể xảy ra và chuẩn bị mã xử lý gọi là bắt lấy lỗi – catching an exception ¾ Các lỗi liên quan đến logic của ứng dụng nên được biểu diễn bằng cách định nghĩa các lớp con của Exception 9 public class BankingException extends Exception { public BankingException(String msg) {super(msg); } } 7 of 16 3:00 PM từ khoá throw và throws ¾ các Exception được thực sự ném ra từ các hàm khi cần thông báo cho đối tượng gọi hàm tình trạng lỗi ¾ dùng mệnh đề throw để thực hiện ném ra Exception if (balance<amount) throw new BankingException(“Out of money”); ¾ Phương thức chứa câu lệnh trên phải khai báo khả năng lỗi bằng mệnh đề throws public double withdraw(double amount) throws BankingException{ if (balance<amount) throw new BankingException(“No money”); else balance-=amount; return balance; } 8 of 16 3:00 PM Xử lý Exception ¾ Trình biên dịch Java yêu cầu tất cả checked Exception phải được xử lý ¾ Hai lựa chọn xử lý Exception: 9 bắt lỗi và xử lý dùng khối try – catch - finally . 9 tuyên bố ném lỗi dùng khai báo throws ¾ Các lỗi RuntimeException khi thi hành 1 phương thức sẽ kết thúc việc thi hành các lệnh tiếp theo của phương thức, đồng thời, exception nầy sẽ được ném về phía đối tượng gọi phương thức. 9 nếu không có mã xử lý sẽ trả về hàm main để kết thúc 3 9 of 16 3:00 PM Sử dụng try catch finally ¾ try{ doSomething; } catch(Exception e){ doXulyLoi; } finally { alwayDoThis; } ¾ khối try: 9 các câu lệnh có khả năng sinh lỗi exception. 9 sẽ kết thúc thi hành các lệnh còn lại để nhảy sang khối catch khi có lỗi xảy ra. ¾ khối catch: 9 các câu lệnh xử lý lỗi. 9 Thông tin về lỗi lưu trong Exception e 9 nếu có nhiều loại Exception thì có thể dùng nhiều khối catch. 9 Không thể catch nếu không có khả năng lỗi trong khối try ¾ khối finally: (optional) 9 các câu lệnh sẽđược thi hành, bất kể có lỗi hay không 9 lỗi có thể xảy ra trong khối finally 10 of 16 3:00 PM Sử dụng try catch Example: int x = (int)(Math.random() * 5); int y = (int)(Math.random() * 10); int [] z = new int[5]; try { System.out.println(“y/x gives “ + (y/x)); System.out.println(“y is “+ y + “ z[y] is “ + z[y]); } catch (ArithmeticException e) { System.out.println(“Arithmetic problem “ + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(“Subscript problem “ + e); } ¾ Try phải đi kèm với catch hoặc finally 11 of 16 3:00 PM 12 of 16 3:00 PM Exception và Overriding ¾ phương thức override không được phép ném ra nhiều checked exceptions hơn phương thức nguyên thuỷởlớp cơ sở 9 Vì lý do đó, một số lớp cơ sở cần phải khai báo ném ra Exception dù thực tế không hề có Exception ¾ phương thức override có thể ném ra các Exception sao cho các exception nầy là lớp con của exception đã được ném ra ở phương thức nguyên thuỷ 4 13 of 16 3:00 PM Exception & Overriding Review question The method risky() might throw a java.io.IOException, java.lang.RuntimeException, java.net.MalformedURLException (which is a subclass of java.io.IOException). Which of the following classes and sets of classes are legal? A. public class SomeClass { public void aMethod() { risky(); } } B. public class SomeClass { public void aMethod() throws IOException { risky(); } } 14 of 16 3:00 PM Exception & Overriding C. public class SomeClass { public void aMethod() throws RuntimeException { risky(); } } D. public class SomeClass { public void aMethod() { try { risky(); } catch (IOException e) { e.printStackTrace(); } } } 15 of 16 3:00 PM Exception & Overriding E. public class SomeClass { public void aMethod() throws MalformedURLException { try { risky(); } catch (IOException e) { } } }; public class AnotherClass extends SomeClass { public void aMethod() throws java.io.IOException { super.aMethod(); } } . báo ném ra Exception dù thực tế không hề có Exception ¾ phương thức override có thể ném ra các Exception sao cho các exception nầy là lớp con của exception. con - ngoại trừ RuntimeException y phải có mã xử lý: 6 of 16 3:00 PM Tạo ra Exception, ném ngoại lệ ¾ Trong Java tạo ra 1 đối tượng Exception khi có lỗi

Ngày đăng: 19/12/2013, 21:36

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