this关键字

目录

  • this的作用
  • this引用
    • 为什么有this
    • 什么是this引用
    • this引用的特性:
  • this
    • 通过this调用属性
    • 通过this调用类中的方法
    • 通过this调用自身的构造方法

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引用的特性:

  1. this引用的类型:对应类类型引用,即那个对象调用就是那个对象的引用类型
  2. this引用只能在"成员方法中使用"
  3. this引用具有final属性,在一个成员方法中,不能再去引用其他的对象
  4. this引用是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将
    调用成员方法对象的引用传递给该成员方法,this引用负责来接收
  5. 在成员函数中,所有成员变量的访问,都会被编译器修改成通过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);
    }

你可能感兴趣的:(JavaSE,java,类,this)