this的作用1——当成引用使用,其类型变化,(看出在那个类型中)指向对象变化(看通过那个对象调用方法)
this的作用2——用在构造方法中,调用其他构造方法
this的类型取决于出现在那个类型中。
在没有歧义的情况下,使用“大名/小名”都可以,但在有歧义的情况下,必须使用this
当我们创建了一个类,类的实例化后,给类的成员方法和属性进行设置的时候,如果形参名与成员变量名相同,那么到底是给谁赋值呢?会不会产生歧义呢?
这个时候,我们就需要用到this
java编译器给每个“成员方法“增加了一个隐藏的引用类型参数,让该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
public class Date{
public int year;
public int mon;
public int day;
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
}
public static void main(String[] args) {
Date d = new Date();
d.setDay(2020,9,15);
d.printDate();
}
注意:
当使用无歧义的时候,也可以不加this
this引用是调用成员方法的对象
例如:
public MyDate(int year,int mon,int day) {
this.year = Date.year;
this.mon = Date.mon;
this.day = Date.day;
}
在类中,可以通过this调用类中的方法,可以嵌套调用;
例如:
public class MyDate {
private int year;
private int mon;
private int day;
public MyDate(int year, int mon, int day) {
this.year = year;
this.mon = mon;
this.day = day;
}
public void method1(){
System.out.println("今天是:")
}
public void method2(){
this.method1;
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
}
public class MyDate {
private int year;
private int mon;
private int day;
public MyDate() {
this.year = year;
this.mon = mon;
this.day = day;
}
public MyDate(int year, int mon, int day) {
this.year = year;
this.mon = mon;
this.day = day;
}
public void method(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
}
public class Main{
public static void main(String[] args) {
MyDate n = new MyDate();//调用不带参数的构造函数
n.method();
}
}
注意:
场景:需要在一个构造方法当中,调用当前类的另外一个构造方法的时候,通过this()的形式调用。
必须放在第一行,且只能调用一个
例如:
public MyDate() {
this.year = year;
this.mon = mon;
this.day = day;
}
也可以写成:
public MyDate() {
this(yeer,mon,day);
}