專注JAVA十餘年:Java 5-11新特性超詳細總結
專注JAVA十餘年:Java 5-11新特性超詳細總結
java5
1.泛型 (Generics)
List<Integer> list=new ArrayList<Integer>();
2.增強迴圈(Enhanced for Loop)
3.自動封箱拆箱(Autoboxing/Unboxing )。
八大基本型別和它們的包裝類能夠自動的相互轉換。
4.列舉(Typesafe Enums)。
ps:列舉是一種實現執行緒安全的單例模式的好方式。
5.可變引數 (Varargs)
語法:(type… arguments)
可變引數本質仍然是用一個數組儲存引數,只是java隱藏了這一過程。需要注意的是如果一個方法宣告中含有可變引數,那必須放在最後一個位置。
6.靜態匯入(Static Import)。通過import類來使用類裡的靜態變數或方法(直接通過名字,不需要加上類名.),簡化了程式碼的書寫。
ps:過去的版本中只能通過繼承類或實現接口才能使用。
7.註解(Annotations)。關鍵字@interface。
8.新的執行緒模型和併發庫(java.util.concurrent)。
java6
1.集合框架增強。
為了更好的支援雙向訪問集合。添加了許多新的類和介面。
//以下為新增的新介面和類
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型別。
- 泛型例項化型別自動推斷。
- try-with-resources語句。
- 單個catch中捕獲多個異常型別(用| 分割)並通過改進的型別檢查重新丟擲異常。
java8
- lambada表示式(Lambda Expressions)。Lambda允許把函式作為一個方法的引數(函式作為引數傳遞進方法中)。
- 方法引用(Method references)。方法引用提供了非常有用的語法,可以直接引用已有Java類或物件(例項)的方法或構造器。與lambda聯合使用,可以使語言的構造更緊湊簡潔,減少冗餘程式碼。
- 預設方法(Default methods)。預設方法允許將新功能新增到庫的介面中,並確保相容實現老版本介面的舊有程式碼。
- 重複註解(Repeating Annotations)。重複註解提供了在同一宣告或型別中多次應用相同註解型別的能力。
- 型別註解(TypeAnnotation)。在任何地方都能使用註解,而不是在宣告的地方。 型別推斷增強。
- 方法引數反射(Method Parameter Reflection)。
- Stream API 。新新增的Stream API(java.util.stream) 把真正的函數語言程式設計風格引入到Java中。Stream API整合到了Collections API裡。
- HashMap改進,在鍵值雜湊衝突時能有更好表現。
- Date Time API。加強對日期和時間的處理。
- java.util 包下的改進,提供了幾個實用的工具類。 並行陣列排序。
- 標準的Base64編解碼。 支援無符號運算。
- 並行陣列排序。
- 標準的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)。
- 新的版本號格式。 M A J O R . MAJOR. MAJOR.MINOR. S E C U R I T Y . SECURITY. SECURITY.PATCH
- java shell,互動式命令列控制檯。
- 在private instance methods方法上可以使用@SafeVarargs註解。
- diamond語法與匿名內部類結合使用。
- 下劃線_不能單獨作為變數名使用。
- 支援私有介面方法(您可以使用diamond語法與匿名內部類結合使用)。
- Javadoc
- 簡化Doclet API。
- 支援生成HTML5格式。
- 加入了搜尋框,使用這個搜尋框可以查詢程式元素、標記的單詞和文件中的短語。
支援新的模組系統。
- .JVM
- w 3423增強了Garbage-First(G1)並用它替代Parallel GC成為預設的垃圾收集器。
- 統一了JVM 日誌,為所有元件引入了同一個日誌系統。
- 刪除了JDK 8中棄用的GC組合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。
-
properties檔案支援UTF-8編碼,之前只支援ISO-8859-1。
-
支援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。
想跳出舒適圈,向JAVA高階開發進階,或者需要學習Java架構知識的,可以找跟博主合作的教學機構扣扣:1405間隔256不要漢字385
需要和大牛交流,學習大廠網際網路開發知識,加入Java高階進階裙:前面:306 中間:893 最後:487。裡面聚集了一些正在做JAVA開發且有三年以上經驗的開發夥伴。
學習開發的這段時間,整理了一些開發學習思維導圖,大廠面試題,開發筆記。學習路線圖和學習筆記,原始碼筆記,面試真題等pdf文件需要的話私信博主。