大家有没有考虑过,在一个类的构造器中,我们为什么要使用this.属性而不直接使用属性呢?毕竟一个类中,不管属性被什么关键字修饰,在类中都可以访问。随着这个问题,今天带大家深入分析一下Java中this关键字,让大家彻底理解this关键字.

构造器中的this1.1初识this:

public class Account { private String name; private double balance; private String pwd; //Account类的一个构造器 public Account (String name,double balance,String pwd){ //构造器的实现---初始化对象 this.name = name; this.balance = balance; this.pwd = pwd; } }

class Account { private String name; private double balance; private String pwd; //Account类的一个构造器 public Account(String name, double balance, String pwd) { //构造器的实现---初始化对象 //不用this name = name; balance = balance; pwd = pwd; } public void showInfo() { System.out.println("name:" name " " "balance:" balance " " "pwd:" pwd); return; } } public class Main { public static void main(String[] args) { Account account = new Account("Yaoyao", 20, "123456"); account.showInfo(); } }

【运行结果】:

为什么有this关键字(一分钟彻底弄懂this关键字)(1)

【解释】:

为什么有this关键字(一分钟彻底弄懂this关键字)(2)

为什么有this关键字(一分钟彻底弄懂this关键字)(3)

为什么有this关键字(一分钟彻底弄懂this关键字)(4)

1.2:为何要this?

 通过上面的分析,我们发现,当局部变量&属性同名时,在构造器中无法对属性初始化成功。我们在想,如果能被赋值的变量,不是构造器中的局部变量,而是成员变量这个问题不就解决了嘛?对的,所以就有了this!!!

public class Account { private String name; private double balance; private String pwd; //Account类的一个构造器 public Account (String name,double balance,String pwd){ //构造器的实现---初始化对象 this.name = name; this.balance = balance; this.pwd = pwd; } }

这样,通过this.属性来表明这是一个成员变量,与局部变量以示区分.

this介绍2.1:this到底是什么?

Java虚拟机(JVM)会给每个对象分配一个this,来代表当前对象,

this其实可以理解为对象的一个属性(成员变量),但是这个属性是隐藏的.即this相当于对象的一个隐藏属性。

和对象的其他属性一样,在new一个新对象的时候,会在堆内存为对象分配空间,属性就储存在这份空间中。且该this属性的值就是对象在堆内存中地址,即this指向该对象(this代表该对象).

【重点】综上:this是对象的隐藏属性(本质就是一个普通的成员变量),和其他non-static属性一样,在创建对象的时候会为每个新对象分配该对象的专属成员变量(this就是其中一个),this这个成员变量存储在堆内存中,该变量的值是所属对象在堆内存的地址。

即:创建1000个对象,就有1000个this,它们之间相互独立(哎呀,this就是普通的成员变量而已啦!)

为什么有this关键字(一分钟彻底弄懂this关键字)(5)

使用细节&注意事项

this关键字可以用来区分当前类的属性&局部变量。

使用this关键字可以用来访问本类的实例属性、实例方法、构造器(“实例”指的就是non-static修饰 的)

访问本类实例属性:this.属性

访问本类实例方法:this.方法名(参数列表)

访问本类构造器:this(参数列表)

【注意】:this(参数列表)来访问本类构造器需要注意以下几点

只能在构造器中使用this(参数列表);即在一个构造器中访问本类的另外一个构造器。(默认构造器行首是super();,)。

显示使用this()时,默认的super()就被覆盖

this(参数列表)和super(参数列表)在构造器中有且只能存在一个。

若在构造器中使用this(参数列表),则此语句只能位于构造器第一行

类中的静态方法static method中不能使用this。很简单理解:static方法中不能出现成员变量(this依赖对象,而static不依赖于对象,类名.静态方法时,没有对象啊,你让this情何以堪!它都不知道自己属于哪个对象!)

,