解析java中的this关键字
1 含义
是一种引用(特殊变量),用来存储当前实例化对象的内存地址。
this的中文词义为本,即自己这方面的。
2 为什么需要用this关键字?
2.1 分析
因为方便调用者,我们通常会把set方法里面的形参名与属性名保持一致,这样调用者就知道你应该传个什么样子的数据过去了,知道是给哪位属性赋值了;如果形参名为aa这种,调用者可能会蒙了,不知道到底该怎样传,不知道传递的内容就是给哪位属性赋值的。
2.2 知道是给那个属性赋值
示例代码
Cat里面的setAge方法
public void setAge(int age) {
this.age = age;
}
TestCat
public class TestCat {
public static void main(String[] args) {
//猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
Cat cat=new Cat("叮当","狸花猫",8);
cat.showInfo();
cat.setName("小梦");
System.out.println("五年后: ");
System.out.println("修改猫的年龄: ");
cat.setAge(cat.getAge()+5);
cat.showInfo();
}
}
示例代码展示效果图
示例代码运行截图
2.3 不知道是给那个属性赋值
示例代码
Cat里面的setAge方法代码
//形参名为a
public void setAge(int aa) {
if(age<0||age>20){
System.out.println("猫的年龄输入有误,请检查后重新输入!!!!");
return;
}
this.age = aa;
}
TestCat
public class TestCat {
public static void main(String[] args) {
//猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
Cat cat=new Cat("叮当","狸花猫",8);
cat.showInfo();
cat.setName("小梦");
System.out.println("两年后: ");
System.out.println("修改猫的年龄: ");
cat.setAge(10);
cat.showInfo();
}
}
示例代码展示效果图
示例代码运行截图
2.4 总结
a.简单来说,就是在同一个方法中,区分同名的属性和局部变量的途径。
b.在方法里,局部变量就是形参或者方法体里面定义的变量
c.若局部变量和属性同名,那么在方法里面会默认找离它最近的那个变量值,因此相当于同一个变量进行互相赋值,这是没有意义的,因此取了this关键字来作为区分的条件
3 怎么使用this关键字
3.1 记忆口诀
谁调用,代表谁。
它是一个引用,存放着当前实例化对象在堆内存的内存地址
3.2 语法
当你想使用当前实例化对象的属性时,语法如下所示:
this.属性名
当你想使用当前实例化对象的方法时,语法如下所示:
this.方法名(形参列表)
4.this在内存图中的表示
4.1 示例代码
Cat
public class Cat {
private String name;
private String type;
private int age;
public Cat(){
}
//定义有参构造,方便实例化对象时,初始化值
public Cat(String name, String type, int age) {
this.name = name;
this.type = type;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//type(品种)属性只可以读取,不可以写入
public String getType() {
return type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void showInfo(){
System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
}
}
TestCat
public class TestCat {
public static void main(String[] args) {
//猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
Cat cat=new Cat("叮当","狸花猫",8);
cat.showInfo();
}
}