首先在我们写一个JavaBean的时候都会写调用访问这个类属性的getter和setter方法或者有参的构造方法例如:
public class Employee1 {
private String name;
private int age;
private String sex;
private String post;
private double salary;
//有参构造
public Employee1(String name, int age, String sex, String post, double salary) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.post = post;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
我们可以看到里面都用到了this这个关键字。它的意思是“当前对象的”下面就来看下它的三个作用:
1、用来在类的内部区分属性和同名形参,或者说通过this关键字访问对象的属性(常用)。
上面类的name属性的setNmae方法中,所传形参String name和类的属性name同名,在给属性name赋值的时候,为了区分属性和形参,使用this.name来调用类的属性,并使用形参name为其赋值。这里this保存的是对象的引用,即对象的虚拟地址,看下面的的代码:
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//打印内存中的虚拟地址
public void showAddressInMemory(){
System.out.println("打印this看到的虚拟地址:"+this);
}
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
//直接打印对象,会显示该对象在内存中的虚拟地址
//格式:Hero@c17164 c17164即虚拟地址,每次执行,得到的地址不一定一样
System.out.println("打印对象看到的虚拟地址:"+garen);
//调用showAddressInMemory,打印该对象的this,显示相同的虚拟地址
garen.showAddressInMemory();
Hero teemo = new Hero();
teemo.name = "提莫";
System.out.println("打印对象看到的虚拟地址:"+teemo);
teemo.showAddressInMemory();
}
}
运行结果如下,打印对象和打印this记过的都是对象的虚拟地址:
2、在需要使用当前对象时,直接使用this,比如返回当前对象:
在上面的Hero类中添加如下方法:
//增加血量
public Hero addHp(float add) {
hp=hp+add;
return this;
}
该方法用来增加血量,可以看到这个方法有返回值,返回的是Hero类的this,也就是返回了一个Hero类的一个对象,这样做的好处是,在我们需要连掉的时候直接用返回值就可以调用,比如:对象.addHp(2.5).addHp(3.5);
3.在类的构造方法中,调用当前类的其它构造方法
如果要在一个构造方法中,调用另一个构造方法,可以使用this(),代码如下:
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//带一个参数的构造方法
public Hero(String name){
System.out.println("一个参数的构造方法");
this.name = name;
}
//带两个参数的构造方法
public Hero(String name,float hp){
this(name);
System.out.println("两个参数的构造方法");
this.hp = hp;
}
public static void main(String[] args) {
Hero teemo = new Hero("提莫",383);
System.out.println(teemo.name);
}
}
在上面代码中可以看到,带两个参数的构造方法中通过this(),调用了带一个参数的构造方法,如果有多个构造方法,他是通过参数的个数和类型去匹配对应的构造函数。
在有些特殊场景中会用到这中方法,比如一个类它实例化的对象有一部分属性是相同的,name就可以在写构造方法的时候把那部分属性固定。
需要注意的是这种用发this(),必须放在方法的第一行。