Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java方法中,双重初始化意味着什么_Java_Initialization - Fatal编程技术网

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

在Java方法中,双重初始化意味着什么,java,initialization,Java,Initialization,在java中,我只对类使用双重初始化 例如:newarraylist(){{add()} 但我最近错误地编写了如下代码,JVM并没有因为我的错误而生气 public void test(){ { { .... } } } 之后,我们做了一个简单的示例,看到了下面的内容,但除了运行语句的顺序之外,我们仍然不理解任何内容 public class HelloWorld{ public static void mai

在java中,我只对类使用双重初始化 例如:
newarraylist(){{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

所以我的问题是双重或三重etc初始化在Java中意味着什么?

这不是双括号初始化。这是一个块语句。从:

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

block语句将其中的语句封装在不同的范围内。因此,如果你这样做了:

public static int foo() {
    {
        int foo = 0;
    }
    return foo;
}
foo
将不在
返回foo行的范围内则会出现错误



在您的代码中,这些嵌套块没有任何区别,因为您只是在打印,但每个块的作用域不同

谢谢@格洛吉特。但仍然不明白为什么会有这种情况。这个代码块什么时候有用?@demdem如果你仔细想想,
If
语句,
while
循环,
for
循环等等,都执行一个语句或块。通常一个块与这些结构一起使用,但是使用它们是合法的,你应该强烈地考虑不要使用双括号初始化。这是一个欺骗性的语法错误,它会让你面临各种各样的问题,例如可序列化的错误、内存泄漏等。如果你想要一个包含给定元素的ArrayList,请使用
新建ArrayList(Arrays.asList(“你的”、“元素”)
)。