Java代碼執行順序-範例

來源:互聯網
上載者:User
 

class Insect...{ 
    private int i = 9; 
    int j; 
    Insect()...{ 
        System.out.println("i=" + i + ",j=" + j); 
        j=37; 
    } 
    private static int x1 = print("static Insect.x1.initialized"); 
    public static int print(String s)...{ 
        System.out.println(s);
        return 47;
    }


class Bettle extends Insect...{ 
    private int k = print("Bettle.k initialized"); 
    public Bettle()...{
        System.out.println("k=" + k); 
        System.out.println("j=" + j); 
    } 
    private static int x2=print("static Insect.x2 initialized"); 
    public static void main(String [] args) ...{ 
        System.out.println("Bettle constructor"); 
        Bettle b = new Bettle();
    }
}

運行結果:
static Insect.x1.initialized
static Insect.x2 initialized
Bettle constructor
i=9,j=0
Bettle.k initialized
k=47
j=37

解釋:

Bettle運行需要先載入父類Insect,在載入Insect時先運行所有的Static代碼,print()函數建立,但不運行.
這一句會運行:private static int x1 = print("static Insect.x1.initialized");
父類載入完成後載入子類Bettle,同樣先初始化所有static代碼,於是先運行:private static int x2=print("static Insect.x2 initialized");
然後進入main(),運行System.out.println("Bettle constructor");
再運行Bettle b=new Bettle();建立對象時先建立父類,此時先把所有變數設為初始值(i=9,j=0),然後觸發父類constructor.
載入完父類再載入子類,同上先設定義值:private int k=print("Bettle.k initialized");然後運行建構函式

聯繫我們

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