对象数组
复习下对象的创建:
对象是通过对象引用变量来访问的。类是一种引用类型,格式如下:
Circle myCircle;
下面的语句创建一个对象,并且将他的引用赋给变量myCircle:
myCircle = new Circle();
二者合一,就是包括声明对象引用变量、创建一个对象和将他的引用赋给变量:
Circle myCircle = new Circle();
如上:变量myCircle中放的是对Circle对象的引用。
以此类推,数组也是new创建的,一个数组变量实际上是一个包含数组引用的变量~
数组的创建:
声明一个数组变量、创建数组、然后将数组引用赋值给变量:
elementType[] arrayRefVar = new elemenType[arraySize];
或
elementType arrayRefVar[] = new elemenType[arraySize];
对象的数组实际上是引用变量的数组。当使用new操作符创建对象数组后,这个数组中的每个元素都是默认值为null的引用变量。
实例:
package test; public class TotalArea { /** Main method */ public static void main(String[] args) { // Declare circleArray CircleWithPrivateDataFields[] circleArray; // Create circleArray circleArray = createCircleArray(); // Print circleArray and total areas of the circles printCircleArray(circleArray); } /** Create an array of Circle objects */ public static CircleWithPrivateDataFields[] createCircleArray() { CircleWithPrivateDataFields[] circleArray = new CircleWithPrivateDataFields[5]; for (int i = 0; i < circleArray.length; i++) { circleArray[i] = new CircleWithPrivateDataFields(Math.random() * 100); } // Return Circle array return circleArray; } /** Print an array of circles and their total area */ public static void printCircleArray( CircleWithPrivateDataFields[] circleArray) { System.out.printf("%-30s%-15s\n", "Radius", "Area"); for (int i = 0; i < circleArray.length; i++) { System.out.printf("%-30f%-15f\n", circleArray[i].getRadius(), circleArray[i].getArea()); } System.out.println("-----------------------------------------"); // Compute and display the result System.out.printf("%-30s%-15f\n", "The total areas of circles is", sum(circleArray)); } /** Add circle areas */ public static double sum( CircleWithPrivateDataFields[] circleArray) { // Initialize sum double sum = 0; // Add areas to sum for (int i = 0; i < circleArray.length; i++) sum += circleArray[i].getArea(); return sum; } }
结果:
Radius Area 71.932202 16255.359460 61.031120 11701.796664 68.740565 14844.858538 12.298561 475.180314 21.631531 1470.023842 ----------------------------------------- The total areas of circles is 44747.218816
主方法是将对象数组传进方法里;
而在CircleWithPrivateDataFields[] 类型的静态方法里,return circleArray,所以次方法可以在主方法里赋给刚刚声明的对象。