# 使用对象

> 原文： [https://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html](https://docs.oracle.com/javase/tutorial/java/javaOO/usingobject.html)

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

## 引用对象的字段

对象字段按名称访问。您必须使用明确的名称。

您可以在其自己的类中为字段使用简单名称。例如，我们可以在中添加一个语句 _`Rectangle`类打印`width`和`height`：_

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

```

在这种情况下，`width`和`height`是简单的名称。

对象类之外的代码必须使用对象引用或表达式，后跟点（。）运算符，后跟简单字段名称，如下所示：

```
objectReference.fieldName

```

例如， `CreateObjectDemo` 类中的代码位于 `Rectangle` 类的代码之外。因此，要参考名为 `rectOne` 的 `Rectangle` 对象中的`原点`，`宽度`和`高度`字段， `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` 的信息。相同类型的对象具有自己的相同实例字段的副本。因此，每个`矩形`对象具有名为`起源`，`宽度`和`高度`的字段。通过对象引用访问实例字段时，将引用该特定对象的字段。 `CreateObjectDemo` 程序中的两个对象 `rectOne` 和 `rectTwo` 具有不同的`原点`，`宽度`和`高度`字段。

要访问字段，可以使用对象的命名引用（如前面的示例所示），也可以使用任何返回对象引用的表达式。回想一下 `new` 运算符返回对象的引用。因此，您可以使用 new 返回的值来访问新对象的字段：

```
int height = new Rectangle().height;

```

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

## 调用对象的方法

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

```
objectReference.methodName(argumentList);

```

要么：

```
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 运行时环境具有垃圾收集器，可以定期释放不再引用的对象使用的内存。垃圾收集器在确定时间正确时自动完成其工作。