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);
}
}
看看程序的结果为什么是1,0
这是我在听风中叶老师视频上看到的一段代码,但是我还是有不明白的地方?
大家看看

解决方案 »

  1.   

    这句是static, 
    private static StaticTest st = new StaticTest(); 且在以下两句之前
    public static int count1; 
    public static int count2 = 0; 就是说先执行
    count1++; 
    count2++; 
    然后再public static int count1; 
    public static int count2 = 0; 
      

  2.   

    换个顺序就清楚了
        public static int count1;
        public static int count2 = 0;    private static StaticTest st = new StaticTest();
      

  3.   

    ls正解  lz哪里不明白?
      

  4.   

    new StaticTest()时执行: 
    count1++; 
    count2++; 然后又遇到 
    public static int count1; 
    public static int count2 = 0;
     
    count2又被置为0了。把“public static int count2=0;”中的“=0”去掉,再试试看?
      

  5.   

    把“public static int count2=0;”中的“=0”去掉,结果肯定和count1一样了
    但在new StaticTest()时候count1和count2是否已经定义了?
      

  6.   

    楼上说的我都明白了,不过我还是有点不解,不解的地方就是。
    一个程序是从主函数开始运行的吧,当执行StaticTest st = StaticTest.getInstance();不是准去调用上面的那个方法了吗,就是在这个时刻,程序又怎么跑去初始化自己的成员变量了,我就是清楚这个程序是什么加载啊,到底怎么个执行顺序特乱?大家可不可以帮我从一个类开始加载开始给我讲讲,谢谢了?