Java提供了一个关键字this,this总是指向调用该方法的对象。this关键字最大的作用是让类中一个方法访问该类中的另一个方法或Field。例如定义一个Dog类,这个Dog对象的run方法需要调用它的jump方法。
public class Dog
{
//定义一个jump方法
public void jump()
{
System.out.println("执行jump方法");
}
//定义一个run方法,run方法需要借助jump方法
public void run()
{
Dog d = new Dog();
d.jump();
System.out.println("执行run方法")
}
}
public class DogTest
{
public static void main (String[] args)
{
//创建Dog对象
Dog dog = new Dog();
//调用Dog对象的run方法
dog.run();
}
}
这个程序中一共产生了两个Dog对象。在Dog类的run方法中,程序创建一个Dog对象,并使用别名d的引用变量来指向Dog对象;在DogTest的main方法中,程序再次创建了一个Dog对象,并使用别名dog的引用变量来指向该Dog对象。
这里有个问题,在run方法中调用jump方法时是否一定要创建一个新的Dog对象?答案是否定的,因为当程序调用run方法时,一定会提供一个Dog对象,这样就可以直接使用这个已经存在的Dog对象,而没必要重新创建新的Do对象。
为此,我们就可以使用this关键字在run方法中调用jump方法。
public class Dog
{
//定义一个jump方法
public void jump()
{
System.out.println("执行jump方法");
}
//定义一个run方法,run方法需要借助jump方法
public void run()
{
//使用this引用调用run()方法的对象
this.jump();
System.out.println("执行run方法")
}
}
上面的方法定义Dog类更符合实际意义。从前一种Dog类定义看,在Dog对象的run方法内重新创建了一个新的Dog对象,并调用它的jump方法,这意味着一个Dog对象的run方法需要依赖另一个Dog对象的jump方法,这不符合逻辑。上面的代码更符合实际情形:当一个Dog对象调用run方法时,run方法需要依赖它自己的jump方法。