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

问题描述 投票:2回答:1

我只在java中使用双初始化用于类ex: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中,双重或三重等初始化是什么意思?

java initialization
1个回答
4
投票

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

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

块语句将其中的语句包含在不同的范围内。所以,如果你这样做:

docs

public static int foo() { { int foo = 0; } return foo; } 不在foo线的范围内,你会得到一个错误


在您的代码中,这些嵌套块没有区别,因为您只是打印,但每个块将具有不同的范围

© www.soinside.com 2019 - 2024. All rights reserved.