this关键字总是指向调用该方法的对象。
this关键字不能出现在static修饰的方法中,因为由static修饰的方法属于类本身,而this指代的是一个实例。
1、让类中的一个方法,访问该类中的另一个方法或实例变量
class Dog{
//定义一个类变量
int age;
//方法一
public void jump() {
System.out.println("狗会跳");
}
//方法二
public void run() {
this.jump(); //在方法二中访问方法一
this.age=5; //访问该类的一个变量
System.out.println("狗会跑"+",狗的年龄是:"+this.age);
}
}
public class DogTest {
public static void main(String[] args) {
Dog dog=new Dog();
dog.run();
}
}
上述程序中,也可将所有的this都去掉,因为java允许一个成员直接调用另一个成员。但是省略了this只是一个假象,在java的调用过程中,即使省略了主调,但是实际的主调依然存在。例如:如果调用static修饰的成员(变量、方法)时省略了主调,默认是该类为主调;如果调用非static修饰的成员(变量、方法)时省略了主调,默认是this为主调;
2、当成员变量和局部变量重名时,在方法中使用this来表示该方法所在类中的成员变量。
如果一个方法里有个局部变量与成员变量同名,但程序又需要在该方法中访问这个被覆盖的成员变量,那么必须使用this前缀。(成员变量是指在类里定义的变量,局部变量是指在方法中定义的变量)
class Dog{
int age; //成员变量
public void grow() {
int age=5; //方法内的局部变量
this.age=8; //表示该对象的成员变量
}
}
public class DogTest {
public static void main(String[] args) {
Dog dog=new Dog();
dog.grow(); //执行grow()方法,将dog对象的age改为8
System.out.println(dog.age); //输出8
}
}
当类变量与局部变量重名时,要访问类变量,则使用 类名.变量名
3、返回当前的实例
适用于对同一个对象进行多次重复操作的场景
class Dog{
int age;
public Dog grow() {
age++;
return this; //此处返回一个Dog实例
}
}
public class DogTest {
public static void main(String[] args) {
Dog dog=new Dog();
dog.grow() //dog实例调用的grow()
.grow() //this返回的实例调用grow()
.grow(); //this返回的实例调用grow()
System.out.println(dog.age); //输出3
}
}
4、构造器重载
当一个构造器B完全包含构造器A时,可以在B中使用this关键字来调用构造器A
class Person{
int age;
char sex;
String name;
//两参构造器
public Person(int age,char sex){
this.age=age;
this.sex=sex;
}
//三形参的构造器
public Person(int age,char sex,String name) {
this(age, sex); //通过this调用两参构造器
this.name=name;
}
public void info() {
System.out.println("我的名字是:"+name+",我的年龄是:"+age+",我的性别是:"+sex);
}
}
public class t {
public static void main(String[] args) {
Person le=new Person(25,'女',"陈孝");
le.info();
}
}