我们可以在Java 7中同时使用资源和多捕获吗?

时间:2013-10-10 08:06:34

标签: java java-7

您是否可以在Java 7中同时使用资源和多捕获?我试图使用它,它给出了编译错误。我可能错误地使用它。请指正。

try(GZIPInputStream gzip = new GZIPInputStream(new FileInputStream(f));
    BufferedReader br = new BufferedReader(new InputStreamReader(gzip))
    {
         br.readLine();
    }
    catch (FileNotFoundException | IOException e) {
         e.printStackTrace();
    }

提前致谢。

2 个答案:

答案 0 :(得分:8)

是的!你可以。

但是,您的问题在FileNotFoundException IOException。因为FileNotFoundExceptionIOException的子类,这是无效的。在catch块中仅使用IOException。您还错过了try语句中的右括号)。这就是为什么,你有错误。

 try(GZIPInputStream gzip = new GZIPInputStream(new FileInputStream(f));
     BufferedReader br = new BufferedReader(new InputStreamReader(gzip)))
 {
    br.readLine();
 }
 catch (IOException e) {
    e.printStackTrace();
 }

答案 1 :(得分:1)

这在Java SE 7中非常有用。来自官方Oracle Documentation的一篇文章:

新语法允许您声明属于try块的资源。这意味着您提前定义资源,运行时会在执行try块后自动关闭这些资源(如果它们尚未关闭)。

public static void main(String[] args)
{
   try (BufferedReader reader = new BufferedReader(
    new InputStreamReader(
    new URL("http://www.yoursimpledate.server/").openStream())))
   {
    String line = reader.readLine();
    SimpleDateFormat format = new SimpleDateFormat("MM/DD/YY");
    Date date = format.parse(line);
   } catch (ParseException | IOException exception) {
    // handle I/O problems.
   }
}

@Masud右边说FileNotFoundExceptionIOException的子类,并且它们不能像

一样使用

catch (FileNotFoundException | IOException e) { e.printStackTrace(); }

但你当然可以这样做:

try{
    //call some methods that throw IOException's
} 
catch (FileNotFoundException e){} 
catch (IOException e){}

这是一个非常有用的Java提示:捕获异常时,不要将网络过于宽泛

希望它有所帮助。 :)