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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

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

public void speak()

{

System.out.println(name+":"+age);

}这段代码起始隐藏了东西

public void speak()

{

System.out.println(this.name+":"+this.age);

}看图

0818b9ca8b590ca3270a3433284dd417.png

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值