jdk1.5的新特性

来源:互联网 发布:淘宝网络有限公司 编辑:程序博客网 时间:2024/04/20 22:30

jdk1.5增加了很多新的特性.其中有:泛型,增强的for,自动装箱与拆箱,可变参数,类型安全的枚举和静态导入。

泛型:关于泛型在我的上一篇博客中已经有提到(泛型详解)这里不再赘述。

增强的for:方便了数组,集合遍历,它也就这一点的好处,没有索引,没有更细致的访问,只是单纯地减少了代码量。

自动装箱与拆箱:针对的是8个原生数据类型及其包装类型。简化了操作,这样就不需要每次使用集合时,先把int  a = 99;中的a包装成Integer类型,需要注意的有:

                                                     Integer  a = 100;

                                                     Integer b = 100;

                                                      System.out.println(a == b);   //true

                                                     Integer  a = 200;

                                                     Integer b = 200;

                                                      System.out.println(a == b);   //false

原因:Integer  a = 100;等价于Integer  a = Integer.valueOf(100);下面看源码,源码之下,一切大白于天下
                           publicstaticInteger valueOf(inti) {
                              finalintoffset =128;
                              if(i >= -128&& i <=127) {// must cache
                                  returnIntegerCache.cache[i + offset];
                              }
                              returnnewInteger(i);
                            }

 到此应该恍然大悟了,IntegerCache缓存了[-128,127]之间的Integer对象,如果valueOf的参数i处于这之间,就返回缓存的对象。否则就new个新的Integer。前面已经说过,“==”作用于对象上的时候,其比较的是对象的地址,例子中的i1和i2都是从缓存中拿的,当然是同一个对象,i3和i4都是通过new Integer获得的,当然不是同一个对象了。

类似地,java.lang.Long,java.lang.Short分别缓存了[-128,127]之间的Long和Short对象,java.lang.Byte缓存了所有的对象,java.lang.Character缓存了[0,127]之间的Character对象。java缓存这些对象是为了性能优化,既然我们已经知道其缓存了这么些对象,在需要new Integer/Long/…的地方,可改用Integer/Long/Short…#valueOf方法。

可变参数:对于可变参数

                                                   public static int  add(int... args)
                                                      {
                                                          int sum = 0;
                                                          for(int i=0;i<args.length;i++)
                                                          {
                                                              sum+=args[i];
                                                          }
                                                          return sum;
                                                      }

在方法内部的使用add(int... args)中args类似于数组,调用方法时也可以传进去一个数组add(new int[]{12,23,34,56}),但如果改成数组,范围就小了。

 注:对于一个方法带可变参数的变量,最多只能有一个可变参数变量,而且可变参数变量必须在最后。例,add(String  ss,double d,int... args)

类型安全的枚举:在开发中枚举常用于表示常量。方便开发使用。有两个常用的方法:values(){返回的

是枚举类型的数组}和valueOf(){将字符串转化成枚举类型的成员}。

所有的枚举都继承于java.lang.Enum类。枚举中的成员都是public  static  final类型的。每个枚举的类型值在编译期就可以确定下来

     静态导入:典型的鸡肋,没有什么价值,简化了操作(静态的变量或方法)  import static  com.qidan.Test.FLAG;  这样在使用时虽然无需使用类名.变量的方式访问使用,可直接使用(有点类似于继承),但这样的‘’方便“,迷惑了别人也迷惑了自己。不建议使用!!!    





原创粉丝点击