当我检测到错误时,我应该在java中抛出什么异常?

当我检测到错误时,我应该在java中抛出什么异常?,java,Java,假设我有一个存储学生姓名的文本文件和另一个存储他们成绩的文本文件,我正在尝试将它们合并到一个文本文件中(或者可能正在进行其他处理)。此外,假设我编写了一个类,它提供了一个迭代器,基本上抽象出了数据存储在两个独立文件中的事实。此迭代器的方法如下: public class MyIterator { public boolean hasNext() { boolean a = this.nameReader.hasNext(); boolean b = thi

假设我有一个存储学生姓名的文本文件和另一个存储他们成绩的文本文件,我正在尝试将它们合并到一个文本文件中(或者可能正在进行其他处理)。此外,假设我编写了一个类,它提供了一个迭代器,基本上抽象出了数据存储在两个独立文件中的事实。此迭代器的方法如下:

public class MyIterator
{
   public boolean hasNext()
   {
       boolean a = this.nameReader.hasNext();
       boolean b = this.gradeReader.hasNext();
       if (a != b)
       {
          // the number of records in the two files don't match; 
          // most likely input is wrong and user should be alerted about it
          // **Question: What exception should I throw here?**
       }
       return a;
   }

   public MyTuple next()
   {
       // read the next records from both files and
       // combine them into a tuple 
   }
}  
Java有,但它的描述与这里的问题不匹配

:
表示在非法或不适当的时间调用了方法。换句话说,Java环境或Java应用程序对于请求的操作没有处于适当的状态。

IllegalArgumentException
是一个很好的抛出异常,但是如果它不能满足您的需要,您可以创建自己的异常。请记住,您并不总是希望向公众显示异常结果,因此在记录异常结果时,您可能希望以不同的方式处理该异常

IllegalArgumentException
是一个很好的异常抛出方法,但是如果它不能满足您的需要,您可以创建自己的异常。请记住,您并不总是希望向公众显示异常结果,因此在记录异常结果时,您可能希望以不同的方式处理该异常

假设您正在实现一个接口的方法,并且该方法不会抛出任何已检查的异常,那么您仅限于
RuntimeException
的子类

如果没有一个现有的子类适合您的情况,您总是可以创建自己的子类,尽管对于未经检查的异常通常不建议这样做(因为它们不会自动出现在JavaDoc中)。重要的是要记录您在类的JavaDoc中抛出的内容


如果我被要求为您描述的情况选择一个现有的运行时异常,我可能会选择围绕一个。

假设您正在实现一个接口的方法,并且该方法不会抛出任何已检查的异常,那么您仅限于
RuntimeException
的子类

如果没有一个现有的子类适合您的情况,您总是可以创建自己的子类,尽管对于未经检查的异常通常不建议这样做(因为它们不会自动出现在JavaDoc中)。重要的是要记录您在类的JavaDoc中抛出的内容


如果要求我为您描述的情况选择一个现有的运行时异常,我可能会选择围绕一个。

标准异常是
IllegalArgumentException
,但在这种情况下,您可能需要定义自己的,因为您可能会将其与所有其他问题分开处理。除非出现
不正确的FileArgumentException
异常,否则您应该创建自己的SAS,将数据存储在文件中。您可能会抛出
EOFEException
程序的用户有机会修复该问题吗?-此外,以99%的输出运行程序,然后抛出异常也不是一个好策略。这种数据错误应该在任何处理之前发出信号。我不认为
IllegalArgumentException
是一个好的选择:没有任何参数被传递到
hasNext
是非法的。我会选择
IllegalStateException
。标准的是
IllegalArgumentException
,但在这种情况下,您可能需要定义自己的,因为您可能会将其与所有其他问题分开处理。除非出现
不正确的FileArgumentException
异常,否则您应该创建自己的SAS,将数据存储在文件中。您可能会抛出
EOFEException
程序的用户有机会修复该问题吗?-此外,以99%的输出运行程序,然后抛出异常也不是一个好策略。这种数据错误应该在任何处理之前发出信号。我不认为
IllegalArgumentException
是一个好的选择:没有任何参数被传递到
hasNext
是非法的。我想去掉<代码> ILLaltStaleExtExist[/Cuth]。“<代码> ILLALGALGUMUMENTURCTION < /COD>是一个很好的抛出异常”,为什么你认为一个没有参数的方法应该抛出一个<代码> ILLCALLARGUMUMENTRONT/<代码>?考虑将它改为IllegalStateException,我认为它更接近无效状态,for IllegalStateException表示:表示在非法或不适当的时间调用了某个方法。换句话说,java环境或java应用程序对于请求的操作不处于适当的状态“<代码> ILLACALAGUMUMETRONUTION< /COD>是一个很好的抛出异常”,为什么您认为没有参数的方法应该抛出一个<代码>非法LaGuMuthExtExt/Cube >?我认为它更接近无效状态,for IllegalStateException说:表示方法在非法或不适当的时间被调用。换句话说,Java环境或Java应用程序对于请求的操作没有处于适当的状态。我没有实现任何接口。我还应该使用未检查的异常吗?我以为您正在实现
迭代器
接口。如果您正在创建一个“类似迭代器”的类,那么您应该这样做。但是,如果您没有实现它,您可能应该使用检查异常,因为它们的文档更完整。我没有实现任何接口。我还应该使用未检查的异常吗?我以为您正在实现
迭代器
接口。如果您正在创建一个“类似迭代器”的类,那么您应该这样做。但是,如果您没有实现它,您可能应该使用检查异常,因为它们的文档记录更为完善。