菜鸟笔记
提升您的技术认知

this关键字

一、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中的语法规则。