一、this关键字的意义
1、代表当前对象
2、this就是所在函数所属对象的引用,简单来说,哪个对象调用了this所在的函数,this就代表哪个对象
3、如下图,this代表的就是对象p,如右边内存图解,this会通过堆内存中新建对象的首地址,指向新建的对象
二、this关键字的应用(一个类中除静态外的成员,如果要运行,就必须得被对象调用)
1、当成员变量和局部变量重名,可以用关键字this区分,如:
class Person
{
private String name;
private int age;
Person(String name)
{
//成员变量和局部变量重名,可以用关键字this区分
this.name = name;
}
public void speak()
{
//输出时,会默认为成员增加this关键字,用来代表具体对象的数据
System.out.println(this.name+":"+this.age);
}
}
2、this关键字也可以用于在构造函数中调用其他构造函数。但是,只能定义在构造函数的第一行,因为初始化动作要先执行。如:
class Person
{
private String name;
private int age;
Person()
{
name = "baby";
age = 1;
System.out.println("Person run");
}
Person(String name)
{
//成员变量和局部变量重名,可以用关键字this区分
this.name = name;
}
Person(String name,int age)
{
//调用其他构造函数时,只能定义在构造函数的第一行,因为初始化动作要先执行
this();
this.name = name;
this.age = age;
}
public void speak()
{
System.out.println(this.name+":"+this.age);
}
}
class ThisDemo
{
public static void main(String[] args)
{
Person p = new Person("小强",10);
p.speak();
}
}
运行结果
我们可以看到,虽然我们在 Person(String name,int age) 构造函数中调用了 Person() 构造函数,但是最后的输出结果,仅输出了 Person run ,成员变量的内容还是我们在新建对象时,传递进去的参数,并不是 Person() 中初始化的内容。
可能有人会说,我们将调用的构造函数放在后面执行,不就行了,那么我们就来看看,如果将调用的构造函数放在后面,会出现什么结果:
我们可以看到,编译时就会提示错误,因为其他初始化要先执行,否则会破坏函数中的其他语句,如上面的例子,可能会覆盖我们需要传进去的参数,而且我们定义的函数是封装起来的。这也是Java中的语法规则。