Java_新特性(Java8---->Java11)


第二十二章 新特性

22.1 Java8的新特性

22.1.1 Java8的概述

  • Java8是 Java 語言的一個重要版本,該版本於2014年3月發布,是自Java5以來最具革命性的版本,這個版本包含語言、編譯器、庫、工具和JVM等方面的十多個新特性。

22.1.2 函數式接口

  • 函數式接口主要指只包含一個抽象方法的接口,如:java.lang.Runnable、java.util.Comparator接口等。
  • Java8提供@FunctionalInterface注解來定義函數式接口,若定義的接口不符合函數式的規范便會報錯。
  • Java8中增加了java.util.function包,該包包含了常用的函數式接口,具體如下:

22.1.3 Lambda表達式

  • Lambda 表達式是實例化函數式接口的重要方式,使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
  • lambda表達式:參數列表、箭頭符號->和方法體組成,而方法體中可以是表達式,也可以是語句塊。
  • 語法格式:(參數列表) -> { 方法體; } - 其中()、參數類型、{} 以及return關鍵字 可以省略。

22.1.4 方法引用

  • 方法引用主要指通過方法的名字來指向一個方法而不需要為方法引用提供方法體,該方法的調用交給函數式接口執行。
  • 方法引用使用一對冒號 :: 將類或對象與方法名進行連接,通常使用方式如下:
    • 對象的非靜態方法引用 ObjectName :: MethodName
    • 類的靜態方法引用 ClassName :: StaticMethodName
    • 類的非靜態方法引用 ClassName :: MethodName
    • 構造器的引用 ClassName :: new
    • 數組的引用 TypeName[] :: new
  • 方法引用是在特定場景下lambda表達式的一種簡化表示,可以進一步簡化代碼的編寫使代碼更加緊湊簡潔,從而減少冗余代碼。

22.1.5 Stream接口

  • 案例題目:
    • 准備一個List集合並放入Person類型的對象,將集合中所有成年人過濾出來放到另外一個集合並打印出來。

(1)基本概念

  • java.util.stream.Stream接口是對集合功能的增強,可以對集合元素進行復雜的查找、過濾、篩選等操作。
  • Stream接口借助於Lambda 表達式極大的提高編程效率和程序可讀性,同時它提供串行和並行兩種模式進行匯聚操作,並發模式能夠充分利用多核處理器的優勢。

(2)使用步驟

  • 創建Stream,通過一個數據源來獲取一個流。
  • 轉換Stream,每次轉換返回一個新的Stream對象。
  • 對Stream進行聚合操作並產生結果。

(3)創建方式

  • 方式一:通過調用集合的默認方法來獲取流,如:default Stream stream()
  • 方式二:通過數組工具類中的靜態方法來獲取流,如:static IntStream stream(int[] array)
  • 方式三:通過Stream接口的靜態方法來獲取流,如:static Stream of(T... values)
  • 方式四:通過Stream接口的靜態方法來獲取流,static Stream generate(Supplier<? extends T>s)

(4)中間操作

  • 篩選與切片的常用方法如下:
  • 映射的常用方法如下:
  • 排序的常用方法如下:

(5)終止操作

  • 匹配與查找的常用方法如下:
  • 規約的常用方法如下:
  • 收集的常用方法如下:

22.1.6 Optional類

  • 案例題目
    • 判斷字符串是否為空,若不為空則打印字符串的長度,否則打印0。

(1)基本概念

  • java.util.Optional類可以理解為一個簡單的容器,其值可能是null或者不是null,代表一個值存在或不存在。
  • 該類的引入很好的解決空指針異常,不用顯式進行空值檢測。

(2)常用的方法

22.2 Java9的新特性

22.2.1 Java9的概述

  • Java9發布於2017年9月發布,帶來了很多新特性,其中最主要的變化是模塊化系統。
  • 模塊就是代碼和數據的封裝體,模塊的代碼被組織成多個包,每個包中包含Java類和接口,模塊的數據則包括資源文件和其他靜態信息。

22.2.2 模塊化的使用

(1)語法格式

  • 在 module-info.java 文件中,我們可以用新的關鍵詞module來聲明一個模塊,具體如下:
    • module 模塊名稱 {
    • }

(2)模塊化的優勢

  • 減少內存的開銷。
  • 可簡化各種類庫和大型應用的 開發和維護。
  • 安全性,可維護性,提高性能。

22.2.3 鑽石操作符的使用升級

  • 在Java9中允許在匿名內部類的使用中使用鑽石操作符。

22.2.4 集合工廠方法

(1)基本概念

  • Java9的List、Set和Map集合中增加了靜態工廠方法of實現不可變實例的創建。
  • 不可變體現在無法添加、修改和刪除它們的元素。
  • 不允許添加null元素對象。

(2)實際意義

  • 保證線程安全:在並發程序中既保證線程安全性,也大大增強了並發時的效率。
  • 被不可信的類庫使用時會很安全。
  • 如果一個對象不需要支持修改操作,將會節省空間和時間的開銷。
  • 可以當作一個常量來對待,並且這個對象在以后也不會被改變。

22.2.5 InputStream的增強

  • InputStream類中提供了transferTo方法實現將數據直接傳輸到OutputStream中。

22.3 Java10的新特性

22.3.1 Java10的概述

  • Java10於2018年3月發布,改進的關鍵點包括一個本地類型推斷、一個垃圾回收的增強。
  • Java10計划只是一個短期版本,因此公開更新將在六個月內結束,9月份發布的Java11將是Java的長期支持(LTS)版本,LTS版本的發布每三年發布一次。

22.3.2 局部變量類型推斷

(1)基本概念

  • Java10可以使用var作為局部變量類型推斷標識符,此符號僅適用於局部變量,增強for循環的索引,以及傳統for循環的本地變量。
  • 它不能使用於方法形式參數,構造函數形式參數,方法返回類型,字段,catch形式參數或任何其他類型的變量聲明。

(2)實際意義

  • 標識符var不是關鍵字,只是一個保留的類型名稱。這意味着var用作變量,方法名或包名的代碼不會受到影響,但var不能作為類或則接口的名字。
  • 避免了信息冗余。
  • 對齊了變量名。
  • 更容易閱讀。

22.4 Java11的新特性

22.4.1 Java11的概述

  • Java11於2018年9月正式發布,這是 Java 大版本周期變化 后的第一個長期支持版本,非常值得關注。

22.4.2 簡化的編譯運行操作

  • 在Java11中可以使用java命令一次性進行編譯和運行操作。
  • 執行源文件中的第一個類必須包含主方法。
  • 不可以使用其它源文件中自定義的類。

22.4.3 String類新增方法


免責聲明!

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



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