Java 基礎(chǔ):構(gòu)造方法

目錄:
一穆桂、 概述
二、 構(gòu)造方法的重載
三融虽、 類的初始化過(guò)程
四享完、this 關(guān)鍵字
五、子父類中的構(gòu)造方法
六有额、 super 關(guān)鍵字
七般又、 static 關(guān)鍵字
八、 final 關(guān)鍵字


一巍佑、 概述

1. 構(gòu)造方法作用和定義
  • 構(gòu)造方法作用new 對(duì)象的同時(shí)給成員變量賦值茴迁,給對(duì)象屬性進(jìn)行 初始化
  • 構(gòu)造方法定義:
修飾符 構(gòu)造方法名 (參數(shù)列表){

}
2. 構(gòu)造方法的特點(diǎn)
  • 構(gòu)造方法 沒(méi)有返回值類型,連 void 也沒(méi)有

也不需要寫(xiě)返回值萤衰。因?yàn)樗菫闃?gòu)建對(duì)象的堕义,對(duì)象創(chuàng)建完,方法就執(zhí)行結(jié)束脆栋。

  • 構(gòu)造 方法名 必須和 類名 保持一致
  • 只有在 創(chuàng)建對(duì)象 的時(shí)候 自動(dòng) 調(diào)用執(zhí)行倦卖,而且只執(zhí)行 一次
3. 注意事項(xiàng)
  • 每一 class 類都 必須有一個(gè)構(gòu)造方法,如果自己不寫(xiě)椿争,系統(tǒng)會(huì)給出 默認(rèn) 構(gòu)造方法
  • 編譯 的時(shí)候怕膛,系統(tǒng)會(huì)自動(dòng)檢查類中是否有構(gòu)造方法,如果沒(méi)有編譯器就會(huì)自動(dòng)添加一個(gè)構(gòu)造方法
  • 如果你提供了構(gòu)造方法秦踪,系統(tǒng)將不再提供默認(rèn)的構(gòu)造方法
  • 構(gòu)造方法也是可以 重載
  • 在創(chuàng)建對(duì)象時(shí)褐捻,會(huì)調(diào)用與 參數(shù)列表對(duì)應(yīng) 的構(gòu)造方法

構(gòu)造方法的內(nèi)存圖

構(gòu)造方法

二、 構(gòu)造方法的重載

  • 一個(gè)類中可以有 多個(gè) 構(gòu)造方法洋侨,多個(gè)構(gòu)造方法是以 重載 的形式存在的

意義在于:可以根據(jù)不同的需求舍扰,定義不同的構(gòu)造方法,靈活地初始化對(duì)象的成員變量

  • 構(gòu)造方法是可以被 private 修飾希坚,作用是其他程序無(wú)法創(chuàng)建該類的對(duì)象
class Person {
    private int age;
    private String name;

    // 私有無(wú)參數(shù)的構(gòu)造方法边苹,即外界不能通過(guò)new Person();語(yǔ)句創(chuàng)建本類對(duì)象
    private Person() {
    }
    // 多個(gè)構(gòu)造方法是以重載的形式存在
    Person(int a) {
        age = a;
    }
    Person(String nm, int a) {
        name = nm;
        age = a;
    }
}

三、 類的初始化過(guò)程

  • Student s = new Student(); 在內(nèi)存中做了哪些事情?
  1. 加載 Student.class 文件進(jìn)入內(nèi)存
  2. 內(nèi)存為 s 開(kāi)辟空間
  3. 內(nèi)存為學(xué)生對(duì)象開(kāi)辟空間
  4. 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行默認(rèn)初始化
  5. 對(duì)學(xué)生對(duì)象的成員變量進(jìn)行顯示初始化
  6. 通過(guò)構(gòu)造方法對(duì)學(xué)生對(duì)象的成員變量賦值
  7. 學(xué)生對(duì)象初始化完畢裁僧,把對(duì)象地址賦值給 s 變量
  • 類的初始化過(guò)程內(nèi)存圖
    完整對(duì)象初始化過(guò)程

四个束、this 關(guān)鍵字

1. this 關(guān)鍵字:本類對(duì)象的引用
  • this 是在方法中使用的,哪個(gè)對(duì)象調(diào)用了該方法聊疲,那么茬底, this 就代表調(diào)用該方法的對(duì)象引用
  • this 什么時(shí)候存在的? 當(dāng)創(chuàng)建對(duì)象的時(shí)候获洲, this 就存在了
  • this 的作用:用來(lái)區(qū)別同名的成員變量與局部變量(this .成員變量)
2. 成員變量隱藏
  • 在局部變量作用域中阱表,如果定義了一個(gè)和成員變量同名的局部變量,此時(shí),在局部變量作用域中最爬,就無(wú)法用變量名訪問(wèn)到成員變量涉馁,而只能訪問(wèn)到同名的局部變量
  • 當(dāng)需要訪問(wèn)成員變量是,只需要在成員變量前面加上 this. 即可
  • 調(diào)用其他構(gòu)造方法的語(yǔ)句 必須 定義在構(gòu)造方法的 第一行爱致,原因是初始化動(dòng)作要 最先執(zhí)行烤送。

五、子父類中的構(gòu)造方法

1. 調(diào)用
  • 在創(chuàng)建子類對(duì)象時(shí)糠悯,父類的構(gòu)造方法會(huì) 先執(zhí)行帮坚,因?yàn)樽宇愔兴袠?gòu)造方法的第一行有默認(rèn)的隱式 super(); 語(yǔ)句,它是用來(lái)訪問(wèn)父類中的空參數(shù)構(gòu)造方法互艾,進(jìn)行父類成員的初始化操作
  • this()是調(diào)用本類的構(gòu)造方法试和,super() 是調(diào)用父類的構(gòu)造方法, 且兩條語(yǔ)句 不能同時(shí)存在
  • 無(wú)論如何,子類的所有構(gòu)造方法纫普,直接或間接 必須調(diào)用 到父類構(gòu)造方法; 子類的構(gòu)造方法什么都不寫(xiě)灰署,默認(rèn) 的構(gòu)造方法第一行super()
子類初始化內(nèi)存圖:
子類初始化
2. 當(dāng)父類中沒(méi)有無(wú)參數(shù)構(gòu)造方法的時(shí)候,怎么辦局嘁?
  • 通過(guò)super(參數(shù)) 訪問(wèn)父類有參構(gòu)造方法
  • 通過(guò) this(參數(shù)) 訪問(wèn)本類其他構(gòu)造方法

注意:本類中的其他構(gòu)造方法必須已經(jīng)能夠正常訪問(wèn)父類構(gòu)造方法

3. 為什么子類對(duì)象創(chuàng)建都要訪問(wèn)父類中的構(gòu)造方法溉箕?
  • 因?yàn)樽宇惱^承了父類的內(nèi)容,所以創(chuàng)建對(duì)象時(shí)悦昵,必須要先看父類是如何對(duì)其內(nèi)容進(jìn)行初始化的肴茄。
  • 所以子類在初始化時(shí),必須先到父類中去執(zhí)行父類的初始化動(dòng)作但指。這樣寡痰,才可以使用父類中的內(nèi)容。

總結(jié):子類的初始化要保證棋凳,在初始化子類成員之前拦坠,必須首先初始化父類成員,因?yàn)槭T溃宇惞δ艿膶?shí)現(xiàn)贞滨,常常會(huì)依賴父類,所以在初始化的時(shí)候拍棕,保證先初始化父類晓铆,再初始化子類

4. 創(chuàng)建子類對(duì)象過(guò)程的細(xì)節(jié)
  • 如果子類的構(gòu)造方法 **第一行寫(xiě)了 this **調(diào)用了本類其他構(gòu)造方法,那么 super 調(diào)用 父類的語(yǔ)句還有嗎绰播?

這時(shí)是沒(méi)有的骄噪,因?yàn)?this() 或者 super(),只能定義在構(gòu)造方法的第一行蠢箩,因?yàn)槌跏蓟瘎?dòng)作要先執(zhí)行链蕊。

  • 父類構(gòu)造方法中是否有隱式的 super 呢事甜?

也是有的。只要是構(gòu)造方法默認(rèn)第一行都是 super();


六滔韵、 super 關(guān)鍵字

指的是父類的存儲(chǔ)空間(理解為父類的引用)
  • 調(diào)用父類的成員變量
    super.成員變量;
  • 調(diào)用父類的構(gòu)造方法:
    super(參數(shù));
  • 調(diào)用方法的成員方法:
    super.成員方法();

關(guān)鍵字super 可以在任意的非靜態(tài)方法中使用


七讳侨、 static 關(guān)鍵字

1. static 特點(diǎn)
  • static 修飾的成員變量 屬于類,不屬于這個(gè)類的某個(gè)對(duì)象奏属。優(yōu)先于對(duì)象存在,被類的所有對(duì)象共享

也就是說(shuō)潮峦,多個(gè)對(duì)象在訪問(wèn)或修改 static 修飾的成員變量時(shí)囱皿,其中一個(gè)對(duì)象將 static 成員變量值進(jìn)行了修改,其他對(duì)象中的 static 成員變量值會(huì)跟著改變忱嘹,即多個(gè)對(duì)象共享同一個(gè) static 成員變量

  • static 修飾的成員可以并且建議通過(guò) 類名 直接訪問(wèn)

訪問(wèn)靜態(tài)成員的格式:

  1. 類名.靜態(tài)成員變量名
  2. 類名.靜態(tài)成員方法名(參數(shù))
  3. 對(duì)象名.靜態(tài)成員變量名 ------不建議使用該方式嘱腥,會(huì)出現(xiàn)警告
  4. 對(duì)象名.靜態(tài)成員方法名(參數(shù)) -----不建議使用該方式,會(huì)出現(xiàn)警告
2. static 注意事項(xiàng)
  • 靜態(tài)內(nèi)容是優(yōu)先于對(duì)象存在的拘悦,只能訪問(wèn)靜態(tài) 齿兔。靜態(tài)修飾的內(nèi)容存于內(nèi)存的 靜態(tài)區(qū)
  • main 方法為靜態(tài)方法础米,僅僅為程序執(zhí)行入口分苇,它不屬于任何一個(gè)對(duì)象,可以定義在任意類中
  • 靜態(tài)上下文中屁桑,不能引用非靜態(tài)的成員變量或成員方法
  • 靜態(tài)方法中無(wú)法訪問(wèn)普通成員医寿; 靜態(tài)成員方法中,不能調(diào)用非靜態(tài)的成員方法(靜態(tài)只能訪問(wèn)/調(diào)用靜態(tài)
  • 在靜態(tài)上下文中蘑斧,無(wú)法使用 this/super 關(guān)鍵字靖秩, 因?yàn)?this/super 指代的是對(duì)象
3. 靜態(tài)變量和成員變量的區(qū)別
  • 所屬不同
    • 靜態(tài)變量屬于 ,所以也稱為為 類變量竖瘾。
    • 成員變量屬于 對(duì)象沟突,所以也稱為 實(shí)例變量(對(duì)象變量)
  • 內(nèi)存中位置不同
    • 靜態(tài)變量存儲(chǔ)于方法區(qū)的靜態(tài)區(qū)
    • 成員變量存儲(chǔ)于堆內(nèi)存
  • 內(nèi)存出現(xiàn)時(shí)間不同
    • 靜態(tài)變量隨著 的加載而加載,隨著類的消失而消失
    • 成員變量隨著 對(duì)象 的創(chuàng)建而存在捕传,隨著對(duì)象的消失而消失
  • 調(diào)用不同
    • 靜態(tài)變量可以通過(guò)類名調(diào)用惠拭,也可以通過(guò)對(duì)象調(diào)用
    • 成員變量只能通過(guò) 對(duì)象名 調(diào)用
靜態(tài)變量和方法的初始化內(nèi)存圖:
靜態(tài)變量和方法的初始化
4. 定義靜態(tài)常量
  • public static final 修飾的變量來(lái)完成定義,此時(shí) 變量名用全部大寫(xiě)庸论,多個(gè)單詞使用 下劃線 連接
public static final 數(shù)據(jù)類型 變量名 = 值;
  1. 當(dāng)我們想 使用類的靜態(tài)成員 時(shí)求橄,不需要?jiǎng)?chuàng)建對(duì)象,直接使用類名 來(lái)訪問(wèn)即可
  2. 接口中的每個(gè)成員變量都 默認(rèn) 使用public static final 修飾葡公。
  3. 所有接口中的成員變量已是 靜態(tài)常量罐农,由于接口沒(méi)有構(gòu)造方法,所以必須 顯示 賦值催什『鳎可以直接用 接口名 訪問(wèn)。

八、 final 關(guān)鍵字

1. 概述
  • 繼承的出現(xiàn)提高了代碼的復(fù)用性气筋,并方便開(kāi)發(fā)拆内。但隨之也有問(wèn)題,有些類在描述完之后宠默,不想被繼承麸恍,或者有些類中的部分方法功能是固定的,不想讓子類重寫(xiě)搀矫∧ɑΓ可是當(dāng)子類繼承了這些特殊類之后,就可以對(duì)其中的方法進(jìn)行重寫(xiě)瓤球,那怎么解決呢融欧?
  • 要解決上述的這些問(wèn)題,需要使用到一個(gè)關(guān)鍵字 final 卦羡, final 的意思為最終噪馏,不可變。 final 是個(gè)修飾符绿饵,它可以用來(lái)修飾 類欠肾,類的成員,以及局部變量
2. 特點(diǎn)
  • final 修飾 不可以被繼承拟赊,但是可以繼承其他類董济。
  • final 修飾的 方法不可以被覆蓋,但父類中沒(méi)有被 final 修飾方法要门,子類覆蓋后可以加 final
  • final 修飾的 變量 稱為常量虏肾,這些變量只能賦值一次。
  • final 修飾的 引用類型的變量 值為對(duì)象地址值欢搜,地址值不能更改,但是地址內(nèi)的對(duì)象屬性值可以修改
  • final 修飾 成員變量 吹埠,需要在創(chuàng)建對(duì)象前賦值廓推,否則報(bào)錯(cuò)。(當(dāng)沒(méi)有顯式賦值時(shí)樊展,多個(gè)構(gòu)造方法的均需要為其賦值。)
3. 自定義常量的初始化
  • 自定義常量的初始化雷酪,可以通過(guò) 構(gòu)造方法 來(lái)初始化

注意事項(xiàng): 如果通過(guò)構(gòu)造方法淑仆,來(lái)對(duì)自定義常量進(jìn)行初始化,要保證哥力,每一個(gè)構(gòu)造方法中 都必須有初始化自定義常量的初始化語(yǔ)句

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔗怠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吩跋,更是在濱河造成了極大的恐慌寞射,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钞澳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涨缚,警方通過(guò)查閱死者的電腦和手機(jī)轧粟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脓魏,“玉大人兰吟,你說(shuō)我怎么就攤上這事∶瑁” “怎么了混蔼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)珊燎。 經(jīng)常有香客問(wèn)我惭嚣,道長(zhǎng),這世上最難降的妖魔是什么悔政? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任晚吞,我火速辦了婚禮,結(jié)果婚禮上谋国,老公的妹妹穿的比我還像新娘槽地。我一直安慰自己,他們只是感情好芦瘾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布捌蚊。 她就那樣靜靜地躺著,像睡著了一般近弟。 火紅的嫁衣襯著肌膚如雪缅糟。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天祷愉,我揣著相機(jī)與錄音溺拱,去河邊找鬼逃贝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迫摔,可吹牛的內(nèi)容都是我干的沐扳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼句占,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沪摄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纱烘,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杨拐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后擂啥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哄陶,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年哺壶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屋吨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡山宾,死狀恐怖至扰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情资锰,我是刑警寧澤敢课,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站绷杜,受9級(jí)特大地震影響直秆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鞭盟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一切厘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懊缺,春花似錦疫稿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至俊扳,卻和暖如春途蒋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馋记。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工号坡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懊烤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓宽堆,卻偏偏與公主長(zhǎng)得像腌紧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畜隶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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