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
method and the
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的封闭,他们都活得很好。对立的两个方向并非一个对另一个就错,而这种二元论的非此即彼的概念确实很多人喜欢,我们从小也接受了很多类似的观念。例如电影上的一个坏蛋,包括样衰,心坏。读初中的时候,政治书上将计划经济作为正统,将市场经济批驳得体无完肤;上了高中倒过来,将市场经济奉为准则,将计划经济进行狠狠地批评,真是此一时也彼一时。不是我们不相信,而是我们不知道信什么。
接着这些东西开始尘封,有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的封闭,他们都活得很好。对立的两个方向并非一个对另一个就错,而这种二元论的非此即彼的概念确实很多人喜欢,我们从小也接受了很多类似的观念。例如电影上的一个坏蛋,包括样衰,心坏。读初中的时候,政治书上将计划经济作为正统,将市场经济批驳得体无完肤;上了高中倒过来,将市场经济奉为准则,将计划经济进行狠狠地批评,真是此一时也彼一时。不是我们不相信,而是我们不知道信什么。
相关文章推荐
- svn1.6项目还原到以前的版本
- 全文检索 lucene 4.7以上的版本只支持jdk1.7以上的 不支持jdk1.6版本
- java JDK JRE 1.6,1.7,1.8各个版本版本下载链接
- Jquery1.6版本后attr的变化
- idea编译时JDK版本变化
- jsch在jdk1.6下支持高版本的ssh
- 使用cxf 关于JAXB2.1和JDK1.6/6.0版本不一致的问题 --已解决
- 解决maven update project jdk编译版本变化的问题
- jdk 1.8环境下编译打包1.6版本的jar包
- phonegap3.0以前版本和以后版本execute函数参数的变化
- RedHat下JDK1.6安装-利用alternative实现多版本并存(Ubuntu同理)
- jdk1.6 1.7 1.8 运行时常量池位置的变化
- linux下安装jdk1.6版本显示1.4,修改默认jdk版本
- java JDK JRE 1.6,1.7,1.8各个版本版本下载链接
- JDK1.6_023的版本及升级注意事项
- JDK版本新特性介绍&JDK1.6
- 用CXF3.0.4创建webservice的时候jdk1.6版本报的错,解决方案安装jdk1.8
- JDK1.6各个版本官网下载地址
- linux安装jdk1.6始终显示版本1.4的解决方法
- Fedora14下自带jdk1.6版本 安装jdk1.7不识别的问题解决