1 增强for循环
(1)格式:for(数据类型 变量:遍历对象(集合或数组)){
语句
}
变量就等价于next()方法返回的结果
(2)原理:增强for循环底部原理仍然是调用了迭代器。
(3)好处及弊端:简化了迭代器代码。只能做遍历元素操作,不能够在遍历的过程中对集合元素做其它操作。
public static void main(String[] args) {
// 创建对象并添加
List list = new ArrayList();
list.add(new Student("tanzhou1",28));
list.add(new Student("tanzhou2",19));
list.add(new Student("tanzhou3",24));
// 增强for循环,只能用来遍历元素
for (Object obj : list) {
// 注意:这里不仅仅指只获取全部元素,
Student stu = (Student)obj;
System.out.println(stu.getName());
System.out.println(obj);
}
// 遍历数组时,如果只需要取出元素,可以使用增强for
String[] str = { "1", "2" };
for (String s : str) {
System.out.println(s);
}
}
如果add添加的是字符串,那么用for循环时,数据类型是Object。而不是String,String是类,是一种类型,add添加的是一个对象。
2 泛型(Generic)
问题:
什么类型的元素都可以都可以进行存储,那么就会导致遍历元素时,如果需要调用某一种对象特有的方法,此时就要向下转型,就会引发运行时异常。JDK1.5版本之后 创建集合的时候,直接在集合上明确要存储的元素类型:泛型 <引用数据类型>,可类比于method(int a)。
好处:
泛型的主要目标是实现java的类型安全。泛型可以使编译器知道一个对象的限定类型是什么,消除了强制类型转换。在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,将可能发生的运行时期异常转移到了编译时期异常。
(1)性能优化(2)类型安全(同一类型)(3)消除强制类型转换
3 实现原理
泛型的实现是依靠类型擦除技术。 Java中的泛型基本上都是在编译器这个层次来实现的,在生成的Java字节码中是不包含泛型中的