2020-04-20

Java this关键字

this共有四种用法,分别是调用成员变量、调用成员方法、调用其他重载的构造器、表示当前对象。掌握this的用法十分重要,下面来详细介绍这四种用法。

  • 调用成员变量
    使用this调用成员变量发生在方法内部,当成员变量(类下声明的变量)的名字与局部变量(方法内声明的变量)的名字相同时,使用this.变量名来表示该变量代表的是成员变量。
    //声明成员变量
    private String name;
    //参数中的变量是方法中的局部变量
    public void setName(String name){
    //this.name表示的就是成员变量,name表示局部变量
    this.name = name;}

  • this调用成员方法
    使用this调用成员方法同样也发生在方法内部。通常情况下,我们在方法内部调用其他方法时,使用的方式是直接调用,即直接写方法名。其实,此时我们可以在要被调用的方法名前使用this关键字加“.”调用,这两种调用成员方法的方式是一样的,由于使用第二种方式没有多大的意义,所以一般情况下,我们选择直接调用的方式。
    public class ThisTest{
    public void method1(){
    System.out.println(“成员方法”);
    }
    public void method2(){
    //以下两种调用方法的方式效果一致
    method1();
    this.method1();
    }}

  • 调用其他重载的构造器
    使用this关键字调用其他重载的构造器是this关键字非常重要的用法之一,采用this调用其他构造方法需要将this语句写在构造器内的第一行,否则会报错。这种调用方式的优点在于一个构造器可以不必重复编写其他构造器中已有的代码,而是通过调用其他构造器实现代码复用,从而提供良好的类代码结构。public class ThisTest{
    //定义两个成员变量
    private String name;
    private int height;
    //无参构造器
    public ThisTest(){
    //使用this调用参数为String类型的构造器
    this(“Ben”);
    }
    //参数为String类型的构造器
    public ThisTest(String name){
    //使用this调用参数为String和int类型的构造器
    this(name,165);
    }
    //参数为String和int类型的构造器
    public ThisTest(String name, int height){
    //为两个属性赋值
    this.name = name;
    this.height = height;
    }}
    public class Test(){
    public static void main(String[] args){
    //创建对象
    new ThisTest(); }}
    创建对象时,构造器就会被调用,我们来看一下构造器的调用顺序:首先,创建对象时没有传入参数,所以先调用无参构造器,进入无参构造器后,执行this(“Ben”),然后进入参数为String类型的有参构造器,此时将”Ben”传给name,执this(name,165),最后进入参数为String和int类型的构造器,执行该构造器内的语句,即最终的name为”Ben”,最终的height为165。这种使用参数最多的构造器来初始化成员变量的方式在开发中很常用。

  • this表示当前对象
    public class This2Test{
    //定义一个属性
    public String name;
    //参数为String类型的构造器
    public This2Test(String name){
    this.name = name;
    }
    //定义一个参数为引用类型的方法
    public void method3(This2Test tt){
    //输出该对象的属性
    System.out.println(tt.name);
    }
    public void method4(){
    //调用方法并传入this
    method3(this);
    }}
    public class Test{
    public static void main(String[] args){
    //创建对象t
    This2Test t = new This2Test(“贝克”);
    //对象t调用方法
    t.method4();
    }}
    输出结果为:贝克。
    我们来分析一下运行程序是怎么运行的,传入的this代表的是什么呢?为什么输出的是贝克呢?首先看程序的入口main方法,先创建对象t,创建对象时,进入Test2This类调用它的有参构造器,此时name为传入的”贝克”,也就是说当前创建的这个对象t的name为”贝克”。然后,用对象t去调用method4()方法,该方法内部调用了method3()方法,并传入了this。因此,进入method3()方法,打印this的名字,这里的这个this代表的就是调用method4()方法的对象,即一开始的对象t。所以这里就体现了this的第四种用法————this表示当前对象。在这里,可以简单理解为:this在method4()方法中被调用,因此this指的就是调用method4()这个方法的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值