Java try-with-resources语法不规则

Fal*_*rri 9 java syntax java-7 try-with-resources

所以我正在研究java 7的一些新功能,包括try-with-resources位.

我理解它是如何工作的以及一切,我只是注意到用于指定资源的语法有点奇怪.

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

具体来说就是资源的定义:

try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))
Run Code Online (Sandbox Code Playgroud)

在Java中,括号内的分隔语句是否有效,是否还有其他地方?

我能想到的另一个时间是for循环

for ( ; ; )
Run Code Online (Sandbox Code Playgroud)

但这并不完全相同,因为必须有2 ;秒,并且语句用,as中分隔

for (int i = 1,  j = 100;  i <= 100, j > 0;  i = i-1, j = j-1)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这种语法来自哪里?是否有理由将语句;分隔而不是,分隔?是否有另一种类似的语言;()块内部使用了相似的分隔语句?我想不出java,C或python中的一个例子.

Col*_*inD 7

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

也就是说,如果容易理解,我认为使用某种语法确实不需要任何先例.