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


java5

1.泛型 (Generics)

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

2.增強循環(Enhanced for Loop)

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

 

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

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM