筆記:大致記錄一下Java8-14版本特性,以及NIO中的類和方法。幫助梳理回憶串知識點
Java新特性總結
Java7 - 2011.7.28
switch中使用String。
try-with-resources。try(InputStream stream = ...)
捕獲多個異常。catch(IOException | NullPointerException e) {...}
泛型實例化類型自動推斷。
增加二進制表示。0B111, 0b001
數字中可增加分割符。1_000_000
Java8 - 2014.3.18
Lambda表達式。
方法引用。System.out::println
接口中增加默認方法和靜態方法。
重複註解。
更好地類型推斷
拓寬註解的應用場景
獲取參數名稱
Optional類
Stream API
Date / Time API
Nashorn JavaScript引擎
Base64
並行數組
JUC工具包擴充。併發性方面。 StampedLock、DoubleAccumulator、DoubleAddr、LongAccumulator、LongAddr
Noshorn引擎工具jjs命令,類依賴分析器jdeps
JVM特性。使用Metaspace代替持久代PermGen space。
Java9 - 2017.9.22 非TLS版本
modulartiy System模塊系統
HTTP/2
JShell。哈哈,Java也有shell了。
不可變集合工廠方法。List.of, Set.of, Map.of
私有接口方法
HTML5風格的Java幫助文檔
多版本兼容JAR
統一JVM日誌
Java9的垃圾收集機制
I/O流新特性
Java10 - 2018.3.20 非TLS版本
局部變量和類型推斷var關鍵字
GC改進和內存管理 並行全垃圾回收器G1
垃圾回收器接口
線程-局部變量管控
合併JDK多個代碼倉庫到一個單獨的儲存庫
新增API:ByteArrayOutputStream
List,Map,Set增加方法copyOf。獲取視圖?
Java11 - 2018.9.26
各種類的增強
化繁爲簡。一個java命令運行源代碼,java **.java
Java12 - 2019.3.19
switch可以作爲表達式
默認CDS歸檔
Shenandoah GC
JMH基準測試
JVM敞亮API
G1的可中斷maxed GC,歸還不可使用的內存
保留32位ARM端口和64位ARM實現
Java13 - 2019.9.17
文本塊。python中先有的
Java14 - 2020.3.17
文本塊和Switch表達式之前預覽過了。
instanceof 模式匹配。if (obj instanceof Group group)
Record預覽功能
NullPointerException異常信息更詳細
點評:Java增加了java *.java和jshell特色,哈哈,把人家解釋型語言方便使用的有點給借鑑來了。令我想起了go run *.go。有點“自欺欺人”的感覺,可能中間編譯產生的文件輸出到了%tmp%文件夾下,或者直接就存在了內存中?
Java NIO
管道
FileChannle(不能切換到非阻塞模式)
DatagramChannel
SocketChannel
ServerSocketChannel
AsynchronousFileChannel
緩衝
ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
FloatBuffer
LongBuffer
DoubleBuffer
MappedByteBUffer
選擇器
Golang語言中也存在選擇器
open, register,
(mark, reset) 成對的方法
(scatter read, gather write)
transferFrom(position, count, fromChannel) transferTo(...)
truncate
Pipe
寫入sink管道,從source管道讀出。
IO vs NIO
IO 面向流 阻塞IO
NIO 面向緩衝 非阻塞IO(注意FileChannle是阻塞的)
Paths Path
get, normalize,
Files File
exies, createDirectory, copy, move, move, walkFileTree