Java中提供了this关键字,this关键字总是指向调用该方法的对象。
根据this出现位置的不同,this作为对象的默认引用有两种情形:
a.构造器中引用该构造器正在初始化的对象
b.在方法中引用调用该方法的对象
this最大的作用就是让类中一个方法,访问该类的另一个方法或实例变量。
例如:
package ThisTest;
public class Dog {
public void jump(){
System.out.println("正在执行jump方法");
}
public void run(){
Dog d = new Dog();
d.jump();
System.out.println("正在执行run方法");
}
}
package ThisTest;;
public class DogTest {
public static void main(String[] args){
Dog dog=new Dog();
dog.run();
}
}
Dog类中run方法调用jump()方法一定要通过对象调用,因为jump方法并没有被static修饰,但不必在run()方法中重新定义一个Dog类,因为DogTest类中当程序调用run()方法时,一定会提供一个Dog对象,这样就可以直接使用这个已经存在的Dog对象,而无须创建新的Dog对象了。
因此通过this关键字就可以在run()方法中调用该方法的对象
即
public void run(){
this.jump();
System.out.println("正在执行run方法");
}
Java允许省略this前缀
即可以写为
public void run(){
jump();
System.out.println("正在执行run方法");
}
static修饰的方法中不能使用this引用
例如:
package ThisTest;
import javax.sound.midi.MidiDevice.Info;
public class StaticAcceessNonStatic {
public void info(){
System.out.println("info方法");
}
public static void main(String[] args){
info();//省略this
}
}
系统会提示Cannot make a static reference to the non-static method info()
需要重新创建一个对象才能完成调用
即new StaticAcceessNonStatic(). info();
当方法里局部变量与成员变量同名,但程序需要方法里访问这个被覆盖的成员变量,必须使用this关键字
例如:
package ThisTest;
public class Dog {
String name;
public Dog(String name) {
this.name=name;
}
}