JavaSE基礎(七) - 構造函數 ??

構造函數

1. 構造函數的的概述

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

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

注意:
這里僅僅是沒有返回值類型,而不是說構造方法沒有 return 調用,后面會用代碼來簡單驗證。

  • 作用
    為對象進行初始化操作及賦值。

  • 默認構造函數特點

  1. 在編譯的時候檢查。
  2. 如果沒有定義過構造函數,JVM 會為我們創建一個默認的空參數的構造函數。
  3. 如果在類中定義了指定的構造函數,那么類中的默認構造函數就沒有了??。

2. 與一般函數的區別

  • 調用時期
  • 構造函數:在創建對象時,會調用與之對應的構造函數,為對象進行初始化。
  • 一般函數:對象創建后,對象調用該函數時才會被調用。
  • 調用次數
  • 構造函數:對象創建時調用,而且只調用一次。
  • 一般函數:對象創建后,可以被多次調用。

3. 構造函數的使用

當在描述該對象時,該對象一存在就需要具備的一些內容,這些內容我們定義在構造函數中。

/*
  舉例:在一個 Person 類中,定義了成員變量 name,我們為這個類定義構造函數。
*/
class Person {

    private String name;

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

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

}

4. 多個構造函數

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

注意:
構造函數雖然是一個特殊的函數,但是它也具備一般函數的共同特點。


5. 內存的表現形式(內存圖)

構造函數內存圖

6. 對象創建步驟(內存圖)

構造方法內存圖

7. 構造函數賦值和set區別

構造函數(指定默認初始值)只能對在對象加載創建時調用一次,而 set 方法可以調用多次。


8. 默認構造函數的消失

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();
    /*
    此時沒有無參的構造函數,編譯報錯。
    也可以說我們自定義構造函數后,就必須要使用我們定義后的構造函數。
    */
}

9. 構造函數的 reurun 語句

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

10. 調用本類構造函數

注意:
this可以用于在構造函數中調用其他構造函數,但只能放在第一行,因為構造函數的調用是一個初始化的過程,JVM 會進行初始化操作。所以在構造函數之前的語句調用的方法是無效的。

class Person {

    private String name;
    private int age;

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

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

    // 調用本類構造函數
    Person(String name, int age) {
        this(name);
        this(age);  // 錯誤: 對this的調用必須是構造器中的第一個語句,否則之前語句被初始化覆蓋。
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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