所以我正在研究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个;
,并且语句用,
分隔,如
for (int i = 1, j = 100; i <= 100, j > 0; i = i-1, j = j-1)
所以我的问题是,这种语法来自哪里?是否有理由将语句;
分隔而不是,
分隔?是否有另一种类似的语言在;
块内部使用()
个分隔语句?我想不出java,C或python中的例子。
答案 0 :(得分:7)
通常,语句在Java中以分号结束。请注意,try-with-resources与int i = 1, j = 100;
之类的赋值不同,因为它不要求每个被初始化的东西都是相同的类型。它实际上只是括在括号中的一系列赋值语句。
那就是说,如果容易理解,我认为使用某种语法确实不需要任何先例。
答案 1 :(得分:0)
嗯,它没有分号,但Common Lisp有几个遵循这种模式的结构。例如,将一些值绑定到有限范围内的变量(基本上是“尝试使用资源”):
(let (x 5) (y 10) (z 100)
(...))
它有类似的条件(异常)处理的东西,你也可以根据需要编写自己的构造,看起来可能看起来一样。如果您将(x 5)
想象为int x = 5;
,则可以看到并行。