Java 5,6,7,8,9,10,11新特性超詳細總結

java5

1.泛型 (Generics)javascript

 List<Integer> list=new ArrayList<Integer>();

2.加強循環(Enhanced for Loop)java

Java 5,6,7,8,9,10,11新特性超詳細總結

 

3.自動封箱拆箱(Autoboxing/Unboxing )。八大基本類型和它們的包裝類可以自動的相互轉換。shell

4.枚舉(Typesafe Enums)。編程

ps:枚舉是一種實現線程安全的單例模式的好方式。數組

Java 5,6,7,8,9,10,11新特性超詳細總結

 

5.可變參數 (Varargs)安全

語法:(type... arguments)併發

可變參數本質仍然是用一個數組存儲參數,只是java隱藏了這一過程。須要注意的是若是一個方法聲明中含有可變參數,那必須放在最後一個位置。框架

Java 5,6,7,8,9,10,11新特性超詳細總結

 

6.靜態導入(Static Import)。經過import類來使用類裏的靜態變量或方法(直接經過名字,不須要加上類名.),簡化了代碼的書寫。函數式編程

Java 5,6,7,8,9,10,11新特性超詳細總結

 

ps:過去的版本中只能經過繼承類或實現接口才能使用。函數

7.註解(Annotations)。關鍵字@interface。

Java 5,6,7,8,9,10,11新特性超詳細總結

 

8.新的線程模型和併發庫(java.util.concurrent)。

java6

1.集合框架加強。

  • 爲了更好的支持雙向訪問集合。添加了許多新的類和接口。
  • 新的數組拷貝方法。Arrays.copyOf和Arrays.copyOfRange
//如下爲添加的新接口和類
Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry

2.Scripting. 可讓其餘語言在java平臺上運行。 java6包含了一個基於Mozilla Rhino實現的javascript腳本引擎。

3.支持JDBC4.0規範。

java7

1.二進制前綴0b或者0B。整型(byte, short, int, long)能夠直接用二進制表示。

Java 5,6,7,8,9,10,11新特性超詳細總結

 

2.字面常量數字的下劃線。用下劃線鏈接整數提高其可讀性,自身無含義,不可用在數字的起始和末尾。

 //數字間的下劃線不影響實際值
int k = 1_1;//值爲11
  1. switch 支持String類型。
  2. 泛型實例化類型自動推斷。
Java 5,6,7,8,9,10,11新特性超詳細總結

 

3.try-with-resources語句。

Java 5,6,7,8,9,10,11新特性超詳細總結

 

4.單個catch中捕獲多個異常類型(用| 分割)並經過改進的類型檢查從新拋出異常。

java8

  1. lambada表達式(Lambda Expressions)。Lambda容許把函數做爲一個方法的參數(函數做爲參數傳遞進方法中)。
  2. 方法引用(Method references)。方法引用提供了很是有用的語法,能夠直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,可使語言的構造更緊湊簡潔,減小冗餘代碼。
  3. 默認方法(Default methods)。默認方法容許將新功能添加到庫的接口中,並確保兼容實現老版本接口的舊有代碼。
  4. 重複註解(Repeating Annotations)。重複註解提供了在同一聲明或類型中屢次應用相同註解類型的能力。
  5. 類型註解(Type Annotation)。在任何地方都能使用註解,而不是在聲明的地方。
  6. 類型推斷加強。
  7. 方法參數反射(Method Parameter Reflection)。
  8. Stream API 。新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。Stream API集成到了Collections API裏。
  9. HashMap改進,在鍵值哈希衝突時能有更好表現。
  10. Date Time API。增強對日期和時間的處理。
  11. java.util 包下的改進,提供了幾個實用的工具類。
  • 並行數組排序。
  • 標準的Base64編解碼。
  • 支持無符號運算。

12.java.util.concurrent 包下增長了新的類和方法。

  • java.util.concurrent.ConcurrentHashMap 類添加了新的方法以支持新的StreamApi和lambada表達式。
  • java.util.concurrent.atomic 包下新增了類以支持可伸縮可更新的變量。
  • java.util.concurrent.ForkJoinPool類新增了方法以支持 common pool。
  • 新增了java.util.concurrent.locks.StampedLock類,爲控制讀/寫訪問提供了一個基於性能的鎖,且有三種模式可供選擇。

13.HotSpot

  • 刪除了 永久代(PermGen).
  • 方法調用的字節碼指令支持默認方法。

java9

  1. java模塊系統 (Java Platform Module System)。
  2. 新的版本號格式。$MAJOR.$MINOR.$SECURITY.$PATCH
  3. java shell,交互式命令行控制檯。
  4. 在private instance methods方法上可使用@SafeVarargs註解。
  5. diamond語法與匿名內部類結合使用。
  6. 下劃線_不能單獨做爲變量名使用。
  7. 支持私有接口方法(您可使用diamond語法與匿名內部類結合使用)。
  8. Javadoc
  • 簡化Doclet API。
  • 支持生成HTML5格式。
  • 加入了搜索框,使用這個搜索框能夠查詢程序元素、標記的單詞和文檔中的短語。
  • 支持新的模塊系統。

9.JVM

  • 加強了Garbage-First(G1)並用它替代Parallel GC成爲默認的垃圾收集器。
  • 統一了JVM 日誌,爲全部組件引入了同一個日誌系統。
  • 刪除了JDK 8中棄用的GC組合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。

10.properties文件支持UTF-8編碼,以前只支持ISO-8859-1。

11.支持Unicode 8.0,在JDK8中是Unicode 6.2。

java10

1.局部變量類型推斷(Local-Variable Type Inference)

Java 5,6,7,8,9,10,11新特性超詳細總結

 

var是一個保留類型名稱,而不是關鍵字。因此以前使用var做爲變量、方法名、包名的都沒問題,可是若是做爲類或接口名,那麼這個類和接口就必須重命名了。

var的使用場景主要有如下四種:

  • 本地變量初始化。
  • 加強for循環中。
  • 傳統for循環中聲明的索引變量。
  • Try-with-resources 變量。​

2.Optional類添加了新的方法orElseThrow。相比於已經存在的get方法,這個方法更推薦使用。

java11

  1. 支持Unicode 10.0,在jdk10中是8.0。
  2. 標準化HTTP Client
  3. 編譯器線程的延遲分配。添加了新的命令-XX:+UseDynamicNumberOfCompilerThreads動態控制編譯器線程的數量。
  4. 新的垃圾收集器—ZGC。一種可伸縮的低延遲垃圾收集器(實驗性)。
  5. Epsilon。一款新的實驗性無操做垃圾收集器。Epsilon GC 只負責內存分配,不實現任何內存回收機制。這對於性能測試很是有用,可用於與其餘GC對比成本和收益。
  6. Lambda參數的局部變量語法。java10中引入的var字段獲得了加強,如今能夠用在lambda表達式的聲明中。若是lambda表達式的其中一個形式參數使用了var,那全部的參數都必須使用var。
相關文章
相關標籤/搜索