Microsoft PowerPoint sUA ppt [Autosaved] v1 0011103217 1 BÀI 7 LẬP TRÌNH XỬ LÝ NGOẠI LỆ TRONG JAVA GIẢNG VIÊN TRẦN THỊ VÂN TÌNH HUỐNG DẪN NHẬP Bài toán Xây dựng hệ thống cảnh báo lỗiBài toán Xây dựng[.]
BÀI LẬP TRÌNH XỬ LÝ NGOẠI LỆ TRONG JAVA GIẢNG VIÊN: TRẦN THỊ VÂN v1.0011103217 TÌNH HUỐNG DẪN NHẬP Bài toán: Xây dựng hệ thống cảnh báo lỗi Hôm đường làm Nam gặp phải đoạn đường làm dở, Nam bực khơng thể tiếp tục khơng thể cho xe chạy qua đoạn đường Sau hồi vịng vo, Nam định rẽ sang đoạn đường khác để ể Vậy Nam đến quan muộn Nam nghĩ đoạn đường làm ợ đưa thơng g báo khơng g bịị muộn ộ làm Vậy theo Vậ h Anh A h Chị nên ê xây â dựng d hệ thống hố cảnh ả h báo bá lỗi hế để Nam N biế để biết tránh lỗi có khả xảy đến v1.0011103217 MỤC TIÊU Trình bày khái niệm ngoại lệ Mơ tả cách thức bắt lỗi, xử lý lỗi Java Sử dụng số lớp bắt lỗi cung cấp sẵn Java Xây dựng lớp bắt lỗi người dùng dùng Xây dựng chương trình sử dụng số lớp bắt lỗi Java lớp bắt lỗi người dùng tự định nghĩa v1.0011103217 NỘI DUNG Giới thiệu ngoại lệ Cách bắt ngoại lệ Phân â loại ngoại lệ ệ Checked Unchecked Exception Ngoại lệ người dùng định nghĩa v1.0011103217 NGOẠI LỆ (EXCEPTION) Exception kiện xảy trình thực thi chương trình, trình thơng thường trường hợp khơng mong muốn xuất trình xử lý Trên đường đua người đua xe không ngờ tai nạn xảy đến với v1.0011103217 Người lái xe khơng ngờ xe bị lao xuống bể bơi NGOẠI LỆ (EXCEPTION) (tiếp theo) • Ngoại lệ java đối tượng miêu tả trạng thái lỗi xảy đoạn mã Khi trạng thái lỗi nảy sinh, đối tượng đại diện cho ngoại lệ tạo chuyển cho phương thức gây nên lỗi lỗi Phương thức tự xử lý ngoại lệ cho qua g xảyy Exception: p • Các tình Lỗi chương trình Lỗi mã người dùng Lỗi không thuộc phạm vi kiểm sốt chương trình • Trong Java, lớp Exception dùng để mô tả đối tượng ngoại lệ, chứa thông tin ngoại lệ phục vụ cho q trình xử lý lý • Sử dụng ngoại lệ giúp cho q trình xử lý lỗi nhanh xác v1.0011103217 CÂU HỎI TƯƠNG TÁC Vì phải sử dụng ngoại lệ? v1.0011103217 TUNG VÀ BẮT EXCEPTION • Cách bắt Exception: Sử dụng cấu trúc try…cacth…finaly… • Cách tung Exception: Sử dụng từ khóa throw throws v1.0011103217 CÁCH BẮT CÁC EXCEPTION Sử dụng khối lệnh try t … catch: t h try { //Các câu lệnh có khả tung ngoại lệ }catch(Exception ex) { // //Các câu lệnh ệ xử lý ý g tình g bắt ợ ngoại lệ Exception: Đối tượng để bắt ngoại lệ } v1.0011103217 SỬ DỤNG KHỐI NHIỀU KHỐI try…catch LIỀN NHAU try { //Các câu lệnh có khả tung ngoại lệ }catch( ex) { //Các câu lệnh xử lý tình bắt ngoại lệ ExceptionType1 }catch( ex2) { // //Các câu lệnh ệ xử lý ý g tình g bắt ợ ngoại g lệ ệ ExceptionType2 } • Exceptiontype1, Exceptiontype2: Đối tượng để bắt ngoại lệ; • Trong â phân â cấp ấ kế ế thừa: Đối ố tượng Exceptiontype1 phải ả thuộc cấp với Exceptiontype2, lớp p yp Exceptiontype2 v1.0011103217 10 VÍ DỤ public class ThrowDemo{ public static void demoproc() { try { throw new NullPointerException("demo"); NullPointerException( demo ); } catch (NullPointerException e) { System.out.println("Caught inside demoproc."); throw e; } } public bli static t ti void id main(String[] i (St i [] args) ) { try { demoproc(); } catch t h (N (NullPointerException llP i t E ti e) ) { System.out.println("Recaught: " + e); } } } Caught C h inside i id demoproc d Recaught: java.lang.NullPointerException: demo v1.0011103217 18 PROPERTIES On passing passing, 'Finish' Finish button: On failing, 'Finish' button: Allow user to leave quiz: User may view slides after quiz: User may attempt quiz: Goes to Next Slide Goes to Next Slide At any time At any time Unlimited times PHÂN LOẠI CÁC EXCEPTION • Unchecked Exception; p ; • Checked Exception Throwable Exception Any class besides Exception Any subclass Runtime Exception Any subclass Any class besides RuntimeException Any Subclass Ngoại g lệ ệ thuộc ộ loại unchecked Ngoại lệ thuộc loại checked v1.0011103217 20 3.1 CHECKED EXCEPTION Khi Checked Exception tung bắt buộc đoạn mã xử lý phải bắt ngoại lệ Ngoại lệ (Exception) Mô tả InstantiationException Ngoại lệ xảy người sử dụng cố tình tạo thể lớp trừu tượng InterruptedException Ngoại lệ xảy tác vụ thực thi bị ngừng hoạt động NoSuchMethodException Ngoại lệ xảy máy ảo java (JVM) kiểm tra truy xuất vào phương thức gọi gọi v1.0011103217 21 3.2 UNCHECKED EXCEPTION Khi ộ Unchecked Exception p ợ tung g lập ập trình viên bắt ặ không bắt ngoại lệ Ngoại lệ (Exception) RuntimeException ArithmeticException Mô tả Ngoại lệ xảy trình thực thi chương trình lỗi làm chương trình ngưng hoạt động Ngoại lệ xảy lỗi liên quan đến phép toán bị sai phạm N Ngoại i lệ xảy ả truy t xuất ất vào phần hầ tử nullll ArrayIndexOutOfBoundsException mảng, truy xuất phần tử không tồn mảng IllegaArgumentException NumberFormatException StringIndexOutOfBoundException v1.0011103217 Ngoại lệ xảy kích thước mảng khởi tạo nhỏ Ngoại lệ xảy chuyển ể từ chuỗi ỗ sang số không hợp lệ Ngoại lệ xảy số mảng chuỗi số âm khơng hợp lệ 22 VÍ DỤ MINH HỌA VỀ CHECKED EXCEPTION //Lop p y minh hoa ve checked exception p public class CheckedExceptionDemo { //phuong thuc goi den ham canthrowCheckedException de nen loi public void doChecked() { // Buoc B phai h i check h k exception ti o day! d ! Khong Kh cach h nao khac kh canThrowCheckedException(); System.out.println("OK"); } private int canThrowCheckedException() throws Exception { throw new Exception("Failure"); } p blic static void public oid main(String[] args) { Nếu không new CheckedExceptionDemo().doChecked(); System.out.println("Lenh sau bat loi"); check lỗi } } Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - unreported exception java.lang.Exception; must be caught or declared to be thrown at CheckedExceptionDemo.doChecked(CheckedExceptionDemo.java:6) at CheckedExceptionDemo.main(CheckedExceptionDemo.java:15) CheckedExceptionDemo main(CheckedExceptionDemo java:15) Java Result: v1.0011103217 23 VÍ DỤ MINH HỌA VỀ UNCHECKED EXCEPTION /** * Client.java Client java */ public class Client { public void doUnchecked(String value) { // Can phai check exception, exception neu khong > bug int result=canThrowUncheckedException(value); System.out.println("result="+result); } private int canThrowUncheckedException(String value)throws NumberFormatException{ return Integer.parseInt(value); } public void doChecked() { try { // Buoc phai check exception o day! Khong cach nao khac canThrowCheckedException(); System out println("OK"); System.out.println("OK"); }catch(Exception ex) { System.out.println(ex); } } private int canThrowCheckedException() throws Exception{ throw new Exception("Failure"); } } Bài tập v1.0011103217 24 XÂY DỰNG CÁC NGOẠI LỆ • Sử dụng cách thức kế thừa ngoại lệ định nghĩa trước để tạo ngoại lệ • Ví dụ tạo checked Exception: public class ZeroNumberException extends Exception { public ZeroNumberException() p p () { super("Zero number!"); } } public void methodTest(int n) throws ZeroNumberException{ if(n==0) { throw new ZeroNumberException(); } } v1.0011103217 25