Bài giảng Công nghệ Java - Chương 5: Quản lý lỗi và gom rác

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

pdf 29 trang phuongnguyen 5160
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng 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 hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Công nghệ Java - Chương 5: Quản lý lỗi và gom rác

Bài giảng Công nghệ Java - Chương 5: Quản lý lỗi và gom rác
1CÔNG NGHỆ JAVA
CH5. QUẢN LÝ LỖI VÀ GOM RÁC
Quang Dieu Tran PhD
4/7/2018
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
24/7/2018 
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
34/7/2018 
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
44/7/2018 
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
4/7/2018  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.
4/7/2018  6
Java API Exception Hierachy
4/7/2018  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
84/7/2018 
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
94/7/2018 
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
4/7/2018  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ệ
4/7/2018  11
Biệt lệ
4/7/2018  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
4/7/2018  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
4/7/2018  14
Try-catch-finally
4/7/2018  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);
}
}
4/7/2018  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 trycatch để quản lý lỗi.
174/7/2018 
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 
}
}
4/7/2018  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.
4/7/2018  19
Throw và Throws
• Cú pháp sinh 1 Exception trong hàm
ReturnType Method () throws ExceptionClass
{ if () throw ExceptionClass(“Message”);
else {  }
}
204/7/2018 
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)
{ . } 
}
}
4/7/2018  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.
4/7/2018  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.
234/7/2018 
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
24
4/7/2018 
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
4/7/2018  25
Ví dụ
4/7/2018  26
Kết quả
Total JVM memory: 5177344
Before Memory = 4974672
After Memory = 4728504
After GC Memory = 5045864
4/7/2018  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.
4/7/2018  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 ..
294/7/2018 

File đính kèm:

  • pdfbai_giang_cong_nghe_java_chuong_5_quan_ly_loi_va_gom_rac.pdf