10

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

我了解它的工作原理和一切,我只是注意到用于指定资源的语法有点奇怪。

try 
    (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))
    {
            // stuff
        }
    }
    catch (Exception e) {
        // stuff
    }

具体资源的定义:

try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))

java中是否还有其他地方可以在括号块中分隔语句有效?

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

for ( ; ; )

但这并不完全相同,因为必须正好有 2 ;s,并且语句用 a 分隔,,

for (int i = 1,  j = 100;  i <= 100, j > 0;  i = i-1, j = j-1)

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

4

2 回答 2

8

通常,Java 中的语句以分号结尾。请注意,try-with-resources 与赋值不同,int i = 1, j = 100;因为它不需要初始化的每个事物都具有相同的类型。它实际上只是一系列括在括号中的赋值语句。

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

于 2011-07-28T23:51:22.953 回答
0

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

(let (x 5) (y 10) (z 100)
  (...))

它具有类似的条件(异常)处理内容,您还可以根据需要编写自己的构造,看起来可能相同。如果你想象你可以(x 5)看到int x = 5;平行。

于 2011-07-29T02:57:36.987 回答