public class StaticTest {
private static StaticTest st=new StaticTest();
public static int count1;
public static int count2=0;
private StaticTest(){
count1++;
count2++;
}
public static StaticTest getInstance(){
return st;
}
public static void main(String[] args){
StaticTest st=StaticTest.getInstance();
System.out.println("count1:"+st.count1);
System.out.println("count2:"+st.count2);;
}
}
为什么结果是:
count1:1
count2:0
而不是:
count1:1
count2:1
希望有人帮忙分析分析!
private static StaticTest st=new StaticTest();
public static int count1;
public static int count2=0;
private StaticTest(){
count1++;
count2++;
}
public static StaticTest getInstance(){
return st;
}
public static void main(String[] args){
StaticTest st=StaticTest.getInstance();
System.out.println("count1:"+st.count1);
System.out.println("count2:"+st.count2);;
}
}
为什么结果是:
count1:1
count2:0
而不是:
count1:1
count2:1
希望有人帮忙分析分析!
这句改为public static int count2;
就输出
count1:1
count2:1
原因未知
private static StaticTest st = new StaticTest(); private StaticTest() {
count1++;
count2++;
} public static StaticTest getInstance() {
return st;
} public static void main(String[] args) {
StaticTest st = StaticTest.getInstance(); System.out.println("count1:" + st.count1);
System.out.println("count2:" + st.count2);
;
}
}
先执行
private static StaticTest st=new StaticTest();
count1++;
count2++;
系统为count1和count2分配默认值0,之后++,此时count1=1,count2=1
再执行
public static int count2 = 0;
给count2赋值为0了
所以输出为1,0
public class StaticTest {
private static StaticTest st=new StaticTest();
public static int count1;
public static int count2=0;
private StaticTest(){
System.out.println("count1:" + count1 + ", count2:" + count2);
count1++;
System.out.println("count1:" + count1 + ", count2:" + count2);
count2++;
System.out.println("count1:" + count1 + ", count2:" + count2);
}
public static StaticTest getInstance(){
return st;
}
public static void main(String[] args){
StaticTest st=StaticTest.getInstance();
System.out.println("count1:"+st.count1);
System.out.println("count2:"+st.count2);;
}
}输出结果:
count1:0, count2:0
count1:1, count2:0
count1:1, count2:1
count1:1
count2:0
private StaticTest(){
count1++;
count2++;
}
此时count1,count2都等于1;
之后private static StaticTest st=new StaticTest();
在这里为st赋值.由于这两个数是静态的,所以已经初始化过一次
public static int count1;
这一步没有重新赋值.固count1=1;
public static int count2=0;
这一步位count2重新赋值了;
如果有疑问,调试一下,看它是怎么运行的,顺序是什么样的
private static StaticTest st1=new StaticTest();
private static StaticTest st2=new StaticTest();在观察count1,count2的值或许就能明白了
private static StaticTest st=new StaticTest();
public static int count1;
public static int count2=0;
private StaticTest(){
System.out.println("count1:" + count1 + ", count2:" + count2);
count1++;
System.out.println("count1:" + count1 + ", count2:" + count2);
count2++;
System.out.println("count1:" + count1 + ", count2:" + count2);
}
public static StaticTest getInstance(){
return st;
}
public static void main(String[] args){
StaticTest st=StaticTest.getInstance();
System.out.println("count1:" + count1 + ", count2:" + count2);
}
}输出结果:
count1:0, count2:0
count1:1, count2:0
count1:1, count2:1
count1:1, count2:0 执行顺序的原因
先执行
private static StaticTest st=new StaticTest();
count1++;
count2++;
系统为count1和count2分配默认值0,之后++,此时count1=1,count2=1
再执行
public static int count2 = 0;
给count2赋值为0了
所以输出为1,0