java關於靜態塊兒 靜態變量的執行順序的筆記(轉載)

執行順序html

仍是上別人的吧 寫的不錯 瞭解得透徹 https://www.cnblogs.com/kingxiaozi/p/6021011.htmljvm

package com.osy.test;

/**
 * * @author 做者 E-mail: * @date 建立時間:2018年8月28日 上午10:33:36 * @version 1.0
 * * @parameter * @since * @return
 */
public class Test { // 1.第一步,準備加載類

    public static void main(String[] args) {
        new Test(); // 4.第四步,new一個類,但在new以前要處理匿名代碼塊
    }

    static int num = 4; // 2.第二步,靜態變量和靜態代碼塊的加載順序由編寫前後決定

    {
        num += 3;
        System.out.println("b"); // 5.第五步,按照順序加載匿名代碼塊,代碼塊中有打印
    }

    int a = 5; // 6.第六步,按照順序加載變量

    { // 成員變量第三個
        System.out.println("c"); // 7.第七步,按照順序打印c
    }

    Test() { // 類的構造函數,第四個加載
        System.out.println("d"); // 8.第八步,最後加載構造函數,完成對象的創建
    }

    static { // 3.第三步,靜態塊,而後執行靜態代碼塊,由於有輸出,故打印a
        System.out.println("a");
    }

    static void run() // 靜態方法,調用的時候才加載// 注意看,e沒有加載
    {
        System.out.println("e");
    }
}

靜態塊(靜態變量)——>成員變量——>代碼塊——>構造方法——>靜態方法 函數

輸出abcdspa

解釋一哈 先是執行static靜態塊或者是靜態變量 那個靜態方法調用的時候才加載因此無論 而後會去執行main函數 而後new對象的時候執行構造塊兒的方法 若是有構造函數.net

則會執行構造函數的方法code

給個連接 看了以後會更清楚
https://blog.csdn.net/whing123/article/details/77988936
https://blog.csdn.net/wzw9353/article/details/74892149這個主要是講jvmhtm

https://www.cnblogs.com/numen-fan/p/7163745.html?utm_source=itdadao&utm_medium=referral 這個是解答爲何main函數是static的對象

相關文章
相關標籤/搜索