大家经常会在JavaBean的setXXX()方法中看到this关键字的使用,但有时会对this关键字代表的含义不清楚。
class Banana {
void peel(int i) {/*...*/}
}
public class BananaPeel {
public static void main(String[] args) {
Banana a = new Banana(),
b = new Banana();
a.peel(1);
a.peel(2);
}
}
如何知道peel()方法是被a调用还是被b调用呢?
Java编译器做了一些幕后工作,将“所操作对象的引用”作为第一个参数传递给peel()方法:
//a.peel(1);
Banana.peel(a, 1);
//a.peel(2);
Banana.peel(b, 2);
这是内部的表示形式,this关键字表示的正是“调用方法的那个对象”的引用。this的用法和其他对象引用并无不同。
this的用法
-
引用成员变量
更清晰的表达将形参传递给类的成员变量
public class Person { String name; public void setName(String name) { this.name = name; } }
-
调用类的构造方法
public class Person { public Person(String name) {/*...*/} void f(String name) { //调用本类的构造方法 this(name); } }
-
返回当前对象的引用
public class Leaf { Leaf increment() { //返回当前对象的引用 return this; } }
-
将当前对象传递给其他方法
class Peeler { static Apple peel(Apple apple) { return apple; } } class Apple { Apple getPeeled() { //将当前对象传递给其他方法 return Peeler.peel(this); } }