this的作用
this的作用1——当成引用使用,其类型变化,(看出在那个类型中)指向对象变化(看通过那个对象调用方法)
this的作用2——用在构造方法中,调用其他构造方法
this的类型取决于出现在那个类型中。
在没有歧义的情况下,使用“大名/小名”都可以,但在有歧义的情况下,必须使用this
this引用
为什么有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引用是调用成员方法的对象
this引用的特性:
- this引用的类型:对应类类型引用,即那个对象调用就是那个对象的引用类型
- this引用只能在"成员方法中使用"
- this引用具有final属性,在一个成员方法中,不能再去引用其他的对象
- this引用是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将
调用成员方法对象的引用传递给该成员方法,this引用负责来接收 - 在成员函数中,所有成员变量的访问,都会被编译器修改成通过this来访问
this
通过this调用属性
例如:
public MyDate(int year,int mon,int day) {
this.year = Date.year;
this.mon = Date.mon;
this.day = Date.day;
}
通过this调用类中的方法
在类中,可以通过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);
}
}
通过this调用自身的构造方法
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);
}
评论(0)