日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java初始化順序

 zhngjan 2016-03-07
1  無繼承情況下的Java初始化順序:
class Sample
{
      Sample(String s)
      {
            System.out.println(s);
      }
      Sample()
      {
            System.out.println("Sample默認構造函數(shù)被調用");
      }
}
class Test{
      static Sample sam=new Sample("靜態(tài)成員sam初始化");
      Sample sam1=new Sample("sam1成員初始化");
      static{
            System.out.println("static塊執(zhí)行");
            if(sam==null)System.out.println("sam is null");
            sam=new Sample("靜態(tài)塊內初始化sam成員變量");
            }
      Test()
      {
            System.out.println("Test默認構造函數(shù)被調用");
      }

}
 public static void  main(String  str[])
{

     Test a=new Test();

 }
輸出結果為:
靜態(tài)成員sam初始化     -----靜態(tài)成員初始化
static塊執(zhí)行          -----靜態(tài)塊被執(zhí)行
靜態(tài)塊內初始化sam成員變量 ----靜態(tài)塊執(zhí)行
sam1成員初始化      -----普通成員初始化
Test默認構造函數(shù)被調用  -----構造函數(shù)執(zhí)行


由此可以得出結論:
靜態(tài)成員變量首先初始化(注意,Static可以看做一個靜態(tài)成員,其執(zhí)行順序和其在類中申明的順序有關)
b 普通成員初始化
c 執(zhí)行構造函數(shù)。

對于靜態(tài)成員(static塊可以看成普通的一個靜態(tài)成員,其并不一定在類初始化時首先執(zhí)行)和普通成員,其初始化順序只與其在類定義中的順序有關,和其他因素無關。
例如下面的例子:


class Test{
      static{
            System.out.println("static 塊 1  執(zhí)行");
            }
      static Sample staticSam1=new Sample("靜態(tài)成員staticSam1初始化");
      Sample sam1=new Sample("sam1成員初始化");
      static Sample staticSam2=new Sample("靜態(tài)成員staticSam2初始化");
      static{
            System.out.println("static 塊 2  執(zhí)行");
            }
      Test()
      {
            System.out.println("Test默認構造函數(shù)被調用");
      }
      Sample sam2=new Sample("sam2成員初始化");

}


則結果為:
static 塊 1  執(zhí)行
靜態(tài)成員staticSam1初始化
靜態(tài)成員staticSam2初始化
static 塊 2  執(zhí)行 
                      --------靜態(tài)成員
sam1成員初始化
sam2成員初始化
                      --------普通成員
Test默認構造函數(shù)被調用
                      --------構造函數(shù)


2 Java繼承情況下的初始化順序:

class Test{
      static{
            System.out.println("父類static 塊 1  執(zhí)行");
            }
      static Sample staticSam1=new Sample("父類 靜態(tài)成員staticSam1初始化");
      Sample sam1=new Sample("父類 sam1成員初始化");
      static Sample staticSam2=new Sample("父類 靜態(tài)成員staticSam2初始化");
      static{
            System.out.println("父類 static 塊 2  執(zhí)行");
            }
      Test()
      {
            System.out.println("父類 Test默認構造函數(shù)被調用");
      }
      Sample sam2=new Sample("父類 sam2成員初始化");

}

class TestSub extends Test
{
      static Sample staticSamSub=new Sample("子類 靜態(tài)成員staticSamSub初始化");
      TestSub()
      {
            System.out.println("子類 TestSub 默認構造函數(shù)被調用");
      }
      Sample sam1=new Sample("子類 sam1成員初始化");
      static Sample staticSamSub1=new Sample("子類 靜態(tài)成員staticSamSub1初始化");
      
      static{System.out.println("子類 static 塊  執(zhí)行");}
      Sample sam2=new Sample("子類 sam2成員初始化");
}

執(zhí)行結果:
父類 static 塊 1  執(zhí)行
父類 靜態(tài)成員staticSam1初始化
父類 靜態(tài)成員staticSam2初始化
父類 static 塊 2  執(zhí)行
                        --------父類靜態(tài)成員初始化
子類 靜態(tài)成員staticSamSub初始化
子類 靜態(tài)成員staticSamSub1初始化
子類 static 塊  執(zhí)行
                        -------子類靜態(tài)成員初始化
父類 sam1成員初始化
父類 sam2成員初始化
父類 Test默認構造函數(shù)被調用       
                        -------父類普通成員初始化和構造函數(shù)執(zhí)行
子類 sam1成員初始化
子類 sam2成員初始化
子類 TestSub 默認構造函數(shù)被調用
                        -------父類普通成員初始化和構造函數(shù)執(zhí)行


由此得出Java初始化順序結論:
1 繼承體系的所有靜態(tài)成員初始化(先父類,后子類)
2 父類初始化完成(普通成員的初始化-->構造函數(shù)的調用)
3 子類初始化(普通成員-->構造函數(shù))


Java初始化順序如圖:

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多