瞭解JVM加載實例化類的原理

class Singleton {
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


圖二自己就可以理解了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章