Bắt đầu với lập trình Java phần 7 pot - Pdf 19

Xử lý ngoạilệ
Xử lý ngoạilệ
2
NguyễnViệtHà
Nội dung
 Khái niệm về xử lý ngoại lệ (exception
handling)
 Ném và bắt ngoại lệ
 Khai báo ngoại lệ
 Ném lại ngoại lệ
 Định nghĩa ngoại lệ mới
 Xử lý ngoại lệ trong constructor
Xử lý ngoạilệ
3
NguyễnViệtHà
Tài liệu tham khảo
 Thinking in Java, chapter 9
 Java how to program, chapter 15
Xử lý ngoạilệ
4
NguyễnViệtHà
Lỗi và ngoạilệ
 Mọi đoạnchương trình đềutiềm ẩnkhả năng
sinh lỗi
 lỗichủ quan: do lập trình sai
 lỗi khách quan: do dữ liệu, do trạng thái củahệ thống
 Ngoạilệ: các trường hợphoạt động không bình
thường
 Xử lý ngoạilệ như thế nào
 làm thế nào để có thể tiếptục (tái) thựchiện
Xử lý ngoạilệ

Xử lý ngoạilệ
7
NguyễnViệtHà
Xử lý ngoạilệ (Exception handling)
trong Java
 Xử lý ngoạilệ trong Java đượckế thừatừ C++
 Dựa trên cơ chế ném và bắtngoạilệ
 ném ngoạilệ: dừng chương trình và chuyển điều
khiểnlên mứctrên (nơi bắt ngoại lệ)
 bắt ngoạilệ: xử lý vớingoạilệ
 Ngoại lệ: là đối tượng mang thông tin về lỗi đã
xảy ra
 ngoại lệ được ném tự động
 ngoại lệ được ném tường minh
Xử lý ngoạilệ
8
NguyễnViệtHà
Phả hệ ngoạilệ trong Java
Xử lý ngoạilệ
9
NguyễnViệtHà
Ưu điểmcủa ném bắt ngoạilệ
 Dễ sử dụng
 dàng chuyển điềukhiển đếnnơi có khả năng xử lý
ngoạilệ
 có thể ném nhiều loại ngoại lệ
 Tách xử lý ngoạilệ khỏi thuật toán
 tách mã xử lý
 sử dụng cú pháp khác
 Không bỏ sót ngoại lệ (ném tự động)

throw new Exception(”denom = 0”);
} else res = num/denom;
} catch(Exception e) {
System.out.println(e.getMessage());
}
Xử lý ngoạilệ
13
NguyễnViệtHà
Cú pháp try catch finally
 Có thể bắtnhiềuloại ngoạilệ khác nhau bằng
cách sử dụng nhiềukhốilệnh catch đặtkế tiếp
 khốilệnh catch sau không thể bắt ngoạilệ là lớp
dẫnxuấtcủa ngoạilệđượcbắttrong khốilệnh catch
trước
 Khốilệnh finally có thểđược đặtcuốicùng
để thựchiện các công việc“dọndẹp” cần thiết
 finally luôn đượcthựchiện dù ngoạilệ có được
bắt hay không
 finally được thực hiện cả khi không có ngoại lệ
được ném ra
Xử lý ngoạilệ
14
NguyễnViệtHà
Cú pháp try catch finally
try {

}
catch(Exception1 e1) {

}

Ném ngoạilệ khỏiphương thức
 Không nhất thiết phải xử lý ngoại lệ trong
phương thức
 không đủ thông tin để xử lý
 không đủ thẩm quyền
 Mộtphương thứcmuốn ném ngoạilệ ra
ngoài phải khai báo việc ném ngoạilệ
bằng từ khóa throws
 có thể ném ngoạilệ thuộclớpdẫnxuấtcủa
ngoạilệđượckhai báo
Xử lý ngoạilệ
17
NguyễnViệtHà
Ví dụ
int readInt() throws IOException,
NumberFormatException {

str = buf.readLine();
return Integer.valueOf(str).intValue();
}
Xử lý ngoạilệ
18
NguyễnViệtHà
Ví dụ
try {
int n = readInt();
}
catch (IOException e) {
System.err.println("IO Exception");
}

}
}
class D extends A {
public void methodA() {
}
}
Xử lý ngoạilệ
21
NguyễnViệtHà
Ví dụ:
A a = new B();
try {
a.methodA();
}
catch (RuntimeException e) {

}
Xử lý ngoạilệ
22
NguyễnViệtHà
Ném lại ngoạilệ
 Sau khi bắt ngoại lệ, nếu thấy cần thiết chúng ta
có thể ném lại chính ngoạilệ vừabắt được để
cho chương trình mứctrên tiếptụcxử lý
try {
}
catch (Exception e) {
System.out.println(e.getMessage());
throw e;
}

}
}
}
Xử lý ngoạilệ
25
NguyễnViệtHà
Ném ngoạilệ từ main()
 Nếu không có phương thức nào bắt ngoạilệ,
ngoạilệ sẽđượctruyềnlên phương thức main()
và đượccần đượcxử lý tại đây.
 Nếuvẫn không muốnxử lý ngoạilệ, chúng ta có
thểđểngoạilệ truyền lên mức điềukhiểncủa
máy ảobằng cách khai báo main() ném ngoạilệ
 chương trình sẽ bị dừng và hệ thống sẽ in thông tin
về ngoại lệ trên Console (printStackTrace())


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status