首页 > 编程 > Java > 正文

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

2019-11-08 01:28:36
字体:
来源:转载
供稿:网友

说起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入栈,构造函数在堆中开辟了一块内存,如图:

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

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

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

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

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

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

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

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表