java10新特性(簡述十大新特性)

它號稱有109項新特性,包含12個JEP。

需要注意的是,本次Java10並不是Oracle的官方LTS版本,所以咱們可以先了解新特性。然後坐等java11的發佈再考慮在生產中使用吧

特性列表

  • 局部變量的類型推斷 var關鍵字
  • GC改進和內存管理 並行全垃圾回收器 G1
  • 垃圾回收器接口
  • 線程-局部變量管控
  • 合併 JDK 多個代碼倉庫到一個單獨的儲存庫中
  • 新增API:ByteArrayOutputStream
  • 新增API:List、Map、Set
  • 新增API:java.util.Properties
  • 新增API: Collectors收集器
  • 其它特性

1、局部變量的類型推斷 var關鍵字

這個新功能將爲Java增加一些語法糖 - 簡化它並改善開發者體驗。新的語法將減少與編寫Java相關的冗長度,同時保持對靜態類型安全性的承諾。

這可能是Java10給開發者帶來的最大的一個新特性。下面主要看例子:

  public static void main(String[] args) {
        var list = new ArrayList<String>();
        list.add("hello,world!");
        System.out.println(list);
    }

這是最平常的使用。注意賦值語句右邊,最好寫上泛型類型,否則會有如下情況:

 public static void main(String[] args) {
        var list = new ArrayList<>();
        list.add("hello,world!");
        list.add(1);
        list.add(1.01);
        System.out.println(list);
    }

list什麼都可以裝,非常的不安全了。和js等語言不同的是,畢竟Java還是強類型的語言,所以下面語句是編譯報錯的:

public static void main(String[] args) {
        var list = new ArrayList<String>();
        list.add("hello,world!");
        System.out.println(list);

        list = new ArrayList<Integer>(); //編譯報錯
    }

注意:注意:注意:下面幾點使用限制

  1. 局部變量初始化
  2. for循環內部索引變量
  3. 傳統的for循環聲明變量
public static void main(String[] args) {
        //局部變量初始化
        var list = new ArrayList<String>();
        //for循環內部索引變量
        for (var s : list) {
            System.out.println(s);
        }
        //傳統的for循環聲明變量
        for (var i = 0; i < list.size(); i++) {
            System.out.println(i);
        }
    }

下面這幾種情況,都是不能使用var的

方法參數
全局變量

public static var list = new ArrayList<String>(); //編譯報錯
    public static List<String> list = new ArrayList<>(); //正常編譯通過

構造函數參數
方法返回類型
字段
捕獲表達式(或任何其他類型的變量聲明)

2、GC改進和內存管理 並行全垃圾回收器 G1

JDK 10中有2個JEP專門用於改進當前的垃圾收集元素。
Java 10的第二個JEP是針對G1的並行完全GC(JEP 307),其重點在於通過完全GC並行來改善G1最壞情況的等待時間。G1是Java 9中的默認GC,並且此JEP的目標是使G1平行。

3、垃圾回收器接口

這不是讓開發者用來控制垃圾回收的接口;而是一個在 JVM 源代碼中的允許另外的垃圾回收器快速方便的集成的接口。

4、線程-局部變量管控

這是在 JVM 內部相當低級別的更改,現在將允許在不運行全局虛擬機安全點的情況下實現線程回調。這將使得停止單個線程變得可能和便宜,而不是隻能啓用或停止所有線程。

5、合併 JDK 多個代碼倉庫到一個單獨的儲存庫中

在 JDK9 中,有 8 個倉庫: root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10 中這些將被合併爲一個,使得跨相互依賴的變更集的存儲庫運行 atomic commit (原子提交)成爲可能。

6、新增API:ByteArrayOutputStream

String toString(Charset): 重載 toString(),通過使用指定的字符集解碼字節,將緩衝區的內容轉換爲字符串。

7、新增API:List、Map、Set

這3個接口都增加了一個新的靜態方法,copyOf(Collection)。這些函數按照其迭代順序返回一個不可修改的列表、映射或包含給定集合的元素的集合。

8、新增API:java.util.Properties

增加了一個新的構造函數,它接受一個 int 參數。這將創建一個沒有默認值的空屬性列表,並且指定初始大小以容納指定的元素數量,而無需動態調整大小。還有一個新的重載的 replace 方法,接受三個 Object 參數並返回一個布爾值。只有在當前映射到指定值時,纔會替換指定鍵的條目。

9、新增API: Collectors收集器

toUnmodifiableList():
toUnmodifiableSet():
toUnmodifiableMap(Function, Function):
toUnmodifiableMap(Function, Function, BinaryOperator):
這四個新方法都返回 Collectors ,將輸入元素聚集到適當的不可修改的集合中。

10、其它特性

線程本地握手(JEP 312)

其他Unicode語言 - 標記擴展(JEP 314)

基於Java的實驗性JIT編譯器

根證書頒發認證(CA)

刪除工具javah(JEP 313)

從JDK中移除了javah工具,這個很簡單並且很重要。

最後

JDK10的升級幅度其實主要還是以優化爲主,並沒有帶來太多對使用者驚喜的特性。所以建議廣大開發者還是研究一下2018年9月份到來Java11吧,最重要的是它是LTS版本哦,所以是可以運用在生產上的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章