Bắt ngoại lệ

Một ngoại lệ (exception) trong chương trình Java là dấu hiệu chỉ ra rằng có sự xuất hiện một điều kiện không bình thường nào đó.

Khi một ngoại lệ xảy ra, đối tượng tương ứng với ngoại lệ đó được tạo ra. Đối tượng này sau đó được truyền cho phương thức là nơi mà ngoại lệ xảy ra. Đối tượng này chứa thông tin chi tiết về ngoại lệ. Thông tin này có thể được nhận về và được xử lý. Các ngoại lệ này có thể là một ngoại lệ chuẩn của Java hoặc có thể là một ngoại lệ do ta tạo ra. Lớp 'Throwable' được Java cung cấp là cha của tất cả các ngoại lệ trong Java (lớp đầu tiên trong cây thừa kế).

Sau khi bạn đã biết cách khai báo và ném ra biệt lệ, thì phần việc quan trọng nhất là bắt và xử lý biệt lệ.

Vấn đề đối với người lập trình java là phải biết được đoạn mã nào của anh ta có thể gây ra lỗi. Khi họ đã khoanh vùng được đoạn mã có thể gây ra lỗi họ sẽ đặt đoạn mã, có khả năng gây ra lỗi đó trong khối try ( thử làm), và đặt đoạn mã xử lý lỗi trong khối catch ( bắt giữ). Khuôn dạng tổng quát như sau:

try {
  // Các lệnh có khả năng gây lỗi
}
catch(TypeException1 ex) {
  // Mã đựơc thực thi khi một ngoại lệ TypeException1 đựơc phát sinh trong khối try
}
catch (TypeException2 ex) {
// Mã đựơc thực thi khi một ngoại lệ TypeException2 đựơc phát sinh trong khối try
}
...
catch ( TypeExceptionN ex) {
// Mã đựơc thực thi khi một ngoại lệ TypeExceptionN đựơc phát sinh trong khối try
} finally{
// khối lệnh nay luôn được thực hiện cho dù ngoại lệ có xảy ra trong khối try hay không.
}

Nếu không có một ngoại lệ nào phát sinh trong khối try thì các mệnh đề catch sẽ bị bỏ qua, trong trường hợp một trong các câu lệnh bên trong khối try gây ra một ngoại lệ thì, thì java sẽ bỏ qua các câu lệnh còn lại trong khối try để đi tìm mã xử lý ngoại lệ, nếu kiểu ngoại lệ so khớp với kiểu ngoại lệ trong mệnh đề catch, thì mã lệnh trong khối catch đó sẽ được thực thi, nếu không tìm thấy một kiểu ngại lệ nào được so khớp java sẽ kết thúc phương thức đó và chuyển biệt lệ đó ra phương thức đã gọi phương thức này quá trình này được tiếp tục cho đến khi tìm thấy mã xử lý biệt lệ, nếu không tìm thấy mã xử lý biệt lệ trong chuỗi các phương thức gọi nhau, chương trình có thể chấm dứt và in thông báo lỗi ra luồng lỗi chuẩn System.err

Ví dụ:

class TryClass{
  public static void main(String args[]){
    int n=0;
    try {
      System.out.println(1/n);
    } catch(ArithmeticException ex) {
      System.out.println(Loi chia cho 0);
    }
  }
}

Khi chạy chương trình này ta se thu được một dòng in ra màn hình như sau:

Kết quả
Loi chia cho 0

Trong đoạn chương trình trên khi chia một số cho 0 sẽ gặp ngoại lệ ArithmeticException, biết được ngoại lệ này có thể xẩy ra do vậy ta bắt nó và xử lý trong khối catch(ArithmeticException ex), ở đây ex là một đối tượng của lớp ArithmeticException chứa các thông tin về ngoại lệ xẩy ra, ta có thể lấy cá thông tin về ngoại lệ chẳng hạn như lấy về mô tả ngoại lệ như sau: System.out.println(a.getMessage()).

Avatar Administrator

Administrator

@thaycacac
Đôi khi, không cẩn thận biết một số chuyện, mới phát hiện ra rằng những điều bản thân để tâm lại nực cười đến thế.
Logo thể loại Java

Java

Chuyên mục học lập trình
Học Java từ cơ bản đến thông thạo cho mọi đối tượng
hello