资源描述
J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式 来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行 定义能被这样遍历的类,并解释和这一机制的一些常见问题。在Java程序中,要“逐一处理”?D?D或者说,“遍历”?D?D某一个数组或Collection中的 元素的时候,一般会使用一个for循环来实现(当然,用其它种类的循环也不是不可以,只 是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配, 在这种时候for循环比其它循环常用得多)。对于遍历数组,这个循环一般是采取这样的写法:清单1:遍历数组的传统方式/*建立一个数组*/int integers = 1, 2, 3, 4;/*开始遍历*/for (int j = 0; j (); strings.add(A);strings.add(B); strings.add(C);strings.add(D);for (String str : integers) System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */循环变量的类型可以是要被遍历的对象中的元素的上级类型。例如,用int型的循环变 量来遍历一个byte型的数组,用Object型的循环变量来遍历一个Collectionv String (全部 元素都是String的Collection)等。清单11:使用要被遍历的对象中的元素的上级类型的循环变量String strings = A, B, C, D;Collectionv String list = java.util.Arrays.asList(strings);for (Object str : list) System.out.println(str);/* 依次输出“A”、“B”、“C”、“D” */循环变量的类型可以和要被遍历的对象中的元素的类型之间存在能自动转换的关系。J2SE 1.5中包含了“Autoboxing/Auto-Unboxing”的机制,允许编译器在必要的时候,自动在 基本类型和它们的包裹类(Wrapper Classes)之间进行转换。因此,用Integer型的循环变量 来遍历一个int型的数组,或者用byte型的循环变量来遍历一个Collectionv Byte,也是可 行的。清单12:使用能和要被遍历的对象中的元素的类型自动转换的类型的循环变量 int integers = 1, 2, 3, 4;for (Integer i : integers) System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */注意,这里说的“元素的类型”,是由要被遍历的对象的决定的? D?D如果它是一个Object 型的数组,那么元素的类型就是Object,即使里面装的都是String对象也是如此。可以限定元素类型的Collection截至到J2SE 1.4为止,始终无法在Java程序里限定Collection中所能保存的对象的类 型?D?D它们全部被看成是最一般的 Object对象。一直到J2SE 1.5中,引入了 “泛型 (Generics)机制之后,这个问题才得到了解决。现在可以用Collectionv T来表示全部元 素类型都是T的Collection,如Co
展开阅读全文