java this關鍵字調用構造方法


一 this調用構造方法

  構造方法之間的調用,可以通過this關鍵字來完成。

格式:

 

  this(參數列表);

 

構造方法的調用舉例:

class Person {
    // Person的成員屬性
    private int age;
    private String name;

    // 無參數的構造方法
    Person() {
    }

    // 給姓名初始化的構造方法
    Person(String nm) {
        name = nm;
    }
    // 給姓名和年齡初始化的構造方法
    Person(String nm, int a) {
        // 由於已經存在給姓名進行初始化的構造方法 name = nm;因此只需要調用即可
        // 調用其他構造方法,需要通過this關鍵字來調用
        this(nm);
        // 給年齡初始化
        age = a;
    }
}

二 this的原理圖解

 

例如:

 

class Person {
    private int age;
    private String name;

    Person() {
    }
    Person(String nm) {
        name = nm;
    }
    Person(String nm, int a) {
        this(nm);
        age = a;
    }
}

class PersonDemo {
    public static void main(String[] args) {
        Person p = new Person("張三", 23);
    }
}

 

內存圖解:

 

  1、先執行main方法,main方法壓棧,執行其中的new Person(“張三”,23);

  2、堆內存中開辟空間,並為其分配內存地址0x33,,緊接着成員變量默認初始化(name=null age = 0);

  3、擁有兩個參數的構造方法(Person(String nm , int a))壓棧,在這個構造方法中有一個隱式的this,

因為構造方法是給對象初始化的,那個對象調用到這個構造方法,this就指向堆中的那個對象。

  4、由於Person(String nm , int a)構造方法中使用了this(nm);構造方法Person(String nm)就會壓棧,

並將“張三”傳遞給nm。在Person(String nm , int a)構造方法中同樣也有隱式的this,this的值同樣也為

0x33,這時會執行其中name = nm,即把“張三”賦值給成員的name。當賦值結束后Person(String nm , int a)

構造方法彈棧。

  5、程序繼續執行構造方法(Person(String nm , int a)中的age = a;這時會將23賦值給成員屬性age。

賦值結束構造方法(Person(String nm , int a)彈棧。

  6、當構造方法(Person(String nm , int a)彈棧結束后,Person對象在內存中創建完成,並將0x33賦值

給main方法中的p引用變量。

 注意事項:

  this所在的方法,this就代表哪個對象。

  調用其他構造方法的語句必須定義在構造方法的第一行,原因是初始化動作要最先執行。

三 成員變量和局部變量同名問題

  以在成員變量名前面加上this.來區別成員變量和局部變量

例如:

class Person {
    private int age;
    private String name;

    // 給姓名和年齡初始化的構造方法
    Person(String name, int age) {
        // 當需要訪問成員變量是,只需要在成員變量前面加上this.即可
        this.name = name;
        this.age = age;
    }

    public void speak() {
        System.out.println("name=" + this.name + ",age=" + this.age);
    }
}

class PersonDemo {
    public static void main(String[] args) {
        Person p = new Person("張三", 23);
        p.speak();
    }
}

四 this的應用

例如:Person類中定義功能,判斷兩個人是否是同齡人

class Person {
    private int age;
    private String name;

    // 給姓名和年齡初始化的構造方法
    Person(String name, int age) {
        // 當需要訪問成員變量是,只需要在成員變量前面加上this.即可
        this.name = name;
        this.age = age;
    }

    public void speak() {
        System.out.println("name=" + this.name + ",age=" + this.age);
    }

    // 判斷是否為同齡人
    public boolean equalsAge(Person p) {
        // 使用當前調用該equalsAge方法對象的age和傳遞進來p的age進行比較
        // 由於無法確定具體是哪一個對象調用equalsAge方法,這里就可以使用this來代替
        /*
         * if(this.age == p.age) { return true; } return false;
         */
        return this.age = p.age;
    }
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM