为什么我得到“未处理的exceptiontypesIOException”?

我有以下简单的代码:

import java.io.*; class IO { public static void main(String[] args) { BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { System.out.println(userInput); } } } 

我收到以下错误消息:

 ---------- 1. ERROR in io.java (at line 10) while ((userInput = stdIn.readLine()) != null) { ^^^^^^^^^^^^^^^^ Unhandled exception type IOException ---------- 1 problem (1 error)roman@roman-laptop:~/work/java$ mcedit io.java 

有人有任何想法,为什么? 我只是试图简化总和网站上给出的代码( 在这里 )。 我过于简单了吗?

你应该添加“抛出IOException”到你的主要方法:

public static void main(String[] args) throws IOException {

您可以在JLS中多读一点关于检查的exception(特定于Java)。

Java有一个称为“检查exception”的function。 这意味着有一些types的exception,即那些子类Exception但不RuntimeException,如果一个方法可能抛出它们,它必须列出它们的抛出声明,说:void readData()抛出IOExceptionexception。 IOException是其中之一。

因此,在调用抛出声明中列出IOException的方法时,必须将其列在自己的throws声明中,或者将其捕获。

检查exception存在的基本原理是,对于某些types的exception,您不能忽视它们可能发生的事实,因为它们的发生是相当正常的情况,而不是程序错误。 所以,编译器可以帮助你不要忘记这种exception被提出的可能性,并要求你以某种方式处理它。

但是,并不是所有Java标准库中的检查exception类都符合这个原理,但这是一个完全不同的主题。

用这段代码重试一遍:

 import java.io.*; class IO { public static void main(String[] args) { try { BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { System.out.println(userInput); } } catch(IOException ie) { ie.printStackTrace(); } } } 

使用try-catch-finally比使用throws更好。 当您使用try-catch-finally时,查找错误和debugging更容易。

从键盘读取input类似于从互联网上下载文件,java io系统打开与要使用InputStream或Reader读取的数据源的连接,必须处理连接可以通过使用IOExceptions

如果您想知道使用InputStreams和BufferedReader的确切含义,则该video会显示它