Java靜態(tài)初始化,實(shí)例初始化以及構(gòu)造方法
首先有三個(gè)概念需要了解:
一.靜態(tài)初始化:是指執(zhí)行靜態(tài)初始化塊里面的內(nèi)容。
二.實(shí)例初始化:是指執(zhí)行實(shí)例初始化塊里面的內(nèi)容。
三.構(gòu)造方法:一個(gè)名稱跟類的名稱一樣的方法,特殊在于不帶返回值。
對(duì)于這三個(gè)概念,給出以下程序,方便理解:
這樣的一個(gè)過(guò)程,但我認(rèn)為如果僅想對(duì)Java的代碼執(zhí)行過(guò)程有個(gè)了解,我下面的分析就足夠了。
1.一個(gè)對(duì)象第一次被創(chuàng)建時(shí),先要加載該對(duì)象所屬的類,即對(duì)應(yīng)的.class文件,當(dāng)然如果類已經(jīng)加載,再次創(chuàng)建該類的對(duì)象時(shí),就不再需要重新加載類了。
而一個(gè)類加載的時(shí)候,有三個(gè)部分需要加載:
a:一個(gè)是靜態(tài)變量,
b:再然后是靜態(tài)方法,
c:然后是靜態(tài)初始化塊。
2
a:首先是成員變量的引入,
b:然后是實(shí)例初始化塊,
c:之后才是構(gòu)造方法,
構(gòu)造方法執(zhí)行完成之后才算把這個(gè)對(duì)象給創(chuàng)建出來(lái)了。
a:靜態(tài)初始化、
b:實(shí)例初始化
c:以及構(gòu)造方法。
從以上的分析中我們可以看到,這三個(gè)代碼塊的執(zhí)行順序是
先類的靜態(tài)初始化,
再實(shí)例初始化,
最后執(zhí)行構(gòu)造方法。
也就是說(shuō),靜態(tài)初始化是屬于類加載的過(guò)程,所以它只執(zhí)行一次,而實(shí)例初始化是每個(gè)對(duì)象創(chuàng)建時(shí)都會(huì)執(zhí)行一次,而構(gòu)造方法跟實(shí)例初始化其實(shí)也差不多,不過(guò)它在實(shí)例初始化之后執(zhí)行,而且構(gòu)造方法可以重載多個(gè),執(zhí)行哪個(gè)構(gòu)造方法是根據(jù)你的選擇來(lái)的。實(shí)例初始化據(jù) Thinking in Java上說(shuō),對(duì)于匿名內(nèi)部類的初始化來(lái)說(shuō)是必須的。不過(guò)我還沒(méi)看到那邊,先了解一下,類的基本執(zhí)行過(guò)程,做個(gè)總結(jié),歡迎批評(píng)指正。
posted on 2009-08-17 12:16 肥仔 閱讀(352) 評(píng)論(0) 編輯 收藏 引用 所屬分類: Web-后臺(tái)