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