java5
1.泛型 (Generics)javascript
List<Integer> list=new ArrayList<Integer>();
2.加強循環(Enhanced for Loop)java
3.自動封箱拆箱(Autoboxing/Unboxing )。八大基本類型和它們的包裝類可以自動的相互轉換。shell
4.枚舉(Typesafe Enums)。編程
ps:枚舉是一種實現線程安全的單例模式的好方式。數組
5.可變參數 (Varargs)安全
語法:(type... arguments)併發
可變參數本質仍然是用一個數組存儲參數,只是java隱藏了這一過程。須要注意的是若是一個方法聲明中含有可變參數,那必須放在最後一個位置。框架
6.靜態導入(Static Import)。經過import類來使用類裏的靜態變量或方法(直接經過名字,不須要加上類名.),簡化了代碼的書寫。函數式編程
ps:過去的版本中只能經過繼承類或實現接口才能使用。函數
7.註解(Annotations)。關鍵字@interface。
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)能夠直接用二進制表示。
2.字面常量數字的下劃線。用下劃線鏈接整數提高其可讀性,自身無含義,不可用在數字的起始和末尾。
//數字間的下劃線不影響實際值
int k = 1_1;//值爲11
- switch 支持String類型。
- 泛型實例化類型自動推斷。
3.try-with-resources語句。
4.單個catch中捕獲多個異常類型(用| 分割)並經過改進的類型檢查從新拋出異常。
java8
- lambada表達式(Lambda Expressions)。Lambda容許把函數做爲一個方法的參數(函數做爲參數傳遞進方法中)。
- 方法引用(Method references)。方法引用提供了很是有用的語法,能夠直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,可使語言的構造更緊湊簡潔,減小冗餘代碼。
- 默認方法(Default methods)。默認方法容許將新功能添加到庫的接口中,並確保兼容實現老版本接口的舊有代碼。
- 重複註解(Repeating Annotations)。重複註解提供了在同一聲明或類型中屢次應用相同註解類型的能力。
- 類型註解(Type Annotation)。在任何地方都能使用註解,而不是在聲明的地方。
- 類型推斷加強。
- 方法參數反射(Method Parameter Reflection)。
- Stream API 。新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。Stream API集成到了Collections API裏。
- HashMap改進,在鍵值哈希衝突時能有更好表現。
- Date Time API。增強對日期和時間的處理。
- 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
- java模塊系統 (Java Platform Module System)。
- 新的版本號格式。$MAJOR.$MINOR.$SECURITY.$PATCH
- java shell,交互式命令行控制檯。
- 在private instance methods方法上可使用@SafeVarargs註解。
- diamond語法與匿名內部類結合使用。
- 下劃線_不能單獨做爲變量名使用。
- 支持私有接口方法(您可使用diamond語法與匿名內部類結合使用)。
- 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)
var是一個保留類型名稱,而不是關鍵字。因此以前使用var做爲變量、方法名、包名的都沒問題,可是若是做爲類或接口名,那麼這個類和接口就必須重命名了。
var的使用場景主要有如下四種:
- 本地變量初始化。
- 加強for循環中。
- 傳統for循環中聲明的索引變量。
- Try-with-resources 變量。
2.Optional類添加了新的方法orElseThrow。相比於已經存在的get方法,這個方法更推薦使用。
java11
- 支持Unicode 10.0,在jdk10中是8.0。
- 標準化HTTP Client
- 編譯器線程的延遲分配。添加了新的命令-XX:+UseDynamicNumberOfCompilerThreads動態控制編譯器線程的數量。
- 新的垃圾收集器—ZGC。一種可伸縮的低延遲垃圾收集器(實驗性)。
- Epsilon。一款新的實驗性無操做垃圾收集器。Epsilon GC 只負責內存分配,不實現任何內存回收機制。這對於性能測試很是有用,可用於與其餘GC對比成本和收益。
- Lambda參數的局部變量語法。java10中引入的var字段獲得了加強,如今能夠用在lambda表達式的聲明中。若是lambda表達式的其中一個形式參數使用了var,那全部的參數都必須使用var。