首先要理解this我们需要先提出一个问题?
public class Data {
public int year;
public int month;
public int day;
public void setData(int year,int month,int day){
year=year;
month=month;
day=day;
}
public void pData(){
System.out.println("year: "+year+" month:"+month+" day:"+day);
}
public static void main(String[] args) {
Data d1=new Data();
d1.setData(2022,2,2);
d1.pData();
}
}
这个代码会如何输出呢?仔细一看这个setData函数的参数和定义的全局变量相同了,那么我们要知道以恶搞优先规则:局部变量优先!所以前面的year是局部变量,后面的是全局变量。所以我们并没有给全局year等赋值,所以它们还是它们的初始值0.所以打印出来的全都是0。
那么我们如何来避免这种情况呢?this引用!
什么是this引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有操作对用户都是透明的不需要用户自己操作,编译器自动完成。
简单来说,就是this操作是无处不在的。
所以我们可以将我们的代码进行一下修改:
/**
* Created with IntelliJ IDEA.
* Description:
* User: ilook
* Date: 2023-03-07
* Time: 20:40
*/
public class Data {
public int year;
public int month;
public int day;
public void setData(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public void pData(){
System.out.println("year: "+this.year+" month:"+this.month+" day:"+this.day);
}
public static void main(String[] args) {
Data d1=new Data();
d1.setData(2022,2,2);
d1.pData();
}
}
注意:this引用的是调用成员方法的对象!
如何来理解呢?d1就是调用了成员方法,而d1的对象就是public int year等!
Data d1=new Data();
d1.setData(2022,2,2);
d1.pData();
this引用的特性
this的类型:哪个对象调用就是哪个对象的引用类型。
this只能在成员方法中使用
在成员方法中,this只能引用当前对象,不能引用其他对象
4.this是“成员方法”中第一个隐藏参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给成员方法,this负责来接受
代码演示: