·当数组的元素类型是类的时候,数组的每一个元素其实只是对象的管理者而不是对象本身。因此,仅仅创建数组并没有创建其中的每一个对象。
当我们定义了一个整数
int i = 12; 这是一个确切的数
当我们定义一个字符串
String s ;
并没有对他赋值 s 指的是另一个对象,它只是对象的管理者
同样我们定义一个整数数组
int [10 ] 它是由十个确实存在的整数组成
而
String [10] 字符串数组,10个位置指向存储字符的位置,字符串数组存储的是对象的管理者
●对象数组中的每个元素都是对象的管理者,而非对象本身。
也就是说,当你创建了一个对象数组,并不是创建了那个类的对象,而是创建了那个类的
管理者,换句话说,当你创建了一个数组,那些对象还没有呢,你还要想办法把每一个对象创建出来,那里面的东西才有用。
这就是对象数组和普通数组所不同的地方。
上面说了普通数组和普通数组,下面我们讨论一下,如何遍历对象数组呢?
创建成员函数
public void set(int i){
this.i = i;
}
public int get(){
return i;
}
我们然后对对象数组赋予对象
public static mian(String[] args){
Value[] a = new Value[10];
for( int i = 0; i<a.length; i++){
a[i] = new Value();
a[i].set(i);
}
for(Value v: a){
System.out.println(v.get());
}
}
我们这里每对一个对象数组元素赋值,实际上是新创建了一个对象,那对象数组就是数组的管理者,而非对象本身。
然后我们利用 for -each 循环来输出对象数组里面管理的对象
其实也可以用在容器里面
public static void main(String[] args){
ArrayList<String> a = new ArrayLiat<String>;
a.add("first");
a.add("second");
for( String s : a){
System.out.println(s);
}
}
讨论:
如何设计能传递任意数量参数的函数?
(另外,除了用对象数组之外,也可以搜搜看java本身就支持任意数量参数的函数)
答:
public static double max(double... values) {
double max = Double.MIN_VALUE;
for (double v : values)
if (v > max)
max = v;
return max;
}
在形式参数的地方 使用了 double... values ,需要注意的时,采用这种方式values必须作为最后一个参数
printf()在实现时就采用了这种方式。
调用方式:
Class.max(1.2,5.2,6.5) //可接受任意数量的double值
Class.max(new double[]{1.2,5.2,6.5}) //等价
double[] d = {1.2,5.2,6.5};
Class.max(d)