我正在查看此代码,它看起来像:
blah("....");
{
call1(blah);
call2();
{
inner1("...");
inner2("...");
}
}
我是java的新手,很想知道要搜索什么,这种风格看起来很有趣。
答案 0 :(得分:5)
它不是内联的,它只是设置一个单独的范围。如果在“内部”块中声明变量,则它们在外部块中不可用。如果您复制粘贴几行代码并希望确保不重用第二位中第一位的变量,它会很有用。我在单元测试中偶尔也会这样做,但通常情况下,这表明你可能需要重构一下。
答案 1 :(得分:4)
这只是本地范围。您可以根据内容介绍范围。
void foo()
{
int a;
{
int b = get();
bar(a, b);
}
{
int b = get();
bar(a, b);
}
}
每个变量只在其范围内可见,因此您可以使用它来保持命名空间的清洁。在上面的例子中,如果没有本地范围,我必须有一个b
的声明,然后重复分配。由于具有不同的范围,我可以复制/粘贴整个块,并且我从不将名称b
泄漏到更大的范围中,因此我不必在以后担心它。
答案 2 :(得分:2)
这是一个匿名代码块;请参阅Anonymous code blocks in Java,了解对它有用(和不对)有用的内容。
答案 3 :(得分:0)
它只是一个包含一组语句的块,没有什么特别的,尽管有时限制变量(a)的范围很有用。您可以在C中执行完全相同的操作,例如:
int main (void) {
int i;
{
i = 1;
}
return 0;
}
(a):在内部声明的变量这样的块在该块之外是不可见的,所以类似于:
{
int i = 1;
}
System.out.println (i);
由于i
“在结束时消失”,无效。
答案 4 :(得分:0)
它被称为“使用不必要的块”。
唯一的好处是确保没有阴影变量。
IMO几乎总是噪音,很少见。 (阅读:基本上从来没有,超过12年以上的数百万行代码。当我这样做的时候是不成熟的代码。)
我不推荐它作为一般事物。
答案 5 :(得分:0)
这是一个声明块。请参阅Java Language Specification section 14.2。在您发布的代码中,它似乎毫无用处。为变量(以及其他)建立局部范围很有用。
答案 6 :(得分:0)
那只是一个block
,一堆用大括号括起来的语句。您可能习惯将它们视为if
语句的主体,但也许您从未想过它们。
if (foo) { bar; }
我没有看到用额外的块编写的代码很多,尽管我有时想知道用它们来表示(例如)特别冗长,冗长的UI代码的部分是否有用。我已经看到它们偶尔在OpenGL代码中使用,以使glBegin和glEnd语句脱颖而出。
glBegin(GL_LINES);
{
.. draw a bunch of primitives ..
}
glEnd();
在极少数情况下,您可能希望使用它们来限制某些变量的范围,因为变量仅限于声明它们的块。
答案 7 :(得分:0)
在你的例子中没有任何意义(除了可能是逻辑分组),但你可以使用这些块来获得“更多本地”变量(这样你就可以重用这些名称):
{
String x = "zzzz";
String y = doSomething(x);
doSomethingElse(y);
}
{
int x = 12;
long y = foo(x);
bar(y);
}