【问题标题】:Why is it asking me to surround BufferReader object with try catch when I already have that?为什么当我已经拥有 BufferReader 对象时,它要求我用 try catch 包围它?
【发布时间】:2018-12-12 17:20:38
【问题描述】:

我正在编写一个程序,在该程序中,我使用 BufferedReader 对象从用户那里获取输入,然后在 catch 块中捕获 BufferedReader 对象抛出的 IOException 但是当我在 finally 块中关闭资源时,为什么它说要包围尝试/捕获或声明 IOException

这是程序

public class BufferedReader3 {


    public static void main(String[] args){
        // TODO Auto-generated method stub

        InputStreamReader  r=null;
        BufferedReader br=null;
        String name="";    



        

        try 
        {
            
            r =new InputStreamReader(System.in);    
            br =new BufferedReader(r); 
            while(!name.equals("stop"))
            {    

                System.out.println("Enter data: ");   
                name=br.readLine();
            } 



            System.out.println("data is: "+name);    


        }              
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (Exception e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        finally
        {

            br.close();    
            r.close();    
        }
    }

}

【问题讨论】:

  • try-catch with resources 会解决这个问题。我认为这个问题与取消引用潜在的空指针有关。只是在这里猜测。

标签: java exception-handling bufferedreader


【解决方案1】:

close 方法可以抛出一个IOException,原因如下(source)

如果发生 I/O 错误

这就是为什么close 方法可能抛出的IOException 也需要被捕获,因为它在finally 块中,它不在您已经存在的try catch 块中:

finally {
    try {
        br.close();
        r.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 2017-05-30
    • 2013-01-18
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多