Using Objects
创建对象后,您可能想将其用于某些用途。您可能需要使用其字段之一的值,更改其字段之一或调用其方法之一来执行操作。
引用对象的字段
对象字段按其名称访问。您必须使用明确的名称。
您可以在其自己的类中为字段使用简单的名称。例如,我们可以在Rectangle
类中添加一条语句,以打印width
和height
:
System.out.println("Width and height are: " + width + ", " + height);
在这种情况下,width
和height
是简单名称。
对象类之外的代码必须使用对象引用或表达式,然后使用点(.)运算符,再使用简单的字段名称,例如:
objectReference.fieldName
例如,CreateObjectDemo
类中的代码在Rectangle
类的代码之外。因此,要引用名为rectOne
的Rectangle
对象中的origin
,width
和height
字段,CreateObjectDemo
类必须分别使用名称rectOne\.origin
,rectOne\.width
和rectOne\.height
。程序使用以下两个名称来显示rectOne
的width
和height
:
System.out.println("Width of rectOne: " + rectOne.width);
System.out.println("Height of rectOne: " + rectOne.height);
try使用CreateObjectDemo
类中的代码中的简单名称width
和height
没有意义-这些字段仅存在于一个对象中-并导致编译器错误。
后来,该程序使用类似的代码来显示有关rectTwo
的信息。相同类型的对象具有相同实例字段的副本。因此,每个Rectangle
对象都具有名为origin
,width
和height
的字段。通过对象引用访问实例字段时,将引用该特定对象的字段。 CreateObjectDemo
程序中的两个对象rectOne
和rectTwo
具有不同的origin
,width
和height
字段。
要访问字段,可以像前面的示例一样使用对对象的命名引用,也可以使用任何返回对象引用的表达式。回想一下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);
第一条语句调用rectOne
的getArea()
方法并显示结果。第二行移动rectTwo
,因为move\(\)
方法将新值分配给对象的origin\.x
和origin\.y
。
与实例字段一样,* objectReference *必须是对对象的引用。您可以使用变量名,但是也可以使用任何返回对象引用的表达式。 new
运算符返回一个对象引用,因此您可以使用 new 返回的值来调用新对象的方法:
new Rectangle(100, 50).getArea()
表达式new Rectangle\(100, 50\)
返回引用Rectangle
对象的对象引用。如图所示,您可以使用点符号来调用新Rectangle
的getArea\(\)
方法来计算新矩形的面积。
某些方法(例如getArea\(\)
)返回值。对于返回值的方法,可以在表达式中使用方法调用。您可以将返回值分配给变量,使用它来决策或控制循环。此代码将getArea\(\)
返回的值分配给变量areaOfRectangle
:
int areaOfRectangle = new Rectangle(100, 50).getArea();
请记住,在特定对象上调用方法与向该对象发送消息相同。在这种情况下,调用getArea\(\)
的对象是构造函数返回的矩形。
垃圾收集器
某些面向对象的语言要求您跟踪创建的所有对象,并在不再需要它们时明确销毁它们。显式 管理 内存既乏味又容易出错。 Java 平台允许您创建任意数量的对象(当然,受系统处理能力的限制),而您不必担心销毁它们。 Java 运行时环境在确定不再使用对象时会删除它们。此过程称为垃圾收集。
当没有更多对象引用时,该对象可以进行垃圾回收。当变量超出范围时,通常会删除变量中包含的引用。或者,您可以通过将变量设置为特殊值null
来显式删除对象引用。请记住,一个程序可以对同一个对象有多个引用。在对象有资格进行垃圾回收之前,必须删除对对象的所有引用。
Java 运行时环境具有一个垃圾回收器,该垃圾回收器会定期释放不再引用的对象所使用的内存。垃圾收集器在确定时间合适时自动执行其工作。