面試題--JAVA中靜態塊、靜態變數載入順序詳解__面試題

來源:互聯網
上載者:User
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");    }}

一般順序:靜態塊(靜態變數)——>成員變數——>構造方法——>靜態方法
1、靜態代碼塊(只載入一次) 2、構造方法(建立一個執行個體就載入一次)3、靜態方法需要調用才會執行,所以最後結果沒有e

 public class Print {     public Print(String s){         System.out.print(s + " ");     } }
 public class Parent{     public static Print obj1 = new Print("1");     public Print obj2 = new Print("2");     public static Print obj3 = new Print("3");     static{         new Print("4");     }     public static Print obj4 = new Print("5");     public Print obj5 = new Print("6");     public Parent(){         new Print("7");     } }
 public class Child extends Parent{     static{         new Print("a");     }     public static Print obj1 = new Print("b");     public Print obj2 = new Print("c");     public Child (){         new Print("d");     }     public static Print obj3 = new Print("e");     public Print obj4 = new Print("f");     public static void main(String [] args){         Parent obj1 = new Child ();         Parent obj2 = new Child ();     } }
執行main方法,程式輸出順序為: 1 3 4 5 a b e 2 6 7 c f d 2 6 7 c f d 

輸出結果表明,程式的執行順序為:
如果類還沒有被載入:
1、先執行父類的靜態代碼塊和靜態變數初始化,並且靜態代碼塊和靜態變數的執行順序只跟代碼中出現的順序有關。
2、執行子類的靜態代碼塊和靜態變數初始化。
3、執行父類的執行個體變數初始化
4、執行父類的建構函式
5、執行子類的執行個體變數初始化
6、執行子類的建構函式

如果類已經被載入:
則靜態代碼塊和靜態變數就不用重複執行,再建立類對象時,只執行與執行個體相關的變數初始化和構造方法。

聯繫我們

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