闲话:实习中,头头让我整理一下JDK各版本主要的新特性。第二篇为JDK 1.5主要新特性介绍,因为它也算是年代久远的东西,就讲讲java语言的增强吧
参考官方文档:https://docs.oracle.com/javase/1.5.0/docs/relnotes/features.html
1.泛型(Generics)
-
解释:泛型提供了一种将集合类型传递给编译器的方法,以便可以检查它。一旦编译器知道集合的元素类型,编译器就可以检查您是否一直使用了集合,并且可以使用正确的强制转换。
-
例子
public class Paly<T>{//被调用时 T play(){} } //其中T就是作为一个类型参数在Play被实例化的时候所传递来的参数,比如: Play<Integer> playInteger=new Play<>(); //这里T就会被实例化为Integer
2.增强了循环(Enhanced for Loop)
-
解释:增加了for-each循环
-
例子
//使用迭代器 void cancelAll(Collection<TimerTask> c) { for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); ) i.next().cancel(); } //使用for-each循环 void cancelAll(Collection<TimerTask> c) { for (TimerTask t : c) t.cancel(); }
3.自动装箱与自动拆箱(Autoboxing/Unboxing)
-
解释:自动装箱自动将基本数据类型转换为对应包装器对象;拆箱自动将包装器对象转换为对应的基本数据类型。
-
补充资料:
–基本数据类型:
byte,char,short,int,float,long,double,boolean
–对应的包装器类型:
Byte,Character,Short,Integer,Float,Long,Double,Boolean -
例子
public class Main { public static void main(String[] args) { //自动装箱 Integer total = 99; //自定拆箱 int totalprim = total; } }
4.类型安全的枚举(Typesafe Enums)
- 解释:在1.5中,Java语言获得了枚举类型的语言支持。 在它们最简单的形式中,这些枚举看起来就像它们的C,C ++和C#对应物
- 例子
–常量public enum Color { RED, GREEN, BLANK, YELLOW } //--switch语句 enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }
–向枚举中添加新方法、覆盖枚举的方法、实现接口、使用接口组织枚举等就不一一举例
5.可变参数(Varargs)
-
解释:在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况。一般我们会用方法重载来解决问题;但是当参数多的时候就会显得很繁琐,同时每次扩展都会很麻烦。于是我们可以使用数组作为参数;但麻烦的是每次都要构造一个数组,于是我们可以使用可变参数的方式
-
补充说明
–可变参数必须放在参数列表最后一个
–可变参数只能有一个
–包含可变参数的方法匹配优先级最低 -
例子
public void method(char c, int...args);
6.静态引入(Static Import)
- 解释:使用静态导入后被导入类的静态变量和静态方法在当前类中直接可见。使用时这些静态成员无需再给出他们的类名,调用的时候和调用自己的方法没有不论什么差别
- 例子
import static java.lang.Math.PI;
7.元数据/注解(Metadata / Annotations)
-
解释:它是代码中的特殊标记,能够在编译、类加载、运行时被识别(需要设置),并根据不同的Annotation来执行不同的处理
-
例子
public @interface RequestForEnhancement { int id(); String synopsis(); String engineer() default "[unassigned]"; String date(); default "[unimplemented]"; }