从Java 9 这个版本开始,Java 的计划发布周期是 6 个月
这意味着Java的更新从传统的以特性驱动
的发布周期,转变为以时间驱动
的(6 个月为周期)发布模式,并逐步的将 Oracle JDK 原商业特性进行开源。
针对企业客户的需求,Oracle 将以三年为周期发布长期支持版本(long term support)
。
Java 9 提供了超过150项新功能特性
,包括备受期待的模块化系统、可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说Java 9是一个庞大的系统工程,完全做了一个整体改变。
主要新特性:
.
.
一、Java 8之后目录改变
.
.
二、模块化系统
.
exports
:控制着哪些包可以被其它模块访问到。所有不被导出的包默认都被封装在模块里面。
requires
:指明对其它模块的依赖。
.
.
三、Java的REPL工具: jShell命令
即写即得、快速运行
jShell。让Java可以像脚本语言一样运行
,从控制台启动jShell,利用jShell在没有创建类的情况下直接声明变量,计算表达式,执行语句。即开发时可以在命令行里直接运行Java的代码,而无需创建Java文件
,无需跟人解释”public static void main(String[] args)”这句废话。jShell也可以从文件中加载语句或者将语句保存到文件中。
tab键进行自动补全和自动添加分号
.
.
四、语法改进:接口的私有方法
还可以定义静态方法和默认的方法。
连方法的访问权限修饰符都可以声明为private的了
,此时方法将不会成为你对外暴露的API的一部分.
.
五、语法改进:钻石操作符使用升级
在Java 8中,赋的值必须要显示的在<>定义类型,但Java 9不用了。
.
.
六、语法改进:try语句
资源的自动关闭
,但是要求执行后必须关闭的所有资源必须在try子句中初始化
,否则编译不通过。使用已经初始 化过的资源
,此时的资源是final
的(在try语句中不能修改属性的值
)。七、String存储结构变更
改成了 byte[] 加上编码标记,节约了一些空间
。并且StringBuffer、StringBuilder也变成用byte[]存储了!
八、集合工厂方法:快速创建只读集合
Java 9之前要创建一个只读、不可改变的集合,就要包装成一个不可修改的集合
–>Collections类的静态方法unmodifiableXxx(Xxx)
。
Java 9因此引入了方便的方法" 集合.of() "
,创建的就是一个只读、不可改变的集合,这使得类似的事情更容易表达。
.
.
九、InputStream 加强
transferTo
,可以用来将数据直接传输到 OutputStream!!!十、增强的StreamAPI
takeWhile()
:在有序的Stream 中,takeWhile 返回从开头开始
的尽量多的元素(遇到不满足条件的就不在遍历下去,即使后面的数据满足条件
)。
dropWhile()
:dropWhile 的行为与 takeWhile 相反,返回剩余的元素(遇到第一个不满足的情况就获取后面所有的元素
)。
ofNullable()
:Java 8 中 Stream 的参数不能只有单个null元素
,否则会报空指针异常。
而 Java 9 中的 ofNullable 方法
允许我们创建一个单元素 Stream,可以包含一个非空元素,也可以创建一个空Stream。
iterate()重载
(无限流):这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。
.
.
十一、Optional获取Stream的方法
stream()的使用
.
.
.
LTS (Long-Term-Support) 版本:长期稳定性版本!!!!!!!!!
LTS (Long-Term-Support) 版本
。和过去的 Java 大版本升级不同,这两个只有半年左右的开发和维护期。而 Java 11,也就是 18.9 LTS,才是 Java 8 之后第一个 LTS 版本。
.
主要新特性
.
.
一、局部变量类型推断
var:只适用于局部变量,不适用于类变量
适用于以下情况:
在局部变量中使用时,如下情况不适用:
.
.
工作原理
在处理 var时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行推断,作为左边变量的类型,然后将该类型写入字节码当中。
但不可以当类名使用
并不会改变Java是一门静态类型语言的事实
.
.
二、集合新增创建不可变集合的方法
of (jdk9新增)和copyOf (jdk10新增)
方法,它们两个都用来创建不可变的集合。
判断来源集合是不是AbstractImmutableList 类型的
,如果是,就直接返回,如果不是,则调用 of 创.
.
.
JDK 11 是一个长期支持版本(LTS, Long-Term-Support)
.
.
一、新增了一系列字符串处理方法
.
.
二、Optional 加强
.
.
三、局部变量类型推断升级
var上添加注解的语法格式
,在jdk10中是不能实现的。在JDK11中加入了这样的语法.
.
四、全新的HTTP 客户端API
.
.
五、更简化的编译运行程序
在我们的认知里面,要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示:java Javastack.java
一个命令编译运行源代码的注意点:
执行源文件中的第一个类, 第一个类必须包含主方法。
并且不可以使用其它源文件中的自定义类
, 本文件中的自定义类是可以使用的。