所以我浏览了java7的一些新特性,包括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中的一个例子。
发布于 2011-07-29 07:51:23
通常,在Java中,语句以分号结尾。注意,try-with-resources不同于像int i = 1, j = 100;这样的赋值,因为它不要求每个被初始化的东西都是相同类型的。它实际上只是一系列用括号括起来的赋值语句。
也就是说,如果某种语法很容易理解,我不认为真的需要有任何使用它的先例。
发布于 2011-07-29 10:57:37
嗯,它没有分号,但是Common Lisp有几个遵循这种模式的结构。例如,将一些值绑定到有限范围内的变量(本质上就是“尝试资源”所做的事情):
(let (x 5) (y 10) (z 100)
(...))它有类似的条件(异常)处理,您还可以根据需要编写自己的构造,这些构造看起来可能是相同的。如果您将(x 5)想象为int x = 5;,您可以看到两者之间的相似之处。
https://stackoverflow.com/questions/6867041
复制相似问题