Java類的載入順序,Java類載入順序

來源:互聯網
上載者:User

Java類的載入順序,Java類載入順序

問題

        昨天有人問我一個類中有靜態方法,有靜態代碼塊,普通代碼塊,建構函式,普通方法,靜態方法,那麼它們的載入順序是什嗎?如果有之類繼承該類,也有如上的方法,那麼載入順序又是如何?

執行個體1

      普通方法StaticVar

     

package org.andy.test;/**   * @author andy   * @version:2015-2-4 上午10:52:32   *  *   */public class StaticVar {   public StaticVar() {     System.out.println("----StaticVar-----");   }}

   測試載入方法OrderLoad
package org.andy.test;/**   * @author andy   * @version:2015-2-4 上午10:33:48   *  *   */public class OrderLoad {static{System.out.println("----OrderLoad靜態代碼塊-----");}private static StaticVar staticVar = new StaticVar();{System.out.println("----OrderLoad代碼塊-----");}public OrderLoad(){System.out.println("----OrderLoad建構函式-----");System.out.println(" ");}public static void staticFunction(){System.out.println("----OrderLoad靜態方法-----");}public  void normalFunction(){System.out.println("----OrderLoad普通方法-----");}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubOrderLoad staticVar = new OrderLoad();OrderLoad.staticFunction();staticVar.normalFunction();}}

運行結果如下:

   

   載入順序是:

        靜態代碼塊-----靜態方法--------普通代碼塊-------構造方法-----------調用的方法(包括靜態方法和非靜態方法,按調用順序)


執行個體2

    子類OrderLoadChild實現父類OrderLoad

   

package org.andy.test;/**   * @author andy   * @version:2015-2-4 上午11:33:51   *  *   */public class OrderLoadChild extends OrderLoad {static {System.out.println("----OrderLoadChild靜態代碼塊-----");}private static StaticVar staticVar = new StaticVar();{System.out.println("----OrderLoadChild代碼塊-----");}public OrderLoadChild(){System.out.println("----OrderLoadChild建構函式-----");  System.out.println(" ");}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubOrderLoadChild orderLoadChild = new OrderLoadChild();}}

運行結果如下:


載入順序是:

        父類靜態塊-----父類靜態常量-------子類靜態塊----------子類靜態常量----------父類普通代碼塊------------父類構造方法------------子類代碼塊------------子類構造方法

類的載入順序1、靜態代碼塊/靜態成員

         靜態代碼塊/靜態成員最先載入。

         靜態代碼塊/靜態成員順序按照代碼書寫先後順序載入。

         如父類有靜態代碼塊/靜態成員,先調用父類靜態代碼塊/靜態成員(Object最優先),再一次載入本類的靜態代碼塊/靜態成員。

2、普通代碼塊/非靜態成員

         同一類中普通代碼塊/非靜態成員順序在靜態代碼塊/靜態成員載入之後。

         同一類中多段普通代碼塊/非靜態成員載入順序按照代碼書寫先後載入。

         如父類有普通代碼塊/非靜態成員,現在載入父類的普通代碼塊/非靜態成員,在載入子類的普通代碼塊/非靜態成員。

3、構造方法

       同一類中構造方法次於代碼塊之後載入。

       同一類中如果有多個構造方法,按照執行個體時所調用的載入。

       先載入父類的構造方法,在載入子類的構造方法。

       子類的普通代碼塊/非靜態成員載入順序低於父類建構函式的載入順序。

      

4、靜態方法/普通方法

        調用時才載入。

總結:

   先載入父類的靜態代碼塊/靜態成員(父類中中都有或有多個有,按書寫順序) -------------  載入子類的靜態代碼塊/靜態成員(字類中都有或有多個,按書寫順序)---------父類的普通代碼塊/非靜態成員(父類中中都有或有多個有,按書寫順序)------------父類的構造方法-----------------子類的普通代碼塊/非靜態成員(字類中都有或有多個,按書寫順序)-----------子類的構造方法

    


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.