您的位置:首页 > 编程语言 > Java开发

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

2009-09-02 09:22 92 查看
  最近需要整理一个以前的项目,需要增加新的接口。这个项目进行了很久,一开始用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。一编译,简直晕菜了。时隔一年,J***A已经变成这样了……

More Object:int 和Integer

  J***A更加强调对象,在以前的版本中,Integer可以赋值int,现在J***A严格区分了这两个概念。如果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不同,J***A不支持%ld的方式,可以使用%d或者%s的方式。

  我觉得String.format新的方式使用非常不方便,而且代码看起来不优雅,但是J***A可以是为了抛弃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()))

  当QT在NOKIA收购后变成free,而最初扛起free大旗的J***A在Oracle收购后分为免费版本和收费版本。就似Andriod的开放,apple的封闭,他们都活得很好。对立的两个方向并非一个对另一个就错,而这种二元论的非此即彼的概念确实很多人喜欢,我们从小也接受了很多类似的观念。例如电影上的一个坏蛋,包括样衰,心坏。读初中的时候,政治书上将计划经济作为正统,将市场经济批驳得体无完肤;上了高中倒过来,将市场经济奉为准则,将计划经济进行狠狠地批评,真是此一时也彼一时。不是我们不相信,而是我们不知道信什么。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: