java筆記一:類成員的初始化順序

來源:互聯網
上載者:User

  最近一直在看《thinking in java》一書,感覺裡面東西講的很細,很多東西都沒有接觸過,是值得各位java程式員仔細品味的一本好書。

  今天看了關於類成員初始化那節,以前對於成員初始化順序沒有考慮那麼多,沒有在意初始化的順序。今天特意仔細研究了一番。

  一個類中,最首先被初始化的是靜態成員,也就是有關鍵字static修飾的成員。只要一個類被使用也就是建立對象或者調用了該類的某個靜態方法時靜態成員就都會被初始化,並且待用資料在記憶體中只佔用一份儲存地區,無論建立多少個對象,待用資料被所有對象共用。

  初始化靜態成員後再初始化非靜態成員。對於非靜態成員之間,也是有初始化順序的,變數定義的順序決定了初始化的順序(無論成員變數在哪裡定義,都會在函數調用之前得到初始化)

  直接定義成員初始化完成後才會執行建構函式初始化。

  具體看例子:

 1 public class House { 2     //對於非靜態成員變數,誰先定義誰就先被初始化。順序為w1、w2、w3 3     Window w1 = new Window(1); 4     public House() { 5         System.out.println("House()"); 6         w3 = new Window(33); 7     } 8     Window w2 = new Window(2); 9     void f(){10         System.out.println("f()");11     }12     static void f1(){13         System.out.println("static f1()");14     }15     Window w3 = new Window(3); //在函數f後面,但是在f調用之前得到了初始化16     static Window w4 = new Window(4);  //靜態成員變數最先被初始化17     /**18      * @param args19      */20     public static void main(String[] args) {21         House h = new House();22         h.f();23         House.f1();24     }25 26 }27 class Window{28     public Window(int maker) {29         System.out.println("Window("+maker+")");30     }31 }

執行結果如下:

1 Window(4)2 Window(1)3 Window(2)4 Window(3)5 House()6 Window(33)7 f()8 static f1()

這樣很明顯就能看出成員的初始化順序了。

聯繫我們

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