一、泛型(Generics):
1.所谓泛型:就是变量类型的参数化。
类别定义时的逻辑完全一样,只是里面成员变量的类型不同 (如果需要多个相似的类,需要定义多个文件,不同的只是变量的类别,而逻辑是完全一样的)
如果使用泛型,只要代码在编译时没有出现警告,就不会遇到运行时ClassCastException (类型转换异常)
泛型的定义:在类名后面加
<T>代表变量的类型可以是任意的 可以使用任何的类型来实例化泛型类型中的类型
<T extends 另一个类> 代表变量的类型有限制
public class GenericFoo<T> {
private T foo;
public void setFoo(T foo) {
this.foo = foo;
}
public T getFoo() {
return foo;
}
}
新建该类型的对象时,若要传递的值类型不确定则应这样创建。
GenericFoo<? extends List> ge = null;
ge = new GenericFoo<ArrayList>();
ge = new GenericFoo<LinkedList>();
ge 可以指向List的子类
GenericFoo<? super List> ge = null;
ge = new GenericFoo<Object>();
ge 可以指向List的父类
2.
For-Each循环的加入简化了集合的遍历
•其語法如下
–for(type element : array) { System.out.println(element).... }
当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。
3.自动装箱/拆箱大大方便了基本类型数据和它们包装类的使用。
自动装箱:基本类型自动转为包装类。(int〉〉Integer)
自动拆箱:包装类自动转为基本类型。(Integeer〉〉int)
4。可变参数:
可变参数本质上就是一个数组,对于某个声明了可变参数的方法来说,我们既可以传递离散的值,也可以传递数组对象。但如果将方法中的参数定义为数组,那么只能传递数组对象而不能传递离散的值。
可变参数必须要作为方法参数的最后一个参数,即一个方法不可能具有两个或两个以上的可变参数。
5.枚举(Enum):
定义一个枚举类型:
public enum Color{
Red,
White,
Blue
}
使用:Color myColor = Color.Red;