特点:this代表其所在函数所属对象的引用。
1.在方法中调用引用该方法的对象
this可以代表任何对象,当this出现在某个方法体时,它所代表的对象是不确定的,但它的类型是确定的,只能是当前类。只有当这个方法被调用时,它所代表的对象才能确定下来,谁在调用这个方法,this就代表谁。
public class Dog {
//定义一个jump方法
public void jump(){
System.out.println("正在执行jump方法");
}
//定义一个run方法,run方法需要借助jump方法
public void run(){
//使用this引用调用this方法的对象
this.jump();
System.out.println("正在执行run方法");
}
}
public class DogTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建Dog对象,并将其赋值给dog引用变量
Dog dog = new Dog();
//调用Dog对象的run方法
dog.run();
}
}
结果如下:
正在执行jump方法
正在执行run方法
解释:
首先是创建了Dog对象(实例),并把它赋值给dog变量,语句dog.run()调用run方法后,this就代表这个Dog对象(实例)。
大部分时候,一个方法访问该类中定义的其他方法、Field时加不加this前缀的效果是完全一样的。但是对于static修饰的方法而言,则可以使用类调用该方法,如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰的方法中不能使用this引用,因而static修饰的方法不能访问不使用static修饰的普通成员,因此Java语法规定:静态成员不能直接访问非静态成员。
2.构造器中引用该构造器正在初始化的对象
public class ThisInConstructor {
public int foo;
public ThisInConstructor(){
//在构造器中定义一个foo变量
int foo = 0;
//使用this代表此构造器进行初始化的对象
//下面的代码将会把刚创建对象的foo Field设置为6
this.foo = 6;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 所有使用ThisInconstructor创建的对象的foo Field都将被设为6,
* 所以下面代码将输出6
*/
System.out.println(new ThisInConstructor().foo);
}
}
将输出结果如下:
3.使用this作为方法的返回值可以让代码更加简洁,但可能造成实际意义的模糊。
public class ReturnThis {
public int age;
public ReturnThis grow(){
age++;
//renturn this,返回调用该方法的对象
return this;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ReturnThis rt = new ReturnThis();
//可以连续调用同一方法
rt.grow()
.grow()
.grow();
System.out.println("rt的age Filed值是:" + rt.age);
}
}
将输出如下结果: