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
希望有人帮忙分析分析!

解决方案 »

  1.   

    public static int count2=0;
    这句改为public static int count2;
    就输出
    count1:1 
    count2:1 
    原因未知
      

  2.   

    执行一下下面代码(把你的代码稍微改了一点点)你就知道为什么了public class StaticTest { public static int count1; public static int count2 = 0;

    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);
    ;
    }
    }
      

  3.   

    执行顺序的原因
    先执行
    private static StaticTest st=new StaticTest();
      count1++;
      count2++;
    系统为count1和count2分配默认值0,之后++,此时count1=1,count2=1
    再执行
    public static int count2 = 0;
    给count2赋值为0了
    所以输出为1,0
      

  4.   


    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
      

  5.   

    对于一个类,首先执行的是构造方法,也就是
    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重新赋值了;
    如果有疑问,调试一下,看它是怎么运行的,顺序是什么样的
      

  6.   

    你可以试着多谢几个 private static StaticTest st=new StaticTest();
        private static StaticTest st1=new StaticTest();
        private static StaticTest st2=new StaticTest();在观察count1,count2的值或许就能明白了
      

  7.   

    你这个程序的意思是先执行构造方法。所以就先两个都为一,往下运行有为count2赋值为0,所以就是你的答案啊!
      

  8.   

    首先看一段代码: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:" + 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