Java 我应该如何处理catch块中发生的异常?

Java 我应该如何处理catch块中发生的异常?,java,exception,exception-handling,Java,Exception,Exception Handling,在上面的代码中,我想关闭catch块中的读取缓冲区,但是我发现in.close中的函数也抛出了一个IOException。如果我在catch块中嵌套另一个try-catch块,看起来很难看。那么,处理这种问题的正确方法是什么呢?在finally块中关闭资源,而不是在catch块中关闭资源 关闭finally块中的资源,而不是catch块中的资源 您可以使用finally block。最后,每次执行块,除非jvm异常退出 Java 7 try with resources语句要自动关闭,需要显式关

在上面的代码中,我想关闭catch块中的读取缓冲区,但是我发现in.close中的函数也抛出了一个IOException。如果我在catch块中嵌套另一个try-catch块,看起来很难看。那么,处理这种问题的正确方法是什么呢?

在finally块中关闭资源,而不是在catch块中关闭资源

关闭finally块中的资源,而不是catch块中的资源

您可以使用finally block。最后,每次执行块,除非jvm异常退出

Java 7 try with resources语句要自动关闭,需要显式关闭resource流

try with resources语句是一个try语句,它声明了一个 或者更多的资源。资源是一个对象,必须在 程序结束了。try with resources语句 确保在语句末尾关闭每个资源。任何 对象,该对象实现java.lang.AutoCloseable,其中包括所有 实现java.io.Closeable的对象可以用作资源

示例-

    try 
    {
      // actual code.
    } 
    catch (IOException e) {
      // handle exception
    }
    finally
    {
       try
       {
         in.close();
       }
       catch (IOException e) {
          // handle exception
       }  
    }
您可以使用finally block。最后,每次执行块,除非jvm异常退出

Java 7 try with resources语句要自动关闭,需要显式关闭resource流

try with resources语句是一个try语句,它声明了一个 或者更多的资源。资源是一个对象,必须在 程序结束了。try with resources语句 确保在语句末尾关闭每个资源。任何 对象,该对象实现java.lang.AutoCloseable,其中包括所有 实现java.io.Closeable的对象可以用作资源

示例-

    try 
    {
      // actual code.
    } 
    catch (IOException e) {
      // handle exception
    }
    finally
    {
       try
       {
         in.close();
       }
       catch (IOException e) {
          // handle exception
       }  
    }
请勿入内,这是专门用于清理的

来自最终阻止文档

运行时系统始终在finally块中执行语句,而不管try块中发生了什么。所以这是进行清理的最佳场所

请勿入内,这是专门用于清理的

来自最终阻止文档

运行时系统始终在finally块中执行语句,而不管try块中发生了什么。所以这是进行清理的最佳场所


非常感谢您的推荐。这是java 7中的一个新功能,对吗?它确实是解决我问题的完美解决方案。非常感谢。如果您正在考虑如何正确关闭输入流,那么这是最好的方法,非常感谢您的推荐。这是java 7中的一个新功能,对吗?它确实是解决我问题的完美解决方案。非常感谢。如果您正在考虑如何正确关闭输入流,那么这是最好的方法,是的
try(BufferedReader in
       = new BufferedReader(new FileReader(file))){
  while((thisLine=in.readLine())!=null){
        ...  
  }
}catch (IOException e) {
  ...
}
BufferedReader in
       = new BufferedReader(new FileReader(file));
     try {
        while((thisLine=in.readLine())!=null){
        ...  
        }
    } catch (IOException e) {
                    //in.close();
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
       in.close
}
try {
    in = new BufferedReader(new FileReader(file));
    // stuff here
} finally {
    try {
        in.close()
    } catch (IOException e) {} // ignore
}