Java 中 this 对象引用理解

在 Java 中理解了成员变量、方法和局部变量,可以想象出对象在其自己的方法中应该可以访问自己的成员变量,确实如此,下面的代码说明这个问题:

class Hello {

    public static void main(String args[]) {
        // 创建Person对象,然后调用其showAge方法
        new Person().showAge();
    }
}

class Person {
    int age = 23;
    String name = "Tom";

    void showAge()
    {
        System.out.println("My name is " + name + ", and my age is " + age + ".");
    }
}

演示的效果如下:

提示:如果某个对象只是被访问一次,可以直接在 new 操作后调用其方法或成员变量,而不用将 new 操作的返回值赋给一个引用。因为 new 操作的返回值就是所创建对象的引用,这与使用明确声明的引用来进行调用作用是一样的。

从上图中可以看出,程序编译、运行一切正常。这时,细心点,提出一个问题:如果成员变量与局部变量同名,调用时,是如何处理的?请考虑以下的代码:

class Hello {

    // 定义了成员变量i,初始值为500
    int i = 500;

    void showI() {
        // 定义了局部变量i,初始值为300
        int i = 300;
        System.out.println("The value of i is " + i + ".");
    }

    public static void main(String args[]) {
        new Hello().showI();

    }
}

 编译并运行如上代码,其结果如下所示:

从上面的图中可以看出,打印的是局部变量 i 的值。也就是说,在当局部变量与成员变量同名时,系统将访问局部变量。在这种情况下,如果要访问成员变量,就可以使用预定义对象引用 this。this 可以在任何一个方法中使用,表示指向对象自己的引用。

将上图中的第 9 行代码修改为:

System.out.println("The value of i is " + this.i + ".");

再次编译并运行如上代码,其结果如下: