程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 圖文詳解Java中class的初始化次序

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

編輯:關於JAVA

圖文詳解Java中class的初始化次序。本站提示廣大學習愛好者:(圖文詳解Java中class的初始化次序)文章只能為提供參考,不一定能成為您想要的結果。以下是圖文詳解Java中class的初始化次序正文


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved