国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

圖文詳解Java中class的初始化順序

2019-11-26 13:58:33
字體:
來源:轉載
供稿:網友

class的裝載

在講class的初始化之前,我們來講解下class的裝載順序。

以下摘自《Thinking in Java 4》

由于Java 中的一切東西都是對象,所以許多活動

變得更加簡單,這個問題便是其中的一例。正如下一章會講到的那樣,每個對象的代碼都存在于獨立的文件中。除非真的需要代碼,否則那個文件是不會載入的。通常,我們可認為除非那個類的一個對象構造完畢,否則代碼不會真的載入。由于static 方法存在一些細微的歧義,所以也能認為“類代碼在首次使用的時候載入”。

首次使用的地方也是static 初始化發生的地方。裝載的時候,所有static 對象和static 代碼塊都會按照本來的順序初始化(亦即它們在類定義代碼里寫入的順序)。當然,static 數據只會初始化一次。

簡要的說就是,在類有繼承關系時,類加載器上溯造型,進行相關類的加載工作。

比如:

Class B extends Class A當我們new B()時,類加載器自動加載A的代碼

class的初始化順序

通常是以下這樣的初始化順序:

(static對象和static代碼塊,依據他們的順序進行初始化)>成員變量>構造函數

測試代碼

public class ClassInit {  /**   * @Title:       main   * @Description:   類初始化順序測試   * @param:       @param args     * @return:     void     * @throws   */  public static void main(String[] args) {    // TODO Auto-generated method stub        new B();  }}class A {  static{    System.out.println("A的static代碼塊...");  }  public String s1 = prtString("A的成員變量...");  public static String s2 = prtString("A的static變量...");  public A(){    System.out.println("A的構造函數...");  }  public static String prtString(String str) {    System.out.println(str);    return null;  }}class B extends A{  public String ss1 = prtString("B的成員變量...");  public static String ss2 = prtString("B的static變量...");  public B(){    System.out.println("B的構造函數...");  }  private static A a = new A();  static{    System.out.println("B的static代碼塊...");  }  {    System.out.println("代碼塊...");  }  }

測試結果

A的static代碼塊...
A的static變量...
B的static變量...
A的成員變量...
A的構造函數...
B的static代碼塊...
A的成員變量...
A的構造函數...
B的成員變量...
代碼塊...
B的構造函數...

總結

以上就是Java中class的初始化順序的全部內容,希望對大家使用Java能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华亭县| 探索| 广平县| 咸阳市| 乌鲁木齐县| 盐亭县| 商南县| 湘乡市| 社旗县| 镇坪县| 蓝田县| 老河口市| 迁安市| 寿宁县| 潢川县| 濮阳市| 西安市| 当阳市| 岱山县| 建湖县| 泸水县| 许昌市| 商洛市| 万全县| 伊川县| 泽库县| 黔南| 凌海市| 盐亭县| 洪湖市| 明溪县| 桐柏县| 垣曲县| 滦南县| 晋城| 綦江县| 手机| 黑山县| 长治县| 建瓯市| 团风县|