深入理解JAVA虛擬機-1

類的加載,連接與初始化

  • 加載:查找並加載類的二進制數據;

  • 連接: 驗證(確保被加載類的正確性),準備(爲類的靜態變量分配內存,並將其初始化爲默認值),解析(把類中的符號引用轉換爲直接引用);

  • 初始化:爲類的靜態變量賦予正確的初始值;

  • 使用;

  • 卸載;

Java程序對類的使用方式分爲兩種:

  1. 主動使用;

  2. 被動使用;

所有的Java虛擬機實現必須在每個類或接口被Java程序“首次主動使用時”才初始化它們;

主動使用:

  1. 創建類的實例;

  2. 訪問某個類或接口的靜態變量,或者對該靜態變量賦值;

  3. 訪問類的靜態方法;

  4. 反射;

  5. 初始化一個類的子類;

  6. Java虛擬機啓動時被標明爲啓動類的類(含main方法);

  7. JDK1.7開始提供的動態語言支持;

public class MyTest{
    public void main(String[] args){
        System.out.println(Mychild.str);
    }
}

class MyParent{
    public static String str="hello world";

    static{
         System.out.println(MyParent block);

    }
}

class MyChild extends MyParent{
    public static String str1="hello world";

    static{
         System.out.println(MyChild block);

    }
}

這種情況下,子類的靜態方法不會執行,因爲,並沒有對子類主動使用,沒有對子類的靜態變量進行初始化。

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