为什么我得到“未处理的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会显示它