Java 的類載入順序

來源:互聯網
上載者:User

標籤:構造器   less   1.3   str   system   tle   過程   順序   靜態代碼塊   

 

Java 的類載入順序

一、載入順序

1、父類的靜態成員變數初始化

  1.1、靜態代碼塊

  1.2、普通代碼塊

  1.3、無參構造器

2、父類的靜態代碼塊

3、子類的靜態成員變數初始化

  3.1、靜態代碼塊

  3.2、普通代碼塊

  3.3、無參構造器

4、子類的靜態代碼塊

5、父類的普通成員變數初始化

  5.1、靜態代碼塊

  5.2、普通代碼塊

  5.3、無參構造器

6、父類的普通代碼塊

7、父類的無參構造器

8、子類的普通成員變數

  8.1、靜態代碼塊

  8.2、普通代碼塊

  8.3、無參構造器

9、子類的普通代碼塊

10、子類的無參構造器

二、範例程式碼

  超級父類A,父類B,子類C,B繼承A,C繼承B;

  AA、AAA、BB、BBB、CC、CCC都有各自的普通、靜態成員變數,普通、靜態代碼塊和無參構造器

  超級父類A的普通成員變數aa(AA類的執行個體),超級父類A的靜態成員變數aaa(AAA類的執行個體);

  父類B的普通成員變數bb(BB類的執行個體),父類B的靜態成員變數bbb(BBB類的執行個體);

  子類C的普通成員變數cc(CC類的執行個體),子類C的靜態成員變數ccc(CCC類的執行個體);

1、超級父類A

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title A
* @describe 超級父類 A
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class A {

  //普通成員變數

 

  private AA aa = new AA();

  //靜態成員變數
  private static AAA aaa = new AAA();

 

  // 靜態代碼塊
  static {
    System.out.println("我是超級父類 A 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是超級父類 A 的普通代碼塊");
  }

 

  // 無參構造方法
  public A() {
    System.out.println("我是超級父類 A 的無參構造方法");
  }
}

 

2、父類B

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title B
* @describe 父類
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class B extends A {

  //普通成員變數
  private BB bb = new BB();

  //靜態成員變數
  private static BBB bbb = new BBB();

 

  // 靜態代碼塊
  static {
    System.out.println("我是父類 B 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是父類 B 的普通代碼塊");
  }

 

  // 無參構造方法
  public B() {
    System.out.println("我是父類 B 的無參構造方法");
  }
}

 

3、子類C

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title C
* @describe 子類 C
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class C extends B {

  //普通成員變數

  private CC cc = new CC();

  //靜態成員變數
  private static CCC ccc = new CCC();


  // 靜態代碼塊
  static {
    System.out.println("我是子類 C 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
  System.out.println("我是子類 C 的普通代碼塊");
  }

 

  // 無參構造方法
  public C() {
    System.out.println("我是子類 C 的無參構造方法");
  }
}

 

4、AA類

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title AA
* @describe 超級父類 A 的普通成員變數 AA
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class AA {
  // 靜態代碼塊
  static {
    System.out.println("我是超級父類 A 的普通成員變數 AA 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是超級父類 A 的普通成員變數 AA 的普通代碼塊");
  }

 

  // 無參構造方法
  public AA() {
    System.out.println("我是超級父類 A 的普通成員變數 AA 的無參構造方法");
  }
}

 

5、AAA類

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title AAA
* @describe 超級父類 A 的靜態成員變數 AAA
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class AAA {
  // 靜態代碼塊
  static {
    System.out.println("我是超級父類 A 的靜態成員變數 AAA 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是超級父類 A 的靜態成員變數 AAA 的普通代碼塊");
  }

 

  // 無參構造方法
  public AAA() {
    System.out.println("我是超級父類 A 的靜態成員變數 AAA 的無參構造方法");
  }
}

 

6、BB類

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title BB
* @describe 父類 B 的普通成員變數 BB
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class BB {
  // 靜態代碼塊
  static {
    System.out.println("我是父類 B 的普通成員變數 BB 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是父類 B 的普通成員變數 BB 的普通代碼塊");
  }

 

  // 無參構造方法
  public BB() {
    System.out.println("我是父類 B 的普通成員變數 BB 的無參構造方法");
  }
}

 

7、BBB類

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title BBB
* @describe 父類 B 的靜態成員變數 BBB
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class BBB {
  // 靜態代碼塊
  static {
    System.out.println("我是父類 B 的靜態成員變數 BBB 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是父類 B 的靜態成員變數 BBB 的普通代碼塊");
  }

 

  // 無參構造方法
  public BBB() {
    System.out.println("我是父類 B 的靜態成員變數 BBB 的無參構造方法");
  }
}

 

8、CC類

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title CC
* @describe 子類 C 的普通成員變數 CC
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class CC {
  // 靜態代碼塊
  static {
    System.out.println("我是子類 C 的普通成員變數 CC 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是子類 C 的普通成員變數 CC 的普通代碼塊");
  }

 

  // 無參構造方法
  public CC() {
    System.out.println("我是子類 C 的普通成員變數 CC 的無參構造方法");
  }
}

 

9、CCC類

 

package cn.com.zfc.lesson05.inherit01;

 

/**
*
* @title CCC
* @describe 子類 C 的靜態成員變數 CCC
* @author 張富昌
* @date 2017年4月3日下午5:59:17
*/
public class CCC {
  // 靜態代碼塊
  static {
    System.out.println("我是子類 C 的靜態成員變數 CCC 的靜態代碼塊");
  }

 

  // 普通代碼塊
  {
    System.out.println("我是子類 C 的靜態成員變數 CCC 的普通代碼塊");
  }

 

  // 無參構造方法
  public CCC() {
    System.out.println("我是子類 C 的靜態成員變數 CCC 的無參構造方法");
  }
}

10、測試子類C的建立過程:TestC.java

package cn.com.zfc.lesson05.inherit01;
/**
*
* @title TestC
* @describe 測試子類C的建立過程
* @author 張富昌
* @date 2017年4月3日下午6:49:50
*/
public class TestC {
  public static void main(String[] args) {

    //建立 C 對象
    C c = new C();
  }
}

三、測試結果

 

我是超級父類 A 的靜態成員變數 AAA 的靜態代碼塊
我是超級父類 A 的靜態成員變數 AAA 的普通代碼塊
我是超級父類 A 的靜態成員變數 AAA 的無參構造方法
我是超級父類 A 的靜態代碼塊
我是父類 B 的靜態成員變數 BBB 的靜態代碼塊
我是父類 B 的靜態成員變數 BBB 的普通代碼塊
我是父類 B 的靜態成員變數 BBB 的無參構造方法
我是父類 B 的靜態代碼塊
我是子類 C 的靜態成員變數 CCC 的靜態代碼塊
我是子類 C 的靜態成員變數 CCC 的普通代碼塊
我是子類 C 的靜態成員變數 CCC 的無參構造方法
我是子類 C 的靜態代碼塊
我是超級父類 A 的普通成員變數 AA 的靜態代碼塊
我是超級父類 A 的普通成員變數 AA 的普通代碼塊
我是超級父類 A 的普通成員變數 AA 的無參構造方法
我是超級父類 A 的普通代碼塊
我是超級父類 A 的無參構造方法
我是父類 B 的普通成員變數 BB 的靜態代碼塊
我是父類 B 的普通成員變數 BB 的普通代碼塊
我是父類 B 的普通成員變數 BB 的無參構造方法
我是父類 B 的普通代碼塊
我是父類 B 的無參構造方法
我是子類 C 的普通成員變數 CC 的靜態代碼塊
我是子類 C 的普通成員變數 CC 的普通代碼塊
我是子類 C 的普通成員變數 CC 的無參構造方法
我是子類 C 的普通代碼塊
我是子類 C 的無參構造方法

 

 

總結:

  第一點,所有的類都會優先載入基類
  第二點,靜態成員的初始化優先
  第三點,成員初始化後,才會執行構造方法
  第四點,靜態成員的初始化與靜態塊的執行,發生在類載入的時候。
  第四點,類對象的建立以及靜態塊的訪問,都會觸發類的載入。

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.