J2SE 5.0 的新特性

参考这个 : http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe1/

 

      J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱(autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架构(Thread framework).

 

1. 范型(generics)

 

     学C++ 的应该知道 C++ 有 "模版" 这个概念的东西, java 这个"范型" 跟它很相似呢.

     看看这篇文章: http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe3/

 

2.  枚举类型(enumeration)

      这个概念也不是什么新东西了, 在 java 里, 枚举其实就是类呢, 它是能添加函数的.

      java 1.5 的枚举不仅仅是为了替代常量的东西, 它更强调每一个枚举量是一个独一无二的东西, 而不是当成整型常量 0, 1, 2 来看待.

      c++ 的枚举的作用域问题让人不爽呢.

 

3. foreach

 

      写程序for, while 循环是经常用到的, for(int i = 0; i < size; ++i) 这样的语句应该很多人都写过了, 如果单纯是遍历元素的话, 很多人会使用迭次的吧, 如 for (Iterator iterator = list.iterator(); iterator.hasNext();) , 而foreach 可以说是后者的简化形式 for(Object o: list). 至于效率方面, 可自行测试.

 

4. 元数据(metadata)

 

      在J2SE5.0中,这种元数据叫作注释(Annotation)。)。通过使用注释, 程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。代码分析工具,开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。举个例子,比如说你希望某个方法的参数或者返回值不为空,虽然我们可以在Java doc中说明,但是表达同样意思的说法有很多,比如"The return value should not be null"或者"null is not allowed here"。测试工具很难根据这些语言来分析出程序员所期望的前提条件(Pre-condition)和执行后的条件(Post-condition)。 而使用注释(Annotation),这个问题就可以轻而易举的解决了。 

 

      如果有空, 你可以看看下面的几篇文章.    

 

      充分利用 Java 的元数据: http://www.oracle.com/technology/global/cn/pub/articles/hunter_meta.html

                                          http://www.oracle.com/technology/global/cn/pub/articles/hunter_meta_2.html

                                          http://www.oracle.com/technology/global/cn/pub/articles/hunter_meta_4.html

 

      注释类型: http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe2/

     

5. 自动拆箱(unboxing)/装箱(autoboxing)

 

       基本类型 int, long, double 等和类 Integer , Long, Double 等的隐式转换呢. 前者转后者称为装箱, 后者转前者称为拆箱, 不知道我这样的理解对不对?

 

6. 可变个数参数(varargs)

 

       这个新特性本人没使用过, 还没遇到非使用这个特性不可的情况.

 

       public void foo(int ...intArray){.........}

 

       在foo 函数的定义里, intArray 其实就是一个数组.

 

 

7. 静态导入(static imports)

 

        这个让我想到了 C++ 的 using std::cout.

 

8. 新的线程架构(Thread framework)

 

        多线程只在 jdk 1.5 玩过, 不予评论.

 

9. C风格的格式化输出

 

        看看这篇文章: http://www.chinaunix.net/jh/26/134984.html

 

10. 新增 StringBuilder

        StringBuilder 跟StringBuffer 差不多的功能, 最大的区别是前者是非线程安全的, 后者是线程安全的.

 


 

 

        作为一次重大的版本升级, 1.5 提供的新特性远比上面提到的要多呢.  本人才疏学浅, 暂时就知道怎么多了. 毕竟一开始学习 java 的时候, 就是从 1.5 开始的, 所以很多新的特性都认为是理所当然了. 所完成的项目也都是基于 1.5 的, 所以面试给人突然问道 1.4 和 1.5 的区别, 除了范型 和 元数据(这个惨, 知道有这个却忘了怎么描述了) , 其他都没答出来.

 

        今天通宵写这篇博客, 为的是让自己的印象深刻, 同时也是一个温故知新之所.

 

       ps. 我个人认为, java 项目应该尽量向下兼容, 尽量少用新特性(主流版本除外), 除非在性能方面提升很多. 就遇过一个项目, 客户坚持要用低版本的 jdk. 但是我一个做 .net 的朋友, 他说他们的客户希望他们能用新的东西, net framework 升到什么版本就上什么版本. 貌似这没有一个权威的说法, 我也很茫然呢!

 

 

      

     

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值