看如下代码
public class Date {
public int year;
public int month;
public int day;
public void setDate(int y, int m, int d) {
year = y;
month = m;
day = d;
}
public void printDate(){
System.out.println(year + "年" + month + "月" + day + "日");
}
public static void main(String[] args){
Date date = new Date();
date.setDate(2022,2,2);
date.printDate();
Date date2 = new Date();
date2.setDate(2023,3,3);
date2.printDate();
Date date3 = new Date();
date3.setDate(2024,4,4);
date3.printDate();
}
}
要解决上述问题,就需加 this 关键字 ,如下:
this代表当前对象的引用,哪个对象的引用调用了该方法,this就代表哪个对象
回到一开始的代码,其实在setDate方法中,有一个隐藏的参数,就是this,如下:
标准定义是:this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收
在打印方法printDate中,也是如此
this可以省略不写,但是为了防止发生一些不必要的错误,建议养成写上的习惯
注意事项:
this 只能在 成员方法 中使用
在 成员方法 中,this只能引用当前对象,不能再引用其他对象
this 不能在静态方法中使用
this 的三种用法
- 可以通过this访问当前对象的成员变量
- 可以通过this访问当前对象的非静态成员方法
- 可以通过this访问当前对象的其他构造方法(什么是构造方法请参考:Java构造方法详解)