JDK11特性
一、JAVA11 概述
2018年9月26日,Oracle官方发布JAVA11.这是JAVA大版本周期变化后的第一个长期支持版本,非常值得关注.最新发布的JAVA11将带来ZGC HttpClient等重要特性,一共17个需要我们关注的JEP,参考文档http://openjdk.java.net/projects/jdk/11/
具体的特性介绍
- 181:基于嵌套的访问控制
- 309:动态类文件常量
- 315:改进Aarch64 Intrinsics
- 318:Epsilon:一个无操作的垃圾收集器
- 320:移除Java EE和CORBA模块
- 321:HTTP客户端(标准)
- 323:本地变量语法Lambda参数
- 324:与Curve25519和Curve448的密钥一致
- 327: Unicode 10
- 328:飞行记录器
- 329: ChaCha20和Poly1305密码算法
- 330:启动单文件源代码程序
- 331:低开销堆分析
- 332: TLS (Transport Layer Security) 1.3
- 333:ZGC:一个可伸缩的低延迟垃圾收集器 (实验)
- 335:已弃用Nashorn JavaScript引擎
- 336:已弃用Pack200工具和API
二、语法层次的变化
1. 局部变量类型推断升级
局部变量类型推断是java10开始新增的新特性,java11中对局部变量推断进行了升级,在var支持添加注解的语法格式,JAVA10中是无法实现的,在JAVA11中加入了这样的语.
lambda表达式中,注解修饰变量的时候,变量的数据类型必须要写,不能省略,像下面这种写法就是错误的
Consumer<String> con =(@Deprecated t) -> System.out.println(t.toLowerCase());
这个时候就必须要为小括号中的参数添加数据类型,应该这样写
Consumer<String> con =(@Deprecated String t) -> System.out.println(t.toLowerCase());
java11中,lambda表达式中的参数数据类型可以使用var,但是不能不写
Consumer<String> con =(@Deprecated var t) -> System.out.println(t.toLowerCase());
三、API层次的提升
1. String新增的方法
在JDK11中对String处理新增的很多方法。简化对字符串的操作
描述 | 举例 |
---|---|
判断字符串是否为空白 | " ".isBlank(); // true |
去除字符串首尾空白 | " www.boge.com ".strip(); // “www.boge.com” |
去除字符串尾部空格 | " www.boge.com “.stripTrailin(); // " www.boge.com” |
去除字符串首部空格 | " www.boge.com ".stripLeading(); // "www.boge.com " |
复制字符串 | “boge”.repeat(2);// “bogeboge” |
行数统计 | “A\nB\nC\nD”.lines().count(); // 4 |
public static void main(String[] args) {
// 判断字符串是否为空白
boolean b = " ".isBlank();// true
// 去除字符串首尾空白
String s1 = " www.boge.com ".strip();// "www.boge.com"
// 去除字符串尾部空格
String s2