奇怪的一个单例的问题
来源:百度知道 编辑: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,经过初始化后被赋值为一。 谢谢
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
用这个程序经过打印会发现先构造,这时候变量还没有初始化,接着是变量的初始