Java初始化順序,靜態變數,static塊,執行個體變數,構造器的初始化順序

來源:互聯網
上載者:User

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

用代碼和輸出直接說明:

package com.kael;/**  *   * @Title:Demo004  * @Description:  * @Copyright:Copyright (c) 2012  * @Date:2012-7-25  * @author feilong.li  */public class Initialization {// 主函數public static void main(String str[]) {TA ta = new TA();System.out.println("-------------------------");TB tb = new TB();}}class MainTest {MainTest(String s) {System.out.println(s);}MainTest() {System.out.println("MainTest預設建構函式被調用");}}class TA {static MainTest mt = new MainTest("靜態成員mt初始化");MainTest mt1 = new MainTest("mt1成員初始化");static {System.out.println("static塊執行");mt = new MainTest("靜態塊內初始化sam成員變數");}TA() {System.out.println("TA預設建構函式被調用");}}class TB {static MainTest mainTest1 = new MainTest("靜態成員mainTest1初始化");static {System.out.println("static 塊 1  執行");}MainTest mt1 = new MainTest("mt1成員初始化");static MainTest mainTest2 = new MainTest("靜態成員mainTest2初始化");static {System.out.println("static 塊 2  執行");}TB() {System.out.println("TB預設建構函式被調用");}MainTest mt2 = new MainTest("mt2成員初始化");}

輸出結果:

靜態成員mt初始化
static塊執行
靜態塊內初始化sam成員變數
mt1成員初始化
TA預設建構函式被調用
-------------------------
靜態成員mainTest1初始化
static 塊 1  執行
靜態成員mainTest2初始化
static 塊 2  執行
mt1成員初始化
mt2成員初始化
TB預設建構函式被調用

得出結論(執行順序): a 靜態成員變數和static塊首先被初始化,其執行順序和其在類中申明的順序有關 b
普通成員(執行個體變數)初始化
c
執行建構函式

2.繼承情況下Java初始化順序 用代碼和輸出直接說明:
package com.kael;/**  *   * @Title:Demo004  * @Description:  * @Copyright:Copyright (c) 2012  * @Date:2012-7-25  * @author feilong.li  */public class Initialization {// 主函數public static void main(String str[]) {TB tb = new TB();}}class Sample {Sample(String s) {System.out.println(s);}Sample() {System.out.println("Sample預設建構函式被調用");}}class TA {static {System.out.println("父類static 塊 1  執行");}static Sample staticSam1 = new Sample("父類 靜態成員staticSam1初始化");Sample sam1 = new Sample("父類 sam1成員初始化");static Sample staticSam2 = new Sample("父類 靜態成員staticSam2初始化");static {System.out.println("父類 static 塊 2  執行");}TA() {System.out.println("父類 Test預設建構函式被調用");}Sample sam2 = new Sample("父類 sam2成員初始化");}class TB extends TA {static Sample staticSamSub = new Sample("子類 靜態成員staticSamSub初始化");TB() {System.out.println("子類 TestSub 預設建構函式被調用");}Sample sam1 = new Sample("子類 sam1成員初始化");static Sample staticSamSub1 = new Sample("子類 靜態成員staticSamSub1初始化");static {System.out.println("子類 static 塊  執行");}Sample sam2 = new Sample("子類 sam2成員初始化");}

輸出結果:

父類static 塊 1  執行
父類 靜態成員staticSam1初始化
父類 靜態成員staticSam2初始化
父類 static 塊 2  執行
子類 靜態成員staticSamSub初始化
子類 靜態成員staticSamSub1初始化
子類 static 塊  執行
父類 sam1成員初始化
父類 sam2成員初始化
父類 Test預設建構函式被調用
子類 sam1成員初始化
子類 sam2成員初始化
子類 TestSub 預設建構函式被調用

得出結論(初始化順序): a 父類靜態成員變數和static塊首先被初始化,其執行順序和其在類中申明的順序有關 b
子類靜態成員變數和static塊被初始化,其執行順序和其在類中申明的順序有關
c 父類普通成員(執行個體變數)初始化
d 父類構造方法被調用
e
子類普通成員(執行個體變數)初始化

f
子類建構函式被調用

聯繫我們

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