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

java中最常用的运行时异常是什么?,java,exception,runtime,Java,Exception,Runtime,作为一名希望完善编程技能的java程序员,我经常遇到必须创建运行时异常的情况。我知道如果一个人使用得当,这是一个很好的做法 就个人而言,NullPointerException和IllegalStateException是我创建的软件中最常用的。你呢 您经常使用哪些运行时异常?您在什么情况下使用它们?我从不抛出NullPointerException。对我来说,当出现问题时,它会自然而然地出现在代码中,需要开发人员查看发生了什么。然后,他修复了原因,不再发生 我使用IllegalStateExc

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

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


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

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

我使用IllegalStateException表示对象配置不正确或调用顺序不正确。然而,我们都知道,理想情况下,对象应该确保它不会处于不良状态,并且不能以错误的顺序调用它(生成生成器和结果对象…)

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

public void myMethod(字符串消息,长id){
如果(消息==null){
抛出新的IllegalArgumentException(“myMethod的消息不能为null”);
//消息没有记录参数,因为我们知道它的值,它是空的。
}
if(id==null){
抛出新的IllegalArgumentException(“myMethod的id不能为null”);
//本案例与前一案例不同,原因有二:
//1.输出准确的信息
//2.在规范中明确记录要求
}

if(message.length()我相对经常使用
IllegalArgumentException
。大多数情况下,我会尝试在默认值符合逻辑时立即返回它,但有些时候它不是,因此我使用这个值


我使用的另一个异常是
ArrayIndexOutOfBoundsException

我一直认为运行时异常应该表示编程错误(例如,当不期望时传入的
null
引用,数组索引超出边界,等等)而选中的异常应表示无法“编码”的环境中的异常情况(例如,
IOException
SQLException

违反这一点的一个原因是,有时您需要在RuntimeException中包装应该检查的异常,以满足接口的定义。作为一个简单的例子,您可能有一些时髦的
java.util.List
实现,它管理多台机器之间的分布式列表。显然,这不会hrow checked exception(可能是
IOException
的某个子类)如果自己定义的话,但是让这个类实现
List
的好处是,客户端几乎可以透明地使用它,无论他们在何处使用另一个列表


不过,这可能会导致Joel所说的a,因此您的文档必须清楚哪些异常可以抛出以及它们的含义!在这种情况下,我发现
RuntimeException
的自定义子类通常更清楚地传达根本原因,而不是试图将其硬塞进现有的运行时异常cla中ss.

未知异常,非常有用:p


我也喜欢org.apache.commons.lang.NotImplementedException

大多数情况下我不会抛出运行时异常。而不是在检查特定条件后抛出用户定义的异常。但我使用的少数异常是-
IllegaAccess异常、算术异常、NumberFormatException和SecurityException。

根据Joshua Bloch在有效Java中的

最常重用的异常:

  • 非法辩论例外
  • 非法国家例外
  • NullPointerException
  • IndexOutOfBoundsException
  • ConcurrentModificationException
  • 不支持操作异常

  • 关于checkedException,您与Java的原始想法一致。实际上,这是Java唯一的原始特性(所有其他特性都来自其他成功的语言)但是,我觉得现在的趋势是把java中的错误看作是一个错误。这里的问题将是不重要的话题,你可以把它们谷歌……伟大的列表;我会添加unService操作异常,我一直使用它来实现集合接口的具体实现。未来将更多地关注非法状态异常!回答得很好。我只能+1一次,但我会做两次:一次是为了好的解释,一次是为了自我记录的前提条件强制。我经常使用assert进行这些操作,但非法参数完全适合这种情况。我使用
    抛出新的UnsupportedOperationException(“尚未实现”);
    用于我的应用程序中尚未实现的部分。
         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.
           }
         }