this关键字
在类中的普通成员方法中,可以使用this关键字,其表示调用当前方法的对象引用,即哪个对象调用该方法,this就代表哪一个对象。
this关键字用法:
-
对成员变量和局部变量进行区分
固定格式:
this.数据成员;
-
调用类中的成员方法
固定格式:
this.成员方法(实际参数列表);
-
调用类中的其他构造器(后面章节补充)
成员变量与局部变量的区分:
方法的形参如果与成员变量同名
- 不带this修饰的变量指的是形参
- 如果要表示成员变量,则必须加this修饰
方法的形参与成员变量不同名
- 则不带this修饰的变量指的就是成员变量
案例展示:
重新实现Account类,要求使用this关键字,要求成员方法中形式参数名跟类数据成员名相同。
基础类Account:
package com.briup.chap05.bean;
public class Account {
private String id; //卡号
private double balance; //金额
public void setId(String id) {
//方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
//如果要表示成员变量,则必须加this修饰
System.out.println("参数id: " + id);
System.out.println("this.id: " + this.id);
this.id = id;
}
public String getId() {
//如果形参没有与成员变量同名,不带this修饰的变量指的是成员变量
return id;
//return this.id;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getBalance() {
return balance;
}
public void show() {
System.out.println("id: " + this.id);
//使用this去调用普通成员方法
System.out.println("balance: " + this.getBalance());
}
}
测试类:
package com.briup.chap05.test;
import com.briup.chap05.bean.Account;
public class Test08_This {
public static void main(String[] args) {
//1.实例化对象
Account acc = new Account();
//2.借助set方法赋值
acc.setId("001");
acc.setBalance(2300.5);
System.out.println("---------------------");
acc.show();
}
}
运行效果:
测试代码较为简单,注意观察注释描述。
this内存构成理解:
public static void main(String[] args) {
Student stu1 = new Student("zs",21);
stu1.sayHello();
Student stu2 = new Student("tom",19);
stu2.sayHello();
}
-
单个对象内存图
-
多个对象内存图
观察上图可知:每一个对象中,都有自己的this,和其他对象中的互不影响。
当前执行stu1.sayHello()
代码的时候,this代表的就是stu1
当前执行stu2.sayHello()
代码的时候,this代表的就是stu2
结论:成员方法被哪个对象调用,方法中的this就代表那个对象,即谁调用,this就代表谁。
思考:在生活中, 我们每一个人心中的this,指的是哪一个汉字?
this补充
this特殊用法:
在构造方法中,可以借助this关键字调用其他构造方法。
具体格式为:this(实际参数列表);
案例展示:
基础类补充:
package com.briup.chap05.bean;
public class Teacher {
//省略...
//该类已经成功定义2参构造器,定义过程省略...
//public Teacher(String name, double salary);
//this特殊用法:在构造方法中,调用其他构造方法
public Teacher(String name) {
//必须是构造方法的第一行有效代码
this(name,0);
}
}
测试类代码:
package com.briup.chap05.test;
import com.briup.chap05.bean.Teacher;
public class Test10_This {
public static void main(String[] args) {
//调用Teacher(String)构造方法实例化对象
//底层借助Teacher(String, double)实现
Teacher t = new Teacher("larry");
t.show();
}
}
运行效果:
观察上图可知,构造方法Teacher(String)底层借助Teacher(String, double)实现了功能。
注意:this(实际参数列表)
必须是构造方法中的第一行有效代码。