Mục tiêu CƠNG NGHỆ JAVA • • • • • CH5 QUẢN LÝ LỖI VÀ GOM RÁC Giảng viên: ThS Lê Nhật Tùng www.lenhattung.com 2/23/2018 http://www.lenhattung.com Nội dung 2/23/2018 http://www.lenhattung.com Exception • Java ngơn ngữ mạnh, có nghĩa tối thiểu hóa lỗi có lỗi chúng quản lý • Lỗi có loại: 1- Exception gì? 2- Cấu trúc quản lý lỗi Java 3- Mơ hình try catch finally 4- Sử dụng throws 5- Tự định nghĩa exceptions 6- Cơ chế gom rác 7- Tóm tắt-trắc nghiệm-bài tập 2/23/2018 Định nghĩa exception Phân loại exception Sử dụng cú pháp try catch finally Biết cách tự quản lý exception Giải thích chế gom rác Java http://www.lenhattung.com – Lỗi lúc biên dịch (compile-time error-lỗi cú pháp) – Lỗi lúc thực thi (run-time error- giải thuật sai, khơng dự đốn tình huống) • Exception= runtime-error • Thí dụ: thực phép chia mà mẫu số 2/23/2018 http://www.lenhattung.com Exception Mục đích việc xử lý • Là kiểu lỗi đặc biệt, xảy thời gian thực thi khối lệnh gây ngừng đột ngột chương trình • Các lỗi thường gây nên biệt lệ: • Giảm thiểu việc kết thúc bất thường hệ thống chương trình • Ví dụ: thao tác tập tin gặp lỗi mà khơng xử lý chương trình kết thúc đột ngột file khơng đóng dẫn đến hư file nguồn tài nguyên không giải phóng – Tràn nhớ – Lỗi cấp phát tài ngun – Khơng tìm thấy file – Lỗi kết nối 2/23/2018 http://www.lenhattung.com Java API Exception Hierachy 2/23/2018 http://www.lenhattung.com Cấu trúc class quản lý lỗi Java • Exception: lớp phân cấp exception • RuntimeException: Lớp nhiều lớp java.lang.exceptions • ArithmaticException: Quản lý lỗi tóan học chia cho • IllegalArgumentException : Lỗi sai đối số • ArrayIndexOutOfBoundsException: Lỗi sai số mảng • NullPointerException: Lỗi truy xuất đối tượng chưa khởi tạo • SecurityException : Lỗi khơng quyền truy cập • ClassNotFoundException: Lỗi khơng thể nạp lớp khơng có lớp 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com Cấu trúc class quản lý lỗi Java(tt) • • • • • • • • • Quá trình xử lý lỗi NumberFormatException: Lỗi chuyển String ->float AWTException: Lỗi Abstract Windowing Toolkit ArithmaticException: Quản lý lỗi tóan học chia cho IOException : Lớp IO exception FileNotFoundException: Lỗi khơng có file đặc tả EOFException: Lỗi cố truy xuất liệu mà file hết IllegalAccessException : Lỗi truy xuất đến 1class bị cấm NoSuchMethodException: Lỗi khơng có method đặc tả InterruptedException: luồng bị ngắt 2/23/2018 http://www.lenhattung.com • • • • • • Xử lý biệt lệ nào? Xác định loại lỗi đoạn lệnh xảy lỗi Xác định chế bắt lỗi Xác định vị trí đoạn lệnh cần viết để bắt lỗi Xác định thông báo hiển thị lỗi xảy Viết đoạn lệnh xử lý lỗi Lưu, biên dịch chạy chương trình 2/23/2018 http://www.lenhattung.com 10 http://www.lenhattung.com 12 Biệt lệ • Khi biệt lệ xảy đối tượng tương ứng tạo • Đối tượng truyền tới phương thức nơi mà biệt lệ xảy • Đối tượng chứa thông tin chi tiết biệt lệ, thơng tin nhận xử lý • Lớp “Throwable” Java lớp cha tất biệt lệ 2/23/2018 http://www.lenhattung.com 11 2/23/2018 Mơ hình xử lý biệt lệ Try-catch-finally • Các mơ hình dùng để xử lý biệt lệ: • Sử dụng khối try, catch, finally để bắt giữ ngoại lệ – try-catch-finally – Throw / throws Khối lệnh ném ngoại lệ Khối lệnh thực ngoại lệ xảy Khối lệnh thực bất chấp ngoại lệ xảy hay không 2/23/2018 http://www.lenhattung.com 13 Try-catch-finally 2/23/2018 http://www.lenhattung.com 14 Try-catch-finally public static void method(String s) { try { String s =“mot”; System.out.println(Integer.parseInt(s)); } catch (NumberFormatException e) { System.out.println("wrong fomat"); } finally{ System.out.println(“String s = ”+s); } } 2/23/2018 http://www.lenhattung.com 15 2/23/2018 http://www.lenhattung.com 16 Throw Throws Throw Throws • Tóan tử throw cho phép thị exception xẩy Kết đối tượng lớp dẫn xuất lớp Throwable • Tình huống: method X() gọi method Y(), Y() thực thi gây exception mà không quản lý, exception lan cho phương thức gọi X() Nếu X() không quản lý lỗi Lỗi truyền cho nơi gọi X() • Cách giải quyết: a) Trong Y() có quản lý lỗi; b) Trong X() có có cấu trúc try…catch để quản lý lỗi 2/23/2018 http://www.lenhattung.com 17 • Các biệt lệ chặn trợ giúp từ khóa throw • Throw giúp biệt lệ vừa xảy • Tốn hạng throw đối tượng lớp mà lớp dẫn xuất từ Throwable try{ if (flag < 0){ throw new MyException( ) ; // user-defined } } 2/23/2018 http://www.lenhattung.com Throw Throws Throw Throws • Lớp Exception thực thi giao diện Throwable cung cấp tính hữu dụng để phân phối biệt lệ • Một lớp lớp Exception biệt lệ bắt giữ độc lập Throwable khác • Cú pháp sinh Exception hàm ReturnType Method (…) throws ExceptionClass { if (…) throw ExceptionClass(“Message”); else { …… } } 2/23/2018 2/23/2018 http://www.lenhattung.com 19 http://www.lenhattung.com 18 20 Throw Throws Dọn rác • Một phương thức đơn chặn nhiều biệt lệ • Java cung cấp chế gom rác tự động Garbage collection mà người lập trình khơng cần phải quan tâm xử lý rác • Đối tượng khơng tham chiếu tới gom rác public class Example { public void exceptionExample( ) throws ExException, LookupException { try{ // statements } catch(ExException exmp) { … } catch(LookupException lkpex) { … } } } 2/23/2018 http://www.lenhattung.com 21 2/23/2018 http://www.lenhattung.com Cơ chế gom rác Cơ chế gom rác- finalize() method • Hiện thực heap động (xem lại chương 1) • Dù có thủ cơng gọi trình gom rác System.gc() khơng bảo đảm việc gom rác thực thi • Có thể thủ cơng tắt trình gom rác thị java –noasyncgc File.class phải trả giá thiếu nhớ số đối tượng sinh chương trình khó tiên liệu Hiệu suất chương trình • Java cung cấp phương thức finalize() họat động Destructor C++ để hủy trình trước qúa trình trả điều khiển cho hệ điều hành • Chú ý: Chỉ có đối tượng bị gom rác tham khảo đến đối tượng khơng bị gom • Cú pháp: protected void finalize() throws Throwable 2/23/2018 http://www.lenhattung.com 23 2/23/2018 22 http://www.lenhattung.com 24 Dọn rác: nulling a reference Ví dụ • Cách để dọn rác set tham chiếu đối tượng thành null Garbage collection làm việc sau câu lệnh 2/23/2018 http://www.lenhattung.com 25 Kết http://www.lenhattung.com 26 Xử lý trước gom rác Total JVM memory: 5177344 Before Memory = 4974672 After Memory = 4728504 After GC Memory = 5045864 2/23/2018 2/23/2018 http://www.lenhattung.com • finally() methods: – Giải phóng tài nguyên cấp phát trước gom rác đối tượng – Khơng nên overridden lại phương thức bạn chắn lúc hàm hủy gọi 27 2/23/2018 http://www.lenhattung.com 28 Tóm tắt-trắc nghiệm-bài tập 10 11 12 2/23/2018 Có hai lọai lỗi: Lỗi lúc biên dịch lỗi thực thi Lỗi biên dịch lỗi ……………………… Lỗi lúc thực thi gọi ……………… Nếu khơng quản lý Exception, chương trình ngắt đột ngột điều khiển trả cho …………………………………… Hòan tòan bẫy …………………………… Quản lý exception cho phép xử lý lỗi lúv (true/false) từ khóa dùng để bẫy lỗi : ………………………………… Từ khóa throws cho phép dùng exception mà hàm xử lý (true/false) Từ khóa throw thị exception xẩy (true/false) Từ khóa finally thị nơi bắt đầu khối phát biểu khơng phụ thuộc vào lỗi có xẩy hay khơng (true./false) Ta tự tạo Exception class (true/false) System.gc() yêu cầu hệ thống ………………………… http://www.lenhattung.com 29 ... http://www.lenhattung.com Java API Exception Hierachy 2/23/2018 http://www.lenhattung.com Cấu trúc class quản lý lỗi Java • Exception: lớp phân cấp exception • RuntimeException: Lớp nhiều lớp java.lang.exceptions... đơn chặn nhiều biệt lệ • Java cung cấp chế gom rác tự động Garbage collection mà người lập trình khơng cần phải quan tâm xử lý rác • Đối tượng khơng tham chiếu tới gom rác public class Example... http://www.lenhattung.com Cơ chế gom rác Cơ chế gom rác- finalize() method • Hiện thực heap động (xem lại chương 1) • Dù có thủ cơng gọi trình gom rác System.gc() khơng bảo đảm việc gom rác thực thi • Có