【问题标题】:using { } after semicolon [duplicate]在分号后使用 { } [重复]
【发布时间】:2013-06-13 10:25:24
【问题描述】:

在一本关于action bar的书中给出的android代码示例中,给出的示例如下:

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

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

【问题讨论】:

  • 据我所知,这与您离开 {} 相同。 menu.add 是一个命令,menu.setIcon 是下一个,menu.setShowAsAction 是下一个。大括号可用于声明代码块。
  • 只有一个副本如果你知道它是一个匿名代码块。

标签: java android


【解决方案1】:

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

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

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

您可以在方法中可以开始语句(变量声明、方法调用、循环等)的任何位置开始新作用域

注意:例如,当您有 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 等也是如此。如果你想一想,即使是方法体的大括号也是这样工作的:它们创建了一个新的作用域,它是类作用域之上的一个“层”。

【讨论】:

  • 一个清晰的解释。谢谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这些是初始化块

    我认为这不是初始化块的正确用法。 除了您制作的示例之外,这些块仅用于初始化目的。 Click Here查看详情。

    【讨论】:

    • 它们可以是初始化器,但它们也可以是方法中的简单块语句。如果不看上下文,我们就无法判断。
    • 当然,使用完全取决于开发者
    猜你喜欢
    • 2016-04-29
    • 2019-05-14
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多