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