Java成员变量与局部变量同名

看到成员变量和局部变量同名这个知识点的时候一开始有点懵逼,想了一下其实特别简单。

先来看一个简单的代码。

首先我定义了一个Person类。

public class Person { private int age=1000;//定义成员变量,年龄为1000 public void setAge(int age) { age=age; System.out.println("方法内的年龄"+age); } public void sayHello() { System.out.println("我的年龄是"+age+"."); } }

然后在主函数里面创建对象并输出。

Person p=new Person(); p.setAge(20); p.sayHello();

输出结果是什么?并不是我们想象的我的年龄是20,而是下面这样:

//方法内的年龄20 //我的年龄是1000.

想一下其实就很容易理解。

一句话,如果不同名,那么方法内的变量名代表成员变量;如果同名,那么方法内的变量名就只表示局部变量了,和成员变量一毛钱关系都没有了。

所以,首先当我们创建了一个Person对象p,在创建对象的时候就已经完成了成员变量的初始化了。成员变量age的初始值是1000。

当我们p.setAge(20)的时候,其实这个20只在setAge这个方法内起作用,所以输出了方法内年龄20,执行完这句话后,20就被销毁了。

然后执行sayHello,它里面的age代表的是成员变量的值,所以依旧是1000。

到这里如果还是不能理解,可以自己写代码看输出结果体会下。

那么,当同名的时候,我们就是要让这个变量名表示成员变量,有没有办法呢?

那就要说到this关键字了。我们把Person类改成这样:

public class Person { private int age=1000; public void setAge(int age) { this.age=age; System.out.println("方法内的年龄"+age); } public void sayHello() { System.out.println("我的年龄是"+age+"."); } }

再运行代码,发现代码运行结果变成了下面这样:

//方法内的年龄20 //我的年龄是20.

this表示的是当前对象。

this.age在这里具体表示p对象的age(即p对象的成员变量age)的值是20。

不能理解的话就多写写代码就能理解了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e40417985bbcece175480794e28d68c6.html