文档

Java™ 教程-Java Tutorials 中文版
使用对象
Trail: Learning the Java Language
Lesson: Classes and Objects
Section: Objects

使用对象

一旦你创建了一个对象,你可能想用它来做一些事情。你可能需要使用其中一个字段的值,更改其中一个字段,或者调用其中一个方法来执行操作。

引用对象的字段

对象字段通过其名称进行访问。你必须使用明确的名称。

在字段自己的类中,可以使用其简单名称。例如,我们可以在 Rectangle添加语句打印 widthheight

System.out.println("Width and height are: " + width + ", " + height);

在这种情况下,widthheight 是简单名称。

代码在对象的类之外必须使用对象引用或表达式,后面跟着点(.)运算符,后跟一个简单字段名称,如下所示:

objectReference.fieldName

例如,CreateObjectDemo 类中的代码在 Rectangle 类的代码之外。所以,要引用名为 rectOneRectangle 对象中的 originwidthheight 字段,CreateObjectDemo 类必须分别使用名称 rectOne.originrectOne.widthrectOne.height。该程序使用其中的两个名称来显示 rectOnewidthheight

System.out.println("Width of rectOne: "  + rectOne.width);
System.out.println("Height of rectOne: " + rectOne.height);

尝试从 CreateObjectDemo 类中的代码中使用简单名称 widthheight 是没有意义的 — 这些字段只存在于一个对象内 — 并导致编译器错误。

稍后,该程序使用类似的代码来显示有关 rectTwo 的信息。相同类型的对象具有自己的相同实例字段的副本。因此,每个 Rectangle 对象都具有名为 originwidthheight 的字段。当你通过对象引用访问实例字段时,你引用该特定对象的字段。CreateObjectDemo 程序中的两个对象 rectOnerectTwo 具有不同的originwidth ,和 height 字段。

要访问一个字段,可以像前面的例子那样使用对象的命名引用,或者使用任何返回对象引用的表达式。回想一下,new 操作符返回一个对象的引用。所以你可以使用从 new 返回的值来访问新对象的字段:

int height = new Rectangle().height;

该语句创建一个新的 Rectangle 对象并立即获取其高度。实质上,该语句计算 Rectangle 的默认高度。请注意,执行此语句后,程序不再引用创建的 Rectangle,因为程序从未将引用存储在任何地方。该对象未被引用,其资源可以被 Java 虚拟机自由回收。

调用对象的方法

你还可以使用对象引用来调用对象的方法。你可以将方法的简单名称附加到对象引用后,使用插入的点运算符(.)。此外,你可以在括号内提供该方法的任何参数。如果该方法不需要任何参数,请使用空括号。

objectReference.methodName(argumentList);

或:

objectReference.methodName();

Rectangle 类有两个方法:getArea() 来计算矩形区域,move() 来更改矩形的原点。以下是调用这两种方法的 CreateObjectDemo 代码:

System.out.println("Area of rectOne: " + rectOne.getArea());
...
rectTwo.move(40, 72);

第一条语句调用 rectOnegetArea() 方法并显示结果。第二行移动 rectTwo,因为 move() 方法为对象的 origin.x origin.y 赋新的值。

与实例字段一样,objectReference 必须是对象的引用。你可以使用变量名称,但也可以使用任何返回对象引用的表达式。new 运算符返回一个对象引用,因此你可以使用 new 返回的值来调用新对象的方法:

new Rectangle(100, 50).getArea()

表达式 new Rectangle(100, 50) 返回引用 Rectangle 对象的对象引用。如图所示,你可以使用点符号来调用新的 RectanglegetArea() 方法来计算新矩形的面积。

某些方法(如 getArea())会返回一个值。对于返回一个值的方法,可以在表达式中使用方法调用。你可以将返回值分配给一个变量,用它来做出决策或控制一个循环。此代码将由 getArea() 返回的值分配给变量 areaOfRectangle

int areaOfRectangle = new Rectangle(100, 50).getArea();

请记住,在特定对象上调用方法与向该对象发送消息相同。在这种情况下,getArea() 被调用的对象是构造函数返回的矩形。

垃圾回收器

一些面向对象的语言要求你跟踪你创建的所有对象,并且在不再需要时明确地销毁它们。显式管理内存是单调乏味且容易出错的。Java 平台允许你根据需要创建任意数量的对象(当然,受限于你的系统可以处理的内容),而且你不必担心去销毁它们。Java 运行时环境在确定它们不再被使用时会删除对象。这个过程被称为 garbage collection (垃圾回收)

当没有对该对象的更多引用时,对象可以被垃圾回收。当变量超出范围时,保存在变量中的引用通常会被删除。或者,你可以通过将变量设置为特殊值 null 来显式删除对象引用。请记住,一个程序可以有多个对同一个对象的引用;在对象符合垃圾回收条件之前,必须删除对对象的所有引用。

Java 运行时环境有一个垃圾回收器,它周期性地释放不再被引用的对象所使用的内存。垃圾回收器在其确定时间正确时自动执行其作业。


Previous page: Creating Objects
Next page: More on Classes