Java5的新特性
1、泛型
<code>List<integer> list=new ArrayList<integer>();/<integer>/<integer>/<code>
2、枚舉
枚舉是一種實現線程安全的單例模式的好方式。
![Java 5-12 新特性全面總結](http://p2.ttnews.xyz/loading.gif)
3、自動封箱拆箱(Autoboxing/Unboxing )。八大基本類型和它們的包裝類能夠自動的相互轉換。
4、可變參數 (Varargs)
語法:(type... arguments)
可變參數本質仍然是用一個數組存儲參數,只是java隱藏了這一過程。需要注意的是如果一個方法聲明中含有可變參數,那必須放在最後一個位置。
![Java 5-12 新特性全面總結](http://p2.ttnews.xyz/loading.gif)
5、靜態導入(Static Import)。通過import類來使用類裡的靜態變量或方法(直接通過名字,不需要加上類名.),簡化了代碼的書寫。(過去的版本中只能通過繼承類或實現接口才能使用)
6、註解(Annotations)。關鍵字@interface。
7、新的線程模型和併發庫(java.util.concurrent)。
8、增強循環(Enhanced for Loop)
9、Arrays工具類/StringBuilder/instrument
Java6新特性
主要變化:
1.集合框架增強。
- 為了更好的支持雙向訪問集合。添加了許多新的類和接口。
- 新的數組拷貝方法。Arrays.copyOf和Arrays.copyOfRange
<code>//以下為添加的新接口和類Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry/<code>
2.JSR223腳本引擎,Scripting. 可以讓其他語言在java平臺上運行。 java6包含了一個基於Mozilla Rhino實現的javascript腳本引擎。
3.支持JDBC4.0規範。
- JSR199--Java Compiler API
- JSR269--Pluggable Annotation Processing API
- 支持JDBC4.0規範
- JAX-WS 2.0規範
Java7新特性
1.二進制前綴0b或者0B。整型(byte, short, int, long)可以直接用二進制表示。
2.字面常量數字的下劃線。用下劃線連接整數提升其可讀性,自身無含義,不可用在數字的起始和末尾。
<code> //數字間的下劃線不影響實際值 int k = 1_1;//值為11/<code>
- switch 支持String類型。
- 泛型實例化類型自動推斷。
3.try-with-resources語句。
4.單個catch中捕獲多個異常類型(用| 分割)並通過改進的類型檢查重新拋出異常。
Java8新特性
- 並行數組排序。
- 標準的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新特性
9版本是過渡版本
Java9 開始,Oracle公司轉變方式,每6個月發佈一次新版本,Java將更加有活力,其他語言的語法糖或編譯器已經很先進、方便,Java不能不開始變革,Oracle希望6個月一個次版本發佈,逐步將這個龐大的生態改變,目標是再一次引領時代的未來,來讓我們看下9到12版本的變遷吧。
- 簡化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新特性
11版本是8版本之後第一個長支持的版本,可以考慮從8直接升級到11版本,11版本涵蓋了9和10的版本特性,並做了優化。
Java12新特性
12版本也是一個過渡版本
- 支持原生字符串,ts/js等語言早已支持,java再不支持就說不過去了,不過這個語法真的是方便,我預言Java12以後模版引擎將成為過去式。
- 轉譯支持
- 邊距處理
原生字符串支持
Java中書寫多行字符串和特殊轉義字符時非常不方便和不直觀,Java 12將會引入原生字符串(Raw String Literals)解決這一問題。
Java 12之前的寫法:
String html = "\\n" + "
\\n" +"
Hello World.
\\n" +" \\n" + "\\n";
Java 12的寫法:
String html = `
Hello World.
`;轉義支持(Escapes)
為了原生字符串中使用轉義字符,String class中增加了兩個方法:
public String unescape()
public String escape()
以下結果都返回true:
boolean b0 = `\\n`.equals("\\\\n");
boolean b1 = `\\n`.unescape().equals("\\n");
boolean b2 = `\\n`.length == 2;
boolean b3 = `\\n`.unescape().length == 1;
邊距管理(Margin Management)
為了處理多行字符串左邊距的問題,String class中增加了兩個方法:
public String align()
public String indent(int n)
align方法用來去掉開頭和結尾的空白行,保持每行的相對縮進。
indent方法用來控制每行開頭增加或減少幾個空格,n為正數時增加,n為負數時減少。
通常會組合兩者使用,align().indent(n),所以另外提供了一個組合方法:
public String align(int n)
閱讀更多 三年起步 的文章