行业资讯 2025年08月6日
0 收藏 0 点赞 347 浏览 2115 个字
摘要 :

文章目录 1. 传统方法 2.使用内部类的新方法 2.1. 创建新的异常类型 2.2. 如何使用自定义异常? 3、优点 我们一直在代码中为几乎每个行业标准应用程序使用处理Java ……




  • 1. 传统方法
  • 2.使用内部类的新方法
  • 3、优点

我们一直在代码中为几乎每个行业标准应用程序使用处理Java 自定义异常。通常的方法是创建一些自定义异常类,扩展基本异常处理最佳实践,这可能更有意义。

1. 传统方法

假设我们正在创建一个自定义异常DBException来表示数据库相关操作期间发生的异常。传统上,我们DBException通过扩展Exception类来创建类。

public class DBException extends Exception {

  public DBException() {
    super();
  }

  public DBException(String message) {
    super(message);
  }

  public DBException(String message, Throwable cause) {
    super(message, cause);
  }
}

现在,每当我们遇到需要抛出与数据库相关的异常的情况时,我们通常会创建一个实例,以消息的形式DBException放入一些信息并抛出它。

现在,让我们考虑一下我们已经确定的以下情况,我们需要抛出DBException

  • SQL执行错误
  • 我们期望至少一行的地方不存在数据
  • 在我们期望只有单行的地方存在多行
  • 无效参数错误
  • 以及更多这样的案例

上述方法的问题在于,在catch块或应处理这些异常的应用程序代码中,DBException没有提供足够的信息来唯一地处理上面列出的每个用例。

2.使用内部类的新方法

我们的新方法对每个新的异常场景使用静态内部类

2.1. 创建新的异常类型

让我们用内部类来解决上述问题,我们将为每个用例创建一个类,然后将它们分组到类中DBException

让我们从 BaseException 类开始,它是作为抽象创建的,并将成为所有异常类的超类。

public abstract class BaseException extends Exception {

  private String message;

  public BaseException(String msg) {
    super(msg);
    this.message = msg;
  }

  public String getMessage() {
    return message;
  }
}

现在是时候创建新的Exception内部类了。

public class DBException {

  //SQL execution error
  public static class BadExecution extends BaseException {

    public BadExecution(String msg) {
      super(msg);
    }
  }

  //No data exist where we expect at least one row
  public static class NoData extends BaseException {

    public NoData(String msg) {
      super(msg);
    }
  }

  //Multiple rows exist where we expect only single row
  public static class MoreData extends BaseException {

    public MoreData(String msg) {
      super(msg);
    }
  }

  //Invalid parameters error
  public static class InvalidParam extends BaseException {

    public InvalidParam(String msg) {
      super(msg);
    }
  }
}

在这里,我们为启动时识别的每个可能的错误场景创建了一个内部类。还可以有更多的附加功能。这仅取决于您来识别和添加更多类。

2.2. 如何使用自定义异常?

现在为了了解它的用处,让我们创建一个异常并抛出它。然后我们就会在日志中看到错误信息。

public class TestExceptions {
    public static void main(String[] args)
    {
        try
        {
            throw new DBExeption.NoData(\"No row found for id : x\");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

程序输出:

com.exception.DBExeption$NoData: No row found for id : x
at com.test.TestExceptions.main(TestExceptions.java:7)

正如您所看到的,异常堆栈跟踪中的日志消息已变得更加丰富。它清楚地告诉了错误是什么。在应用程序代码中,您也可以检查自定义异常的实例并进行相应的处理。

3、优点

  • 最重要的好处是,如果开发人员编写了一些可疑的消息文本,那么他也可以清楚地观察到到底出了什么问题。
  • 您可以在处理不同异常情况的不同情况下使用实例比较。
  • 您不需要针对大量异常情况发送单个异常。
  • 在您知道您应该期望的确切异常类的情况下,为负面情况编写单元测试用例很容易。
  • 日志记录更有意义、信息更丰富。

我希望这篇关于 Java 自定义异常的文章能为您提供一些信息。如果您有一些建议,请写留言评论。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9228.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号