Using 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);

try使用CreateObjectDemo类中的代码中的简单名称widthheight没有意义-这些字段仅存在于一个对象中-并导致编译器错误。

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

要访问字段,可以像前面的示例一样使用对对象的命名引用,也可以使用任何返回对象引用的表达式。回想一下new运算符返回对对象的引用。因此,您可以使用从 new 返回的值来访问新对象的字段:

int height = new Rectangle().height;

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

调用对象的方法

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

objectReference.methodName(argumentList);

or:

objectReference.methodName();

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

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

第一条语句调用rectOnegetArea()方法并显示结果。第二行移动rectTwo,因为move\(\)方法将新值分配给对象的origin\.xorigin\.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 运行时环境在确定不再使用对象时会删除它们。此过程称为垃圾收集

当没有更多对象引用时,该对象可以进行垃圾回收。当变量超出范围时,通常会删除变量中包含的引用。或者,您可以通过将变量设置为特殊值null来显式删除对象引用。请记住,一个程序可以对同一个对象有多个引用。在对象有资格进行垃圾回收之前,必须删除对对象的所有引用。

Java 运行时环境具有一个垃圾回收器,该垃圾回收器会定期释放不再引用的对象所使用的内存。垃圾收集器在确定时间合适时自动执行其工作。