gpt4 book ai didi

java - 在构造函数中初始化静态变量

转载 作者:行者123 更新时间:2023-12-01 06:36:07 27 4
gpt4 key购买 nike

看下面的代码:

public class Foo {
private static Foo sigleton=new Foo();
private static int count1;
private static int count2=0;

private Foo (){
count1++;
count2++;
}

public static Foo getInstance(){
return sigleton;
}

public static void main(String[] args) {
//Foo f= Foo.getInstance(); // case 1
//Foo f= new Foo(); // case 2
System.out.println(f.count1);
System.out.println(f.count2);
}
}

对于每次运行,取消注释 main 方法中的一行。

为什么情况 1 和 2 的输出不同?

最佳答案

因为在第一种情况下,构造了一个 Foo 对象,但在第二种情况下,构造了两个 Foo 对象。

您静态初始化 sigleton 字段 - 因此,当加载类时,Foo 构造函数始终会被调用(如您为字段初始化器指定的那样)。

现在,在情况 1 中,您只需调用一个方法,该方法返回已构造的 sigleton 对象 - 因此不再调用其他构造函数。在情况 2 中,您显式构造一个新的 Foo 对象 - 但仍然会构造 sigleton。因此,在后一种情况下,会创建两个对象,构造函数总共运行两次,因此 count1count2 将更大。

关于java - 在构造函数中初始化静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com