JDK9
1.模块化系统
1.1弊端显露
- 运行环境臃肿,JVM直接将全部的jar进行加载。
- 代码库庞大,创建复杂,交叉引用依赖影响效率。
- 没有对代码实现真正意义的封装。
1.2模块化系统的改进意义
在jar和package之间增加了一层moudule层,项目中分为相互独立的模块,运行测试时,只需要必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护 ,这样不仅减少了内存的开销,还提高了项目的安全性和可拓展性。
2JShell命令
出现了 像Python 语言中的交互式编程环境,开发者只需要输入一些代码,就可以在编译前获得对程序的反馈,总结就是即用即得。
3.接口私有方法
接口中方法默认为抽象方法,JDK8接口中可以有静态方法和默认方法(实现类中不实现接口方法就默认实现默认方法),JDK9接口中可以有私有方法,供接口中方法内部使用的方法
4.try语句
Java 8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过。
Java 9 中,用资源语句编写try将更容易,我们可以在try子句中使用已经初始化过的资源,此时的资源是final的
5.String存储结果改变
JDK8及以前,用char【】来存储
JDK9以后 ,用byte【】加上编码标记,节省空间。
6.结合特性of
用创建一个只读,不可改变的集合,必须构造和分配它,然后添加元素,最后包装成一个不可修改的集合。多个步骤比较繁琐,JDK9将方法封装起来,调用就可一键完成。
7.InputStream增强
使用流传输步骤繁琐,进行了简化,出现了一个方法transferTo,可以用来将数据直接传输到 OutputStream。
8.增强的 的 Stream API
8.1takeWhile方法
用于从 Stream 中获取一部分数据,接收一个 Predicate 来进行选择。在有序的Stream 中,takeWhile 返回从开头开始的尽量多的元素。
8.2dropWhile方法
与takeWhile方法互补 返回takeWhile中剩余元素
8.3ofNullable()
Java 8 中 Stream 不能完全为null,否则会报空指针异常。而 Java 9 中的 ofNullable 方法允许我们创建一个单元素 Stream,可以包含一个非空元素,也可以创建一个空Stream。
8.4iterate() 重载
这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。
9.Optional 类中stream()使用
两个常用方法:
Optional.ofNullable(list);
optional.stream().flatMap(x->x.stream()).limit(2).forEach(System.out::println);
JDK10新特性
1.局部类型推断
用 var 接受变量, 原理根据后者推断前者。
四种情况不能推断
- 初始值为空
- 方法引用
- lambda表达式
- 为静态数组初始化
2. 新增不可变集合方法
继JDK9之后又出现了一个创建不可变集合的方法copyOf。
copyOf 方 法 会 先 判 断 来 源 集 合 是 不 是AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用 of 创建一个新的集合。
JDK11新特性
1.增加ZGC垃圾回收器
2.Optional加强
3.新增HTTP客户端API
JDK14新特性
改进的NullPointerExceptions,jdk14以前空指针异常
JDK15新特性
jdk15提供text block 功能,解决字符串多行换行问题
//jdk15增加文本块
String str = """
hello
world
hahaha
""";
System.out.println(str);
JDK16新特性
switth结构用法的改变
//JDK8的用法:
//JDK8的用法:
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);
}
JDK9的用法:
//JDK9的用法:
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(12);
String jiJi = null;
switch (level){
case 3,4,5 -> jiJi = "春天";
case 6,7,8 -> jiJi = "夏天";
case 9,10,11 -> jiJi = "秋天";
case 12,1,2 -> jiJi = "冬天";
};
System.out.println(jiJi);
}
以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!