这篇Java教程基于JDK1.8。教程中的示例和实践不会使用未来发行版中的优化建议。
使用对象
一旦创建完对象,接下来就是要使用对象。你可能想要使用该对象的某一个字段的值,改变某一个字段的值,或者调用其方法完成某一个动作。
引用对象实例字段
对象字段是通过名称来访问的,必须使用一个无歧义的名称。
你可以为类的字段使用一个简单的名字。例如:我们可以在Rectangle 类中添加一行语句用来打印width和height变量:
System.out.println("Width and Height are : " + width +"," + height);
在本例中,width和height就是简单的名字。
类外面的代码想要使用对象必须通过dot (.)操作符,加上简单变量名,如下所示:
ObjectReference.fieldName
CreateObjectDemo 类中的代码在Rectangle 类的外面,所以为了使用类型为Rectangle的rectOne对象中的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);
尝试在CreateObjectDemo类中使用width和height变量没有任何意义,这些变量存在于对象中,这样会导致编译错误。
稍后,程序使用类似的代码来显示rectTwo的相关信息。相同类型的对象拥有同一个对象实例字段的拷贝,这就是说,每一个Rectangle 对象都有命名为origin、width和height的字段。当通过对象引用访问实例字段时,你引用的其实是特定对象的字段。在CreateObjectDemo示例中的rectOne和rectTwo对象拥有不同的origin、width和height字段。
为了访问字段,你可以使用对象的一个命名好的引用,如前面示例所示,也可以使用任何返回对象引用的表达式。调用new操作符将返回对象的一个引用,因此你可以使用new操作符返回的引用来访问对象的字段:
int height = new Rectangle().height;
该语句创建了一个Rectangle对象并立即获取它的height字段值。更确切地说,该语句其实获得了Rectangle对象的默认height值。注意在该语句执行之后,程序不再拥有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()方法调用的对象是rectangle构造器返回的。
垃圾回收
有些面向对象语言要求你要跟踪所有创建的对象,并且不在使用它们时要进行销毁。显示的管理内存是冗余并且易出错的。Java平台允许你创建尽可能多的对象(如果你需要的话),对象的销毁不需要你担心。Java运行时环境将在对象不再被使用时删除它们。这个过程叫做垃圾回收。
当没有引用指向对象时表明该对象需要被垃圾回收了。当变量超出作用域时,通常会删除保存在变量中的引用。或者你可以显示的通过将对象引用设置为null,来释放对象引用。记住对象可以有多个引用,在对象要被垃圾回收之前所有的引用必须被删除。
Java运行时环境有个垃圾回收器会周期性的对那些未引用的对象释放内存空间。当垃圾回收器认为时间合适的话它会自动的运行内存回收工作。