浅谈this关键字的三种常用用法:

来源:互联网 发布:mc9s12xs128单片机实验 编辑:程序博客网 时间:2024/06/06 00:06

1.区分成员变量与局部变量

当方法中的局部变量与成员变量同名时,成员变量在该方法中会被屏蔽,此时可以通过“this.成员变量名” 指明成员变量,使之与局部变量区分开:

public class Demo {    private int year;    private int month;    private int day;    public Demo(int year,int month,int day){        this.month=month;//使用this.month指明前面是成员变量,后面是形参        this.day=day;        this.year=year;    }    public static void main(String[] args) {        Demo d=new Demo(2017,11,20);        System.out.println(d.year+"年"+d.month+"月"+d.day+"日");    }}

2.通过this调用构造方法

用法:tihs(参数列表)
该用法主要用于当对象需要带不同参数的构造方法应对不同情景而进行构造方法的重载时,减少重复代码。(注意:该用法仅能用于构造方法中,其他地方不能这样用。)
例如下面这种情况:

public class Demo {    private int year;    private int month;    private int day;    public Demo(int month,int day) {        this.month=month;        this.day=day;    }    public Demo(int year,int month,int day){        this(month, day);        this.year=year;    }    public static void main(String[] args) {        Demo d=new Demo(2017,11,20);        System.out.println(d.year+"年"+d.month+"月"+d.day+"日");    }}

此时第一种构造方法里面已经有对month和day属性的初始化,所以在第二种构造方法中就可以直接调用,避免重复代码;而不是下面这样:

public class Demo {    private int year;    private int month;    private int day;    public Demo(int month,int day) {        this.month=month;        this.day=day;    }    public Demo(int year,int month,int day){        this.month=month;        this.day=day;        this.year=year;    }    public static void main(String[] args) {        Demo d=new Demo(2017,11,20);        System.out.println(d.year+"年"+d.month+"月"+d.day+"日");    }}

3.在方法中需要引用该方法所属类的当前对象时,直接用this

下例中:在show()方法中,通过“this.year”引用当前类对象d的成员变量year。

public class Demo {    private int year;    private int month;    private int day;    public Demo(int year, int month, int day) {        this.month = month;        this.day = day;        this.year = year;    }    public void show() {        System.out.println(this.year + "年" + this.month + "月" + this.day + "日");    }    public static void main(String[] args) {        Demo d = new Demo(2017, 11, 20);        d.show();    }}