Chrisの梳羽之礁

A look of quick intelligence and soft refinement
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转] JDK 1.6.x(1.6.0_16)和以前版本的变化

Posted on 2011-10-19 10:06  Chrisfang6  阅读(892)  评论(0编辑  收藏  举报

原文

  最近需要整理一个以前的项目,需要增加新的接口。这个项目进行了很久,一开始用JDK1.4的版本,后来用JDK1.5的版本。再后来发现JDK1.5版本存在一个BUG(具体忘了,还没能翻出文档,好像和时间有关),需要JDK1.6。从1.4到1.5没有任何问题,从1.5到1.6,在source code上没有问题,但是1.6编译的不能在JRE1.5上面跑。

  接着这些东西开始尘封,有1年的时间,这期间,实验室搬过,机器更换过,原来的开发环境已经没有了。一些文档还要慢慢查找,先从source code开始。我下载了最新的JDK1.6.16。一编译,简直晕菜了。时隔一年,JAVA已经变成这样了……

More Object:int 和Integer

  JAVA更加强调对象,在以前的版本中,Integer可以赋值int,现在JAVA严格区分了这两个概念。如果int赋值给Integer,需要使用Integer.valuleOf( i )。将某个字符转换为整数的方法,取消了Integer.decode(),需要使用Integer.parse()。在新的版本,不再允许在int和Integer之间,double和Double之间... ... 作为等同,例如直接通过“=”进行赋值,或者在方法参数传递中通用,他明确地区分源于C的整型/浮点型和对象。

Vector的entry类型

  在1.5即之前的版本,包括1.6早期的版本中:Vector的类型在new中定义,例如new Vector<myType>(),又例如private Vector<myType> myParam;如果不将<myType>填入,会报告一个warning。但是在现在最新的版本禁止在创建的时候指明类型,即便允许<myType>,同样,在HashTable,Stack,Enumeration 也是类似的。

String.format:抛弃C的va_list方式

  最凄惨的是String.format(),原本这个方法的使用类似于C的sprintf,可以填入任意参数,根据指定的格式,赋值给一个String。例如string0 = String.format("%2.4f OK",f);这是一个很灵活方便的书写方法,在project中使用得很多,但是在新的JDK不在允许这种方式,会报告:

The method format(String, Object[]) in the type String is not applicable for the arguments (String, Double)

  需要写成(String,Object[])的格式,即上述例子应写为:

string0 = String.format("%2.4f",new Object[]{Double.value(f)});

  如果多个参数在new Object[]{obj1,obj2,...}中列出。对于我们原来使用int ,double,float等C集成下来的类型,在新的JDK可以参与计算,但是建议不作为一个类的参数,如果可能,尽量使用Integer,Double,Float的类方式。

  对于Long的类型,需要注意和C不同,JAVA不支持%ld的方式,可以使用%d或者%s的方式。

  我觉得String.format新的方式使用非常不方便,而且代码看起来不优雅,但是JAVA可以是为了抛弃va_list的C的方式,进一步对象化,All is object。

Hashtable:key的修订

  和Vector等只是改改类型的书写方式不同,Hashtable对key的使用方式进行了修改,以前我们需要直接给出hashcode,通过hashcode来put, get, remove。在现在版本中直接使用obj, To successfully store and retrieve objects from a hashtable, the objects used as keys must implement the hashCode method and the equals method。例如我们以前加一个entry,如下:db.put(name.hashCode(),entry),其中name是String,现在我们需要写为:db.put(name,entry)。

SimpleDateFormat的format()方法参数的变化

  这个也是项目中常设计的参数,如果我们有涉及CDR或者calleg的记录,这是个非常简洁的处理方式,我们原来使用dformat.format(long t),例如dformat.format(System.currentTimeMillis()),但是在新的版本中要求dformat.format(Date d),我们需要写成dformat.format(new Date(System.currentTimeMillis()))