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... Ví dụ: đọc 1 file không tồn tại Lớp Exception • Là lớp
Trang 1LẬP TRÌNH JAVA
Chương 3
NGOẠI LỆ
GV: Võ Hoàng Phương Dung
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
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 nghĩa ngoại lệ
Trang 4Định nghĩa ngoại lệ
Trang 5 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 6 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
}
Bắt giữ & xử lý ngoại lệ
Trang 7 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 8public 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 9Bắt giữ & xử lý ngoại lệ
Trang 10 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
Chuyển tiếp ngoại lệ
Trang 11public 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();
Chuyển tiếp ngoại lệ
Trang 12Chuyể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 13void 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 14 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 15 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 16 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 17 Ví dụ
public class MyException extends Exception
{
public MyException () {
} public MyException (String msg) {
super (msg);
} }
Đinh nghĩa lớp ngoại lệ
Trang 18 Ư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