为什么我得到“未处理的异常类型 IOException”?

2022-09-01 01:44:24

我有以下简单的代码:

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 

有没有人知道为什么?我只是试图简化sum网站上给出的代码(这里)。我是否过于简单化了?


答案 1

您应该将“throws IOException”添加到您的主方法中:

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

您可以阅读有关JLS中已检查异常(特定于Java)的更多信息。


答案 2

Java有一个名为“检查异常”的功能。这意味着存在某些类型的异常,即那些子类异常而不是运行时异常的异常,因此,如果一个方法可能引发它们,它必须在其抛出声明中列出它们,例如:void readData() 抛出 IOException。IOException就是其中之一。

因此,当您调用在其 throw 语句中列出 IOException 的方法时,必须将其列在自己的 throw 语句中,或者捕获它。

存在已检查异常的理由是,对于某些类型的异常,您不能忽略它们可能发生的事实,因为它们的发生是一种非常规律的情况,而不是程序错误。因此,编译器可以帮助您不要忘记引发此类异常的可能性,并要求您以某种方式处理它。

但是,并非所有 Java 标准库中经过检查的异常类都符合此基本原理,但这是一个完全不同的主题。


推荐