Java Cơ Bản Bài 9: Xử Lý Ngoại Lệ Trong Java
Exception là một loại lỗi đặc biệt. Lỗi này xuất hiện vào lúc thực thi chương trình. Các trạng thái không bình thường xảy ra trong khi thi hành chương trình tạo ra các exception. Những trạng thái này không được biết trước trong khi ta đang xây dựng chương trình.
Ngôn ngữ Java cung cấp cơ chế dùng để xử lý ngoại lệ rất hiệu quả. Việc xử lý này làm hạn chế tối đa trường hợp hệ thống bị hỏng (crash) hay hệ thống bị ngắt đột ngột. Tính năng này làm cho Java trở thành một ngôn ngữ lập trình mạnh.
Mục đích của việc xử lý ngoại lệ
Một chương trình nên có cơ chế xử lý ngoại lệ thích hợp. Nếu không, chương trình sẽ bị ngắt khi một ngoại lệ xảy ra. Trong trường hợp đó, tất cả các nguồn tài nguyên mà hệ thống đã cấp không được giải phóng. Điều này gây lãng phí tài nguyên. Để tránh trường hợp này, tất cả các nguồn tài nguyên mà hệ thống cấp nên được thu hồi lại. Tiến trình này đòi hỏi cơ chế xử lý ngoại lệ thích hợp.Xữ lý ngoại lệ
Khi một ngoại lệ xảy ra, ngoại lệ sẽ bị chặn và chương trình chuyển đến một khối xử lý ngoại lệ. Người lập trình phải xử lý các ngoại lệ khác nhau có thể phát sinh trong chương trình. Các ngoại lệ phải được xử lý, hoặc thoát khỏi chương trình khi nó xảy ra.Ngôn ngữ Java cung cấp 5 từ khoá sau để xử lý các ngoại lệ:
- try
- catch
- throw
- throws
- finally
Mô hình xử lý ngoại lệ
try{
// đoạn mã có khả năng gây ra ngoại lệ
} catch(Exception e1){
// Nếu các lệnh trong khối ‘try’ tạo ra ngoại lệ có loại e1, thì thực hiện
//xử lý ngoại lệ nếu không chuyển xuống khối 'catch' tiếp theo
} catch(Exception e2){
// Nếu các lệnh trong khối ‘try’ tạo ra ngoại lệ có loại e2, thì thực hiện
//xử lý ngoại lệ nếu không chuyển xuống khối 'catch' tiếp theo
} catch(Exception eN){
// Nếu các lệnh trong khối ‘try’ tạo ra ngoại lệ có loại eN, thì thực hiện
//xử lý ngoại lệ nếu không chuyển xuống khối 'catch' tiếp theo
} finally{
// khối lệnh nay luôn được thực hiện cho dù ngoại lệ có xảy ra hay không.
}
Khối Try - Catch
Khối ‘try’ chứa một tập lệnh có thể thi hành được. Các ngoại lệ có thể bị chặn khi thi hành tập lệnh này. Phương thức có khả năng tạo ra ngoại lệ có thể được khai báo trong khối ‘try’. Một hay nhiều khối ‘catch’ có thể theo sau một khối ‘try’. Các khối ‘catch’ này bắt các ngoại lệ có khả năng tạo ra trong trong khối ‘try’.
Ví dụ:
package lythuet;
public class lythuyet11 {
public static void main(String[] args) {
int a = 5;
int b = 0;
//Cách các bài trước thường làm, dùng if, else:
if (b == 0) {
System.out.println("Lỗi chia cho 0");
}
else {
System.out.println("a/b = " + a / b);
}
System.out.println("\nCách dùng try - catch - finally \n");
//Sử dụng try, catch để bắt lỗi:
try {
System.out.println("a/b = " + a / b);
} catch (Exception e1) {
System.out.println("Có lỗi gì đó xảy ra ");
System.out.println("Tên lỗi là: " + e1);
} finally {
System.out.println("Có lỗi hay không thì cái dòng cuối cùng này vẫn được in ra!");
}
}
}
Khối ‘finally’
Khi một ngoại lệ xuất hiện, phương thức đang được thực thi có thể bị dừng mà không được hoàn thành. Nếu điều này xảy ra, thì các đoạn mã phía sau (ví dụ như đoạn mã có chức năng thu hồi tài nguyên, như các lệnh đóng tập viết ở cuối phương thức) sẽ không bao giờ được gọi. Java cung cấp khối ‘finally’ để giải quyết việc này. Khối ‘finally’ thực hiện tất cả các việc thu dọn khi một ngoại lệ xảy ra. Khối này có thể được sử dụng kết hợp với khối ‘try’. Khối ‘finally’ chứa các câu lệnh thu hồi tài nguyên về cho hệ thống hay lệnh in ra các câu thông báo. Các lệnh này bao gồm:- Đóng tập tin.
- Đóng ResultSet (được sử dụng trong chương trình cơ sở dữ liệu).
- Đóng lại các kết nối được tạo trong cơ sở dữ liệu.
Danh sách các ngoại lệ
- Exception: Lớp nền của run-time
- NullPointerException: Một đối tượng không tồn tại
- ClassNotFoundException: Không tìm thấy Class
- FileNotFoundException: Không tìm thấy file
- SecurityException, Exception: liên quan đến bảo mật
- ArrayIndexOutOfBoundsException: Vượt quá chỉ mục của mảng
- IllegalAccessException: Truy cập không hợp lệ
- IllegalArgumentException: Đối số hàm
- ArithmeticException: Lỗi thực thi một phép toán
- NumberFormatException: Định dạng số không đúng
- IOException: Lỗi nhập xuất
- EOFException: Kết thúc một tập tin
- NoSuchMethodException: Sai tên phương thức
- InterruptedException: Ngắt luồng đang được thực thi
Ví dụ: In ra lỗi cụ thể vượt quá chỉ mục của mảng.
package lythuyet11;
public class lythuyet11 {
public static void main(String[] args) {
int arrInt[] = {1, 2, 4, 7, 10};
try {
System.out.println("arrInt[6] = " + arrInt[6]);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println("Lỗi! Vượt quá chỉ mục của mảng! " + e2);
}
}
}
Post a Comment