42

我有以下简单的代码:

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 网站(此处)上给出的代码。我是否过于简单化了?

4

6 回答 6

69

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

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

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

于 2010-02-21T13:18:49.953 回答
51

Java 有一个称为“检查异常”的特性。这意味着存在某些类型的异常,即那些是 Exception 的子类但不是 RuntimeException 的子类,因此如果一个方法可能抛出它们,它必须在其 throws 声明中列出它们,例如:void readData() throws IOException。IOException 就是其中之一。

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

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

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

于 2010-02-21T13:23:49.357 回答
14

使用此代码段重试:

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.

于 2010-02-21T15:01:43.173 回答
0

从键盘读取输入类似于从 Internet 下载文件,java io 系统使用 InputStream 或 Reader 打开与要读取的数据源的连接,您必须使用 IOExceptions 处理连接可能中断的情况

如果您想确切了解使用 InputStreams 和 BufferedReader 意味着什么,这个视频将展示它

于 2013-01-21T01:27:52.823 回答
0

像这样将“抛出 IOException”添加到您的方法中:

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

        FileReader reader=new FileReader("db.properties");

        Properties p=new Properties();
        p.load(reader);


    }
于 2018-02-07T15:24:59.843 回答
0

即使我发现了异常,我也得到了错误。

    try {
        bitmap = BitmapFactory.decodeStream(getAssets().open("kitten.jpg"));
    } catch (IOException e) {
        Log.e("blabla", "Error", e);
        finish();
    }

问题是未导入 IOException

import java.io.IOException;
于 2021-02-26T15:28:35.687 回答