0
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

4 回答 4

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())
}
于 2013-02-26T13:20:11.327 回答
0

BufferedReader.readLineIOException如果发生 I/O 错误,可以抛出一个。

于 2013-02-26T13:21:23.390 回答
0

因为这条线 str=br.readLine(); 可能会发生 IOException

于 2013-02-26T13:25:01.723 回答
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();
}
于 2013-11-18T08:10:45.760 回答