this关键字
概念:对于构造方法来说,this关键字用于代表当前正在构造的对象。
对于普通方法来说,this关键字代表当前正在调用的对象。
- 使用this调用本类中的属性:当方法中的形参变量名和成员变量名完全相同时,此时在方法中优先选择形参变量使用,若希望使用成员变量,则需要在变量名前使用this.加以说明。
public class Student {
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
this("s",23);
}
public String getName() {
return name;
}
public void setName(String name) {
//this.name指的是private String name;this可以区分形参变量和成员变量
//name = name;这种赋值,两个name都是形参变量。
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
} - 使用this调用构造方法:可以通过this()的方式调用本类中的其他构造方法,要求该语句必须写在构造方法的第一行(由于构造方法是在实例化对象时被自动调用的,也就是说在类中的所有方法中,只有构造方法是被优先调用的,所以使用this调用构造方法必须也只能放在构造方法的首行)。上述代码中使用this(name,age)在无参构造中调用有参构造函数。
- this表示当前对象:不同的对象调用同一个方法时,本质上就是将不同对象在内存中的地址信息传递给方法中隐含的参数this,而在方法中使用/访问成员变量时,本质上是通过this关键字进行访问的,如this.name,由于调用对象的不同导致this不同,因此this.name的结果也就随之不同。
package com.java.test;
import org.junit.Test;
import com.java.entity.Student;
public class JavaSe {
@Test
public void test01(){
Student student = new Student();
Student student2 = new Student();
student.eat("狗娃");
student2.eat("狗剩");
}
}
其实两个方法内部调用变成了(这是内部表示形式,平时并不这样写,相当于隐含了一个this):Student.eat(student1, "狗娃");
Student.eat(student2, "狗娃");