一,JDK9新特性
1,模块化系统
模块化系统是jdk9的一个新特性。
在jdk1-8中JVM启动的时候都会加载rt.jar,这样会导致Java运行环境的膨胀与臃肿,代码库越来越大,创建复杂,都会阻碍Java开发和运行效率的提升,还很难对代码进行真正的封装。
作用:
-
模块化的主要目的在于减少内存的开销
-
只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护
-
改进 Java SE 平台,使其可以适应不同大小的计算设备
-
改进其安全性,可维护性,提高性能
2,JSell命令
开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。而之前的Java版本要想执行代码,必须创建文件、声明类、提供测试方法方可实现。
3,接口私有方法
接口都有默认的静态常量和抽象方法。在jdk8时新增了静态方法和默认方法。jdk9时接口可以有私有方法了。
4,钻石操作修饰符使用升级
在jdk8中,如下代码是报错的
<>必须写类型。
而在jdk9中,上述代码就不报错,这是对<>钻石运算符的一个升级。
5,try语句
Java 8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过。如下例所示:
Java 9 中,用资源语句编写try将更容易,我们可以在try子句中使用已经初始化过的资源,此时的资源是final的
6,spring存储结构变更
jdk8之前,String 是用 char[] 来存储的,jdk9改成了 byte[] 加上编码标记,节约了一些空间。
7,集合特性of
创建只读集合(即长度,内容都不可修改)。
8,InputStream增强
jdk9新增了方法transferTo方法,可以将数据直接传输到OutputStream。
9,增强了Stream API
二,JDK10新特性
1,局部变量类型推断
Java编译器将根据变量声明的右侧表达式的类型自动推断变量类型。
2,新增不可变集合方法
copeof()方法,可以将普通的集合变为长度不可变的集合(不可增加或删除集合元素,但可以修改集合元素)。
三,JDK11新特性
1,增加ZGC垃圾回收器
2,Optional加强
3,新增HTTP协议客户端API
四,JDK14新特性
1,改进空指针异常报错信息
JDK14以后的空指针异常报错信息中可以精确的看到空指针的位置。
五,JDK15新特性
1,文本块
jdk8之前spring字符串类型声明时如果要换行需要用+拼接,jdk9之后就不需要用+拼接了
六,JDK16新特性
1,switch的升级
-
比如case标签之间的默认控制行为
-
case块中的默认范围
-
无意义的break语句。
jdk16以前switch结构用法:
public static void main(String[] args) {
int level = new Random().nextInt(4);
String strLevel;
switch (level){
case 1:
strLevel = "优秀";
break;
case 2:
strLevel = "良好";
break;
default:
strLevel = "一般";
break;
}
System.out.println(strLevel);
}
jdk16对应用法
public static void main(String[] args) {
int level = new Random().nextInt(4);
String strLevel;
switch (level){
case 1 -> strLevel="优秀";
case 2 -> strLevel="良好";
default -> strLevel="一般";
}
System.out.println(strLevel);
}
衍生出来的用法
public static void main(String[] args) {
int level = new Random().nextInt(4);
String strLevel = switch (level){
case 1-> "优秀";
case 2-> "良好";
default -> "一般";
};
System.out.println(strLevel);
}