天天看點

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 升到什麼版本就上什麼版本. 貌似這沒有一個權威的說法, 我也很茫然呢!