private static Singleton instance = new Singleton();
public static int a;
public static int b=0;
private Singleton() {
a++;
b++;
}
public static Singleton getInstance() {
return instance;
}
}
public class MAINTEST {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("a=" + singleton.a);
System.out.println("b=" + singleton.b);
}
}
public class MAINTEST {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("a=" + singleton.a);
System.out.println("b=" + singleton.b);
}
}
class Singleton {
public static int a;
public static int b=0;
private static Singleton instance = new Singleton();
private Singleton() {
a++;
b++;
}
public static Singleton getInstance() {
return instance;
}
}
public class MAINTEST {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("a=" + singleton.a);
System.out.println("b=" + singleton.b);
}
}
分析:
1.類的入口從main函數開始,當程序已啓動,首先要調用第19行的代碼,這個時候調用了類的靜態方法(這時候,類開始初始化)
2.當類開始初始化的時候,所有的靜態變量會被初始化成默認值。
3.以第一個圖來說,當初始化完畢類的靜態變量後,開始加載類,這個時候是按照順序往下解析的。
4.當執行第二行的new Singleton的時候,會調用構造方法,這個時候,a和b都變成了1
5.當程序執行到第三行的時候,a還是1
6.當程序執行到第四行的時候,b變成了0
7.所以輸出1和0
圖二自己就可以理解了。