JAVA初始化順序,java初始化

來源:互聯網
上載者:User

JAVA初始化順序,java初始化
主要內容:

1 無繼承情況下的JAVA初始化順序

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

無繼承情況下的JAVA初始化順序
 1 class Sample 2 { 3       Sample(String s) 4       { 5             System.out.println(s); 6       } 7       Sample() 8       { 9             System.out.println("Sample預設建構函式被調用");10       }11 }12 class Test{13       static Sample sam=new Sample("靜態成員sam初始化");14       Sample sam1=new Sample("sam1成員初始化");15       static{16             System.out.println("static塊執行");17             if(sam==null)System.out.println("sam is null");18             sam=new Sample("靜態塊內初始化sam成員變數");19             }20       Test()21       {22             System.out.println("Test預設建構函式被調用");23       }24 }25 //主函數26  public static void  main(String  str[])27 {28      Test a=new Test();29  }
View Code

輸出結果為:

靜態成員sam初始化     -----靜態成員初始化

static塊執行          -----靜態塊被執行

靜態塊內初始化sam成員變數 ----靜態塊執行

sam1成員初始化      -----普通成員初始化

Test預設建構函式被調用  -----建構函式執行

由此可以得出結論:

a 靜態成員變數首先初始化(注意,Static可以看做一個靜態成員,其執行順序和其在類中申明的順序有關)

b 普通成員初始化

c 執行建構函式。

 

對於靜態成員(static塊可以看成普通的一個靜態成員,其並不一定在類初始化時首先執行)和普通成員,其初始化順序只與其在類定義中的順序有關,和其他因素無關。

例如下面的例子:

 1 class Test{ 2       static{ 3             System.out.println("static 塊 1  執行"); 4             } 5       static Sample staticSam1=new Sample("靜態成員staticSam1初始化"); 6       Sample sam1=new Sample("sam1成員初始化"); 7       static Sample staticSam2=new Sample("靜態成員staticSam2初始化"); 8       static{ 9             System.out.println("static 塊 2  執行");10             }11       Test()12       {13             System.out.println("Test預設建構函式被調用");14       }15       Sample sam2=new Sample("sam2成員初始化");16 }
View Code

則結果為:

static 塊 1  執行

靜態成員staticSam1初始化

靜態成員staticSam2初始化

static 塊 2  執行 

                      --------靜態成員

sam1成員初始化

sam2成員初始化

                      --------普通成員

Test預設建構函式被調用

                      --------建構函式

JAVA繼承情況下的初始化順序
 1 class Sample { 2     Sample(String s) { 3         System.out.println(s); 4     } 5  6     Sample() { 7         System.out.println("Sample預設建構函式被調用"); 8     } 9 }10 11 class Test {12     static {13         System.out.println("父類static 塊 1  執行");14     }15 16     static Sample staticSam1 = new Sample("父類 靜態成員staticSam1初始化");17     Sample sam1 = new Sample("父類 sam1成員初始化");18     static Sample staticSam2 = new Sample("父類 靜態成員staticSam2初始化");19 20     static {21         System.out.println("父類 static 塊 2  執行");22     }23 24     Test() {25         System.out.println("父類 Test預設建構函式被調用");26     }27 28     Sample sam2 = new Sample("父類 sam2成員初始化");29 }30 31 class TestSub extends Test {32     static Sample staticSamSub = new Sample("子類 靜態成員staticSamSub初始化");33 34     TestSub() {35         System.out.println("子類 TestSub 預設建構函式被調用");36     }37 38     Sample sam1 = new Sample("子類 sam1成員初始化");39     static Sample staticSamSub1 = new Sample("子類 靜態成員staticSamSub1初始化");40 41     static {42         System.out.println("子類 static 塊  執行");43     }44 45     Sample sam2 = new Sample("子類 sam2成員初始化");46 }
View Code

執行結果:

父類 static 塊 1  執行

父類 靜態成員staticSam1初始化

父類 靜態成員staticSam2初始化

父類 static 塊 2  執行

                        --------父類靜態成員初始化

子類 靜態成員staticSamSub初始化

子類 靜態成員staticSamSub1初始化

子類 static 塊  執行

                        -------子類靜態成員初始化

父類 sam1成員初始化

父類 sam2成員初始化

父類 Test預設建構函式被調用       

                        -------父類普通成員初始化和建構函式執行

子類 sam1成員初始化

子類 sam2成員初始化

子類 TestSub 預設建構函式被調用

                        -------父類普通成員初始化和建構函式執行

由此得出JAVA初始化順序結論:

1 繼承體系的所有靜態成員初始化(先父類,後子類)

2 父類初始化完成(普通成員的初始化-->建構函式的調用)

3 子類初始化(普通成員-->建構函式)

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.