BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA(Chương 6)
Chia sẻ bởi Trần Thị Thu Thủy |
Ngày 19/03/2024 |
20
Chia sẻ tài liệu: BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA(Chương 6) thuộc Công nghệ thông tin
Nội dung tài liệu:
Chương 6
LỖI LÚC THỰC THI và
QUÁ TRÌNH GOM RÁC
Exception – Garbage Collection
ÔN TẬP
Lớp trừu tượng- abstract class- là sản phẩm của qúa trình khái quát hóa qúa cao.
Lớp trừu tượng là lớp có hành vi trừu tượng.
Cú pháp khai báo lớp trừu tượng
abstract class A
{ ....
abstract [modifier] Type Method(args);
}
public, protected, friendly
Ôn tập
Lớp cụ thể (concrete class) là lớp chỉ chứa các hành cụ thể (có code).
Lớp con của một lớp trừu tượng mà chưa cụ thể hóa một hành vi trừu tượng thừa kế từ lớp cha thì lớp con này cùng là lớp trừu tượng.
Mục tiêu
Giải thích được lỗi cú pháp và lỗi thực thi chương trình.
Giải thích được mô hình đối tượng Exception của Java.
Giải thích được cú pháp bẫy lỗi bằng try...catch... finally.
Sử dụng được throw và throws trong code,
Tự định nghĩa được Exception.
Giải thích được cơ chế gom rác của Java.
Nội dung
6.1- Các loại lỗi của chương trình
6.2- Cấu trúc các lớp quản lý lỗi của Java.
6.3- Bẫy lỗi bằng try...catch...finally
6.4- Lan truyền lỗi
6.5- Xuất Exception
6.6- Tự định nghĩa Exception
6.7- Cơ chế gom rác
6.1- Các loại lỗi của chương trình
Bài toán
Code
Chương trình
Hiện
thực
Compile
Run
Syntax error
No
Syntax error
Correct result
END
BEGIN
Run-time error
( Exception )
Wrong result
?
Các loại lỗi của chương trình
Compile-time error = Syntax error
Run-time error = Exception, tình huống bất bình thường đã xẩy ra trong khi chương trình thực thi.
Khi có Exception:
Có thể là máy bị treo (halt).
Chương trình ngắt đột ngột, điều khiển trả về cho OS, OS thu hồi bộ nhớ của chương trình ( đuổi ra ngoài ).
Cần có cơ chế điều khiển tình huống này.
6.2- Cấu trúc các lớp quản lý lỗi của Java
Java là ngôn ngữ mạnh (robust) nên có các hỗ trợ giúp tối thiểu hóa các exception.
Khi có run-time error, thông tin về lỗi này được máy ảo tự động phát ra thông qua một đối tượng Exception. Đây là đối tượng được phát sinh động (dynamic thrown object) từ máy ảo, Đối tượng này có thể bẫy từ chương trình nhờ cơ chế giao tiếp giữa máy ảo và chương trình.
Java cung cấp một tập rất nhiều các lớp mô tả các lỗi cùng với cơ chế bẫy lỗi giúp developer có thể quản lý các exception trong code của chương trình.
Gói java.lang định nghĩa rất nhiều lớp lỗi run-time.
Tham khảo Java Documentation.
Cấu trúc các class quản lý lỗi của Java
Object
Throwable
Exception
Error
AWTError
ThreadDead
…
SQLException
ClassNotFoundException
…
RuntimeException
ArithmeticException
NullPointerException
NumberFormatException
Khi 1 error/exception xẩy ra, ta nói rằng nó bị “thrown” (throw)
…
Lớp Throwable
Các lớp Exception đều được dẫn ra từ lớp này.
Chứa các hành vi giúp truy xuất thông tin về lỗi như:
nội dung mô tả lỗi : getMesage(), toString()
nội dung stack lúc gây lỗi: getStackTrace(), printStackTrace(),
....
Một số lớp quản lý lỗi của Java
Một số lớp quản lý lỗi của Java
6.3-Bẫy lỗi bằng try...catch...finally
Để chương trình vẫn có thể tiếp tục hoạt động, người lập trình cần phải dự đoán lỗi có thể xẩy ra để bẫy lỗi.
Bẫy lỗi bằng cú pháp: try...catch ...finally ...
try
{ < các lệnh thử làm>
}
catch ( Exception1 e1)
{ < code xử lý lỗi>
}
catch ( Exception2 e2)
{ < code xử lý lỗi>
}
finally
{
}
// Buộc phải có {...} dù chỉ có 1 phát biểu
Bẫy lỗi bằng try...catch...finally
Dự đoán lỗi:
Tại một thời điểm, developer có thể dự đoán chính xác các lỗi có thể xẩy ra. Thí dụ: Nhập dữ liệu từ bàn phím vào 1 số thông qua hộp thoại, có 2 tình huống: người dùng không nhập (user cancel), người dùng nhập chữ.
Có thể tổng quát hoá các lỗi nhờ lớp cha (Exception) để quản lý chung.
Bẫy lỗi- Thí dụ
Bẫy lỗi – Thí dụ
Bẫy lỗi mức tổng quát
Bẫy lỗi tham khảo mảng ngoài tầm chỉ số
Bẫy lỗi tham khảo mảng ngoài tầm chỉ số
6.4- Lan truyền lỗi
Exception propagation
Lỗi lan truyền từ trong ra cho đến khi gặp bẫy lỗi hoặc tới main và ứng dụng bị ngưng.
A()
B()
C()
D()
Exception
Chiều gọi hàm
Chiều lan truyền lỗi
catch(...)
Lan truyền lỗi- Thí dụ
Chặn lan truyền lỗi- Thí dụ
Gọi hành vi có xuất lỗi trong code
6.5- Xuất Exception
Exception thường do JVM xuất ra.
Code chương trình có thể xuất chủ động xuất ra 1 đối tượng exception bằng từ khóa throws, throw
Mức hành vi: dùng chỉ thị throws ( chú ý ngôi thứ 3 số ít của động từ throw) đ63 báo cho JVM xuất một loại Eception khi có lỗi.
Nếu là code trong hành vi thì dùng chỉ thị throw ( chú ý đây là mệnh lệnh các ngôi thứ hai của động từ throw).
Khi throw trong code của thân hàm, phải yêu cầu tạo đối tượng Exception bằng toán tử new.
Đương nhiên khi chủ động xuất lỗi, chương trình sẽ ngắt ngay.
Xuất Exception tại khai báo method
Xuất Exception trong thân method
6.6- Tự định nghĩa Exception
Người lập trình có thể tự định nghĩa một loại Exception dựa trên các loại Exception đã có.
Phương pháp khai báo một user-defined exception:
Tên lớp exception
Tên lớp cha
Thông báo lỗi.
Tự định nghĩa Exception
6.7- Cơ chế gom rác
Rác: Đối tượng không còn được tham khảo đến.
Garbage Collector: Trình gom rác, là một luồng được thực thi khi “máy rảnh” hoặc là khi có yêu cầu cấp bộ nhớ mà bộ nhớ “không còn đủ”.
Application chủ động gọi trình gom rác bằng: System.gc(); Tuy nhiên, GC có độ ưu tiên kém, nếu JVM rảnh thì GC mới thực thi.
Có thể gọi GC thông qua lớp Runtime, lớp chứa thông tin về môi trường thực thi trong máy ảo.
Khi app chủ động gọi gc(), ứng dụng chấp nhận tạm dừng để JVM chạy trình gom rác.
Chạy ứng dụng mà không cho phép gom rác (chấp nhận rủi ro do thiếu bộ nhớ) bằng cú pháp
java –noasyncgc File.class
Gom rác: Đối tượng và tham khảo đến đối tượng
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
Cơ chế gom rác- Nhận diện rác
{ ...
Object a = new Object();
Object b= a;
a= null;
}
Đối tượng vừa tạo
đã là rác chưa?
{ .....
Object a = new Object();
a= null;
}
Đối tượng vừa tạo
đã là rác chưa?
{ .....
Object a = new Object(); // đối tượng 1
a= new Object (); // đối tượng 2
}
Đối tượng 1đã là rác chưa?
Thí dụ: Truy xuất môi trường thực thi và Chủ động gom rác
Lớp RunTime
Mô tả môi trừơng của máy ảo.
Cho phép gọi 1 ứng dụng.
Lớp RunTime – Gọi ứng dụng của OS
Truy cập lớp System
Ba đối tượng thành phần:
in : Bàn phím
out, err : màn hình
Cac1 nhóm hành vi:
Truy uất môi trường (env)
Truy xxuất thuộc tính (property)
Truy xuất thời gian (Time)
Thí dụ
Tóm tắt
2 loại error: syntax error, run-time error.
run-time error được gọi là exception.
Khi một exception, JVM xuất động một object (chứa mô tả về exception này).
Lớp trên cùng của các error là lớp Throwable ( lớp cho các đối tượng xuất động của JVM)
Có rất nhiều Exception để trong các gói thư viện của Java.
Tóm tắt
Bẫy lỗi bằng try ... catch... finally
Nếu hành vi chứa một code có thể gây lỗi, chỉ thị bằng throws
Trong code của hành vi, có thể xuất một exception bằng
throw new ExceptionClass (“Msg”);
Tự định nghĩa một Exception là khai báo một lớp kế thừa một Exception đã có.
Tóm tắt
Java cung cấp sẵn một garbage collector.
Chủ động gọi GC bằng System.gc() hoặc thông qua một đối tượng RunTime.
class RunTime chứa thông tin về môi trường thức thi Java app.
Thời gian trong Java là một số long theo đơn vị mili giây kể từ 1-1-1970.
Sử dụng java.util.Date để thao tác với dữ liệu thời gian.
Có thể thông qua đối tượng System để lấy thời gian hiện hành của máy (theo mili, nano second).
Bài tập
Tạo lớp mô tả và thao tác trên mảng các số int có quản lý lỗi truy cập. Các tác vụ: các constructor: chuẩn, cấp phát mảng chứa tối đa MaxN phần tử, sao chép mảng đã có, Nhập, lấy phần tử thứ i, xuất, sắp xếp tăng, sắp xếp giảm, chèn trị x vào vị trí thứ i,...
Tạo lớp mô tả và thao tác trên ma trận các số int có quản lý lỗi truy cập.
LỖI LÚC THỰC THI và
QUÁ TRÌNH GOM RÁC
Exception – Garbage Collection
ÔN TẬP
Lớp trừu tượng- abstract class- là sản phẩm của qúa trình khái quát hóa qúa cao.
Lớp trừu tượng là lớp có hành vi trừu tượng.
Cú pháp khai báo lớp trừu tượng
abstract class A
{ ....
abstract [modifier] Type Method(args);
}
public, protected, friendly
Ôn tập
Lớp cụ thể (concrete class) là lớp chỉ chứa các hành cụ thể (có code).
Lớp con của một lớp trừu tượng mà chưa cụ thể hóa một hành vi trừu tượng thừa kế từ lớp cha thì lớp con này cùng là lớp trừu tượng.
Mục tiêu
Giải thích được lỗi cú pháp và lỗi thực thi chương trình.
Giải thích được mô hình đối tượng Exception của Java.
Giải thích được cú pháp bẫy lỗi bằng try...catch... finally.
Sử dụng được throw và throws trong code,
Tự định nghĩa được Exception.
Giải thích được cơ chế gom rác của Java.
Nội dung
6.1- Các loại lỗi của chương trình
6.2- Cấu trúc các lớp quản lý lỗi của Java.
6.3- Bẫy lỗi bằng try...catch...finally
6.4- Lan truyền lỗi
6.5- Xuất Exception
6.6- Tự định nghĩa Exception
6.7- Cơ chế gom rác
6.1- Các loại lỗi của chương trình
Bài toán
Code
Chương trình
Hiện
thực
Compile
Run
Syntax error
No
Syntax error
Correct result
END
BEGIN
Run-time error
( Exception )
Wrong result
?
Các loại lỗi của chương trình
Compile-time error = Syntax error
Run-time error = Exception, tình huống bất bình thường đã xẩy ra trong khi chương trình thực thi.
Khi có Exception:
Có thể là máy bị treo (halt).
Chương trình ngắt đột ngột, điều khiển trả về cho OS, OS thu hồi bộ nhớ của chương trình ( đuổi ra ngoài ).
Cần có cơ chế điều khiển tình huống này.
6.2- Cấu trúc các lớp quản lý lỗi của Java
Java là ngôn ngữ mạnh (robust) nên có các hỗ trợ giúp tối thiểu hóa các exception.
Khi có run-time error, thông tin về lỗi này được máy ảo tự động phát ra thông qua một đối tượng Exception. Đây là đối tượng được phát sinh động (dynamic thrown object) từ máy ảo, Đối tượng này có thể bẫy từ chương trình nhờ cơ chế giao tiếp giữa máy ảo và chương trình.
Java cung cấp một tập rất nhiều các lớp mô tả các lỗi cùng với cơ chế bẫy lỗi giúp developer có thể quản lý các exception trong code của chương trình.
Gói java.lang định nghĩa rất nhiều lớp lỗi run-time.
Tham khảo Java Documentation.
Cấu trúc các class quản lý lỗi của Java
Object
Throwable
Exception
Error
AWTError
ThreadDead
…
SQLException
ClassNotFoundException
…
RuntimeException
ArithmeticException
NullPointerException
NumberFormatException
Khi 1 error/exception xẩy ra, ta nói rằng nó bị “thrown” (throw)
…
Lớp Throwable
Các lớp Exception đều được dẫn ra từ lớp này.
Chứa các hành vi giúp truy xuất thông tin về lỗi như:
nội dung mô tả lỗi : getMesage(), toString()
nội dung stack lúc gây lỗi: getStackTrace(), printStackTrace(),
....
Một số lớp quản lý lỗi của Java
Một số lớp quản lý lỗi của Java
6.3-Bẫy lỗi bằng try...catch...finally
Để chương trình vẫn có thể tiếp tục hoạt động, người lập trình cần phải dự đoán lỗi có thể xẩy ra để bẫy lỗi.
Bẫy lỗi bằng cú pháp: try...catch ...finally ...
try
{ < các lệnh thử làm>
}
catch ( Exception1 e1)
{ < code xử lý lỗi>
}
catch ( Exception2 e2)
{ < code xử lý lỗi>
}
finally
{
}
// Buộc phải có {...} dù chỉ có 1 phát biểu
Bẫy lỗi bằng try...catch...finally
Dự đoán lỗi:
Tại một thời điểm, developer có thể dự đoán chính xác các lỗi có thể xẩy ra. Thí dụ: Nhập dữ liệu từ bàn phím vào 1 số thông qua hộp thoại, có 2 tình huống: người dùng không nhập (user cancel), người dùng nhập chữ.
Có thể tổng quát hoá các lỗi nhờ lớp cha (Exception) để quản lý chung.
Bẫy lỗi- Thí dụ
Bẫy lỗi – Thí dụ
Bẫy lỗi mức tổng quát
Bẫy lỗi tham khảo mảng ngoài tầm chỉ số
Bẫy lỗi tham khảo mảng ngoài tầm chỉ số
6.4- Lan truyền lỗi
Exception propagation
Lỗi lan truyền từ trong ra cho đến khi gặp bẫy lỗi hoặc tới main và ứng dụng bị ngưng.
A()
B()
C()
D()
Exception
Chiều gọi hàm
Chiều lan truyền lỗi
catch(...)
Lan truyền lỗi- Thí dụ
Chặn lan truyền lỗi- Thí dụ
Gọi hành vi có xuất lỗi trong code
6.5- Xuất Exception
Exception thường do JVM xuất ra.
Code chương trình có thể xuất chủ động xuất ra 1 đối tượng exception bằng từ khóa throws, throw
Mức hành vi: dùng chỉ thị throws ( chú ý ngôi thứ 3 số ít của động từ throw) đ63 báo cho JVM xuất một loại Eception khi có lỗi.
Nếu là code trong hành vi thì dùng chỉ thị throw ( chú ý đây là mệnh lệnh các ngôi thứ hai của động từ throw).
Khi throw trong code của thân hàm, phải yêu cầu tạo đối tượng Exception bằng toán tử new.
Đương nhiên khi chủ động xuất lỗi, chương trình sẽ ngắt ngay.
Xuất Exception tại khai báo method
Xuất Exception trong thân method
6.6- Tự định nghĩa Exception
Người lập trình có thể tự định nghĩa một loại Exception dựa trên các loại Exception đã có.
Phương pháp khai báo một user-defined exception:
Tên lớp exception
Tên lớp cha
Thông báo lỗi.
Tự định nghĩa Exception
6.7- Cơ chế gom rác
Rác: Đối tượng không còn được tham khảo đến.
Garbage Collector: Trình gom rác, là một luồng được thực thi khi “máy rảnh” hoặc là khi có yêu cầu cấp bộ nhớ mà bộ nhớ “không còn đủ”.
Application chủ động gọi trình gom rác bằng: System.gc(); Tuy nhiên, GC có độ ưu tiên kém, nếu JVM rảnh thì GC mới thực thi.
Có thể gọi GC thông qua lớp Runtime, lớp chứa thông tin về môi trường thực thi trong máy ảo.
Khi app chủ động gọi gc(), ứng dụng chấp nhận tạm dừng để JVM chạy trình gom rác.
Chạy ứng dụng mà không cho phép gom rác (chấp nhận rủi ro do thiếu bộ nhớ) bằng cú pháp
java –noasyncgc File.class
Gom rác: Đối tượng và tham khảo đến đối tượng
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
Cơ chế gom rác- Nhận diện rác
{ ...
Object a = new Object();
Object b= a;
a= null;
}
Đối tượng vừa tạo
đã là rác chưa?
{ .....
Object a = new Object();
a= null;
}
Đối tượng vừa tạo
đã là rác chưa?
{ .....
Object a = new Object(); // đối tượng 1
a= new Object (); // đối tượng 2
}
Đối tượng 1đã là rác chưa?
Thí dụ: Truy xuất môi trường thực thi và Chủ động gom rác
Lớp RunTime
Mô tả môi trừơng của máy ảo.
Cho phép gọi 1 ứng dụng.
Lớp RunTime – Gọi ứng dụng của OS
Truy cập lớp System
Ba đối tượng thành phần:
in : Bàn phím
out, err : màn hình
Cac1 nhóm hành vi:
Truy uất môi trường (env)
Truy xxuất thuộc tính (property)
Truy xuất thời gian (Time)
Thí dụ
Tóm tắt
2 loại error: syntax error, run-time error.
run-time error được gọi là exception.
Khi một exception, JVM xuất động một object (chứa mô tả về exception này).
Lớp trên cùng của các error là lớp Throwable ( lớp cho các đối tượng xuất động của JVM)
Có rất nhiều Exception để trong các gói thư viện của Java.
Tóm tắt
Bẫy lỗi bằng try ... catch... finally
Nếu hành vi chứa một code có thể gây lỗi, chỉ thị bằng throws
Trong code của hành vi, có thể xuất một exception bằng
throw new ExceptionClass (“Msg”);
Tự định nghĩa một Exception là khai báo một lớp kế thừa một Exception đã có.
Tóm tắt
Java cung cấp sẵn một garbage collector.
Chủ động gọi GC bằng System.gc() hoặc thông qua một đối tượng RunTime.
class RunTime chứa thông tin về môi trường thức thi Java app.
Thời gian trong Java là một số long theo đơn vị mili giây kể từ 1-1-1970.
Sử dụng java.util.Date để thao tác với dữ liệu thời gian.
Có thể thông qua đối tượng System để lấy thời gian hiện hành của máy (theo mili, nano second).
Bài tập
Tạo lớp mô tả và thao tác trên mảng các số int có quản lý lỗi truy cập. Các tác vụ: các constructor: chuẩn, cấp phát mảng chứa tối đa MaxN phần tử, sao chép mảng đã có, Nhập, lấy phần tử thứ i, xuất, sắp xếp tăng, sắp xếp giảm, chèn trị x vào vị trí thứ i,...
Tạo lớp mô tả và thao tác trên ma trận các số int có quản lý lỗi truy cập.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Trần Thị Thu Thủy
Dung lượng: |
Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)