Java - 变量定义后的大括号?

时间:2011-09-14 20:16:14

标签: java

我正在阅读一本书中的一些Java教程并运行这样的代码:

private void theMethod( MyObject table )
{
  SomeObject item1 = table.add(0,0,0,"Item 1");
  {
    item1.setWhatever = false;
    item1.setSomething = 15;
  }

  // More code here...
}

变量定义后大括号的目的是什么?

4 个答案:

答案 0 :(得分:6)

当我使用大量局部变量时,我有时会在组中使用这个大括号。这样,它们就超出了范围,我可以创建具有相同名称的变量。

我无法立即找到一个好的例子,但我的意思是这样的:

/* Code block 0 */
{
    int localStuff = 9;
    boolean submit = false;
    // Do some IO, or whatever
}
/* Code block 1 */
{
    int localStuff = 4;
    boolean submit = false;
    // Do some IO, or whatever
}

/* Code block 2 */
{
    int localStuff = -1;
    boolean submit = true;
    // Do some IO, or whatever
}

答案 1 :(得分:2)

在这个特定的例子中,它没有做任何事情(可能只是根据编码员的口味改进代码的外观)。但是,它也可能是一个错字:)

顺便说一句,大括号可能有助于限制范围:

private void theMethod( MyObject table )
{
  {
    SomeObject item1 = table.add(0,0,0,"Item 1");
    item1.setWhatever = false;
    item1.setSomething = 15;
  }
  // Item1 is not defined here anymore, so for example you can define another object    with the name item1
  // Though it's not a good practice.
  OtherClass item1;
  // More code here...
}

答案 2 :(得分:1)

你确定是这样的吗?尽管可以像这样定义代码块,但除了限制局部变量的范围外,它没有太大作用,这并不令人兴奋。

但是,类级别的匿名代码块对于初始化变量,填充数据结构等非常有用。

例如,此静态匿名块初始化最终的静态变量。

public class Snippet {

    private final static Map config;
        static {
            HashMap tmp = new HashMap();
            tmp.put("moo","foo");
            tmp.put("bar","baz");
            config = Collections.unmodifiableMap(tmp);
           }
    // rest of class here.
    }

对于非静态块和实例变量,它以相同的方式工作,这不太有用,但如果你想确保所有构造函数和子类执行相同的代码,那么它很方便。

我发现这个帖子不是重复的,而是相关的。 Anonymous code blocks in Java

答案 3 :(得分:0)

这是正常的,该块仅用于组织代码,它被评估为正常流程

class Foo{
    private void theMethod(String str )
    {
      {
        System.out.println(str);
        {}{}{}{}{}{}{}{}
      }
    }

    public static void main(String ...args){

        new Foo().theMethod("my string");
    }
}

与;相似;

class Foo{
    private void theMethod(String str )
    {
      {
        System.out.println(str);
        {;}{;}{;}{;}{;}{;}{;}{;}
      }
    }

    public static void main(String ...args){

        new Foo().theMethod("my string");;;;;;;;;;;;;;;;;
    }


}