我知道异常是在运行时发生的,而不是在编译时。
所以这段代码编译成功,没有任何编译时间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
"在编译时而不是在运行时。
请告诉我为什么会这样?
答案 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是未经检查的异常的一个示例。