说起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,没有重名就可以省略。
讲到这里是不是一目了然了?
新闻热点
疑难解答