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

时间:2014-08-29 23:14:16

标签: 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; 
            }
            else
            {
                currentChar = (char) data; 
            }
        }
        catch (IOException e) 
        {
            System.exit(0);
        }
    }

我在这里调用方法(在构造函数中):

private BufferedReader in;
private char currentChar;
private boolean done;

public Scanner(InputStream inStream)
{
    in = new BufferedReader(new InputStreamReader(inStream));
    done = false;
    getNextChar();
}

public Scanner(String inString)
{
    in = new BufferedReader(new StringReader(inString));
    done = false; 
    setChar();
}

我是否打电话/抛出异常错误?

3 个答案:

答案 0 :(得分:3)

您的Scanner构造函数可以抛出IOException,因为它正在调用setChar(),并且可以抛出它。

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

答案 1 :(得分:1)

您的setChar()方法表示它可以抛出IOException,但是您的第二个构造函数不会处理它。

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

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

答案 2 :(得分:1)

构造函数中的

setChar();会抛出IOException

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

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