变量的分类:
在JAVA类中变量因为位置和作用范围等特点的不同分为了局部变量和成员变量
成员变量和局部变量
1、类中的位置不同:成员变量我们是定义在类中方法外的,而局部变量我们是在方法内部或方法形参上定义的
2、内存中位置不同:成员变量在内存中是保存在堆内存的,而局部变量因为和方法一起出现所以是在栈内存中保存的
3、命周期不同:
成员变量会随着对象的创建而存在,当对象消失时就会一起消失
局部变量是随着方法被调用后而存在的,当方法调用完毕弹栈后就会消失
4、初始化值不同:成员变量因为存放在堆内存中,而在堆内存中的变量是有默认的初始值的,局部变量因为存放在栈内存中所以没有默认初始值,必须要先定义再赋值后才能使用
5、作用范围不同:成员变量在类中的任何位置都能使用,局部变量只能在当前方法中使用
6、就近原创:当局部变量和成员变量重名时调用方法会优先调用的是局部变量.
this关键字
当局部变量和成员变量重名时我们还想要调用成员变量就需要用到this关键字
this:表示当前方法调用者的地址值
如上面这段代码中的set方法中就出现了成员变量和局部变量重名的情况,我们调用set方法的本意是希望用我们传进去的值给成员变量赋值,如果不使用this就会变成用我们传进去的局部变量给局部变量自己赋值。
Person person = new Person();
person.setName(“张三”);
假设person对象中保存的地址值是1001,因为this表示当前方法调用者的地址值,
当我们在测试类中使用这段代码时就表示我调用1001这个对象地址中的setName方法并且把“张三”传了过去。
setName方法中的this.name = name就表示把局部变量name赋值给1001的name。
这样当局部变量和成员变量重名时,我们就使用了this关键字完成了对成员变量的赋值。