作为希望完善其编程技能的Java程序员,我经常遇到必须创建运行时异常的情况。我知道,如果明智地使用它是一个好习惯。
就我个人而言, NullPointerException 和 IllegalStateException 是我创建的软件中最常用的。你呢?
您经常使用哪些运行时异常?您在什么情况下使用它们?
我从不抛出 NullPointerException 。对我来说,当出现问题时,它自然会出现在代码中,并且需要开发人员查看会发生什么。然后,他修复了原因,并且不再发生。
我使用 IllegalStateException 来表示对象配置错误或调用顺序不正确。但是,我们都知道,理想情况下,对象应确保它不会处于不良状态,并且您不能以不正确的顺序调用它(制造一个生成器和一个生成的对象…)。
当一个方法检测到其参数不正确时,我会使用很多 IllegalArgumentException 。这是任何公共方法的责任,即停止处理(以避免更难理解的间接错误)。同样,if方法开头的几个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 (理想情况下是由诸如拦截器之类的通用代码,否则由特定代码引起)。在做出架构决定之后,每个模块都必须处理调用其他模块的操作上的此异常。