Java9,10,11新特性

164 阅读3分钟

java9新特性

image.png

image.png

image.png

3.jShell命令

image.png

4.接口中声明私有方法

接口中默认权限修饰符为public,在Java9后也可显式地定义为private

5.钻石操作符使用升级

image.png 但下述在Java8中不会出错

image.png

6.语法改进:try语句

image.png

Java8:把需要关闭的资源写入try后的小括号中即可实现自动关闭

image.png

Java9:

image.png 后续操作与Java8中相同

7.String存储结构变更

将char[]改为byte[]

StringBuffer和StringBuilder也进行了相应的变化

8.集合工厂方法

创建一个只读不能改的集合

Java8:使用unmodifiableList方法

image.png Java9:使用of方法

image.png

InputStream的加强

image.png

image.png

10.增强的StreamAPI

1.Java的Steam API是java标准库最好的改进之一,让开发者能够快速运算,从而能够有效的利用数据并行计算。Java8提供的steam 能够利用多核架构实现声明式的数据处理。

2.在Java 9中,Stream API变得更好,stream接口中添加了4个新的方法:takeWhile, dropWhile, ofNullable,还有个iterate方法的新重载方法,可以让你提供一个Predicate (判断条件)来指定什么时候结束迭代。

3.除了对stream本身的扩展,Optional和l stream之间的结合也得到了改进。现在可以通过 optional的新方法 stream()将一个Optional对象转换为一个(可能是空的) stream对象。

takeWhile()的使用

用于从stream中获取一部分数据,接收一个 Predicate来进行选择。在有序的Stream中,takeWhile返回从开头开始的尽量多的元素

List<Integer> list = Arrays.asList(45437687427790736788);
list.stream().takewhille(x -> x 〈 50).forEach(System.out: : println);
System.out.println();
list = Arrays.asList(12345678);
list.stream().takewhile(x -> x 〈 5).forEach(System.out: :println);

还有很多可在javaguide中进行查看

of方法的使用

of()方法中不能只是null值,但是可以是多个null值

image.png

iterator()

image.png

11.Optional获取Stream的方法

image.png

12.Javascript引擎升级:Nashorn

1,Nashorn项目在JDK9中得到改进,它为Java提供轻量级的Javascript运行时。Nashorn 项目跟随 Netscape的 Rhino 项目,目的是为了在Java中实现一个高性能但轻量级的 Javascript运行时。Nashorn项目使得 Java应用能够嵌入Javascript。它在JDK8中为Java提供一个Javascript引擎。

2.JDK 9包含一个用来解析Nashorn的 ECMAScript语法树的API。这个API使得IDE和服务端框架不需要依赖Nashorn项目的内部实现类,就能够分析ECMAScript代码。

Java10新特性

image.png

1.局部变量类型推断

\

image.png

image.png

类型推断的代码举例

//能用局部变量的类型推断的例子
public class java10Test {
    @Test
    public void test(){
        //声明变量时,根据所附的值,推断变量的类型
        var num = 10;

        /*1.不赋值无法类型推断
       var num;

        2.lambda表达式中,左边的函数式接口不能声明为var
        Supplier<Double> sup = ()->Math.random();正确的
       var sup1 = ()->Math.random();错误的

       3.方法引用中
        Consumer<String>con=System.out::println;正确的
        var con=System.out::println;错误的

        4.数组的静态初始化
        int[] arr = new int[]{1,2,3,4};正确的
        var arr = {1,2,3,4};错误的
         */


        var list = new ArrayList<Integer>();
        list.add(123);

        for(var i:list){
            System.out.println(i);//123
            System.out.println(i.getClass());//class java.lang.Integer
        }

image.png

2.集合新增创建不可变集合的方法

image.png

image.png

Java11的新特性

1.String中新增的方法

image.png

2.Optional加强

image.png

3.局部变量类型推断升级

image.png

4.HttpClient

image.png

5.更简化的编译运行程序

image.png

6.废弃Nashorn引擎

7.ZGC

image.png