Java面向對象之構造函數

在現實生活中,很多事物一出現,就天生具有某些屬性和行爲。比如人一出生,就有年齡、身高、體重、就會哭;汽車一出產,就有顏色、有外觀、可以運行等。這些,我們就可以將這些天然的屬性和行爲定義在構造函數中,當new實例化對象時,也就具有這些屬性和方法了,沒必要再去重新定義了,從而加快了編程效率。

構造函數作用:一般用來初始化成員屬性和成員方法的,即new對象產生後,就調用了對象了屬性和方法。

構造函數與普通函數的區別:

(1)一般函數是用於定義對象應該具備的功能。而構造函數定義的是,對象在調用功能之前,在建立時,應該具備的一些內容。也就是對象的初始化內容。

(2) 構造函數是在對象建立時由 jvm 調用, 給對象初始化。一般函數是對象建立後,當對象調用該功能時纔會執行。

(3) 普通函數可以使用對象多次調用,構造函數就在創建對象時調用。

(4) 構造函數的函數名要與類名一樣,而普通的函數只要符合標識符的命名規則即可。

(5) 構造函數沒有返回值類型。

作用:給對象進行初始化

如下圖所示:

public class Person {
    
    String name; //    姓名
    int age; //    年齡
    //    全參構造方法
    Person(String name,int age){
        this.name = name; //     給對象賦予name值
        this.age = age; //    給對象賦予age值
    }
    //    無參構造方法
    Person(){
        
    }
    
    public static void main(String[] args) {
        Person p = new Person("張三",1); 
        /*
             根據創建對象的實參個數,jvm回去尋找合適的構造方法,
             兩個實參所有會調用含有兩個參數的構造方法.Person(String name,int age)
         */
        System.out.println("姓名: " + p.name + " 年齡: " + p.age); //    name = 張三, age = 1;
        //這個對象創建出來的時候已經有了自己的姓名和年齡
    }

注意:

 1、當類中沒有定義構造函數時,系統會指定給該類加上一個空參數的構造函數。這個是類中默認的構造函數。當類中如果自定義了構造函數,這時默認的構造函數就沒有了。

2、在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在於類中,是以重載的形式體現的。因爲構造函數的名稱都相同。

 3、創建對象時,構造函數已經被調用並執行。

什麼時候定義構造函數呢?

在描述事物時,該事物已存在就具備的一些內容,這些內容都定義在構造函數中。

public class Person {

    // 定義一個Person類的構造函數
    public Person() {// 構造函數 而且是空參數的
        System.out.println("無參構造函數");
    }

    public static void main(String[] args) {
        Person person = new Person();
    }
}

輸出結果爲:無參構造函數

構造函數:構建創造對象時調用的函數  

作用:可以給對象進行初始化

創建對象都必須要通過構造函數初始化。一個類中如果沒有定義過構造函數,那麼該類中會有一個默認的空參數構造函數。

如果在類中定義了指定的構造函數,那麼類中的默認構造函數就沒有了。一句話:有就用你的,沒,哥幫你弄一個空的。

比如:
 

Class Demo{

}

編譯能通過 

其實裏面默認含有構造函數初始化

Class Demo{

  Demo( ){ }

}

有參構造函數如下:

public class Person {


    // 定義一個Person類的構造函數
    public Person() {// 構造函數 而且是空參數的
        System.out.println("無參構造函數");
    }

    public Person(String message) {// 構造函數 而且是有參數的
        System.out.println("有參構造函數" + message);
    }
}

public static void main(String[] args) {
       Person person = new Person();

       Person message=new Person("已被調用");

   }
}

輸出結果爲:

無參構造函數
有參構造函數已被調用

. 構造代碼塊:

{
//初始化內容
}
class Boy {

    String name;
    int age;
    String gender;
    // 構造代碼塊,給所有對象進行初始化。
    {
        System.out.println("哭。。。");
    }

    Boy() {
        System.out.println("無參構造");
    }

    Boy(String n, int a, String g) {
        name = n;
        age = a;
        gender = g;
        System.out.println("有參構造");
    }

}

class Demo9 {

    public static void main(String[] args) {

        Boy b = new Boy();

        Boy b2 = new Boy("jack", 1, "男");
//輸出結果爲:
       /* 
        哭。。。
        無參構造
        哭。。。
        有參構造
        */

    }
}

 

具體作用:

  1:給所有對象進行統一初始化。對象一建立就運行並且優先於構造函數

  2:與構造函數區別

    1:構造代碼塊和構造函數的區別,構造代碼塊是給所有對象進行統一初始化, 構造函數給對應的對象初始化。

    2:構造代碼塊的作用:它的作用就是將所有構造方法中公共的信息進行抽取。

 

參考鏈接:

Java 構造函數的詳解

JAVA構造函數(方法)

Java構造函數的深入理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章