您是否可以在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();
}
提前致谢。
答案 0 :(得分:8)
是的!你可以。
但是,您的问题在FileNotFoundException
IOException
。因为FileNotFoundException
是IOException
的子类,这是无效的。在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右边说FileNotFoundException
是IOException
的子类,并且它们不能像
catch (FileNotFoundException | IOException e) {
e.printStackTrace();
}
但你当然可以这样做:
try{
//call some methods that throw IOException's
}
catch (FileNotFoundException e){}
catch (IOException e){}
这是一个非常有用的Java提示:捕获异常时,不要将网络过于宽泛。
希望它有所帮助。 :)