首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java try-with-resources语法不规范

Java try-with-resources语法不规范
EN

Stack Overflow用户
提问于 2011-07-29 07:35:41
回答 2查看 2K关注 0票数 10

所以我浏览了java7的一些新特性,包括try-with-resources位。

我知道它是如何工作的,我只是注意到用来指定资源的语法有点奇怪。

代码语言:javascript
复制
try 
    (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))
    {
            // stuff
        }
    }
    catch (Exception e) {
        // stuff
    }

具体地说,资源的定义:

代码语言:javascript
复制
try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))

在java中,在括号块中分隔语句是有效的吗?

我唯一能想到的其他时间就是for循环

代码语言:javascript
复制
for ( ; ; )

但这并不完全相同,因为必须恰好有2个;,并且语句用,分隔,如下所示

代码语言:javascript
复制
for (int i = 1,  j = 100;  i <= 100, j > 0;  i = i-1, j = j-1)

所以我的问题是,这种语法是从哪里来的?为什么语句不是,分隔的,而是;分隔的?有没有另一种类似的语言在()块中使用类似的;分隔语句?我想不出java、C或python中的一个例子。

EN

回答 2

Stack Overflow用户

发布于 2011-07-29 07:51:23

通常,在Java中,语句以分号结尾。注意,try-with-resources不同于像int i = 1, j = 100;这样的赋值,因为它不要求每个被初始化的东西都是相同类型的。它实际上只是一系列用括号括起来的赋值语句。

也就是说,如果某种语法很容易理解,我不认为真的需要有任何使用它的先例。

票数 8
EN

Stack Overflow用户

发布于 2011-07-29 10:57:37

嗯,它没有分号,但是Common Lisp有几个遵循这种模式的结构。例如,将一些值绑定到有限范围内的变量(本质上就是“尝试资源”所做的事情):

代码语言:javascript
复制
(let (x 5) (y 10) (z 100)
  (...))

它有类似的条件(异常)处理,您还可以根据需要编写自己的构造,这些构造看起来可能是相同的。如果您将(x 5)想象为int x = 5;,您可以看到两者之间的相似之处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6867041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档