Computer >> Máy Tính >  >> Lập trình >> Java

Các ngoại lệ tùy chỉnh trong Java

Bạn có thể tạo ngoại lệ của riêng mình trong Java và chúng được gọi là ngoại lệ do người dùng xác định hoặc ngoại lệ tùy chỉnh.

Để tạo một ngoại lệ do người dùng định nghĩa, hãy mở rộng một trong các lớp được đề cập ở trên. Để hiển thị thông báo, hãy ghi đè toString () hoặc, gọi hàm tạo tham số lớp siêu cấp bỏ qua thông báo ở định dạng Chuỗi.

MyException(String msg){
   super(msg);
}
Or,
public String toString(){
   return " MyException [Message of your exception]";
}

Sau đó, trong các lớp khác ở bất cứ nơi nào bạn cần đưa ra ngoại lệ này, hãy tạo một đối tượng của lớp ngoại lệ tùy chỉnh đã tạo và ném ngoại lệ bằng từ khóa ném.

MyException ex = new MyException ();
If(condition……….){
   throw ex;
}

Đã kiểm tra tùy chỉnh và Không kiểm tra tùy chỉnh

  • Tất cả các trường hợp ngoại lệ phải là con của Throwable.

  • Nếu bạn muốn viết một ngoại lệ đã kiểm tra được tự động thực thi bởi Quy tắc xử lý hoặc Khai báo, bạn cần mở rộng Ngoại lệ lớp học.

  • Nếu bạn muốn viết một ngoại lệ thời gian chạy, bạn cần mở rộng RuntimeException lớp học.

Ví dụ:Ngoại lệ được kiểm tra tùy chỉnh

Chương trình Java sau đây trình bày cách tạo một ngoại lệ được kiểm tra tùy chỉnh.

import java.util.Scanner;
class NotProperNameException extends Exception {
   NotProperNameException(String msg){
      super(msg);
   }
}
public class CustomCheckedException {
   private String name;
   private int age;
   public static boolean containsAlphabet(String name) {
      for (int i = 0; i < name.length(); i++) {
         char ch = name.charAt(i);
         if (!(ch >= 'a' && ch <= 'z')) {
            return false;
         }
      }
      return true;
   }
   public CustomCheckedException(String name, int age){
      if(!containsAlphabet(name)&&name!=null) {
         String msg = "Improper name (Should contain only characters between a to z (all small))";
         NotProperNameException exName = new NotProperNameException(msg);
         throw exName;
      }
      this.name = name;
      this.age = age;
   }
   public void display(){
      System.out.println("Name of the Student: "+this.name );
      System.out.println("Age of the Student: "+this.age );
   }
   public static void main(String args[]) {
      Scanner sc= new Scanner(System.in);
      System.out.println("Enter the name of the person: ");
      String name = sc.next();
      System.out.println("Enter the age of the person: ");
      int age = sc.nextInt();
      CustomCheckedException obj = new CustomCheckedException(name, age);
      obj.display();
   }
}

Ngoại lệ thời gian biên dịch

Khi biên dịch, chương trình trên tạo ra ngoại lệ sau.

CustomCheckedException.java:24: error: unreported exception NotProperNameException; must be caught or declared to be thrown
   throw exName;
   ^
1 error

Ví dụ:Ngoại lệ bỏ kiểm tra tùy chỉnh

Nếu bạn chỉ cần thay đổi lớp mà ngoại lệ tùy chỉnh của bạn kế thừa thành RuntimeException nó sẽ được ném vào thời gian chạy

class NotProperNameException extends RuntimeException {
   NotProperNameException(String msg){
      super(msg);
   }
}

Nếu bạn chạy chương trình trước đó Bằng cách thay thế lớp NotProperNameException bằng đoạn mã trên và chạy nó, nó sẽ tạo ra ngoại lệ thời gian chạy sau.

Ngoại lệ thời gian chạy

Enter the name of the person:
Krishna1234
Enter the age of the person:
20
Exception in thread "main" july_set3.NotProperNameException: Improper name (Should contain only characters between a to z (all small))
   at july_set3.CustomCheckedException.<init>(CustomCheckedException.java:25)
   at july_set3.CustomCheckedException.main(CustomCheckedException.java:41)