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... Cú pháptry { // Khối code gây ra ngoại lệ } catchExcepti
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
không xử lý trong phương thức
ngoại lệ mà phương thức có thể ném ra
10/25
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();
else System.out.println(num/i);
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)
14/25
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
{
}
16/25
Đị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
18/25
Thảo luận