我就说一下我debug的情况//情况1private static Singleton singleton = new Singleton();
main方法开始执行Singleton singleton = Singleton.getInstance(); 的时候就开始加载Singleton这个类static修饰的字段和方法都开始产生了 此时new Singleton(); count1=1 count2=1,然后执行静态public static int counter1; 因为有值了就不用初始化,然后执行public static int counter2 = 0; 就将count2=0
//情况2private static Singleton singleton = new Singleton(); 一加载这个类的时候先public static int counter1; public static int counter2 = 0; 此时count1 和count2都为0 然后就执private static Singleton singleton = new Singleton(); 对其自增 就全部为1
主要是static先后顺序的问题public int counter1 ;public int counter2 = 0;你去掉static不管private static Singleton singleton = new Singleton(); 在哪都是执行了一次
你在构造方法中添加了这句话System.out.println("counter1="+counter1+",counter2="+counter2);会发现有他们都曾经为1过 |