如何在Java中创建用户定义的异常(自定义异常)?

例外是程序执行期间发生的问题(运行时错误)。发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。

示例

import java.util.Scanner;
public class ExceptionExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter first number: ");
      int a = sc.nextInt();
      System.out.println("Enter second number: ");
      int b = sc.nextInt();
      int c = a/b;
      System.out.println("The result is: "+c);
   }
}

输出结果

Enter first number:
100
Enter second number:
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionExample.main(ExceptionExample.java:10)

用户定义的例外

您可以使用Java创建自己的异常。

  • 所有例外必须是Throwable的子级。

  • 如果要编写由Handle或Delare Rule自动执行的已检查异常,则需要扩展Exception类。

  • 如果要编写运行时异常,则需要扩展RuntimeException类。

要创建用户定义的异常,请扩展上述类之一。要显示消息,请重写toString()方法,或者通过以String格式传递消息来调用超类参数化的构造函数。

AgeDoesnotMatchException(String msg){
   super(msg);
}
Or,
public String toString(){
   return "CustomException[Age is not between 17 and 24]";
}

然后,在需要引发此异常的其他类中,创建创建的自定义异常类的对象,然后使用throw关键字引发该异常。

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

示例

在下面的Java程序中,我们将创建一个名为AgeDoesnotMatchException的自定义异常类。

public class AgeDoesnotMatchException extends Exception{
   (String msg){
      super(msg);
   }
}

另一个类Student包含两个私有变量名称age和一个初始化实例变量的参数化构造函数。

作为主要方法,我们接受用户的姓名和年龄值,并通过传递接受的值来初始化Student类。

在Student类的构造函数中,我们创建了一个异常AgeDoesnotMatchException的对象, 并在年龄值介于17到24之间时引发了异常(使用throws)。

public class Student extends RuntimeException {
   private String name;
   private int age;
   public Student(String name, int age){
      try {
         if (age<17||age>24) {
            String msg = "Age is not between 17 and 24";
            AgeDoesnotMatchException ex = new AgeDoesnotMatchException(msg);
            throw ex;
         }
      }
      catch(AgeDoesnotMatchException e) {
         e.printStackTrace();
      }
      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 Student: ");
      String name = sc.next();
      System.out.println("Enter the age of the Student should be 17 to 24
      (including 17 and 24): ");
      int age = sc.nextInt();
      Student obj = new Student(name, age);
      obj.display();
   }
}

输出结果

在执行此程序时,您需要从键盘传递名称和年龄值。如果给定的年龄值id不在17到24之间,则发生异常,如下所示-

Enter the name of the Student:
Krishna
Enter the age of the Student should be 17 to 24 (including 17 and 24):
14
AgeDoesnotMatchException: Age is not between 17 and 24
Name of the Student: Krishna'
Age of the Student: 14
at Student.<init>(Student.java:18)
at Student.main(Student.java:39)