9

在一本关于操作栏的书中给出的android代码示例中,给出的示例如下:

MenuItem menu1 = menu.add(0, 0, 0, "Item 1");
{
  menu1.setIcon(R.drawable.ic_launcher);
  menu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}

如何在分号后使用花括号?显然这里有一些我不明白的概念。

4

3 回答 3

17

在这种情况下,它们是完全可选的,根本没有副作用。在您的示例中,它唯一的目的是通过指定属于控件的属性分配来使代码更具可读性。你也可以不用大括号来做。但是,如果您使用工具重新格式化您的代码,缩进可能会消失。

但是,如果您有一个 Method 并将 {} 放在那里,您可以创建一个新的变量范围:

void someMethod() {
    {
         int x = 1;
    }
    // no x defined here
    {
         // no x here, so we may define a new one
         string x = "Hello";
    }
}

您可以在 Method 中可以启动语句(变量声明、方法调用、循环等)的任何位置启动新范围

注意:例如,当您有一个 if 语句时,您还可以使用该大括号创建一个新的变量范围。

void someMethod() {
    if (someThing) {
         int x = 1;
    }
    // no x defined here
    if (somethingElse) {
         // no x here, so we may define a new one
         string x = "Hello";
    }
}

while、for、try、catch 等也是如此。如果您考虑一下,即使方法主体的大括号也以这种方式工作:它们创建了一个新范围,它是类范围顶部的“层”。

于 2013-06-13T10:28:21.197 回答
15

它被称为匿名代码块,它们应该是restrict the variable scope.

于 2013-06-13T10:28:04.883 回答
0

这些是初始化块

我认为这不是初始化块的正确用法。除了您制作的示例之外,这些块仅用于初始化目的。点击这里查看详细信息。

于 2013-06-13T10:39:46.900 回答