Java五曉空
Java對五曉空版本開始,加入足濟新的特性,是 Java 歷史內底修改上大的版本,真濟特點模仿自 C #,因為這是予人認為這是佮 C # 對抗。
新的特性
自動裝箱/拆箱(Auto-Boxing / Unboxing)
將 Java 中八个基本類型實現自動物件化佮值化轉換,通過編譯器自動完成相關轉換程式碼的生成。
無自動裝箱/拆箱:
有自動裝箱/拆箱:
實際上將相關位元組碼反編譯了後,會閣原出其隱式呼叫的轉換方法:
自動裝箱的新功能,可能是按 C # 語言身上學習來的,Java 已經愈來愈成 C #。毋過 Java 著自動裝箱/拆箱的支援,干焦利用編譯器實現,佇咧 Java Bytecode 中,並無自動裝箱/拆箱的操作碼(opcode)。
泛型(Generic Types)
泛型就像是 C + + 的枋模。原有的 Collection API 遮泛型支援了後,增加對型別的檢查,減少程式錯誤的機會。
無泛型:
使用 Generic:
註解(Annotation)
Annotation 全名是 Program Annotation Facility,是 Java SE 五曉空的新功能。Java 的 Annotation 類似 . NET 的屬性(Attribute)。 Java 的註解是一種介面(interface), 繼承自 java . lang . annotation . Annotation。Class File 是貼著 ACC \ _ ANNOTATION 標籤。
佇五曉空開始,javadoc 的 ` @ deprecated `(代表無建議使用的方法抑是類別)嘛予人 Annotation 中的 ` @ Deprecated ` 取代;另外咧,使用 Java 實作 SOP 的 AspectJ 佮 Spring 嘛使用大量的 Annotation。
列舉類型(enum)
列舉類型嘛是 J 二 SE 五曉空的新功能。過去 Java 認為講 enum 的關鍵字是無必要的功能,因為用 public static int field 就會當取代講 enum,所以過去一直毋免。J 二 SE 五曉空中的 class 若是 enum,佇咧 class file 中會予人貼一个貼 ACC \ _ ENUM 標籤。
Enum 一般用來表示一組仝款類型的常數。如性別、日期、月份、色水等。對遮的屬性用常數的好處是顯而易見的,毋但會當保證單例,而且較時陣會當用「==」來替換 equals。是一種好的習慣。JDK 一爿五進前無 Enum 這个類型,彼陣一般用介面常數來替代。Java 有矣 Enum 了後,會當閣較接近的表示這款常數。
國際化
Java 語言嚴格區分位元組佮字元。字元的儲存格式為 UCS 鋪二,嘛就是干焦會當使用位佇基本多文種平面的字元,對 Java 五開始支援 UTF 鋪十六字元。
另外咧,佇五曉空開始 Java 的程式嘛開始會使用矣 Unicode 字元進行號名。
下跤就是一个合法的 Java 程式,內底包含著中文字元作為字串的名稱,這个程式會當佇編譯器內底通過編譯。
輸入輸出
佇咧 jdk 一鋪五佮其以後版本內底,` java . util . Scanner ` 和 ` java . util . Formatter ` 類別被應用甲輸入輸出中。另外咧,嘛出現類似 C 語言的 ` printf ( ) ` 函式。
foreach 迴箍
foreach 迴箍,有時閣號做 forin 迴箍,佇真濟程式語言(包括講 C #、Ruby、JavaScript)中間攏有出現,會當直接共一个 Array 抑是 Map 展開,毋免由程式設計師家己檢查邊界,會當有效減少錯誤的機會。
可變長度的引數
久長以來一直有使用者要求加入 ` printf ( ) ` 函式,因為 Java 函式必須要有固定引數的限制,始終無法度實現,佇加入這个功能了後,連帶 ` printf ( ) ` 嘛變做是可能。
static 引入來
這个特性允准程式設計師將一个類別的靜態內容引入到程式內底。
批評
Java 五允空雖然加入真濟的新特性,但是為著佮舊版本的相容,JVM 並無隨之改變,干焦對編譯器動跤手,因為是引發濟濟問題。討論 Java 語言問題的專書《Java Puzzle》就有專門的篇幅討論五配零了後造成的問題。
自動裝箱/拆箱的矛盾
自動裝箱這功能嘛造成一寡矛盾,比如講:
泛型拭除
和 C #,C + + 泛型無仝,Java 泛型干焦用佇型別檢查,使用的時陣愛閣做一改轉型佮型別檢查。泛型資訊佇咧編譯時陣會對程式碼中抹除(只保留作為元資料予反射功能得著), 泛型對應的值類型佇位元組碼中為 java . lang . Object 類型,這是為著降低 JVM 的修改難度佮保證老舊程式碼的執行相容。