双重初始化在Java方法中意味着什么

时间:2019-03-09 20:29:37

标签: java initialization

我只在Java中对类使用双重初始化 例如:new ArrayList(){{add()}} 但是我最近错误地写了下面的代码,JVM并没有因为我的错误而生气。

public void test(){
    {
        {
            ....
        }
    }
}

在那之后做了一个简单的例子,看到了以下内容,但仍然不明白运行语句的顺序。

public class HelloWorld{

     public static void main(String []args){
        HelloWorld hw=new HelloWorld();
        hw.test1();
        System.out.println("----------");
        hw.test2();
     }

    public void test1(){
        {
            {
                System.out.println("1");
            }
            System.out.println("2");
        }
        System.out.println("3");
    }

    public void test2(){
        System.out.println("a");
        {
            System.out.println("b");
            {
                System.out.println("c");
            }

        }

    }
}

结果:

1
2
3
----------
a
b
c

所以我的问题是,在Java中,两次或三次等初始化意味着什么?

1 个答案:

答案 0 :(得分:4)

这不是双括号初始化。这是一个块语句。来自docs

  

块是一组在平衡括号之间的零个或多个语句,可以在允许单个语句的任何地方使用。

block语句将其中的语句包含在不同的范围内。因此,如果您这样做:

public static int foo() {
    {
        int foo = 0;
    }
    return foo;
}

foo不在return foo;行的范围内,您会收到错误消息


在您的代码中,这些嵌套的块没有什么区别,就像您在打印时一样,但是每个块都有不同的作用域