java中BufferReader的异常处理

java中BufferReader的异常处理,java,exception,exception-handling,bufferedreader,Java,Exception,Exception Handling,Bufferedreader,在这个简单的程序中,为什么我必须处理异常 public static void main (String args[ ]) throws IOException { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Insert something : "); System.out.println(

在这个简单的程序中,为什么我必须处理异常

public static void main (String args[ ]) throws IOException
   {
        BufferedReader in = new BufferedReader(
        new InputStreamReader(System.in));

    System.out.print("Insert something : ");
        System.out.println("You inserted : "+in.readLine());    
   }
BufferReader#readLine()
method抛出
IOException
因此,如果使用此方法,您应该在try-catch块中使用它,或者将
抛出IOException
添加到使用它的方法中

引用


要了解有关一般异常处理的更多信息(当然是java),请阅读。

,因为
close()
方法的约定。从JavaDoc:

关闭流并释放与之关联的所有系统资源。关闭流后,进一步的read()、ready()、mark()、reset()或skip()调用将抛出IOException。关闭以前关闭的流没有效果


当缓冲流关闭时,
BufferedReader
将无法读取更多内容,并将通过抛出
IOException
来通知调用者此事实。您需要处理
IOException
,因为它是.readLine()中的
检查异常和方法
使用throws子句专门声明它。这意味着IO异常可以在运行时抛出,所以您应该处理它。希望这能有所帮助。

从stdin读取数据不太可能导致任何类型的IOException。不过,BufferedReader并不知道,它假定正在包装的任何东西都会抛出IOException,而它只是在传递它。我会考虑改用
java.util.Scanner
类,以避免这里BufferedReader检查异常的麻烦

当程序终止时,JVM将为您处理关闭stdin的问题,因此关闭读取器不应该是问题,除非您可能最终需要刷新BufferedReader以获取其所有内容。这是选择扫描仪的另一个原因


对于一个小程序,允许main方法抛出异常是可以的,这些异常将被写入控制台(特别是stderr)。只要这是您想要的行为,在这里抛出IOException就可以了。在现实生活中,程序可以通过shell脚本执行,shell脚本可以将程序的输出重定向到文件,以便记录程序抛出的任何内容。

考虑一种情况,当您使用In.readline()读取文件时,有人会独立地从文件系统中删除该文件。会发生什么?我想他对IOException成为签名一部分的原因很感兴趣。@Harmlez>也许吧,所以我为它添加了一个参考。我猜他想知道IOException成为签名一部分的动机,而不是事实,但我不确定。这只是一个猜测,我给了他/她一个关于动机的答案。现在他拥有两个世界的一切。