Java初学之this关键字原理图解

说起this关键字大家应该都不陌生

我们先来回顾一下this关键字。

1.this关键字主要有三个应用:
 (1)this调用本类中的属性,也就是类中的成员变量;
 (2)this调用本类中的其他方法;
 (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

我们今天先来了解第一个应用。

首先看一段代码

class Person
{
	private String name;
	private int age;
	Person(String name)
	{
		this.name=name;
	}
	public void speak()
	{
		System.out.println(name+":"+age);
	}
}

class Demo{
	public static void main(String[] args)
	{
		Person p=new Person("haha");
		p.speak();
		Person p1=new Person("xixi");
		p1.speak();	
	}

}
初学者肯定有很多疑问,比如我自己:

p,p1都调用构造函数,那么初始化的时候,它们怎么能分清p的name是个p,而不是给p1

所以我们画个原理图来了解一下内部原理。

首先当new一个对象时候,p入栈,构造函数在堆中开辟了一块内存,如图:

Java初学之this关键字原理图解_第1张图片

这个时候,怎么把p和堆中的内存联系起来?这个时候this的作用就出来了。

Java初学之this关键字原理图解_第2张图片

后面会new很多对象,那么有了this后,谁调用构造函数就个谁初始化,用this作为判断依据。this指向哪个对象就给那个对象初始化。

Java初学之this关键字原理图解_第3张图片

所以p就找到了那块内存空间,然后弹栈,speak()函数进栈,出栈。p1同理也是这样的。

这个时候有人也许会问,那怎么判断speak()是哪个对象调用呢?

public void speak()
	{
		System.out.println(name+":"+age);
	}
这段代码起始隐藏了东西

public void speak()
	{
		System.out.println(this.name+":"+this.age);
	}
看图

Java初学之this关键字原理图解_第4张图片

还是通过this,speak指向了p这个对象。

在speak()中,并没定义name,age局部变量,使用的对象里面的,所以隐藏了一个this,没有重名就可以省略。

讲到这里是不是一目了然了?

你可能感兴趣的:(Java大用处)