Java9的新特征
模块化系统 Modularity
要想在java9demo模块中调用java9test模块下包中的结构,需要在java9test
的module-info.java中声明:
exports :控制着哪些包可以被其它模块访问到 。 所有不被导出的包默认都被封装在模块里面
对应在java 9demo 模块的src 下创建module-info.java文件
requires :指明对其它模块的依赖
REPl工具jShell工具:
开发者只需要输入一些代码,
就可以在编译前获得对程序的反馈。而之前的Java版本要想执行代码,必须创建文
件、声明类、提供测试方法方可实现。
调出jshell和退出
使用方法
导入指定包
语法改进:接口声明私有方法
接口中的私有方法只能在的本接口使用
钻石操作符的升级
我们将能够与匿名实现类共同使用钻石操作符(diamond operator)在Java 8中如下的操作是会报错的:
Java 9中如下操作可以正常执行通过
try语句的升级
java8中
可以实现资源的自动关闭(需要关闭的资源必须在try括号里面初始化)
java9中
初始化就能写在外面,此时资源为final.
String存储结构变更
String 再也不用 char[] 来存储啦,改成了 byte[] 加上编码标记,节约了一些空间。
StringBuffer 和 StringBuilder也是byte[] 存储
创建只读集合:
java8及以前的
Collections.unmodifiableList(List list)
jdk9以后
InoutStream的新方法
tranferTo()
Stream API加强
takeWhile() : 用于从 Stream 中获取一部分数据,接收一个 Predicate 来进行选择。在有序的Stream 中,返回从开头开始的尽量多的元素。
List
list.stream().takeWhile(x -> x < 50).forEach(System.out::println); //45,43
list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.stream().takeWhile(x -> x < 5).forEach(System.out::println); //1,2,3,4
dropWhile() : 使用dropWhile 的行为与 takeWhile 相反,返回剩余的元素
List
list.stream().dropWhile(x -> x < 50).forEach(System.out::println); //76, 87, 42, 77, 90, 73, 67, 88
list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.stream().dropWhile(x -> x < 5).forEach(System.out::println);//5,6, 7, 8
ofNullable(); 可以为null值的单个元素
iterate() : 方法新重载方法:可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代
Optional使用Stream()
java10的新特性
局部变量的类型推断:
在处理 var时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行
推断,作为左边变量的类型,然后将该类型写入字节码当中。
- var不是一个关键字
- 这不是JavaScript
创建不可变的集合
copyof(Collection coll) : 创建一个只读的集合
coll本身就是可读集合,返回当前coll
coll不是可读集合,则返回新的集合,这个集合是只读的
使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常
Java11新特性
String新增的方法:
- boolean isBlank() : 判断字符串是否为空白
- strip() : 去除首尾的空白
- stripTrailing() : 去除尾部空白
- stripLeading() : 去除首部空白
- repeat(int count) : 复制字符串
- lines().count() : 行数统计
局部变量类型推断升级: