JavaSE基礎(chǔ)(七) - 構(gòu)造函數(shù) ??

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

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

  • 概述
    Java 中構(gòu)的造函數(shù)是一種特殊的函數(shù),用來在對象實(shí)例化時(shí)初始化對象的成員變量及初始化操作。

  • 格式
    函數(shù)名與類名相同且沒有返回值類型。例如:ClassName(){}

注意:
這里僅僅是沒有返回值類型,而不是說構(gòu)造方法沒有 return 調(diào)用,后面會(huì)用代碼來簡單驗(yàn)證。

  • 作用
    為對象進(jìn)行初始化操作及賦值。

  • 默認(rèn)構(gòu)造函數(shù)特點(diǎn)

  1. 在編譯的時(shí)候檢查。
  2. 如果沒有定義過構(gòu)造函數(shù),JVM 會(huì)為我們創(chuàng)建一個(gè)默認(rèn)的空參數(shù)的構(gòu)造函數(shù)。
  3. 如果在類中定義了指定的構(gòu)造函數(shù),那么類中的默認(rèn)構(gòu)造函數(shù)就沒有了??。

2. 與一般函數(shù)的區(qū)別

  • 調(diào)用時(shí)期
  • 構(gòu)造函數(shù):在創(chuàng)建對象時(shí),會(huì)調(diào)用與之對應(yīng)的構(gòu)造函數(shù),為對象進(jìn)行初始化。
  • 一般函數(shù):對象創(chuàng)建后,對象調(diào)用該函數(shù)時(shí)才會(huì)被調(diào)用。
  • 調(diào)用次數(shù)
  • 構(gòu)造函數(shù):對象創(chuàng)建時(shí)調(diào)用,而且只調(diào)用一次。
  • 一般函數(shù):對象創(chuàng)建后,可以被多次調(diào)用。

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

當(dāng)在描述該對象時(shí),該對象一存在就需要具備的一些內(nèi)容,這些內(nèi)容我們定義在構(gòu)造函數(shù)中。

/*
  舉例:在一個(gè) Person 類中,定義了成員變量 name,我們?yōu)檫@個(gè)類定義構(gòu)造函數(shù)。
*/
class Person {

    private String name;

    Person() {
        this.name = "baby";  // 如果沒有起名字的話,我們就叫他 baby??。
    }

    Person(String name) {
        this.name = name;
    }

}

4. 多個(gè)構(gòu)造函數(shù)

如上面代碼所示??我們定義了兩個(gè)名為 Person 的函數(shù),也就是定義了兩個(gè)構(gòu)造函數(shù)。但這兩個(gè)函數(shù)的參數(shù)列表是不同的,所以定義多個(gè)構(gòu)造函數(shù)實(shí)際上就是 函數(shù)重載 的過程。

注意:
構(gòu)造函數(shù)雖然是一個(gè)特殊的函數(shù),但是它也具備一般函數(shù)的共同特點(diǎn)。


5. 內(nèi)存的表現(xiàn)形式(內(nèi)存圖)

構(gòu)造函數(shù)內(nèi)存圖

6. 對象創(chuàng)建步驟(內(nèi)存圖)

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

7. 構(gòu)造函數(shù)賦值和set區(qū)別

構(gòu)造函數(shù)(指定默認(rèn)初始值)只能對在對象加載創(chuàng)建時(shí)調(diào)用一次,而 set 方法可以調(diào)用多次。


8. 默認(rèn)構(gòu)造函數(shù)的消失

class Person {

    private String name;
    private int age;

    Person(String: name, int age) {
        this.name = name;
        this.age = age;
    }
}

class Person_Sample {
    Person person = new Person();
    /*
    此時(shí)沒有無參的構(gòu)造函數(shù),編譯報(bào)錯(cuò)。
    也可以說我們自定義構(gòu)造函數(shù)后,就必須要使用我們定義后的構(gòu)造函數(shù)。
    */
}

9. 構(gòu)造函數(shù)的 reurun 語句

class Person {
    Person() {
        return ;    // 可以編譯通過,說明構(gòu)造函數(shù)有返回值,用來結(jié)束函數(shù)。
    }
}

10. 調(diào)用本類構(gòu)造函數(shù)

注意:
this可以用于在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù),但只能放在第一行,因?yàn)闃?gòu)造函數(shù)的調(diào)用是一個(gè)初始化的過程,JVM 會(huì)進(jìn)行初始化操作。所以在構(gòu)造函數(shù)之前的語句調(diào)用的方法是無效的。

class Person {

    private String name;
    private int age;

    Person(String name) {
        this.name = name;
    }

    Person(int age) {
        this.age = age;
    }

    // 調(diào)用本類構(gòu)造函數(shù)
    Person(String name, int age) {
        this(name);
        this(age);  // 錯(cuò)誤: 對this的調(diào)用必須是構(gòu)造器中的第一個(gè)語句,否則之前語句被初始化覆蓋。
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,806評論 0 11
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,787評論 11 349
  • 周末在家,閑來無事,玫瑰,冰糖,蜂蜜,分分鐘搞定玫瑰醬,淺嘗一口,甜! 步驟如下: 食材:干玫瑰30朵,蜂蜜和冰糖...
    年糕的日常閱讀 250評論 0 0
  • 今天重裝了ubuntu,現(xiàn)在給用戶添加sudo權(quán)限 附錄:-c, --comment 注釋 ...
    不濕的尿布濕閱讀 943評論 0 0

友情鏈接更多精彩內(nèi)容