有点意思,是1和0
原因:
静态初始化:
1.默认值,obj=null,counter1=0,counter2=0(引用类型为null,数字为0,boolean为false.
2.按照文本顺序初始化
  private static Singleton obj = new Singleton();此时调用了构造函数,counter1和counter2
  都为1了.
3.public static int counter1;没有赋值,跳过
4.public static int counter2=0;此时counter2被赋值为0.

解决方案 »

  1.   

    你可以把那几行代码调反顺序,像下面这样就是1和1了.
      public static int counter1;  public static int counter2 = 0;
      
      private static Singleton obj = new Singleton();
      

  2.   

    楼上的想法和我差不多,不过调用counter2的时候,counter2应该被初始化了,那为什么又做了一遍=0呢?
      

  3.   

    treeroot(根根) 分析的很对,static是按在代码中出现的顺序进行初始化的.