每篇一句
李连杰:生命开始的时候到生命结束。头半段是需要别人帮忙的
经过4次跳票,历经曲折的java 9 终于终于在2017年9月21日发布(距离上个版本足足3年半时间)
java 9 提供了超过 150 项新功能特性,包括备受期待的模块化系统、可交互的 REPL 工具:jshell,JDK 编译工具,Java 公共 API 和私有代码,以及安全增强、扩展提升、性能管理改善等。可以说 Java 9 是一个庞大的系统工程,完全做了一个整体改变。但本博文只介绍最重要的十大新特性
特性列表
平台级modularity(原名:Jigsaw) 模块化系统
Java 的 REPL 工具: jShell 命令
多版本兼容 jar 包(这个在处理向下兼容方面,非常好用)
语法改进:接口的私有方法
语法改进:UnderScore(下划线)使用的限制
底层结构:String 存储结构变更(这个很重要)
集合工厂方法:快速创建只读集合
增强的 Stream API
全新的 HTTP 客户端 API
其它特性
它的新特性来自于100于项JEP和40于项JSR
1. 平台级modularity(原名:Jigsaw) 模块化系统
模块化系统Java7开始筹备,Java8进行了大量工作,Java9才落地。首先带来最直观的感受,就是目录结构的感受:
JDK8以及以前版本:
而Java9的结构目录:
对目录做相应的介绍:
Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的**“意大利面条式代码”的几率呈指数级的增长**。这时候就得面对两个基础的问题: 很难真正地对代码进行封装, 而系统并没有对不同部分(也就是 JAR 文件)之间的依赖关系有个明确的概念。每一个公共类都可以被类路径之下任何其它的公共类所访问到, 这样就会导致无意中使用了并不想被公开访问的 API。此外,类路径本身也存在问题: 你怎么知晓所有需要的 JAR 都已经有了, 或者是不是会有重复的项呢? 模块系统把这俩个问题都给解决了。
在模块的 src 下创建 module-info.java 文件,来描述依赖和导出(暴露)。
requires:指明对其它模块的依赖。
exports:控制着哪些包可以被其它模块访问到。所有不被导出的包
默认都被封装在模块里面。
2、Java 的 REPL 工具: jShell 命令
REPL:read - evaluate - print - loop
这个简单的说就是能想脚本语言那样,所见即所得。之前我们用java,哪怕只想输出一句hello world,都是非常麻烦的。需要建文件、写代码、编译、运行等等。现在有了jShell工具,实在太方便了
- 即写即得、快速运行
这样我就进入了jshell环境。下面Hello World就是这么简单了
- jShell 也可以从文件中加载语句或者将语句保存到文件中(使用Open命令)
- jShell 也可以是 tab 键进行自动补全和自动添加分号
列出当前 session 里所有有效的代码片段:/list