Chương 3 Ngoại lệ
Đị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
Bạn đang xem nội dung tài liệu Chương 3 Ngoại lệ, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH JAVA
Chương 3
NGOẠI LỆ
GV: Võ Hoàng Phương Dung
2/25
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
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.
Ví dụ: đọc 1 file không tồn tại
Lớp Exception
• Là lớp cha cho tất cả các lớp thể hiện ngoại lệ.
• 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ệ.
3/25
Định nghĩa ngoại lệ
4/25
Định nghĩa ngoại lệ
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.
5/25
Định nghĩa ngoại lệ
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
} 6/25
Bắt giữ & xử lý ngoại lệ
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
7/25
Bắt giữ & xử lý ngoại lệ
public 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");}
}
} 8/25
Bắt giữ & xử lý ngoại lệ
9/25
Bắt giữ & xử lý ngoại lệ
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
10/25
Chuyể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){
if(i==0) throw new ArithmeticException();
else System.out.println(num/i);
}
}
11/25
Chuyển tiếp ngoại lệ
12/25
Chuyể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);
}
}
void 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();
}
13/25
Chuyển tiếp ngoại lệ
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)
14/25
Các loại Exception
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) {
...
}
15/25
Các loại Exception
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
{
...
}
16/25
Định nghĩa lớp ngoại lệ
Ví dụ
public class MyException extends Exception
{
public MyException ()
{
}
public MyException (String msg)
{
super (msg);
}
}
17/25
Đinh nghĩa lớp ngoại lệ
Ư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
18/25
Thảo luận