Java_淺談構(gòu)造函數(shù)挺峡、構(gòu)造代碼塊與靜態(tài)代碼塊的用法

構(gòu)造函數(shù)

格式:類名(參數(shù)1葵孤,參數(shù)2,…){構(gòu)造函數(shù)執(zhí)行語句}沙郭;

關(guān)于構(gòu)造函數(shù)佛呻,以下幾點(diǎn)要注意:

1.對象一建立,就會調(diào)用與之相應(yīng)的構(gòu)造函數(shù)病线,也就是說吓著,不建立對象,構(gòu)造函數(shù)時不會運(yùn)行的送挑。

2.構(gòu)造函數(shù)的作用是用于給對象進(jìn)行初始化绑莺。

3.構(gòu)造函數(shù)籠統(tǒng)來說也是函數(shù),它具備函數(shù)的一些特性惕耕,也不具備一些特性纺裁,可以把它看成是特殊的函數(shù)。它可以重載(重載時參數(shù)類型與參數(shù)個數(shù)有一項不同即可司澎,但僅僅函數(shù)返回值類型不同是不行的)欺缘,可以被權(quán)限修飾符修飾,但是它沒有返回值(注意:這與平常所說的函數(shù)返回值類型是void不同)挤安。

4.當(dāng)一個類中沒有定義構(gòu)造函數(shù)時谚殊,那么系統(tǒng)會默認(rèn)給該類加入一個空參數(shù)的構(gòu)造方法。但是當(dāng)在類中自定義構(gòu)造函數(shù)后蛤铜,默認(rèn)的構(gòu)造函數(shù)就沒有了嫩絮,即使是自定義的構(gòu)造函數(shù)也是空參數(shù)的也是這樣,因?yàn)槟钱吘故悄恪白远x”的围肥!

5.構(gòu)造函數(shù)和一般函數(shù)不僅在寫法上有不同剿干,在運(yùn)行上也有不同。構(gòu)造函數(shù)是在對象一建立就運(yùn)行穆刻,給對象初始化置尔,而一般函數(shù)是對象調(diào)用時才執(zhí)行,給對象添加對象具備的功能氢伟。

一個對象建立撰洗,構(gòu)造函數(shù)只運(yùn)行一次,而一般方法可以被該對象調(diào)用多次腐芍。

6.定義構(gòu)造函數(shù)的需求性:當(dāng)分析事物時,該事物存在具備一些特性或者行為试躏,那么將這些內(nèi)容定義在構(gòu)造函數(shù)中猪勇。

構(gòu)造代碼塊

格式:{構(gòu)造代碼塊執(zhí)行語句};

關(guān)于構(gòu)造代碼塊颠蕴,以下幾點(diǎn)要注意:

1.構(gòu)造代碼塊的作用是給對象進(jìn)行初始化泣刹。

2.對象一建立就運(yùn)行構(gòu)造代碼塊了助析,而且優(yōu)先于構(gòu)造函數(shù)執(zhí)行。這里要強(qiáng)調(diào)一下椅您,有對象建立外冀,才會運(yùn)行構(gòu)造代碼塊,類不能調(diào)用構(gòu)造代碼塊的掀泳,而且構(gòu)造代碼塊與構(gòu)造函數(shù)的執(zhí)行順序是前者先于后者執(zhí)行雪隧。

3.構(gòu)造代碼塊與構(gòu)造函數(shù)的區(qū)別是:構(gòu)造代碼塊是給所有對象進(jìn)行統(tǒng)一初始化,而構(gòu)造函數(shù)是給對應(yīng)的對象初始化员舵,因?yàn)闃?gòu)造函數(shù)是可以多個的脑沿,運(yùn)行哪個構(gòu)造函數(shù)就會建立什么樣的對象,但無論建立哪個對象马僻,都會先執(zhí)行相同的構(gòu)造代碼塊庄拇。也就是說,構(gòu)造代碼塊中定義的是不同對象共性的初始化內(nèi)容韭邓。

靜態(tài)代碼塊

格式:static{靜態(tài)代碼塊執(zhí)行語句}措近;

關(guān)于靜態(tài)代碼塊,要注意的是:

1.它是隨著類的加載而執(zhí)行女淑,只執(zhí)行一次瞭郑,并優(yōu)先于主函數(shù)。具體說诗力,靜態(tài)代碼塊是由類調(diào)用的凰浮,當(dāng)然,建立對象的時候苇本,它也會執(zhí)行袜茧,但是建立多個對象,它也是只會執(zhí)行一次瓣窄,并不是說每次建立對象它都要執(zhí)行笛厦,因?yàn)樗怯深愓{(diào)用的,且只執(zhí)行一次俺夕!就它優(yōu)先于主函數(shù)而執(zhí)行這點(diǎn)來說裳凸,因?yàn)橹骱瘮?shù)也是由類調(diào)用的,所以類可以控制著執(zhí)行的順序劝贸,而實(shí)際上姨谷,類調(diào)用時,先執(zhí)行靜態(tài)代碼塊映九,然后才執(zhí)行主函數(shù)的梦湘。

2.靜態(tài)代碼塊其實(shí)就是給類初始化的,而構(gòu)造代碼塊是給對象初始化的。區(qū)分著理解比較容易記牢捌议。

下面結(jié)合一個小例子來具體分析三者的用法哼拔。

classStaticCode{

? int num=9;

? StaticCode(){

? ? ?System.out.println("b");

? }

? static{

? ? System.out.println("a");

? }

? {

? ? System.out.println("c");

? }

? StaticCode(int x){

? ? System.out.println("d");

? }

}

public classStaticCodeDemo {

? public static voidmain(String[] args){

? ? newStaticCode(1);

? }

}

運(yùn)行結(jié)果是

a

c

d

這是因?yàn)椋骱瘮?shù)中的執(zhí)行語句是new StaticCode(1);因?yàn)檫@個語句調(diào)用了StaticCode類并調(diào)用StaticCode的一個構(gòu)造函數(shù)建立對象瓣颅,那么在StaticCode類中倦逐,先執(zhí)行的是靜態(tài)代碼塊

static{

? ? System.out.println("a");

? }

它是在調(diào)用類時立即執(zhí)行,但此時還沒有建立對象宫补。然后執(zhí)行的是構(gòu)造代碼塊檬姥,

{

? ? System.out.println("c");

}

這是在建立對象時執(zhí)行,但它的執(zhí)行是優(yōu)先于構(gòu)造函數(shù)的守谓。接著執(zhí)行的是對應(yīng)的構(gòu)造函數(shù)

StaticCode(int x){

? ? System.out.println("d");

}

穿铆,這個構(gòu)造函數(shù)與new StaticCode(1);有著相同的參數(shù)個數(shù)和對應(yīng)的參數(shù)類型,執(zhí)行語句自動匹配尋找對應(yīng)的構(gòu)造函數(shù)斋荞。

另外荞雏,StaticCode類中有個成員變量num,如果將靜態(tài)代碼塊改為

static{

? ? System.out.println("a"+this.num);

?}

則編譯不通過平酿,因?yàn)殪o態(tài)代碼塊只能調(diào)用靜態(tài)變量凤优,非靜態(tài)成員變量在對象沒有建立前是不存在的,這也幫助理解了靜態(tài)代碼塊是在對象建立前執(zhí)行的蜈彼。

如果將構(gòu)造代碼塊改為

{

? ? System.out.println("c,num="+this.num);

}

那么將編譯無誤筑辨,運(yùn)行正確,因?yàn)闃?gòu)造代碼塊是在對象建立后才運(yùn)行的幸逆,是由對象調(diào)用的棍辕,對象建立后,成員變量num已經(jīng)存在了还绘,所以不會出錯楚昭。

運(yùn)行結(jié)果如下

a

c,num=9

d


圖片發(fā)自簡書App

運(yùn)行結(jié)果為0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拍顷,隨后出現(xiàn)的幾起案子抚太,更是在濱河造成了極大的恐慌,老刑警劉巖昔案,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尿贫,死亡現(xiàn)場離奇詭異,居然都是意外死亡踏揣,警方通過查閱死者的電腦和手機(jī)庆亡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捞稿,“玉大人身冀,你說我怎么就攤上這事钝尸。” “怎么了搂根?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铃辖。 經(jīng)常有香客問我剩愧,道長,這世上最難降的妖魔是什么娇斩? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任仁卷,我火速辦了婚禮,結(jié)果婚禮上犬第,老公的妹妹穿的比我還像新娘锦积。我一直安慰自己,他們只是感情好歉嗓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布丰介。 她就那樣靜靜地躺著,像睡著了一般鉴分。 火紅的嫁衣襯著肌膚如雪哮幢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天志珍,我揣著相機(jī)與錄音橙垢,去河邊找鬼。 笑死伦糯,一個胖子當(dāng)著我的面吹牛柜某,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敛纲,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喂击,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了载慈?” 一聲冷哼從身側(cè)響起惭等,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎办铡,沒想到半個月后辞做,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寡具,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年秤茅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片童叠。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡框喳,死狀恐怖课幕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情五垮,我是刑警寧澤乍惊,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站放仗,受9級特大地震影響润绎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诞挨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一莉撇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惶傻,春花似錦棍郎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粮揉,卻和暖如春巡李,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扶认。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工侨拦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辐宾。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓狱从,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叠纹。 傳聞我的和親對象是個殘疾皇子季研,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容