国产探花免费观看_亚洲丰满少妇自慰呻吟_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能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额尔古纳市| 福贡县| 织金县| 保山市| 武夷山市| 棋牌| 桦川县| 扶绥县| 泰顺县| 阳原县| 盘锦市| 筠连县| 澎湖县| 长海县| 淮阳县| 汝阳县| 文昌市| 红原县| 建瓯市| 虹口区| 望都县| 乐至县| 襄汾县| 拉萨市| 太仆寺旗| 汾阳市| 海门市| 三河市| 东安县| 平顶山市| 涡阳县| 安化县| 夹江县| 泊头市| 兴城市| 广德县| 鄢陵县| 静宁县| 邹平县| 堆龙德庆县| 久治县|