JDK5.0的11个主要新特征。

1泛型(通用)

1.1说明

增强了java的类型安全,可以在编译期间对容器内的对象进行类型检查,在运行期不必进行类型的转换。而在j2se5之前必须在运行期动态进行容器内对象的检查:及转换

减少含糊的容器,可以定义什么类型的数据放入容器

ArrayList <整数> listOfIntegers;//新语法

整数integerObject;

listOfIntegers=new ArrayList <整数> ();//新到

listOfIntegers语法。(新添加整数(10));//只能是整数类型

integerObject=listOfIntegers.get (0);//取出对象不需要转换

1.2 (@more@)用法

声明及实例化泛型类:

HashMap <字符串,浮动>嗯=new HashMap <字符串,浮动> ();

//不能使用原始类型

GenList nList=new GenList ();//编译错误

J2SE 5.0目前不支持原始类型作为类型参数(类型参数)

定义泛型接口:

公共接口GenInterface {

void函数T (T);

}
定义泛型类:

公共类ArrayList {…}

公共类GenMap {…}

例1:

公共类MyList <元素>扩展LinkedList <元素>

{

公共空交换(int, int j)

{

元素temp=this.get(我);

。集(我this.get (j));

。集(j、临时);

}

公共静态void main (String [] args)

{

MyList <字符串> list=new MyList <字符串> ();

list.add(“嗨”);

list.add(“安迪”);

System.out.println (list.get (0) + " " + list.get (1));

list.swap (0,1);

System.out.println (list.get (0) + " " + list.get (1));

}

}
例2:

公共类GenList {

私人T[]元素;

私人int大?0;

私人int长度=0;

公共GenList (int大小){

元素=(T[])新对象(大小);

。大?大小;

}

公共T (int i) {

如果(我<长度){

返回元素[我];

}

返回null;

}

公共空间添加(T e) {

如果(长度<大小- 1)

元素(长度+ +)=e;

}

}
泛型方法:

公共类TestGenerics {

公共字符串getString (T obj) {
//实现了一个泛型方法

返回obj.toString ();

}

公共静态void main (String [] args) {

TestGenerics t=新TestGenerics ();s=

字符串“Hello”;

Integer=100;

System.out.println (t.getString (s));

System.out.println (t.getString(我));

}

}
1.3受限泛型

受限泛型是指类型参数的取值范围是受到限制的。
扩展关键字不仅仅可以用来声明类的继承关系,
也可以用来声明类型参数(类型
参数)的受限关系。例如,
我们只需要一个存放数字的列表,包括整数(长整数,
),实数(双浮动),不能用来存放其他类型,
例如字符串(字符串),也就是说,
要把类型参数T的取值泛型限制在数量极其子类中。在这种情况下,
我们就可以使用扩展关键字把类型参数(类型
参数)限制为数字

示例

公共类有限{

公共静态void main (String [] args) {

<整数>数量有限;//正确

<字符串> str有限;//编译错误

}

}
1.4泛型与异常

类型参数在catch块中不允许出现,但是能用在方法的抛出之后。例:

import . io . *;

界面执行人 {

无效执行()抛出E;

}
公共类GenericExceptionTest {

公共静态孔隙主要(String参数[]){

尝试{

执行人 e=新
执行人 () {

公共空间执行()抛出IOException {

//代码会抛出一个

//IOException或亚型

//IOException

}

};

e.execute ();

}捕捉(IOException埃克斯波特学院){

system . out。println (“IOException:“+埃克斯波特学院);

ioe.printStackTrace ();

}

}

}
1.5泛型的通配符“?”

”?“可以用来代替任何类型,
例如使用通配符来实现印刷方法。

公共静态空白打印(GenList <?>列表){})

1.6泛型的一些局限型

不能实例化泛型

T T=new ();//错误

不能实例化泛型类型的数组

T [] ts=new T [10];//编译错误

不能实例化泛型参数数

对<字符串>表=[]副新的<字符串> (10);//错误

类的静态变量不能声明为类型参数类型

公共类GenClass {

私有静态T T;null

JDK5.0的11个主要新特征。