是否可以在Java中创建自定义异常而无需扩展Exception类?

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

用户定义的例外

您可以使用Java创建自己的异常,这些异常称为用户定义的异常或自定义异常。

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

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

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

是否必须扩展Exception类

不,扩展异常类以创建自定义异常也不是强制性的,您可以通过扩展Throwable类(所有异常的超类)来创建它们。

示例

下面的Java示例创建一个名为AgeDoesnotMatchException的自定义异常,该异常将用户的年龄限制在17岁到24岁之间。在这里,我们在不扩展Exception类的情况下创建它。

import java.util.Scanner;
class AgeDoesnotMatchException extends Throwable{
   AgeDoesnotMatchException(String msg){
      super(msg);
   }
}
public class CustomException{
   private String name;
   private int age;
   public CustomException(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();
      CustomException obj = new CustomException(name, age);
      obj.display();
   }
}

输出结果

Enter the name of the Student:
Krishna
Enter the age of the Student, should be 17 to 24 (including 17 and 24):
30
july_set3.AgeDoesnotMatchException: Age is not between 17 and 24
Name of the Student: Krishna
Age of the Student: 30
at july_set3.CustomException.<init>(CustomException.java:17)
at july_set3.CustomException.main(CustomException.java:36)