笔记:大致记录一下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