奇怪的一个单例的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:21:14
public class Sington {

private static Sington st = new Sington();

public static int con1;

public static int con2 = 0;

private Sington() {

con1++;
con2++;

}

public static Sington getInstance() {
return st;
}

public static void main(String[] args) {

Sington st = Sington.getInstance();

System.out.println(st.con1);
System.out.println(st.con2);

}

}

问你System.out.println(st.con1);
System.out.println(st.con2);

输出的是多少

大部分人会说是1 1,但是我做了一下应该是1,0

关于为什么con2是0,请高手回答下
我当然知道是1 0了,难道我就想知道是多少,那样的话我自己去调试一下不就行了,还用的着上知道? 搞笑!

我没有分了,要是你知道。不过是2分钟的事,要是你不知道就快点闪,你自己去查查我的回答记录看我多少分了,分有个p用啊

恩。我明白了,现在想通了也不奇怪了,static初始化从上到下按顺序来,所以先调用构造再去初始化变量,又因为不赋值的变量是不进行初始化的,所以con1还是++之后的1,而con2本来是1,经过初始化后被赋值为一。 谢谢

这应该是程序调用和变量初始化的顺序问题

public class Sington {

private static Sington st = new Sington();

public static int con1;

public static int con2 =100;

private Sington() {
System.out.println("-----"+st.con1);
System.out.println("-----"+st.con2);
con1++;
con2++;
System.out.println("===============");
System.out.println("+++++"+st.con1);
System.out.println("+++++"+st.con2);

}

public static Sington getInstance() {
return st;
}

public static void main(String[] args) {
System.out.println("|||||||||"+st.con1);
System.out.println("||||||||"+st.con2);
Sington st = Sington.getInstance();

System.out.println(st.con1);
System.out.println(st.con2);

}

}

打出四对结果 分别为0,0 1,1 1,100 1,100
用这个程序经过打印会发现先构造,这时候变量还没有初始化,接着是变量的初始