4.8 关键字this
关键字this 表示某个对象。关键字this 可以出现在实例方法和构造方法中,但不可以出现在类方法中。当局部变量和成员变量的名字相同时,成员变量会被隐藏,这时,如果想要在成员方法中使用成员变量,则必须使用关键字this。
其语法格式如下:
【例4.7】 创建一个类文件,在该类中定义setName() 方法,并将方法的参数值赋予类中的成员变量,具体代码如下:
在上述代码中可以看到,成员变量与在setName() 方法中的形参的名称相同,都为name,那么应该如何在类中区分使用的是哪一个变量呢?在Java 中规定使用关键字this来代表本类对象的引用,关键字this 被隐式地用于引用对象的成员变量和成员方法中,例如,在上述代码中,this.name 指的是A 类中的成员变量name,而this.name=name 语句中的第二个name 则指的是形参name。实质上,setName() 方法实现的功能是将形参name 的值赋予成员变量name。
在这里相信读者已经明白了使用关键字this 可以调用成员变量和成员方法,但Java中最常规的调用方式是使用 “对象.成员变量” 或 “对象.成员方法” 进行调用(关于使用对象调用成员变量和方法的问题,将在后续章节中进行讲述)。
既然关键字this 和对象都可以调用成员变量和成员方法,那么关键字this 与对象之间具有怎样的关系呢?
事实上,关键字this 引用的是本类的一个对象,在局部变量或方法参数覆盖成员变量时,如上面代码的情况,就需要添加关键字this 来明确引用的是类成员还是局部变量或方法参数。
如果省略关键字this 直接写成name=name,则只是把参数name 赋值给参数变量本身,成员变量name 的值并没有改变,这是因为参数name 在方法的作用域中覆盖了成员变量name。
其实,关键字this 除了可以调用成员变量或成员方法,还可以作为方法的返回值。例如,在项目中创建一个类文件,在该类中定义Book 类的方法,并通过关键字this 返回,具体代码如下:
在getBook() 方法中,方法的返回值为Book 类,因此,在方法体中使用return this 这种形式将Book 类的对象返回。
【例4.8】 在Fruit 类中定义一个成员变量color,并且在该类的成员方法中定义一个局部变量color,这时如果想在成员方法中使用成员变量color,则需要使用关键字this,具体代码如下:
程序运行结果如图4.13 所示。
图4.13 关键字this 调用成员变量的运行结果