[轉(zhuǎn)]談java中的構(gòu)造函數(shù)

談java中的構(gòu)造函數(shù)

本篇博文主要是為新手僚纷、對java語言感興趣的人和那些沒有系統(tǒng)學(xué)習(xí)過java基礎(chǔ)知識的人進行一個總結(jié)征唬,在文章中對構(gòu)造函數(shù)進行了較為詳細的說明和討論彤敛,也包含了我個人對于java面向?qū)ο笾袠?gòu)造函數(shù)的一些看法掠抬。希望走在java學(xué)習(xí)道路上的同行者可以有一個較為清晰的認知和理解。當然僅為個人觀點聘鳞,水平有限,不足之處要拂,還請大家多多指出抠璃,互相交流學(xué)習(xí)。

1.構(gòu)造函數(shù)的概念

很多java新手談到構(gòu)造函數(shù)就會犯暈脱惰,我們先來看看什么是構(gòu)造函數(shù)鸡典。

首先,構(gòu)造函數(shù)是函數(shù)的一種特殊形式枪芒,特殊在哪里彻况?構(gòu)造函數(shù)中不需要定義返回類型(void是無需返回值的意思,請注意區(qū)分兩者)舅踪,且構(gòu)造函數(shù)的名稱與所在的類名完全一致纽甘,其余的與函數(shù)的特性相同,可以帶有參數(shù)列表抽碌,可以存在函數(shù)的重載現(xiàn)象悍赢。

2.構(gòu)造函數(shù)的格式

了解了構(gòu)造函數(shù)的基本概念决瞳,現(xiàn)在來寫一個構(gòu)造函數(shù),希望大家可以了解左权、記憶其格式皮胡,通過實例發(fā)現(xiàn)其與普通函數(shù)的不同之處。

01  public class Demo{

02   ? private int num=0;

03   ? //無參構(gòu)造函數(shù)

04   ? Demo()

05    {

06      System.out.println("constractor_run");

07    }

08   ? //有參構(gòu)造函數(shù)

09   ? Demo(int num)

10    {

11      System.out.println("constractor_args_run");

12    }

13   ??//普通成員函數(shù)

14   ?public void?demoFunction()

15    {

16      System.out.println("function_run");

17    }

18  }

在這里要說明一點赏迟,如果在類中我們不聲明構(gòu)造函數(shù)屡贺,JVM會幫我們默認生成一個空參數(shù)的構(gòu)造函數(shù);如果在類中我們聲明了帶參數(shù)列表的構(gòu)造函數(shù)锌杀,JVM就不會幫我們默認生成一個空參數(shù)的構(gòu)造函數(shù)甩栈,我們想要使用空參數(shù)的構(gòu)造函數(shù)就必須自己去顯式的聲明一個空參的構(gòu)造函數(shù)。

3.構(gòu)造函數(shù)的作用

通過開頭的介紹糕再,構(gòu)造函數(shù)的輪廓已經(jīng)漸漸清晰量没,那么為什么會有構(gòu)造函數(shù)呢?構(gòu)造函數(shù)有什么作用突想?構(gòu)造函數(shù)是面向?qū)ο缶幊趟枷胨枨蟮呐固悖闹饕饔糜幸韵聝蓚€:

1)? 創(chuàng)建對象。任何一個對象創(chuàng)建時猾担,都需要初始化才能使用袭灯,所以任何類想要創(chuàng)建實例對象就必須具有構(gòu)造函數(shù)。

2)? 對象初始化垒探。構(gòu)造函數(shù)可以對對象進行初始化妓蛮,并且是給與之格式(參數(shù)列表)相符合的對象初始化,是具有一定針對性的初始化函數(shù)圾叼。

4.構(gòu)造函數(shù)與普通函數(shù)的區(qū)別

下面來詳細的分析下構(gòu)造函數(shù)與普通函數(shù)的區(qū)別蛤克,通過兩者的一個對比,希望可以加深對構(gòu)造函數(shù)的概念的理解夷蚊。

1)? 格式不同:

構(gòu)造函數(shù)不存在返回類型构挤,函數(shù)名與所在類的類名一致;

普通函數(shù)有返回類型惕鼓,函數(shù)名可以根據(jù)需求進行命名筋现。

2)調(diào)用時期不同

構(gòu)造函數(shù)在類的對象創(chuàng)建時就運行;

普通函數(shù)在對象調(diào)用時才會執(zhí)行箱歧。

3)執(zhí)行次數(shù)不同

一個對象創(chuàng)建后矾飞,其構(gòu)造函數(shù)只執(zhí)行一次,就是創(chuàng)建時執(zhí)行呀邢;

一個對象創(chuàng)建后洒沦,其普通函數(shù)可以執(zhí)行多次,取決于對象的調(diào)用次數(shù)价淌。

5.構(gòu)造函數(shù)的使用場景

分析了那么多構(gòu)造函數(shù)的信息申眼,那么什么時候使用構(gòu)造函數(shù)呢瞒津?既然構(gòu)造函數(shù)是對新對象進行初始化,那么當開發(fā)中分析事物的時候括尸,發(fā)現(xiàn)事物一出現(xiàn)就具備了某些特征時巷蚪,就可以將其定義在構(gòu)造函數(shù)中,這樣方便快捷濒翻,也符合面向?qū)ο蟮木幊趟枷搿?/p>

6.構(gòu)造函數(shù)在繼承中的特點

在繼承中屁柏,子類創(chuàng)建的對象可以調(diào)用父類的公共方法和屬性,那么子類會不會調(diào)用父類的構(gòu)造函數(shù)呢肴焊?子類的構(gòu)造函數(shù)與父類的構(gòu)造函數(shù)有什么關(guān)系前联?子類的構(gòu)造函數(shù)需要注意些什么問題呢功戚?下面來解答這三個問題娶眷。

1)? 子類會不會調(diào)用父類的函數(shù)?

子類繼承父類啸臀,子類對象初始化時父類的構(gòu)造函數(shù)也會執(zhí)行届宠,因為子類需要使用父類中的屬性,子類需要知道是如何初始化的乘粒,所以子類初始化必然會調(diào)用父類的構(gòu)造函數(shù)(除非父類沒有屬性豌注,那么這個類的描述也太差了點,或者沒有必要去創(chuàng)建這個類了)灯萍。

2)? 子類的構(gòu)造函數(shù)與父類的構(gòu)造函數(shù)有什么關(guān)系轧铁?

子類的構(gòu)造函數(shù)中默認的第一行有一條隱式語句super(),該語句會訪問父類中的空參數(shù)構(gòu)造函數(shù)旦棉,除非父類中沒有空參數(shù)的構(gòu)造函數(shù)齿风,那么子類構(gòu)造函數(shù)的第一行必須顯式調(diào)用父類的構(gòu)造函數(shù),即super(int x,…) 绑洛。

3)? 子類的構(gòu)造函數(shù)需要注意些什么問題呢救斑?

子類的構(gòu)造函數(shù)中,super()語句代表調(diào)用了父類的構(gòu)造函數(shù)真屯;this()語句代表調(diào)用了子類自身的構(gòu)造函數(shù)脸候。需要注意的是,如果這兩條語句顯式寫出來必須放在構(gòu)造方法的第一行绑蔫,而且這兩條語句不能共存运沦,一個構(gòu)造函數(shù)中的第一行要么是this()要么是super()。

為什么在第一行配深?因為需要首先進行初始化携添。

為什么不能共存?因為this()代表的本類的其他構(gòu)造函數(shù)凉馆,也會去調(diào)用super()薪寓,出現(xiàn)了this()就沒有必要再出現(xiàn)super()了亡资,重復(fù)調(diào)用沒有意義。換言之向叉,子類中至少有一個構(gòu)造函數(shù)的開頭為super()锥腻,當然可以隱式存在;也就是說至少有一個構(gòu)造函數(shù)的開頭不是this()母谎。

7.構(gòu)造函數(shù)的擴展

以上的六條已經(jīng)講構(gòu)造函數(shù)的概念瘦黑、特點、使用等問題介紹的比較清楚奇唤,下面來介紹幾點與構(gòu)造函數(shù)相關(guān)的擴展性的小知識幸斥。

1)? 所有的類都有構(gòu)造函數(shù)么?構(gòu)造函數(shù)可以被私有化么咬扇?

既然構(gòu)造函數(shù)用于創(chuàng)建對象并且初始化對象甲葬,那么當一個類不需要創(chuàng)建對象時,就不需要定義構(gòu)造函數(shù)懈贺,但是在java中经窖,所有的類都擁有構(gòu)造函數(shù),只是有些類的構(gòu)造函數(shù)對開發(fā)人員來說是隱藏不可見的梭灿,這一點與我們的預(yù)期并不相同画侣,不過換個角度這也很好理解,因為java是面向?qū)ο蟮谋ざ剩覀儎?chuàng)建類的目的就是為了創(chuàng)建對象或者創(chuàng)建其子類對象配乱,所以沒有構(gòu)造函數(shù)的類(無法創(chuàng)建對象的類)并沒有什么意義。

而對于第二個問題皮迟,一個類不想要外界創(chuàng)建其對象時搬泥,就可以將其構(gòu)造函數(shù)私有化,本類中提供返回對象的方法万栅,并且多數(shù)情況下提供的對象是唯一的佑钾,單例設(shè)計模式就是一個很好的例子,而當我們開發(fā)中需要保證對象唯一性的時候烦粒,往往就采取這種做法休溶。

2)? 構(gòu)造代碼塊與構(gòu)造函數(shù)有什么相似和不同?

構(gòu)造代碼塊用一對“{}”表示扰她,代碼塊位置沒有具體的要求兽掰,但必須與類的成員同等級別,在括號的區(qū)域內(nèi)徒役,可以對所有該類的對象進行初始化孽尽,也就是說該類對象創(chuàng)建時都會執(zhí)行到該代碼塊,并且其優(yōu)先于構(gòu)造函數(shù)執(zhí)行忧勿。構(gòu)造函數(shù)如前面提到的是具有針對性的杉女,而構(gòu)造代碼塊是作用于所有本類對象的瞻讽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熏挎,隨后出現(xiàn)的幾起案子速勇,更是在濱河造成了極大的恐慌,老刑警劉巖坎拐,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烦磁,死亡現(xiàn)場離奇詭異,居然都是意外死亡哼勇,警方通過查閱死者的電腦和手機都伪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來积担,“玉大人陨晶,你說我怎么就攤上這事“跚幔” “怎么了珍逸?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵逐虚,是天一觀的道長聋溜。 經(jīng)常有香客問我,道長叭爱,這世上最難降的妖魔是什么撮躁? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮买雾,結(jié)果婚禮上把曼,老公的妹妹穿的比我還像新娘。我一直安慰自己漓穿,他們只是感情好嗤军,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晃危,像睡著了一般叙赚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上僚饭,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天震叮,我揣著相機與錄音,去河邊找鬼鳍鸵。 笑死苇瓣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的偿乖。 我是一名探鬼主播击罪,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼哲嘲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了媳禁?” 一聲冷哼從身側(cè)響起撤蚊,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎损话,沒想到半個月后侦啸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡丧枪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年光涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拧烦。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡忘闻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恋博,到底是詐尸還是另有隱情齐佳,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布债沮,位于F島的核電站炼吴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疫衩。R本人自食惡果不足惜硅蹦,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闷煤。 院中可真熱鬧童芹,春花似錦、人聲如沸鲤拿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽近顷。三九已至生音,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幕庐,已是汗流浹背久锥。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留异剥,地道東北人瑟由。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歹苦。 傳聞我的和親對象是個殘疾皇子青伤,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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