1.JDK9新特性
1.模块化系统
这是Java 9最大的特性,它提供了类似于OSGI框架的功能,模块之间存在相互的依赖关系,可以导出一个公共的API,并且隐藏实现的细节。Java提供该功能的主要的动机在于,减少内存的开销。相比较之前,增加了module,加载时可以只加载这一模块,节省了时间,增加了效率。
2.JShell和Jlink
JShell是Java 9中新增的交互式Java编程环境, Jlink是Java 9中新增的工具,用于生成自定义的Java运行时映像,可以包含或排除特定的模块。
3.不可变集合类工厂方法
Java 9新增了一些不可变集合类工厂方法,这些方法可以更方便地创建不可变集合。
4.接口私有方法
在Java 9中,接口更加的灵活和强大,方法的访问权限修饰符可以用private声明。
5.钻石操作符使用升级
jdk8中,<>中必须写类型,jdk9中不报错,因为等号左边已经声明类型,右边不需要再声明
6.try语句
Java 8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过。
Java 9 中,用资源语句编写try将更容易,我们可以在try子句中使用已经初始化过的资源,此时的资源是final的
7.String存储结构变更
String 不用 char[] 来存储,改成 byte[] 加上编码标记,节约了一些空间。
8.集合特性of()
jdk8时,要创建一个只读、不可改变的集合,必须构造和分配它,然后添加元素,最后包装成一个不可修改的集合。
但是一下子写了很多行很麻烦,jdk9可以创建只读集合:
9.InputStream增强
transferTo()方法可以直接将读取的数据传输到输出流OutputStream中:
10.增强Stream API
在 Java 9 中,Stream API 变得更好,Stream 接口中添加了 4 个新的方法:takeWhile, dropWhile, ofNullable,还有个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。
除了对 Stream 本身的扩展,Optional 和 Stream 之间的结合也得到了改进。现在可以通过 Optional 的新方法 stream() 将一个 Optional 对象转换为一个(可能是空的) Stream 对象。
1.takeWhile()的使用
用于从 Stream 中获取一部分数据,接收一个 Predicate 来进行选择。在有序的Stream 中,takeWhile 返回从开头开始的尽量多的元素:
2.dropWhile()的使用
dropWhile 的行为与 takeWhile 相反,返回剩余的元素:
3.ofNullable()的使用
Java 8 中 Stream 不能完全为null,否则会报空指针异常。而 Java 9 中的 ofNullable 方法允许我们创建一个单元素 Stream,可以包含一个非空元素,也可以创建一个空Stream:
4.iterate()重载
2.JDK10新特性
1.局部变量类型推断
但是以下情况不适用:
1.初始值为null
2.方法引用
3.Lambda表达式
4.为数组静态初始化
2.新增copyOf()不可变集合方法
3.JDK11新特性
1.增加ZGC垃圾回收器
2.Optional加强
Optional 也增加了几个非常酷的方法,现在可以很方便的将一个 Optional 转换成一个 Stream, 或者当一个空 Optional 时给它一个替代的:
3.新增HTTP客户端API
4.JDK14新特性
改进的NullPointerExceptions,jdk14以前空指针异常
5.JDK15新特性
字符串换行问题解决
6.JDK16新特性
进行了Switch升级,简化前:
简化后: