第一种情况是引用实例变量,当方法中的参数与某个实例变量有相同的名字时,这时局部变量(参数)优先,实例变量被隐藏。然而有时为了能够在方法中引用实例变量,就可以使用this区分,由this引用的就是实例变量,没有this引用的就是方法中的局部变量或参数
- 一是方法中的变量与属性重名时
- 二是在一个构造方法中,调用其它重载的构造方法
- 三是返回当前对象的引用
class Employee { String name; int age; double salary; Employee(String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } }
第二种情况是引用当前类的重载构造方法,构造方法的this指向同一个类中不同参数列表的另外一个构造方法
public class Dog { String name; int age; int id; /* * 方法中的变量与属性重名 */ public Dog(String name) { id++; this.name = name; } public Dog() { } /* * 在一个构造方法中,调用其他重载的构造方法 */ public Dog(String name, int age) { this(name); //通过this( )调用了重载构造方法 this.age = age; } /* * 把this作为一个局部变量,它的值是当前对象的引用 */ public Dog clone() { id++; return this; } public void print() { System.out.println("it is " + name + " number " + id); } public static void main(String args[]) { Dog wangcai = new Dog("Cai Wang"); Dog wangwang = new Dog("Wang Wang"); wangcai.print(); wangwang.print(); Dog wangcai1 = wangcai.clone(); //this引用的wangwang对象,同一个id属性 wangcai1.print(); wangwang.clone().clone().print(); //this引用的wangwang对象,同一个id属性 } }
在上面的代码中,有3个不同参数列表的构造方法。第一个构造方法,给类的成员name赋值,第三个构造方法,调用第一个构造方法。
提示: 在构造方法中,如果要使用关键字this,那么必须放在第一行,否则会导致一个编译错误
链式调用
在返回当前对象引用的方法中,this
关键字使得链式调用成为可能。链式调用允许你将多个方法调用连接在一起,从而提高代码的可读性和简洁性。
public class Person {
private String name;
public Person setName(String name) {
this.name = name;
return this; // 返回当前对象引用
}
// 假设还有其他类似的方法
public static void main(String[] args) {
Person person = new Person().setName("John").// 假设还有其他链式调用
// 后续链式调用...
;
}
}
注意事项
this
关键字不能用于静态上下文中,因为静态成员(静态变量和静态方法)属于类本身,而不属于类的任何特定实例