Java this的用法(新手必看)
在 Java 程序中,this 关键字用于表示本类当前的对象,当前对象不是某个 new 出来的实体对象,而是当前正在编辑的类。this 关键字只能用于本类中。
例如,下面定义了一个图书类:
在 Java 语言中,规定使用 this 关键字来代表本类对象的引用,this 关键字被隐式地用于引用对象的成员变量和方法,如在上述代码中,this.name 指的就是 Book 类中的 name 成员变量,而
在这里读者明白了 this 可以调用成员变量和成员方法,但 Java 语言中最常规的调用方式是使用“对象.成员变量”或“对象.成员方法”进行调用。既然 this 关键字和对象都可以调用成员变量和成员方法,那么 this 关键字与对象之间具有怎样的关系呢?
事实上,this 引用的就是本类的一个对象。在局部变量或方法参数覆盖了成员变量时,如上面代码的情况,就要添加 this 关键字明确引用的是类成员还是局部变量或方法参数。
如果省略 this 关键字并将其直接写成
其实,this 除了可以调用成员变量或成员方法,还可以作为方法的返回值。例如,返回图书类本类的对象,可以写成下面这种形式:
例如,下面定义了一个图书类:
public class Book { // 类 private String name; // String 类型的成员变量 public String getName() { // name 的 Getter 方法 return name; } public void setName(String name) { // name 的 Setter 方法 this.name = name; // 将参数值赋予类中的成员变量 } }重点观察 setName() 方法,成员变量与 setName() 方法中的形式参数的名称相同,都为 name,那么该如何在类中区分使用的是哪一个变量呢?
在 Java 语言中,规定使用 this 关键字来代表本类对象的引用,this 关键字被隐式地用于引用对象的成员变量和方法,如在上述代码中,this.name 指的就是 Book 类中的 name 成员变量,而
this.name = name
语句中的第二个 name 则指的是形参 name。实质上,setName()方法实现的功能就是将形参name的值赋予成员变量name。在这里读者明白了 this 可以调用成员变量和成员方法,但 Java 语言中最常规的调用方式是使用“对象.成员变量”或“对象.成员方法”进行调用。既然 this 关键字和对象都可以调用成员变量和成员方法,那么 this 关键字与对象之间具有怎样的关系呢?
事实上,this 引用的就是本类的一个对象。在局部变量或方法参数覆盖了成员变量时,如上面代码的情况,就要添加 this 关键字明确引用的是类成员还是局部变量或方法参数。
如果省略 this 关键字并将其直接写成
name = name
,那么这只是把参数 name 赋值给参数变量本身而已,成员变量 name 的值没有改变,因为参数 name 在方法的作用域中覆盖了成员变量 name。其实,this 除了可以调用成员变量或成员方法,还可以作为方法的返回值。例如,返回图书类本类的对象,可以写成下面这种形式:
public Book getName() { return this; // 返回 Book 类的本类对象 }在 getBook() 方法中,因为返回值为 Book 类,所以方法体中使用 return this 这种形式返回 Book 类对象。