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
            
         
        
    




 
                    