Nội dung Định nghĩa ngoại lệ Exception Bắt giữ & xử lý ngoại lệ Chuyển tiếp Ném ngoại lệ Định nghĩa lớp Ngoại lệ mới... Khi đối tượng ngoại lệ phát sinh, nó thuộc các lớp đặc th
Trang 1LẬP TRÌNH JAVA
Chương 4
NGOẠI LỆ
GV: Đoàn Thanh Sơn
Trang 2Nội dung
Định nghĩa ngoại lệ (Exception)
Bắt giữ & xử lý ngoại lệ
Chuyển tiếp (Ném) ngoại lệ
Định nghĩa lớp Ngoại lệ mới
Trang 3 Ngoại lệ (Exception): là sự kiện xuất hiện trong quá trình thực thi của chương trình và gây phá vỡ dòng thực thi của chương trình.
Có các nhóm ngoại lệ sau:
- Checked: đọc 1 file không tồn tại Lúc dịch java sẽ yêu
cầu phải bắt ngoại lệ.
- Runtime: chia số 0 Lúc dịch java không kiểm tra Nhưng
LTV cần tiên đoán và tự bắt ngoại lệ.
- Errors: stack overflow Ngoài kiểm soát của java và LTV Lúc dịch java không yêu cầu kiểm tra CT không khôi
phục được.
Định nghĩa ngoại lệ
Trang 4Định nghĩa ngoại lệ
Trang 5 Khi đối tượng ngoại lệ phát sinh, nó thuộc các lớp đặc thù
nhưng đều thừa kế từ gốc là lớp Exception
Lớp Exception
2 phương thức thông dụng trong lớp Exception.
toString(): Trả về một chuỗi mô tả về Ngoại lệ.
printStackTrace(): In ra thông tin chi tiết về Ngoại lệ, như các method gây ra ngoại lệ, dòng code xảy ra ngoại
lệ.
Định nghĩa ngoại lệ
Trang 6Một số lớp ngoại lệ đặc thù gồm:
ArithmeticException: xảy ra khi Chương trình có các
lỗi đại số VD: Chia cho 0.
NumberFormatException: Xảy ra khi thực hiện
chuyển đổi chuỗi không hợp lệ sang kiểu số.
NullPointerException: Xảy ra khi một đối tượng chưa
được khởi tạo mà đã truy cập đến thành phần của đối
tượng đó.
ArrayIndexOutOfBoundException: Xảy ra khi truy
cập đến phần tử của mảng có chỉ số bé hơn không hoặc hoặc lớn hơn kích thước của mảng.
Định nghĩa ngoại lệ
Trang 7 Cú pháp
try {
// Khối code gây ra ngoại lệ
}
catch(ExceptionType name) {
// Khối code xử lý ngoại lệ
}
…
catch(ExceptionType name) {…}
finally{
// Khối code giải phóng tài nguyên
}
1.Bắt giữ & xử lý ngoại lệ
Trang 8 Khối try đi kèm ít nhất 1 khối catch hoặc finally
Có thể có nhiều khối catch sau 1 khối try
Khối finally luôn được thực hiện
Nhiều khối try … catch có thể lồng nhau
Bắt giữ & xử lý ngoại lệ
Trang 9public class MyException {
public static void main(String args[]){
calculate(9,0);
}
public static void calculate(int num, int i){
try{
System.out.println(num/i);
}catch(ArithmeticException e){
System.out.println("error");
}
finally{ System.out.println("finished");}
}
}
Bắt giữ & xử lý ngoại lệ
Trang 10Bắt giữ & xử lý ngoại lệ
Trang 11 Ngoại lệ được chuyển đến các phương thức gọi, cho đến khi
một bộ quản lý ngoại lệ được tìm thấy, hoặc kết thúc
throw: Dùng để ném ra một ngoại lệ mà không xử lý trong
phương thức.
throws: Dùng đế khai báo danh sách các ngoại lệ mà phương
thức có thể ném ra
2.Chuyển tiếp ngoại lệ
Trang 12public class MyException {
public static void main(String args[]){
try{
calculate(9,0);
}catch(ArithmeticException e){
System.out.println("error");
}finally{
System.out.println("finished");
} }
public static void calculate(int num, int i){
if(i==0) throw new ArithmeticException();
else System.out.println(num/i);
Chuyển tiếp ngoại lệ
Trang 13Chuyển tiếp ngoại lệ
public class MyException {
public static void main(String args[]){
try{
calculate(9,0);
}catch(ArithmeticException e){
System.out.println("error");
}finally{
System.out.println("finished");
} }
public static void calculate(int num, int i) throws ArithmeticException{
System.out.println(num/i);
}
Trang 14void writeList() throws IOException,
ArrayIndexOutOfBoundsException {
PrintWriter out = new PrintWriter(new
FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = "
+ vector.elementAt(i)); } out.close();
}
Chuyển tiếp ngoại lệ
Trang 15 Có 2 loại ngoại lệ
• Cần kiểm tra: trình biên dịch luôn kiểm tra xem
chúng ta có viết code xử lý các ngoại lệ này không
Ví dụ: IOException
• Không cần kiểm tra
Ngoại lệ runtime (Runtime exception)
Các loại Exception
Trang 16 Ví dụ về ngoại lệ cần được kiểm tra
InputStreamReader reader;
BufferedReader bufReader;
reader = new InputStreamReader(System.in);
bufReader = new BufferedReader(reader);
try {
String s = bufReader.readLine();
}
catch (IOException e) {
}
Các loại Exception
Trang 17 Có thể tạo 1 lớp xử lý ngoai lệ riêng bằng cách thừa kế từ lớp Exception hoặc từ lớp con của Exception
Cú pháp
class MyException extends Exception
{
}
Định nghĩa lớp ngoại lệ
Trang 18 Ví dụ
public class MyException extends Exception
{
public MyException () {
} public MyException (String msg) {
super (msg);
} }
Đinh nghĩa lớp ngoại lệ
Trang 19 Ưu điểm của phương pháp xử lý ngoại lệ là gì?
Khi nào nên sử dụng phương pháp
• Bắt và xử lý ngoại lệ tại chỗ: try … catch
• Ném ngoại lệ lên các lớp trên: throw,throws
Thảo luận