Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么BufferedReader类在编译时而不是在运行时生成异常_Java_Exception_Compilation_Bufferedreader_Ioexception - Fatal编程技术网

Java 为什么BufferedReader类在编译时而不是在运行时生成异常

Java 为什么BufferedReader类在编译时而不是在运行时生成异常,java,exception,compilation,bufferedreader,ioexception,Java,Exception,Compilation,Bufferedreader,Ioexception,我知道异常发生在运行时,而不是编译时 因此,此代码成功编译,没有任何类型为java.lang.arithmetricexception:/by zero的编译时异常,但仅在运行时给出异常 class divzero{ public static void main(String[] arg){ System.out.print(3/0); } } 但是,当我使用BufferedReader时,在编译下面给出的代码时,它会说“未报告的异常java.io.IOException;必须被捕获或声明为

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

因此,此代码成功编译,没有任何类型为
java.lang.arithmetricexception:/by zero
的编译时异常,但仅在运行时给出异常

class divzero{
public static void main(String[] arg){
System.out.print(3/0);
}
}
但是,当我使用
BufferedReader
时,在编译下面给出的代码时,它会说“
未报告的异常java.io.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;
input = br.readLine();
System.out.print("Your input is: "+input);
}
}
我知道,我应该抛出
IOException
类型的异常,但为什么呢?我想知道为什么在编译时而不是运行时“
未报告的异常java.io.IOException


请告诉我为什么它会这样?

readLine的签名是这样的

public String readLine() throws IOException
因此,您必须处理它可能抛出的异常。向方法中添加
try/catch
或添加
抛出IOException


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

由于
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
的详细信息,请参阅这不是例外,而是语法错误。请使用
try…catch
throws
子句。我仍然不清楚。请通过解释或任何例子让我理解@Simon@G4uKu3它是java语言的一部分。如果一个方法说它可能抛出一个异常,那么您必须处理它,否则您的代码将无法编译。方法可能引发异常的说法是在方法名称后添加
throws SomeException
。我认为在编译时处理异常不是强制性的,因为理论上说“异常发生在运行时”。是的,异常从不在编译时发生。但是,如果编译器发现您没有处理检查过的异常,那么您就会出现编译器错误。我非常感谢您花时间和精力让我理解,我在阅读文档,所以您说“exception java.io.IOException;”是“BufferedReader”类的构造函数在编译时应该解决的“检查过的异常”。是吗?部分是
IOException
是一个选中的异常,因为它扩展了
java.lang.exception
,而不是
java.lang.RuntimeException
BufferedReader.readLine()
抛出
IOException
,应该使用
try…catch
捕获,或者使用
抛出重新抛出。我认为在编译时处理异常不是强制性的,因为理论上说“异常发生在运行时”。那么为什么java.lang.Exception中的异常应该在编译时处理呢?您不是在编译时处理异常,而是在运行时编写代码来处理它。如果您在运行时碰巧遇到异常,此代码将保存您的应用程序以使其正常工作,而不会突然终止。这就像编写代码在编译时创建一个类的对象,但实际上该对象将在运行时创建。好的,我明白了,这只是一种预测此类条件并正确处理它们的方法,这样应用程序就不会崩溃