一、增强的for循环
这只是一个很小的语言改进,来源于vb等语言中的foreach语句,因此有人也称其为foreach增强。它可以作用于集合类,数组等。
如:int[] a={1,335,59,9,4,8};
for(int i:a)
system.out.println(i);
和
Set<Integer> set=new Set<Integer>();
for(int i=0;i<10;i++)
set.add(i);
for(Integer I:set)
system.out.print(i);
二、自动装箱和拆箱
运行时系统可以直接在基本类型和对应的包装类之间转换。
如
Set<Integer> set=new Set<Integer>();
for(int i=0;i<10;i++)
set.add(i);
for(Integer I:set)
system.out.print(i);
就使用了int和Integer之间的自动转换。
三、可变参数列表
说的了就是可以使用不确定个数的参数,主要用于函数
如
fun(double... a){
for(double d:a)
system.out.print(d);}
它的标志性语法就是类型后连着三点。
在此以前java中也可以用数组参数来达到相关的效果。但是可变参数更有表达力。
四、 协变返回
就是可以在覆盖函数的时候用原来函数的返回类型的子类来替代
如:
Object pop(){}
@Override
Integer pop(){}
上面两个函数在java5中是可以运行的。
五、枚举
java中的枚举是类型安全的,但是它是一个类Enum的子类,因此它不能再继承其它类,且java的enum比c的enum功能更强大,而且在是很复杂。与枚举有关的有一个静态导入(static import) ,它是在当前的文件中你可以直接使用它的实例名,而不用加上enum类型名。enum指的是实例集合。
六、泛型
泛型也是参数类型,和c++中的模板(template)有相似的地方,但是java中的泛型功能要弱得多,而且很难自己写泛型。希望在java7中改进。
如
Collection<String> c = new ArrayList<String>();
但是ArrayList<Object> arr=new ArrayList<String>();却会出错。
而且支持?通配符和super, extends来指定边界。
七、注解(annotation)
注解可以说是java5中加入的最有前途的特性,是元数据,也就是可以用来表示其它数据的数据,但是它不是普通人可以驾驭的。
就像我在前例中使用的@Override,就是一个注解。
java6主要是在性能上做了改进,同时在swing上做了一些增加,如Desktop,SystemTray,SystemTrayIcon和启动动画。当然sun对java编译器,解释器做了很多增强。