package com.zeph.jvm1;
public class Singleton {
private static Singleton singleton = new Singleton();
public static int a;
public static int b = 0;
private Singleton() {
a++;
b++;
}
public static Singleton getSingleton() {
return singleton;
}
public static void main(String[] args) {
Singleton singleton = Singleton.getSingleton();
System.out.println(singleton.a);
System.out.println(singleton.b);
}
}
输出1和0,调用类的静态方法,主动加载类,但尚未初始化,然后初始化,首先初始化new Singleton(),此时a=1,b=1,然后初始化b=0,于是输出1和0
package com.zeph.jvm1;
public class Singleton {
public static int a;
public static int b = 0;
private static Singleton singleton = new Singleton();
private Singleton() {
a++;
b++;
}
public static Singleton getSingleton() {
return singleton;
}
public static void main(String[] args) {
Singleton singleton = Singleton.getSingleton();
System.out.println(singleton.a);
System.out.println(singleton.b);
}
}
输出1和1
反之,最后初始化newSingleton,所以是1和1
引自:http://blog.csdn.net/benw1988/article/details/7606642