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