我得到一个“未报告的异常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();
}
我是否打电话/抛出异常错误?
答案 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()
,因为您正在捕获其中的潜在异常。