无意间看到两段代码如下:   1. package csdn.qiailin.classloader;  
   2.   
   3. /** 
   4.  * JvmExample 
   5.  *  
   6.  * 
   7.  */  
   8. public class JvmExample {  
   9.     private static JvmExample jvmExample = new JvmExample();  
  10.     private static int count1;  
  11.     private static int count2 = 0;  
  12.   
  13.     public JvmExample() {  
  14.         count1++;  
  15.         count2++;  
  16.     }  
  17.   
  18.     public static JvmExample getInstance() {  
  19.         return jvmExample;  
  20.     }  
  21.   
  22.     public static void main(String[] args) {  
  23.         JvmExample jvmExample = JvmExample.getInstance();  
  24.         System.err.println("count1=" + jvmExample.count1);  
  25.         System.err.println("count2=" + jvmExample.count2);  
  26.     }  
  27. }  
   1. package csdn.qiailin.classloader;  
   2.   
   3. /** 
   4.  * 
   5.  *  
   6.  * 
   7.  */  
   8. public class JvmExample {  
   9.     private static int count1;  
  10.     private static int count2 = 0;  
  11.     private static JvmExample jvmExample = new JvmExample();  
  12.       
  13.     public JvmExample() {  
  14.         count1++;  
  15.         count2++;  
  16.     }  
  17.   
  18.     public static JvmExample getInstance() {  
  19.         return jvmExample;  
  20.     }  
  21.   
  22.     public static void main(String[] args) {  
  23.         JvmExample jvmExample = JvmExample.getInstance();  
  24.         System.err.println("count1=" + jvmExample.count1);  
  25.         System.err.println("count2=" + jvmExample.count2);  
  26.     }  
  27. }  
这两段代码结果我算错了。求高手解释一下结果 。有原理最好,,,,

解决方案 »

  1.   

    先初始化了count1和count2,这时默认都为0
    private static JvmExample jvmExample = new JvmExample();   // 经过这里后1 和2 都为1 了
    private static int count1;   
    private static int count2 = 0; // 这里又把2 设为0
    先初始化了count1和count2,这时默认都为0
    private static int count1;   
    private static int count2 = 0;   // 这里本来默认值就是0,所以这个还是0
    private static JvmExample jvmExample = new JvmExample();   // 经过这里后1 和2 都为1 了
      

  2.   

    这道题貌似在javaeye看过?!看代码前面的数字,应该是从那边复制过来的吧。
    关于这个问题,有两个点:
    1.初始化顺序,静态域>普通域>构造方法。
    2.new一个对象会调用构造方法。