如何理解this关键字
this可以理解为是一个变量,里面存储当前对象的地址引用
静态元素存在单独的static区域内,所以静态元素不能出现this
this可以防止在类成员的任何位置
属性内、方法内、构造方法内、代码块内
this可以调用属性,调用方法
不能互相调用来调用去,会出现StackoverflowError
this也可以调用构造方法
必须放在另一个构造方法内,且必须放在第一行
this关键字表示的是当前对象,我们理解的this关键字会出现在构造函数中:
public class Person {
private String name;
public Person(){}
public Person(String name){
this.name = name;
}
public static void main(String[] args) {
Person p = new Person();
}
}
在内存中的结构是这样的:
从左往右依次是栈、堆、方法区
首先我们需要有一个Person的类模板,用来保存类的相关信息,比如说有一个name属性,静态变量,静态方法也保存在这一块内存中,这部分属于类本身,不属于某一个对象,可以由类名直接调用
new出来的对象放在堆空间中,他里面的属性、方法来源于类模板,所以里面的属性跟类模板一样。
我们new出来的对象赋值给了Person p,变量p会在栈中开辟一块内存空间保存,里面的值是刚才new出来对象保存的地址,new出来的对象中也保存着一份指向自己的this变量,这个变量里的值和前面的栈空间里的变量p一样,也是保存的new出来的对象的地址。如果有多个对象,则有多个this,每个this指向不同的对象