当成员变量和局部变量重名时,可以采用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。