淘先锋技术网

首页 1 2 3 4 5 6 7

当成员变量和局部变量重名时,可以采用this关键字来进行区分。
this
指所在函数所属对象的引用,
通俗的将就是:那个对象调用了this所在的函数,this就代表那个对象
eg:

class Person
{
    int age;
    String name;
    Person(int age)
    {
        this.age=age;
    }
    Person(int age,String name)
    {
        this(age);
        this.name=name;
    }
    void speak()
    {
        System.out.println("name="+name+"\nage="+age);
    }
}
class Demo
{
    public static void main(String args)
    {
        Person p=new Person(,"旺财");
    }
}

程序的执行流程如下:
第一步:

1.执行主函数,主函数进入栈,
执行Person p=new Person(18,”旺财”);语句。
为对象 p 在堆中分配空间进行默认初始化。

name=null;
age=0;
2.对象 p 调用构造函数

(前面说过this的作用:那个对象调用他,他就指向那个对象)
所以this指向了p的地址。
即:
this->0x0034 (此时this等价于对象p)

开始执行构造函数的函数体
执行this(age),构造函数Person(age)入栈
因为this()被构造函数Person(name,age)调用,构造函数被对象调用。
所以,此时的this仍然指向对象p (this->0x0034)

执行构造函数体:
this.age=age; //p.age=18;
3. 构造函数Person(age)执行完毕。弹栈。

执行 this.name=name; //p.name=”旺财”
构造函数Person(name,age)执行完毕,进行弹栈。对象初始化完毕。

p指向地址0x0034。