Hotline: 0919 365 363; Email: daotao@r2s.edu.vn

Blog

Xử lý ngoại lệ trong java như thế nào?

Xử lý ngoại lệ trong java
Kiến thức hữu ích

Xử lý ngoại lệ trong java như thế nào?

Để xử lý ngoại lệ trong Java, người lập trình có thể sử dụng khối try-catch, dùng khối try-catch kết hợp với final, hoặc sử dụng từ khóa throws. Tuy nhiên, cách xử lý ngoại lệ phù hợp sẽ phụ thuộc vào từng tình huống cụ thể.

Và trong bài viết dưới đây của R2S, chúng tôi sẽ thông tin đến bạn thật chi tiết nhé!

Xử lý ngoại lệ trong java là gì?

Xử lý ngoại lệ trong java
Xử lý ngoại lệ trong java là gì?

Trước khi đến với những thao tác xử lý ngoại lệ trong Java, hãy cùng với chúng tôi tìm hiểu một số khái niệm như sau?

Ngoại lệ (Exception) là gì?

Ngoại lệ (Exception) trong Java là một sự kiện xảy ra khi chương trình thực thi và làm gián đoạn quá trình thực thi. 

Nó có thể được gây ra bởi nhiều nguyên nhân khác nhau, bao gồm nhập sai dữ liệu, truy cập file không đúng cách, kết nối tới cơ sở dữ liệu bị lỗi và nhiều lý do khác. 

Ví dụ như: Chương trình chia 3 số. Nếu bạn cho mẫu số = 0 thì phát sinh lỗi và đó được coi là 1 ngoại lệ.

Ngoại lệ (Exception) là gì?
Ngoại lệ (Exception) là gì?

Một số định nghĩa liên quan đến ngoại lệ

  • Lớp Exception có nhiều lớp con khác nhau đại diện cho các loại ngoại lệ khác nhau.
  • RuntimeErrorException là một lớp con của lớp Exception được dùng để xử lý các ngoại lệ xảy ra khi chạy chương trình.
  • Các ngoại lệ RuntimeExceptionException chỉ xảy ra khi chạy chương trình, và thường được sử dụng để báo hiệu các lỗi không thể được phát hiện và xử lý trong quá trình biên dịch.
  • Người lập trình có thể tự tạo ra các lớp kế thừa từ lớp Exception để đại diện cho các loại ngoại lệ cụ thể của họ.
  • Trong Java, có hai loại ngoại lệ được phân biệt là “unchecked” và “checked”. Những loại ngoại lệ “unchecked” không cần phải được bắt lỗi trong mã, trong khi đó, những loại ngoại lệ “checked” phải được xử lý bằng cách sử dụng khối try-catch hoặc throws khi viết mã.
Một số định nghĩa liên quan đến ngoại lệ
Một số định nghĩa liên quan đến ngoại lệ

Hướng dẫn sử dụng khối try… catch để xử ngoại lệ trong Java

<try {
   //Khối lệnh có thể phát sinh ngoại lệ
} catch (Tên_Ngoại_lệ Tên_Đối_Tượng) {
   //Khối lệnh xử lý khi có ngoại lệ
}

Ví dụ không sử dụng try…catch

c = a/b;
System.out.println("Sau phep chia !"); // (*)

 Câu lệnh (*) sẽ không được thực hiện nếu mẫu số b=0, chương trình lập tức ngừng lại và xuất hiện thông báo lỗi của hệ thống

Ví dụ sử dụng khối try… catch để xử lý ngoại lệ

try {
  c = a/b;
} catch(Exception e) {
    System.out.println("Có lỗi "+e);
}

System.out.println("Sau phép chia !"); // (*)

 Câu lệnh (*) sẽ luôn được thực hiện dù mẫu số b bằng 0 hay b khác 0.

Hướng dẫn dùng try có nhiều catch

Trong một đoạn code, có thể xảy ra nhiều ngoại lệ khác nhau, do đó ta sử dụng nhiều khối catch để xử lý từng loại ngoại lệ trong Java một cách riêng biệt.

Các khối catch được sắp xếp theo thứ tự xuất hiện của các loại ngoại lệ trong mã.

Lưu ý rằng tất cả các loại ngoại lệ đều là lớp con của lớp Exception, do đó, khối catch cuối cùng sẽ bao gồm lớp Exception để xử lý các ngoại lệ không được bắt trong các khối catch trước đó.

Ví dụ 1: Ngoại lệ xảy ra khi chia cho số 0 và sai chỉ số mảng

public class SampleException1 {
public static void main (String args[]) {
    try {
      int b = 0;
      int a = 5 / b;
      int arr[] = {1, 2};

      arr[3] = 10;

      System.out.println("a = " + a);
    } catch (ArithmeticException ae) {               // (1)
       System.out.println("Phep chia cho 0: " + ae);
    } catch (Exception e) {                          // (2)
       System.out.println("Co loi: " + e);
    }
 }
}

 Trong trường hợp có ngoại lệ phép chia cho 0 xảy ra, lệnh (1) sẽ được sử dụng để xử lý, còn các loại ngoại lệ khác sẽ được xử lý bởi lệnh (2). 

Nếu đổi chỗ vị trí của hai lệnh này, lệnh (2) sẽ xử lý trước ngoại lệ chia cho 0, và lệnh (1) sẽ không được sử dụng nữa.

Do đó, không thể thay đổi vị trí giữa hai lệnh này để đảm bảo xử lý ngoại lệ phù hợp.

Ví dụ thứ hai xử lý ngoại lệ trong java: Cú pháp Khối try…catch lồng nhau

public class SampleException2 {
public static void main (String args[]) {
    try {
      int a = 2; // cho a = 0 hoặc a = 1 để test
      int b = 42 / a;

      System.out.println("Ket qua cua phep chia la " + b);

      try {
        if(a == 1) {
          a = a / (a - a);
        }

        if(a == 2) {
          int c[] = {10};
          c[5] = 17;
        }
       } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("Vuot qua chi so mang");
       }
    } catch (ArithmeticException ae) {
       System.out.println("Phep chia cho 0");
    }
 }
}

Một số lưu ý sử dụng khối try… catch để xử lý ngoại lệ

Khối finally trong Java sẽ chứa các câu lệnh sẽ được thực thi sau khi khối try/catch hoàn thành, và khối này sẽ được thực thi dù có xuất hiện ngoại lệ hay không.

Tuy nhiên, mỗi khối try/catch yêu cầu ít nhất một khối catch hoặc finally để xử lý các ngoại lệ có thể xảy ra trong quá trình thực thi.

Một số lưu ý sử dụng khối try… catch
Một số lưu ý sử dụng khối try… catch để xử lý ngoại lệ

Ví dụ về trường hợp xử lý ngoại lệ trong java có finally

import java.io.FileWriter;
import java.io.IOException;

/**
 *
 * @author giasutinhoc.vn
 */
public class SampleException3 {

 public static void main(String args[]) {
    FileWriter fw = null;

    try {
       fw = new FileWriter("data.txt");
       fw.write("Xu ly ngoai le trong java");
    } catch (IOException ie) {
       System.out.println("Loi ghi file: " + ie);
    } finally {
      try {
       if (fw != null) {
        fw.close();
       }
    } catch (IOException ioe) {
      System.out.println("Loi dong: " + ioe);
    }
   }
 }
}

Sử dụng từ khóa throws khi xử lý ngoại lệ trong java như thế nào?

Trong Java, từ khóa throws được sử dụng trong phương thức để khai báo các loại ngoại lệ có thể xảy ra trong quá trình thực thi của phương thức đó.Các phương thức sử dụng các lệnh có thể gây ra ngoại lệ “checked”, nên chúng ta buộc phải xử lý các loại ngoại lệ này.

Ví dụ, khi thao tác với các tập tin, phải xử lý ngoại lệ “checked” FileNotFoundException. Khi đó, tất cả các loại ngoại lệ được khai báo bởi từ khóa throws đều phải được xử lý, và nếu không đủ sẽ gây ra các thông báo lỗi. 

Trường hợp xử lý ngoại lệ khi ghi file

public class SampleException4 {
public void writeFile() throws IOException {

    FileWriter fw = new FileWriter("data.txt");

    fw.write("Xu ly ngoai le trong java");

    fw.close();

 }

 public static void main(String args[]) {
    try {

      SampleException5 se5 = new SampleException5();
      se5.writeFile();

    } catch (IOException ioe) {
      System.out.println("Co loi ghi file: "+ ioe);
    }
 }
}

 Xử lý ngoại lệ trong java và việc tự tạo exception 

Bạn hoàn toàn có thể tự viết class xử lý ngoại lệ của riêng mình bằng cách kế thừa class Exception của Java với cú pháp như sau:

public class Tên_Exception extends Exception {
    @override
    public String toString() {
       Viết xử lý
    }
 }

Ví dụ: Tạo MyException.java

public class MyException extends Exception {
private int ex;
    public MyException(int num) {
       ex = num;
    }

    @override
    public String toString() {
       return "My exception " + ex;
    }
 }

    Ví dụ: Sử dụng MyException

public class SampleException5 {
   static void tinhToan(int a) throws MyException {
       if(a > 10) {
          throw new MyException(a);
       }
    }

    public static void main(String args[]) {
       try {
          tinhToan(2);   //Không tạo ra ngoại lệ
          tinhToan(20);  //Tạo ra ngoại lệ
       } catch (MyException me) {
          System.out.println("Loi: " + me);
       }
    }
}

Bài tập thực hành

Sau khi học các lý thuyến trên, bạn có thể tạo package tên exception và tạo class tên SinhVien bao gồm các thuộc tính sau: mã sinh viên, họ tên, điểm, xếp loại

Tiêu chí xếp loại dựa vào điểm với yêu cầu sau: 

  • Tiêu chí xếp loại dựa trên điểm được định nghĩa như sau:
    • Nếu điểm >= 8, xếp loại giỏi
    • Nếu điểm >= 7, xếp loại khá
    • Nếu điểm >= 5, xếp loại trung bình
    • Nếu điểm < 5, xếp loại kém
  • Cần viết các setter, getter, constructor, và toString để xử lý các thuộc tính của đối tượng sinh viên.
  • Để nhập dữ liệu từ bàn phím một cách hợp lệ, cần viết code xử lý lỗi cho việc nhập sai kiểu dữ liệu. Ví dụ, nếu người dùng nhập điểm là 10a, chương trình sẽ hiển thị thông báo lỗi “Bạn phải nhập dữ liệu là kiểu số” và yêu cầu nhập lại.
  • Sau khi nhập dữ liệu, cần in thông tin sinh viên lên màn hình.

Kết luận

Trong Java, xử lý ngoại lệ là một phần quan trọng của lập trình. Do đó, đảm bảo chương trình hoạt động đúng và tránh các sự cố không mong muốn, các lập trình viên cần biết cách xử lý ngoại lệ trong Java. 

Hãy học phần này thật chăm chỉ và R2S chúc bạn thành công nhé!

Bài viết gốc được đăng tại: giasutinhoc.vn

Alert: You are not allowed to copy content or view source !!