对象数组
复习下对象的创建:
对象是通过对象引用变量来访问的。类是一种引用类型,格式如下:
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,所以次方法可以在主方法里赋给刚刚声明的对象。