Java
9 新特性:
一
.JDK 和 JRE 目录结构改变
java9 没有了 JRE 目录,分散了。
二
.模块化系统:Jigsaw ——
> Modularity
1.本质上讲,用模块来管理各个
package,通过声明某个
package 暴露
,模块的概念
,其实就是
package 外再裹一层
,不声明默认就是隐藏。
因此
,模块化使得代码组织上更安全
,因为它可以指定哪些部分可以暴露
,哪些部分隐藏。
2.实现目标
1.模块化的主要目的在于减少内存的开销
2.只须必要模块
,而非全部 jdk 模块
,可简化各种类库和大型应用的开发和维护
3.改进 Java SE 平台
,使其可以适应不同大小的计算设备
4.改进其安全性
,可维护性
,提高性能
三
.Java 的 REPL 工具:jshell 命令
四
.接口的私有方法
Java8 中规定接口中的方法除了抽象方法之外
,还可以定义静态方法和默认的方法。一定程度上
,扩展了接口的功能,此时的接口更像是一个抽象类。
在 Java9 中
,接口更加灵活和强大
,连方法的访问权限修饰符都可以声明为
private 的了
,此时方法将不会成为你对外暴露的 API 的一部分。
五
.钻石操作符
(<>)的语法升级
六
.try 结构的语法升级
Java8 中
,可以实现资源的自动关闭
,但是要求执行后必须关闭的所有资源必须在
try 子句中初始化
,否则编译不通过。
Java9 中
,用资源语句编写
try 将更容易
,我们可以在
try 自居中使用已经初始化过的资源,此时的资源是
final 的
InputStreamReader reader
= new InputStreamReader(System
.in
);
OutputStreamWriter writer
= new OutputStreamWriter(System
.out
);
try (reader
;writer
) {
...
}catch(IOException e
){
e
.printStackTrace();
}
七
.String 存储结构变更
String 再也不用
char[] 来存储了
,改成了
byte[] 加上编码标记
,节约了一些空间。
八
.集合工厂方法:快速创建只读集合
九
.InputStream 加强
InputStream 增加了一个非常有用的方法:transferTo,可以用来将数据直接传输到 OutputStream,这是在处理原始
数据流时非常常见的一种用法,如下实例:
ClassLoader cl
= this.getClass().getClassLoader();
try {
InputStream is
= cl
.getResourceAsStream("hello.txt");
OutputStream os
= new FileOutputStream("src\\hello1.txt")) {
is
.transferTo(os
);
} catch(IOException e
) {
e
.printStackTrace();
}
十
.增强的 Stream API
1.Java 的 Stream API shi Java 标准库最好的改进之一
,让开发者可以快速运算
,从而能够有效的利用数据并行计算。
Java8 提供的 Stream 能够利用多核架构实现声明式的数据处理。
2.在 Java9 中
,Stream API 变得更好,Stream 接口中添加了
4 个新的方法:takeWhile,dropWhile
,ofNullable
,,
还有个 iterator 方法的新重载方法
,可以让你提供一个
Predicate(判断条件
)来指定什么时候结束迭代。
3.除了对 Stream 本身的扩展
,Optional 和 Stream 之间的结合也得到了改进。现在恶意通过 Optional 的新方法
stream()
将一个 Optional 对象转换为一个
(可能是空的
)Stream 对象。
十一
.Javascript 引擎升级:Nashorn
Java
10 新特性:
一
.局部变量类型推断
好处:减少了啰嗦和形式的代码
,避免了信息冗余
,而且对齐了变量名
,更容易阅读。
工作原理::
在处理 var 时
,编译期先是查看表达式右边部分
,并根据右边变量值的类型进行推断
,作为左边变量的类型
,然后将该类型写入字节码中。
例:
var num
= 10;
var list
= new ArrayList<Integer>();
list
.add(123);
for (var i
: list
) {
..
}
不适合场景:
1.局部变量不赋值
,就不能实现类型推断。
2.Lambda 表达式。
3.方法引用
4.为数组静态初始化
5.构造器的参数类型
6.属性
7.catch 块
二
.集合新增创建不可变集合的方法
Java
11 新特性:
一
.新增了一系列字符串处理方法
判断字符串是否为空白:
"".isBlank();
去除收尾空白:
" Javastack ".strip();
去除尾部空格:
" Javastack ".stripTrailing();
去除首部空格:
" Javastack ".stripTrailing();
复制字符串:
"Java".repeat(3);
行数统计:
"A\nB\n".lines().count();
二
.Optional 加强
三
.局部变量类型推断升级
在 var 上添加注解的语法格式
四
.全新的 HTTP 客户端 API
: HttpClient(用来替换 HttpURLConnection
)
1.HTTP
/1.1 和 HTTP
/1.2的主要区别是如何在客户端和服务器之间构建和传输数据。
HTTP
/1.1.依赖于请求
/响应周期。HTTP
/2允许服务器
"push"数据
;它可以发送比客户端请求更多的数据。
这使得它可以优先处理并发送对于首先加载网页至关重要的数。
五
.更简化的编译运行程序
java Xxx
.java
六
.其他新特性
废除 Nashorn 引擎
ZGC