编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

this关键字

在上例中使用变量表示年龄时,构造方法中使用的是name,成员变量使用的是name,这样的程序可读性很差。这时需要将一个类中表示年龄的变量进行统一的命名,例如都声明为name。但是这样做又会导致成员变量和局部变量的名称冲突,在方法中将无法访问成员变量name。为了解决这个问题,Java中提供了一个关键字this,用于在方法中访问对象的其他成员。接下来将为大家详细地讲解this关键字在程序中的三种常见用法,具体如下:

  • 通过this关键字可以明确地去访问一个类的成员变量,解决与局部变量名称冲突问题。具体示例代码如下:

class Person {
    int age;
    public Person(int age) {
        this.age = age;
    }
    public int getAge() {
        return this.age;
    }
}

在上面的代码中,构造方法的参数被定义为age,它是一个局部变量,在类中还定义了一个成员变量,名称也是age。在构造方法中如果使用“age”,则是访问局部变量,但如果使用“this.age”则是访问成员变量。

  • 通过this关键字调用成员方法,具体示例代码如下:

class Person {
    public void openMouth() {
        ︙
    }
    public void speak() {
        this.openMouth();
    }
}

在上面的speak()方法中,使用this关键字调用openMouth()方法。注意,此处的this关键字可以省略不写,也就是说上面的代码写成“this.openMouth()”和“openMouth()”,效果是完全一样的。

  • 构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用“this([参数1,参数2…])”的形式来调用其他的构造方法。

class Person {
    public Person() {
        System.out.println("无参的构造方法被调用了……");
    }
    public Person(String name) {
        this(); // 调用无参的构造方法
        System.out.println("有参的构造方法被调用了……");
    }
}
public class Test {
    public static void main(String[] args) {
        Person p = new Person("itcast"); // 实例化Person 对象
    }
}

运行结果:

无参的构造方法被调用了……

有参的构造方法被调用了……

代码在实例化Person对象时,调用了有参的构造方法,在该方法中通过this()调用了无参的构造方法,因此运行结果中显示两个构造方法都被调用了。在使用this调用类的构造方法时,应注意以下几点。

  1. 只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用。

  2. 在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次。

  3. 不能在一个类的两个构造方法中使用this互相调用,下面的写法编译会报错。


未经允许不得转载: 技术文章 » Java编程 » this关键字