
1. 語言的演變
1.1. C和C++仍然是構建作業系統和各種嵌入式系統的流行工具
1.2. Java和C#等安全型語言在諸多運行資源不太緊張的應用中已經取代了C和C++
1.3. Java可能會被同樣運行在JVM上的競爭對手語言(如Scala或Groovy)取代
1.4. Ada、Algol、COBOL、Pascal、Delphi、SNOBOL沒落
1.4.1. COBOL一度是最重要的商用語言之一
2. Java的演進路徑
2.1. Java 8于2014年3月
2.1.1. 比Java歷史上任何一次改變都深遠
2.1.2. 長支持(LTS)
2.2. Java 9于2017年9月
2.2.1. 效率提升方面的重要改進
2.2.2. 反應式編程支持
2.2.2.1. RxJava
2.2.2.2. Akka
2.2.2.3. 構建高并發系統的標準方式
2.3. Java 10于2018年3月
2.3.1. 對型別推斷做了微調
2.4. Java 11于2018年9月
2.4.1. 異步HTTP客戶端庫
2.4.2. 長支持(LTS)
2.5. 12 2019 年 3 月
2.5.1. switch陳述句增強;數字轉字串NumberFormat;G1收集器的優化
2.6. 13 2019 年 9 月
2.6.1. switch優化更新;文本塊升級;增加ZGC以將未使用的堆記憶體回傳給作業系統
2.7. 14 2020 年 3 月
2.7.1. instanceof模式匹配;提出Records類;空指標例外的地方變得更具體;移除CMS垃圾收集器
2.8. 15 2020 年 9 月
2.8.1. 密封類;隱藏類;ZGC 成為正式的垃圾收集器
2.9. 16 2021 年 3 月
2.9.1. 記憶體管理提升;新的打包工具;UNIX-Domain Socket channels;Value-based Classes的警告;提供了 C++ 14語言特性
2.10. 17 2021 年 9 月
2.10.1. 恢復始終嚴格的浮點語意;增強型偽亂數發生器;棄用即將洗掉的Applet API
2.10.2. 長支持(LTS)
2.11. 18 2022 年 3 月
2.11.1. 指定 UTF-8 作為標準 Java API 的默認字符集;引入一個簡單的 Web 服務器;支持在 Java API 檔案中加入代碼片段
2.12. 19 2022 年 9 月
2.12.1. 結構化并發
2.12.2. Record模式
2.12.3. 外部函式和記憶體 API
2.12.4. 虛擬執行緒
2.12.5. switch 運算式和陳述句的模式匹配
2.13. 從Java的演進路徑來看,它一直致力于讓并發編程更容易、出錯更少
3. Java8解決了兩個迫切需求
3.1. 撰寫更簡潔的代碼
3.1.1. Stream API
3.1.1.1. 由Stream庫來選擇底層最佳執行機制
3.1.1.2. 避免用synchronized撰寫代碼
3.1.2. 向方法傳遞代碼的技巧
3.1.3. 介面的默認方法
3.2. 更方便地利用處理器的多核
4. 流處理
4.1. 流是一系列資料項,一次只生成一項
4.2. 程式可以從輸入流中一個一個讀取資料項,然后以同樣的方式將資料項寫入輸出流
5. 函式式編程范式的基石
5.1. 沒有共享的可變資料
5.1.1. 一個方法可以通過它將引數值轉換為結果的方式來完整描述
5.1.2. 就像一個數學函式,沒有可見的副作用
5.1.3. 所寫的代碼不能訪問共享的可變資料來完成它的作業
5.1.4. “純函式”“無副作用函式”或“無狀態函式”
5.2. 將方法和函式(即代碼)傳遞給其他方法的能力
5.2.1. 用行為引數化把代碼傳遞給方法
6. 命令式編程范式
6.1. 寫的程式則是一系列改變狀態的指令
7. 默認方法
7.1. 默認方法只是推行程式演進的一種技術,并不會直接幫助你實作某個特性
7.2. 介面可以包含實作類沒有提供實作的方法簽名了
7.3. 給介面設計者提供了一種擴充介面的方式,而不會破壞現有的代碼
7.4. 使用default關鍵字來表示
8. 方法和Lambda作為一等值
8.1. 方法參考
8.2. Lambda
8.2.1. 匿名函式
8.2.2. 長度多于幾行的話,還是應該用方法參考來指向一個有描述性名稱的方法,而不是使用匿名的Lambda
8.3. 以代碼的清晰度為準繩
9. 謂詞(predicate)
9.1. 在數學上常常用來代表類似于函式的東西,它接受一個引數值,并回傳true或false
9.2. Function?T,Boolean?
9.3. Predicate?T?
9.3.1. 更標準的方式
9.3.2. 效率更高
9.3.3. 避免了把boolean封裝在Boolean里面
10. 外部迭代
10.1. for-each回圈一個個地迭代元素
10.2.

11. 內部迭代
11.1. 資料處理完全是在庫內部進行的
11.2.

12. Optional?T?類
12.1. 通過顯式使用更多的描述性資料型別來避免null
12.2. 如果能一致地使用它,就能幫助避免出現Null-PointerException
12.3. 一個容器物件,它既可以包含值,也可以不包含值
12.4. 通過型別系統,允許表明一個變數可能缺失值
13. (結構化的)模式匹配
13.1. 使用模式匹配比if-then-else更簡明
13.1.1. 編譯器能夠檢測常見的錯誤
13.2. 采用多型和方法重寫替代if-then-else來處理這種型別的資料
14. 演變
14.1. 使用for-each回圈,而不用暴露Iterator里面的模板寫法
14.2. 經典面向物件思想,而向函式式編程領域轉變
14.2.1. Collection主要是為了存盤和訪問資料,Stream則主要用于描述對資料的計算
14.3. Java 9提供了模塊系統
14.3.1. 模塊對簡單的類JAR組件進行了增強,使其具備了結構,既能作為用戶檔案,也能由機器進行檢查
14.4. 菱形繼承問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543040.html
標籤:Java
