初識構造函數

“部分內容摘自《java語言程序設計》,郭克華主編,page 77”

一、何爲構造函數

——構造函數也是一種特殊方法,避免創建對象後,忘記對對象進行初始化,是人爲創造的。它規定了對象初始化必須完成。

二、格式

類名 對象名 = new 類名(傳參)

定義時需要滿足:函數名稱與類名相同;不含有返回值

三、實例

/**
 * 構造函數演示
 */
class Customer {
    String name;
    String sex;
    int age;
    void init(String name,String sex,int age){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    void display(){
        System.out.println("name="+name);
        System.out.println("age="+age);
        System.out.println("sex="+sex);
    }
}

public class ConstructorTest{
    public static void main(String[] args){
        Customer customer = new Customer();
        customer.init("張思","女",89);
        customer.display();
    }
}

  上面代碼可以寫成:

/**
 * 構造函數演示
 */
class Customer {
    String name;
    String sex;
    int age;
    Customer(String name,String sex,int age){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    void display(){
        System.out.println("name="+name);
        System.out.println("age="+age);
        System.out.println("sex="+sex);
    }
}

public class ConstructorTest1{
    public static void main(String[] args){
        Customer c = new Customer("張三","男",13);
        c.display();
    }
}

注意:上面的this,避免了函數變量和成員變量的名字重複,不加會屏蔽成員函數中的變量。this表示該變量屬於類中的變量,而非成員變量(是局部變量)。此處可以理解爲對本對象的引用,“本對象自己”

如果不加:輸出如下:

 可以看到初始值爲null,false,0。

構造函數,idea上顯示如下:

這句代碼:

Customer customer = new Customer("張思","女",89);實際上是調用了構造 函數。

擴展,靜態變量:

 傳入color的實參,賦值情況如下如下,(static關鍵字,靜態變量存儲在區別於成員變量的區域,全局區)

 

 內存存儲位置說明:

棧:成員變量,參數,對象引用(編譯器自動分配,程序結束回收內存)

堆:所有new出來的對象(程序員主動申請,需要主動釋放)

 

靜態區(全局區):存放static修飾的靜態變量(只需創建一次,下次可以直接引用),類裏面定義的 成員變量——共享 

方法區+常量池:???待補充

本例中,定義了兩個類,Customer和ConstructorTest,編譯後會產生兩個 .class文件。當然也可以把兩個類放在不同文件中。

對於 Demo demo = new Demo(); 的內存分析見下鏈接

http://www.cnblogs.com/java-sky/p/7200085.html

四、注意

(1)、構造函數可以被重載。一個類可以定義多個構造函數。實例化對象時,根據具體情況,調用不同的構造函數。

(2)、若沒有定義構造函數,則系統默認定義一個空構造函數,無參。初始化對象直接new。

(3)、一個類創建,構造器自動調用,不同位置的參數代表不同屬性。在對象的生命週期中,構造函數只會調用一次。

 

 

 

 

 

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