在 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 + ".");
再次编译并运行如上代码,其结果如下: