为什么在numberformatexception发生时声明ioexception?

时间:2013-02-26 13:19:10

标签: java

try {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    str = br.readLine();
    i = Integer.parseInt(str);
} catch(NumberFormatException e) {
    System.out.Println("enter a valid input");
}

当我尝试编译这段代码时,它会抛出一个编译错误,ioexception正在发生我应该抓住它。

因此我必须添加catch(IOException e)语句,但发生的异常是java.lang库的数字格式例外,所以为什么我必须捕获ioException

4 个答案:

答案 0 :(得分:5)

str=br.readLine();

BufferedReader.readLine()抛出 IOException

public String readLine() throws IOException
  

抛出:IOException - 如果发生I / O错误

因为 IOException 是一个已检查的异常,您需要使用try / catch块处理它或使用throws子句声明它。

try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str=br.readLine();
i=Integer.parseInt(str);
}catch(IOException e)
{System.out.println("IOException occured... " + e.printStacktrace());
catch(NumberFormatException e)
{System.out.println("enter a valid input");
}

在java 7中多次捕获:

try
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    str=br.readLine();
    i=Integer.parseInt(str);
    }
catch(IOException | NumberFormatException ex) {
System.out.println(ex.printStackTrace())
}

答案 1 :(得分:0)

如果发生I / O错误,

BufferedReader.readLine 可以抛出IOException

答案 2 :(得分:0)

请注意这一行str = br.readLine();可能会发生IOException

答案 3 :(得分:0)

这是因为,

bufferedReader.readLine ()

抛出IOException,这是一个经过检查的异常。所有已检查的异常都应该在try catch块中。您可以捕获IOException或泛型异常。代码段如下。 NumberFormatException也是一个运行时异常。除非需要,否则您无需捕获它。

try {
     String str = bufferedReader.readLine ();
} catch (IOException ie) {
     ie.printStacktrace();
}


try {
     String str = bufferedReader.readLine ();
} catch (Exception ie) {
     e.printStacktrace();
}