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

Posted

技术标签:

【中文标题】为啥我会得到“未处理的异常类型 IOException”?【英文标题】:Why do I get the "Unhandled exception type IOException"?为什么我会得到“未处理的异常类型 IOException”? 【发布时间】:2011-01-19 08:13:54 【问题描述】:

我有以下简单的代码:

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

【问题讨论】:

【参考方案1】:

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

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

问题是没有导入 IOException

import java.io.IOException;

【讨论】:

【参考方案2】:

将“抛出 IOException”添加到您的方法中,如下所示:

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

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

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


    

【讨论】:

【参考方案3】:

您应该在主方法中添加“抛出 IOException”:

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

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

【讨论】:

【参考方案4】:

用这段代码 sn-p 再试一次:

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 更容易查找错误和调试。

【讨论】:

【参考方案5】:

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

如果您想确切地知道使用 InputStreams 和 BufferedReader 意味着什么,this video 显示它

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

以上是关于为啥我会得到“未处理的异常类型 IOException”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会得到不同形状的张量错误?

施放 pParam 后,为啥我会得到随机字符?

为啥我会得到 SP2-0253

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

为啥我会得到欧洲/柏林时区 0:53 的偏移量?

对于这个简单的示例,为啥我会得到“检测到 PInvokeStackImbalance”?