Java中最常用的运行时异常是什么?[已关闭]

2022-08-31 23:58:06

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

就个人而言,NullPointerExceptionTravilStateException是我创建的软件中最常用的。你怎么样?

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


答案 1

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

我使用 IllegalStateException 来表示对象配置不正确或调用顺序不正确。但是,我们都知道,理想情况下,对象应该确保它不会处于不良状态,并且不能以不正确的顺序调用它(创建构建器和结果对象......)。

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

     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(理想情况下由像侦听器这样的通用代码,否则由特定代码引发)。在架构决策之后,每个模块都必须在调用其他模块的操作上处理此异常...


答案 2

我一直认为运行时异常应该代表编程错误(例如 在非预期时传入引用、数组索引越界等。而选中的异常应表示环境中无法“编码掉”的异常情况(例如 ,)。nullIOExceptionSQLException

这样做的一个违规行为是,有时您需要将本应是已检查的异常包装在 RuntimeException 中,以满足接口的定义。举一个简短的示例,您可能有一些时髦的实现,用于管理多台计算机之间的分布式列表。显然,如果单独定义,这将引发检查异常(可能是 的某个子类),但是使此类实现的好处是,客户端几乎可以透明地使用它,无论他们使用另一个列表。java.util.ListIOExceptionList

但是,这可能会导致Joel称之为泄漏的抽象,因此,重要的是您的文档要清楚可以抛出哪些异常以及它们的含义!在这种情况下,我发现一个自定义子类通常更清晰地传达根本原因,而不是试图将其硬塞进现有的运行时异常类中。RuntimeException