一尘不染

Java中最常用的运行时异常是什么?

java

作为希望完善其编程技能的Java程序员,我经常遇到必须创建运行时异常的情况。我知道,如果明智地使用它是一个好习惯。

就我个人而言, NullPointerExceptionIllegalStateException 是我创建的软件中最常用的。你呢?

您经常使用哪些运行时异常?您在什么情况下使用它们?


阅读 334

收藏
2020-12-03

共1个答案

一尘不染

我从不抛出 NullPointerException
。对我来说,当出现问题时,它自然会出现在代码中,并且需要开发人员查看会发生什么。然后,他修复了原因,并且不再发生。

我使用 IllegalStateException
来表示对象配置错误或调用顺序不正确。但是,我们都知道,理想情况下,对象应确保它不会处于不良状态,并且您不能以不正确的顺序调用它(制造一个生成器和一个生成的对象…)。

当一个方法检测到其参数不正确时,我会使用很多 IllegalArgumentException
。这是任何公共方法的责任,即停止处理(以避免更难理解的间接错误)。同样,if方法开头的几个s用于文档目的(文档永远不会偏离代码,因为它是代码:-))。

     public void myMethod(String message, Long id) {
       if (message == null) {
          throw new IllegalArgumentException("myMethod's message can't be null");
          // The message doesn't log the argument because we know its value, it is null.
       }
       if (id == null) {
          throw new IllegalArgumentException("myMethod's id can't be null");
          // This case is separated from the previous one for two reasons :
          // 1. to output a precise message
          // 2. to document clearly in the code the requirements
       }
       if (message.length()<12) {
          throw new IllegalArgumentException("myMethod's message is too small, was '" + message + "'");
          // here, we need to output the message itself, 
          // because it is a useful debug information.
       }
     }

我还使用 特定的运行时异常 来表示更高级别的异常情况。

例如,如果我的应用程序的模块无法启动,则当另一个模块调用它时,可能会引发 ModuleNotOperationalException
(理想情况下是由诸如拦截器之类的通用代码,否则由特定代码引起)。在做出架构决定之后,每个模块都必须处理调用其他模块的操作上的此异常。

2020-12-03