为什么BufferedReader类在编译时不在运行时生成Exception

时间:2015-06-24 09:17:25

标签: java exception compilation bufferedreader ioexception

我知道异常是在运行时发生的,而不是在编译时。

所以这段代码编译成功,没有任何编译时间java.lang.ArithmeticException: / by zero类型的异常,但仅在运行时提供异常

class divzero{
public static void main(String[] arg){
System.out.print(3/0);
}
}

但是当我使用BufferedReader课程时,它会说" unreported exception java.io.IOException; must be caught or declared to be thrown"当我编译下面给出的代码时。我认为它应该在运行时不在编译时产生这个异常。因为在编译时会发生异常。

import java.io.*;
class Bufferedreaderclass{

public static void main(String[] arg)
{
System.out.print("mazic of buffer reader \n Input : ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
input = br.readLine();
System.out.print("Your input is: "+input);
}
}

我知道,我应该抛出IOException类型的例外但为什么?我想知道为什么" unreported exception java.io.IOException"在编译时而不是在运行时。

请告诉我为什么会这样?

2 个答案:

答案 0 :(得分:2)

由于IOException是已检查的例外,您必须使用try...catch或'throws`。

try...catch块的用法如下所示。它将处理IOException的运行时出现。

import java.io.*;
class Bufferedreaderclass{

public static void main(String[] arg)
{
    System.out.print("mazic of buffer reader \n Input : ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input = "";
    try{
        input = br.readLine();
        System.out.print("Your input is: "+input);
    } catch (IOException e) {
    // do something useful with this exception
    }
}

有关使用try...catch的详细信息,请参阅https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html

答案 1 :(得分:1)

readLine的签名就是这个

public String readLine() throws IOException

因此,您必须处理它可能抛出的异常。添加try/catch或将throws IOException添加到您的方法中。

在java中有检查异常和未经检查的异常。这是一个经过检查的例外,您必须以某种方式处理它。 ArithmeticException是未经检查的异常的一个示例。