Java9的新特征

模块化系统 Modularity

image.pngimage.png
要想在java9demo模块中调用java9test模块下包中的结构,需要在java9test
的module-info.java中声明:
image.png
exports :控制着哪些包可以被其它模块访问到 。 所有不被导出的包默认都被封装在模块里面

对应在java 9demo 模块的src 下创建module-info.java文件
image.png
requires :指明对其它模块的依赖

REPl工具jShell工具:

开发者只需要输入一些代码,
就可以在编译前获得对程序的反馈。而之前的Java版本要想执行代码,必须创建文
件、声明类、提供测试方法方可实现。
调出jshell和退出
image.pngimage.png

使用方法
image.pngimage.png
导入指定包
image.png

语法改进:接口声明私有方法

接口中的私有方法只能在的本接口使用

钻石操作符的升级

我们将能够与匿名实现类共同使用钻石操作符(diamond operator)在Java 8中如下的操作是会报错的:
image.png
Java 9中如下操作可以正常执行通过
image.png

try语句的升级

java8中
可以实现资源的自动关闭(需要关闭的资源必须在try括号里面初始化)
image.png
java9中
初始化就能写在外面,此时资源为final.
image.png

String存储结构变更

String 再也不用 char[] 来存储啦,改成了 byte[] 加上编码标记,节约了一些空间。
StringBuffer 和 StringBuilder也是byte[] 存储
image.png

创建只读集合:

java8及以前的
Collections.unmodifiableList(List list)
image.png
image.png
image.png

jdk9以后
image.png

InoutStream的新方法

tranferTo()
image.png

Stream API加强

takeWhile() : 用于从 Stream 中获取一部分数据,接收一个 Predicate 来进行选择。在有序的Stream 中,返回从开头开始的尽量多的元素。
List list = Arrays.asList(45, 43, 76, 87, 42, 77, 90, 73, 67, 88);
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 = Arrays.asList(45, 43, 76, 87, 42, 77, 90, 73, 67, 88);
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值的单个元素
image.png

iterate() : 方法新重载方法:可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代
image.png

Optional使用Stream()
image.png

java10的新特性

局部变量的类型推断:

在处理 var时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行
推断,作为左边变量的类型,然后将该类型写入字节码当中。

image.png

  • var不是一个关键字
  • 这不是JavaScript

创建不可变的集合

copyof(Collection coll) : 创建一个只读的集合
image.png
coll本身就是可读集合,返回当前coll
coll不是可读集合,则返回新的集合,这个集合是只读的
使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常

Java11新特性

String新增的方法:

  • boolean isBlank() : 判断字符串是否为空白
  • strip() : 去除首尾的空白
  • stripTrailing() : 去除尾部空白
  • stripLeading() : 去除首部空白
  • repeat(int count) : 复制字符串
  • lines().count() : 行数统计

局部变量类型推断升级:

image.png