在java中调用的语法样式是什么?似乎是在线做事

时间:2011-12-06 01:18:50

标签: java

我正在查看此代码,它看起来像:

blah("....");
{
  call1(blah);

  call2();  
  {
      inner1("...");
      inner2("...");
  }

}

我是java的新手,很想知道要搜索什么,这种风格看起来很有趣。

8 个答案:

答案 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);
  }