Tải bản đầy đủ (.ppt) (19 trang)

SLIDE MÔN JAVA - CHƯƠNG 4 - NGOẠI LỆ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (254.65 KB, 19 trang )

LẬP TRÌNH JAVA

Chương 4

NGOẠI LỆ

GV: Đoàn Thanh Sơn


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

2/25


Định nghĩa ngoại lệ




-

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.
3/25


Định nghĩa ngoại lệ

4/25


Định nghĩa ngoại lệ


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ệ. 


5/25


Định nghĩa ngoại lệ
Mộ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. 
6/25


1.Bắt giữ & xử lý 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
}
7/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


8/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");}
}
}
9/25


Bắt giữ & xử lý ngoại lệ

10/25


2.Chuyển tiếp 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

11/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);
}
}

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);
}
}

13/25


Chuyển tiếp ngoại lệ
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();
}


14/25


Các loại Exception


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)

15/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) {
...
}


16/25


Định nghĩa lớp ngoại lệ


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 

... 
}

17/25


Đinh nghĩa lớp ngoại lệ
Ví dụ
public class MyException extends Exception

{
public MyException ()
{
}
public MyException (String msg)
{
super (msg);
}
}


18/25


Thảo luận


Ư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

19/25




×