泛型机制:JDK1.5后的新概念
把类型明确工作推迟到创建对象或调用方法时才去明确的机制
语法:<数据类型> 这里的数据类型只能是引用数据类型,可以是一个,也可以多个
可以加在 接口上、类上、方法上
好处:1.避免向下转型
2.将问题提前到了编译期
3.有利于提高类、接口(新创建的类加上未知的泛型,创建该类对象时再明确泛型类型)的扩展性
特点:泛型只在编译期有效,运行期就擦除了
泛型可以限定集合中可以存储的数据类型
ArrayList<Integer> list = new ArrayList<Integer>();//JDK1.7之后只写一边就行
class Animal{
}
class Dog extends Animal{
}
class Cat extends Animal{
}
ArrayList<Animal> o = new ArrayList<Dog>();//报错!!!必须前后一致
ArrayList<?> o = new ArrayList<Dog>();//前面? 后面可以随意写
ArrayList<?super Cat> o = new ArrayList<Animal>();//后面必须是前面的父类或其本身 向上限定
ArrayList<?extends Animal> o = new ArrayList<Animal>();//后面是Animal本身或其子类 向下限定
JDK1.5之后循环新语法
增强for循环
1.明确容器中的元素数据类型
2.容器名称
for(容器中元素数据类型 遍历的元素名称 :容器名){};
int[] a = {10,20,30,40,50};
for(int i:a){
System.out.println(i);
}
快捷键 容器名.for 仅仅是遍历新式for循环最为方便
新式for循环在遍历时 已经提前知道了容器中元素的数量,遍历过程中增删元素会有 并发修改异常 ConcurrentFormatException
可变参数 本质上是数组 一个方法有多个参数,可变参数就位于最后一个
数据类型...参数名