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

來源:互聯網
上載者:User

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能有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.