我只在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中,两次或三次等初始化意味着什么?
答案 0 :(得分:4)
这不是双括号初始化。这是一个块语句。来自docs:
块是一组在平衡括号之间的零个或多个语句,可以在允许单个语句的任何地方使用。
block语句将其中的语句包含在不同的范围内。因此,如果您这样做:
public static int foo() {
{
int foo = 0;
}
return foo;
}
foo
不在return foo;
行的范围内,您会收到错误消息
在您的代码中,这些嵌套的块没有什么区别,就像您在打印时一样,但是每个块都有不同的作用域