我把java5.0产生的新特性总结一下,方便其他java爱好者的学习了解
java5.0中,主要的新特性主要包括1、泛型 2、增强的for循环3、自动装箱和自动拆箱4、类型安全的枚举 5、可变长度参数 6、静态引入 7、元数据(注解)8、C风格的格式化输出。
1、泛型,Java的泛型虽然跟C++的泛型看上去十分相似,但其实有着相当大的区别,有些细节的东西也相当复杂(至少很多地方会跟我们的直觉背道而驰)。可以这样说,泛型的引入在很大程度上增加了Java语言的复杂度,对初学者尤其是个挑战。
举例:ArrayList
首先在<>中定义integer类型,表示ArrayList集合中不会接受除integer外的类型,这样传给ArrayList的数据如果是其他类型,就会报错,从而让错误出现在调试阶段,方便程序员调试程序
2、增强for循环, 格式如:for (Object obj : c)
{
System.out.println((String) obj);
}
具体的语法:使用":"分隔开,前面的部分写明从数组或Collection中将要取出的类型,以及使用的临时变量的名字,后面的部分写上数组或者Collection的引用,这样可以简化我们的书写。
3、自动装箱和拆箱,装箱,就是把值类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double,等等。拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。java5.0之前的版本,我们需要手动将数据类型装箱和拆箱,java5.0后,java虚拟机在系统底层自动调用相应的方法,帮我们将数据装箱和拆箱。
举例:public static void manualBoxingUnboxing(int i) {
ArrayList
aList.add(0, new Integer(i));
int a = aList.get(0).intValue();
System.out.println("The value of i is " + a);
}
public static void autoBoxingUnboxing(int i) {
ArrayList
aList.add(0, i);
int a = aList.get(0);
System.out.println("The value of i is " + a);
}
4、在张孝祥老师的视频中提到java本来是没有枚举的,但是使用Java的广大开发者对于枚举的需求并没有因为Java本身没有提供而消失,所以java在5.0版本中向C学习,引进枚举。
举例:public enum Language {CHINESE, ENGLISH, FRENCH, HUNGARIAN}
5、可变长度参数,在方法的参数列表中,我们可以定义可变长度的参数,用“...”表示,但是只能存在参数列表的最后一个参数。
举例:public String testVararg(String... args) {
StringBuilder sb = new StringBuilder();
for (String str : args) { sb.append(str); }
return sb.toString();
}
6、静态引入,静态引入就是指引入某个类的静态字段,如import static java.lang.Math.PI;
这样,就不需要程序员手动的输入类名.方法名,只需要写方法名就可以了,但是如果多个类中定义相同的静态方法时,引用方法必须指明引用的是哪个类中的方法。
7、元数据(注解),注解不会直接影响程序的语义,而开发和部署工具则可以读取这些注解信息,并作相应处理,如生成额外的Java源代码、XML文档、或者其他将与包含注解的程序一起使用的物件。java5.0之前,我们靠反射来实现注解的功能,现在有了注解,可以大大减少代码。java5.0中主要的注解有@Override,这个注解被使用在方法上,表明这个方法是从其父类继承下来的,@Deprecated,表明该项(类、字段、方法)过时,不再被推荐使用。@SuppressWarnings,表明该项(类、字段、方法)所涵盖的范围不需要显示所有的警告信息。
8、C风格的格式化输出,Java有类似C的printf()风格的方法,方法名同样叫作printf(),这一特性依赖于前边提到的可变长度参数。举个例子来说,我们现在可以写: System.out.printf("%s has a value of %d.%n", someString, a);