一、接口的私有方法

  Java 8中规定接口中的方法除了抽象方法之外, 还可以定义静态方法和默认的方法。 一定程度上, 扩展了接口的功能, 此时的接口更像是一个抽象类。


  在Java 9中, 接口更加的灵活和强大, 连方法的访问权限修饰符都可以声明为private的了, 此时方法将不会成为你对外暴露的API的一部分。

二、钻石操作符使用升级

    我们将能够与匿名实现类共同使用钻石操作符(diamond operator) 在Java 8 中如下的操作是会报错的:

    编译报错信息: Cannot use “<>” with anonymous inner classes.

 

    Java 9中如下操作可以正常执行通过:

三、try语句

    Java 8 中, 可以实现资源的自动关闭, 但是要求执行后必须关闭的所有资源必须在try子句中初始化, 否则编译不通过。 如下例所示:

 

    Java 9 中, 用资源语句编写try将更容易, 我们可以在try子句中使用已经初始化过的资源, 此时的资源是final的:

 

四、String存储结构变更

Java9 新特性 (二)语法改进_操作符

 

 

  结论: String 再也不用 char[] 来存储啦, 改成了 byte[] 加上编码标记, 节约了一些空间。

  Java9 新特性 (二)语法改进_工厂方法_02

 

 

   那StringBuffer 和 StringBuilder 是否仍无动于衷呢?

  Java9 新特性 (二)语法改进_静态方法_03

 

 

 

 

 

五、集合工厂方法:快速创建只读集合

要创建一个只读、 不可改变的集合, 必须构造和分配它, 然后添加元素, 最后包装成一个不可修改的集合。

Java 9因此引入了方便的方法, 这使得类似的事情更容易表达。

Java9 新特性 (二)语法改进_操作符_04

 

 

 

List firsnamesList = List.of(“Joe”,”Bob”,”Bill”);
调用集合中静态方法of(), 可以将不同数量的参数传输到此工厂方法中。 此功能
可用于Set和List, 也可用于Map的类似形式。 此时得到的集合, 是不可变的:在
创建后, 继续添加元素到这些集合会导致 “UnsupportedOperationException” 。
由于Java 8中接口方法的实现, 可以直接在List, Set和Map的接口内定义这些方法,
便于调用。


 

六、InputStream 加强

InputStream 终于有了一个非常有用的方法: transferTo,可以用来将数据直接
传输到 OutputStream,这是在处理原始数据流时非常常见的一种用法,如下
示例。

七、增强的 Stream API 八、Optional 获取 Stream 的方法 九、JavaScript 引擎升级:Nashorn 十、