java程式初始化順序

來源:互聯網
上載者:User

標籤:ack   靜態代碼塊   類靜態變數   父類   print   函數   void   ora   靜態   

 使用情境:  在java程式中,當執行個體化對象時,對象的所在類的所有成員變數首先要進行初始化,只有當所有類成員完成初始化後,

才會調用對象所在類的建構函式建立對象。

     初始化的原則:

   (1)靜態對象優先於非靜態對象初始化,靜態對象只能初始化一次,但非靜態對象可以初始化多次。

   (2)超類優先於衍生類別初始化。

  (3)按照成員變數定義的順序來進行初始化,即使變數定義散佈於方法定義之中,它們仍然在任何方法(包括構造器)被調用前初始化。

package test;/*java程式初始化的順序:超類靜態變數 超類靜態代碼塊 子類靜態變數 子類靜態代碼塊  *  超類非靜態變數 超類非靜態代碼塊 超類建構函式  子類非靜態代碼塊  子類非靜態代碼塊 *  子類建構函式*/class Base {        static {        System.out.println("父類靜態塊");//(1)    }    {        System.out.println("父類塊");//(3)    }    public Base() {        System.out.println("父類構造方法");//(4)    }        public static void A() {        int a;//靜態方法中不能有靜態常量,因為static方法共用一塊記憶體地區,主要用於累加,如果靜態常量的常量話就不能累加了,就衝突了        System.out.println("父類普通靜態方法");    }    }public class Derived extends Base {    static int a=1;        static int b=2;    static {        System.out.println("子類靜態塊");//(2)    }    {        System.out.println("子類塊");//(5)    }    public Derived() {        System.out.println("子類構造器");//(6)    }    public static void main(String[] args) {            Base.A();                new Derived();            }}/* *public static void main(String[] args) {                new Derived();        Base.A();            }父類靜態塊子類靜態塊父類塊父類構造方法子類塊子類構造器父類普通靜態方法*//* *public static void main(String[] args) {            Base.A();                new Derived();            } 父類靜態塊子類靜態塊父類普通靜態方法父類塊父類構造方法子類塊子類構造器 * */

 

      

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.