“错误”;未报告的异常java.io.ioexception必须被捕获或声明为抛出;在Java类中
由于某种原因,我得到了一个“未报告的异常java.io.ioexception必须被捕获或声明为抛出”。我在此方法中引发I/O异常:“错误”;未报告的异常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;
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()构造函数中的code>抛出一个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)
}
}