腳本之家 你與百萬(wàn)開(kāi)發(fā)者在一起 序言:今天回想這幾天走過(guò)的Java路程,發(fā)現(xiàn)漏了一個(gè)點(diǎn),就是構(gòu)造代碼塊,我絞盡腦汁,也沒(méi)想起來(lái)它的作用,我騙不了我自己,就搜相關(guān)資料,重新學(xué)習(xí),在學(xué)習(xí)的過(guò)程中發(fā)現(xiàn)構(gòu)造代碼塊和構(gòu)造函數(shù)有一定的聯(lián)系,為了捕捉這種聯(lián)系,我總結(jié)了一個(gè)案例,這個(gè)案例能加深你對(duì)構(gòu)造函數(shù)和構(gòu)造代碼塊的理解。我寫這個(gè)博客一是為了避免下次再被構(gòu)造代碼塊這塊石頭絆倒,二是為了能給需要解惑的人提供一些幫助,還是那句話: 越懂得與人分享,你的價(jià)值增值越大! 看代碼前要先明白一個(gè)需求: 使用Java類描述一個(gè)嬰兒,假設(shè)現(xiàn)在兩種嬰兒,一種嬰兒是一出生就有了名字,我們把這種嬰兒叫白戶,另一種嬰兒是出生后才有了名字,我們把這種嬰兒叫黑戶。(為了方便理解,我把剛出生就已經(jīng)有名字的叫白戶,把出生后才起名的叫黑戶)
運(yùn)行結(jié)果:
由于小娃娃是出生之后才賦的值,所以小娃娃是黑戶,我們現(xiàn)在要讓嬰兒一出生就有名字,就要用構(gòu)造函數(shù)。 構(gòu)造函數(shù)的作用: 給對(duì)應(yīng)的對(duì)象進(jìn)行初始化 構(gòu)造函數(shù)定義的格式:
構(gòu)造函數(shù)要注意的細(xì)節(jié): 1.構(gòu)造函數(shù)沒(méi)有返回值類型 2.構(gòu)造函數(shù)的函數(shù)名必須要與類名一致 3.構(gòu)造函數(shù)并不是由我們手動(dòng)調(diào)用的,而是在創(chuàng)建對(duì)應(yīng)的對(duì)象時(shí),jvm就會(huì)主動(dòng)調(diào)用到對(duì)應(yīng)的構(gòu)造函數(shù) 4.如果一個(gè)類沒(méi)有顯式的寫上一個(gè)構(gòu)造方法時(shí),Java編譯器會(huì)為該類添加一個(gè)無(wú)參的構(gòu)造方法 5.如果一個(gè)類已經(jīng)顯示的寫上一個(gè)構(gòu)造方法時(shí),Java編譯器不會(huì)再為該類添加無(wú)參的構(gòu)造方法 6.構(gòu)造函數(shù)是可以在一個(gè)類中以函數(shù)重載的形式存在多個(gè)的
運(yùn)行結(jié)果:
通過(guò)上面的黑戶和白戶,我們能對(duì)構(gòu)造函數(shù)有個(gè)深刻的理解,下面我再引申出構(gòu)造代碼塊,依舊是這個(gè)例子,但是需求變了,現(xiàn)在的需求是嬰兒一出生就必須哭,可能說(shuō)到這,要是有人理解了上面的代碼,肯定馬上就能想到,這還不簡(jiǎn)單,把哭的方法寫到構(gòu)造函數(shù)中不就行了,對(duì),這樣確實(shí)也可以,但是有弊端,Java要求代碼簡(jiǎn)練,能少寫的就不多寫,你先看下面的代碼就知道了
運(yùn)行結(jié)果:
雖然白戶黑戶兩種嬰兒都在出生的時(shí)候哭了,但是在兩個(gè)構(gòu)造函數(shù)中出現(xiàn)了重復(fù)代碼,cry()方法重復(fù)了兩次,為了解決重復(fù)代碼這個(gè)問(wèn)題,下面就讓構(gòu)造代碼塊出場(chǎng)吧! 構(gòu)造函數(shù)的作用:給對(duì)應(yīng)的對(duì)象進(jìn)行初始化 構(gòu)造代碼塊的作用: 給對(duì)象進(jìn)行統(tǒng)一的初始化 構(gòu)造代碼塊的格式:
注意:構(gòu)造代碼塊的大括號(hào)必須位于成員位置上 代碼塊的類別: 1.構(gòu)造代碼塊 2.局部代碼塊 大括號(hào)位于方法之內(nèi) 作用:縮短局部變量的生命周期,節(jié)省一點(diǎn)點(diǎn)內(nèi)存 3.靜態(tài)代碼塊
構(gòu)造代碼塊要注意的事項(xiàng): 1.Java編譯器編譯一個(gè)Java源文件的時(shí)候,會(huì)把成員變量的聲明語(yǔ)句提前至一個(gè)類的最前端 2.成員變量的初始化工作其實(shí)都是在構(gòu)造函數(shù)中進(jìn)行的 3.一旦經(jīng)過(guò)Java編譯器編譯后,構(gòu)造代碼塊的代碼就會(huì)被移動(dòng)到構(gòu)造函數(shù)中執(zhí)行,是在構(gòu)造函數(shù)之前執(zhí)行的,構(gòu)造函數(shù)中的代碼是最后執(zhí)行的 4.成員變量的顯式初始化與構(gòu)造代碼塊的代碼是按照當(dāng)前代碼的順序執(zhí)行的
運(yùn)行結(jié)果:
本文作者:泰斗賢若如 |
|
來(lái)自: 長(zhǎng)沙7喜 > 《信息課》