Java 8中规定接口中的方法除了抽象方法之外, 还可以定义静态方法和默认的方法。 一定程度上, 扩展了接口的功能, 此时的接口更像是一个抽象类。
在Java 9中, 接口更加的灵活和强大, 连方法的访问权限修饰符都可以声明为private的了, 此时方法将不会成为你对外暴露的API的一部分。
我们将能够与匿名实现类共同使用钻石操作符(diamond operator) 在Java 8 中如下的操作是会报错的:
编译报错信息: Cannot use “<>” with anonymous inner classes.
Java 9中如下操作可以正常执行通过:
Java 8 中, 可以实现资源的自动关闭, 但是要求执行后必须关闭的所有资源必须在try子句中初始化, 否则编译不通过。 如下例所示:
Java 9 中, 用资源语句编写try将更容易, 我们可以在try子句中使用已经初始化过的资源, 此时的资源是final的:
四、String存储结构变更
结论: String 再也不用 char[] 来存储啦, 改成了 byte[] 加上编码标记, 节约了一些空间。
那StringBuffer 和 StringBuilder 是否仍无动于衷呢?
五、集合工厂方法:快速创建只读集合
要创建一个只读、 不可改变的集合, 必须构造和分配它, 然后添加元素, 最后包装成一个不可修改的集合。
Java 9因此引入了方便的方法, 这使得类似的事情更容易表达。
List firsnamesList = List.of(“Joe”,”Bob”,”Bill”);
调用集合中静态方法of(), 可以将不同数量的参数传输到此工厂方法中。 此功能
可用于Set和List, 也可用于Map的类似形式。 此时得到的集合, 是不可变的:在
创建后, 继续添加元素到这些集合会导致 “UnsupportedOperationException” 。
由于Java 8中接口方法的实现, 可以直接在List, Set和Map的接口内定义这些方法,
便于调用。
六、InputStream 加强
InputStream 终于有了一个非常有用的方法: transferTo,可以用来将数据直接
传输到 OutputStream,这是在处理原始数据流时非常常见的一种用法,如下
示例。