this关键字

举报
王小贰 发表于 2021/01/28 17:24:27 2021/01/28
【摘要】 this的作用this的作用1——当成引用使用,其类型变化,(看出在那个类型中)指向对象变化(看通过那个对象调用方法)this的作用2——用在构造方法中,调用其他构造方法this的类型取决于出现在那个类型中。在没有歧义的情况下,使用“大名/小名”都可以,但在有歧义的情况下,必须使用thisthis引用为什么有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);
    }


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。