Java - this关键字

1.为什么需要this关键字?

在定义类时,可能存在以下几种情况:

  • 成员方法的形式参数名与成员变量同名;
  • 构造方法的形式参数与成员变量同名;
  • 成员方法中的局部变量与成员变量同名。

这不仅给阅读程序带来混淆,还可能使程序隐含错误。

例如:
原本目的:左边为成员变量,右边为形参(局部变量)。

class Person{ //定义类,类名为Person
      private String name; //声明成员变量
      private int age; //声明成员变量
      Person(String name, int age) { //构造定义方法
           name = name; //两个name都是局部变量
           age = age; //两个age都是局部变量
      }
}

在局部变量与成员变量同名的情况下,首先引用的是局部变量,因为Java系统按照就近原则取得变量信息,而局部变量比成员变量更加“靠近Java系统”。故按上图中"name = name ","age = age"该种形式等号两边的name和age均为形参(局部变量)。

由此可见其不仅仅给阅读程序带来混淆,且未达到初始化成员变量的目标。

这时,Java语言提出this关键字,轻松解决局部变量和成员变量同名问题。

2.this关键字的含义

this关键字是隐式参数,表示当前对象的引用。

在创建一个对象后,Java虚拟机就为该对象分配一个自身的引用this。从指针的角度来说,this就是本身对象的一个引用。

在堆内存中,除了为name和age分配空间,还有一个隐式的空间this,保存了xm对象的引用(地址)

Person xm = new Person("小明", 18);

在这里插入图片描述
从上图可见,this的内容和xm对象的内容是相同的,都是堆内存的首地址。可以通过this关键字引用当前对象的成员变量、成员方法和构造方法。

3.this引用成员变量

在以后的程序中,不管局部变量与成员变量是否同名,在引用成员变量时均采用this关键字

【引用语法格式】 this.成员变量名

class Person{ //定义类,类名为Person
      private String name;
      private int age;
      public Person(String name, int age) {
          this.name; //this引用成员变量name
          this.age; //this引用成员变量age
      }
      void setName(String name) {
          this.name = name; //this引用成员变量name
      }
      String getName() {
          return this.name; //this引用成员变量name
      }
  }

4.this调用构造方法

类体中的成员方法可以互相调用,采用this关键字可以实现构造方法的互相调用。

  • this 调用构造方法的语法格式: this(参数列表);//该语句必须是构造方法的第一条有效语句。
class Person {//定义一个类,类名为Person
    private String name;//私有化成员变量
    private int age;
    Person(String name) {//构造方法1
        this.name = name;
    }
    Person(String name, int age) {//构造方法2
        this(name);//构造方法第一条有效语句
        this.age = age;
    }
}

5.this调用成员方法

this关键字除了引用成员变量和构造方法外,还可以引用成员方法。

  • this 调用成员方法的语法格式:this.成员方法名(参数列表);//表示该方法是当前对象的成员方法。
public class Person{//定义一个类,类名为Person
    private void show() { }//私有化成员方法
    public void display() {
        this.show();//调用成员方法
    }
}

6.this与对象名的关系

对象名是栈内存存储单元名,保存了堆内存的首地址;
this关键字隐式保存了当前对象的引用(地址)。
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值