自定义 Java 异常

原文:https://www.studytonight.com/java-examples/custom-java-exception

异常是执行程序时发生的不良事件。异常干扰了我们代码的正常执行流程。Java 定义了许多内置的异常,涵盖了可能发生错误的不同场景。但是,我们可能需要自定义异常来处理一些特殊情况。在本教程中,我们将学习如何在 Java 中创建自定义异常。

为什么我们需要自定义例外?

  • Java 提供了不同的异常,它们几乎涵盖了我们在编程过程中可能遇到的每一种情况。但是在一些情况下,我们可能需要一个定制的例外。
  • 例如,假设我们有一个银行类。如果账户余额低于 0 美元,那么我们可能需要抛出资金不足异常
  • 以下是我们可能需要自定义的、用户定义的异常的两种一般情况。
    • 与我们的业务逻辑或工作流程相关的异常(如银行示例)。
    • 为现有异常提供特定处理。

自定义检查例外

检查异常是在编译时检查的异常。如果代码的某些部分引发了选中的异常,则必须使用 try-catch 块或方法定义中的 throws 关键字来处理该异常。

为了创建一个用户定义的检查异常,我们需要扩展异常类。

例子

让我们创建一个 MyArray 类并实现一个 get()方法。如果索引无效,此方法将引发 IndexNotValidException 异常。

//Custom Checked exception
class IndexNotValidException extends Exception
{
    IndexNotValidException(String msg)//Constructor with error message
    {
        super(msg);
    }
}    
class MyArray
{
    int[] array;
    MyArray(int size)//Constructor for our array class
    {
        array = new int[size];
        for(int i=0; i<size; i++)
            array[i] = i*5;
    }    
    //Get Method may throw IndexNotValidException
    public int get(int index) throws IndexNotValidException
    {
        if(index >= array.length)
            throw new IndexNotValidException("Index " + index+ " is invalid.");//Throwing the exception

        else
            return array[index];
    }
}
public class Demo
{    
    public static void main(String[] args)
    {
            MyArray arr = new MyArray(5);
            try {
                arr.get(10);//Error
            } 
            catch (IndexNotValidException e) {
                e.printStackTrace();
            }
    }
}

IndexNotValidException:索引 10 无效。 在 MyArray.get(Demo.java:24) 在 Demo.main(Demo.java:39)

如上面的代码所示,IndexNotValidException 扩展了异常类。我们在 IndexNotValidException 类中使用了一个构造器。这会调用带有错误消息的父构造器。

自定义未检查的例外

编译时不检查未检查的异常。此类异常仅在运行时检测到。要创建自定义的未检查异常,我们需要扩展 RuntimeException 类。

例子

我们可以扩展 RuntimeException 类而不是 Exception 类来创建一个未检查的异常。我们还可以定义一个可抛出的异常,它定义了潜在的异常或异常的原因。在我们的例子中,潜在的例外是 ArrayIndexOutOfBounds 。完整的代码如下所示。

//Custom Unchecked exception
class IndexNotValidException extends RuntimeException
{
    IndexNotValidException(String msg, Throwable cause)//Constructor with error message and cause 
    {
        super(msg, cause);
    }
}    
class MyArray
{
    int[] array;
    MyArray(int size)//Constructor for our array class
    {
        array = new int[size];
        for(int i=0; i<size; i++)
            array[i] = i*5;
    }    
    //Get Method may throw IndexNotValidException
    public int get(int index) throws IndexNotValidException
    {
        if(index >= array.length)
        {
            Exception cause = new ArrayIndexOutOfBoundsException();//Cause of our exception
            throw new IndexNotValidException("Index " + index+ " is invalid.", cause);//Throwing the exception
        }            
        else
            return array[index];
    }
}
public class Demo
{

    public static void main(String[] args)
    {
            MyArray arr = new MyArray(5);
            arr.get(10);//Exception occurs here
    }
}

线程“main”中出现异常 IndexNotValidException:索引 10 无效。 在 MyArray.get(Demo.java:24) 在 Demo.main(Demo.java:39) 由:Java . lang . arrayindexoutofboundsexception 在 MyArray.get(Demo.java:23) 引起...1 个以上

摘要

当我们使用任何编程语言时,异常和错误都很常见。自定义异常帮助我们识别特定于我们自己的应用的错误。自定义异常用于识别我们的业务逻辑和工作流中的错误。它们也用于在现有异常的基础上构建一些东西。