Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“错误”;未报告的异常java.io.ioexception必须被捕获或声明为抛出;在Java类中_Java_Exception_Exception Handling_Io_Ioexception - Fatal编程技术网

“错误”;未报告的异常java.io.ioexception必须被捕获或声明为抛出;在Java类中

“错误”;未报告的异常java.io.ioexception必须被捕获或声明为抛出;在Java类中,java,exception,exception-handling,io,ioexception,Java,Exception,Exception Handling,Io,Ioexception,由于某种原因,我得到了一个“未报告的异常java.io.ioexception必须被捕获或声明为抛出”。我在此方法中引发I/O异常: private void setChar() throws IOException { try { int data = in.read(); if(data==-1) { eof = true;

由于某种原因,我得到了一个“未报告的异常java.io.ioexception必须被捕获或声明为抛出”。我在此方法中引发I/O异常:

    private void setChar() throws IOException
    {
        try
        {
            int data = in.read(); 
            if(data==-1)
            {
                eof = true; 
            }
            else
            {
                currentChar = (char) data; 
            }
        }
        catch (IOException e) 
        {
            System.exit(0);
        }
    }
我在这里调用方法(在构造函数中):


我调用/抛出异常错误吗?

您的
扫描程序
构造函数可以抛出一个
IOException
,因为它调用的是
setChar()
,而这可以抛出它

您必须将构造函数声明为引发异常,或者在构造函数中捕获异常并处理它。

您的
setChar()
方法说它可以引发IOException,但您的第二个构造函数不处理它

您或者需要更改setChar()方法签名以不引发异常(实际上,它不会引发IOException),或者让构造函数来处理它,例如

  public Scanner(String inString)
  {
      in = new BufferedReader(new StringReader(inString));
      done = false;
      try {
          setChar();
      } 
      catch (IOException ie){
          System.exit(1)
      }
  }
setChar()抛出一个
IOException

因此,必须在构造函数中捕获它,否则构造函数也必须抛出
IOException


但是,您甚至不需要在声明
setChar()
方法之后添加
throws IOException
,因为您正在捕获其中的潜在异常。

将您的头稍微向右转,然后阅读相关部分。我认为这很好,因为我在方法中处理了它?啊,在这种情况下,您需要从该方法中删除
throws IOException
,因为它不能在不捕获并处理它的情况下抛出它;e.printStackTrace();}您只需要一个
throws
子句就可以解决异常,而不需要捕获异常。好的,我只是从方法声明中去掉了“out”抛出,并保持了try/catch,它就工作了。这很有意义——谢谢!
  public Scanner(String inString)
  {
      in = new BufferedReader(new StringReader(inString));
      done = false;
      try {
          setChar();
      } 
      catch (IOException ie){
          System.exit(1)
      }
  }