JDK8和9的新特性

时间:2022-06-15 15:16:49

·      

如果你使过几年Java,你就知道针对集合类,最常见的操作就是进行迭代,并将业务逻辑应用于各个元素,例如处理订单、交易和事件的列表。由于Java是命令式语言,Java 8之前的所有循环代码都是顺序的,即可以对其元素进行并行化处理。如果你想做并行过滤,就需要自己写代码,这并不是那么容易。通过引入lambda表达式和默认方法,将做什么和怎么做的问题分开了,这意味着Java集合现在知道怎样做迭代,并可以在API层面对集合元素进行并行处理。下面的例子里,我将介绍如何在使用lambda或不使用lambda表达式的情况下迭代列表。你可以看到列表现在有了一个 forEach() 方法,它可以迭代所有对象,并将你的lambda代码应用在其中。

JDK8和9的新特性

列表循环的最后一个例子展示了如何在Java 8中使用方法引用(method reference)。你可以看到C++里面的双冒号、范围解析操作符现在在Java 8中用来表示方法引用。


  Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。

·        方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

·        默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。

·        新工具 − 新的编译工具,如:Nashorn引擎 jjs类依赖分析器jdeps

·        Stream API −新添加的Stream APIjava.util.stream把真正的函数式编程风格引入到Java中。

·        Date Time API − 加强对日期与时间的处理。

·        Optional  − Optional类已经成为 Java 8 类库的一部分,用来解决空指针异常。

·        Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

 

 

1、关于java1.9的官网下载

2、模块化系统----Jigsaw项目

 可以在更小的设备中运行;

 必须的jdk模块,非全部jdk模块;

 甚至开发者还可以创建自己的模块来简化代码;

 内部的APIcom.sun.*),默认情况下是不能使用,即:所有的模块需要在所谓的module-info.java文件中进行描述,这个文件是位于java代码结构的顶层(类似于import

 改进组件间的依赖管理,引入比Jar粒度更大的Module

JDK8的JRE的部署是一个单体模式,即使使用一个Hello Worlds,你也需要一整套上百兆的JRE环境。JAVA 9 引入模块后,将所有的类组织成模块形式

总结一句就是:独立模块,化繁为简

 3、集合的of新特性

 Map中存值变得更简单

  在集合中统一增加了一个of方法,List/Set/Map都可以调用of方法直接存入key,value

4JShell--Java9 REPL:是一种快速运行语句的命令行工具

 Java 9 JShell可以在没有创建类的情况下直接声明变量,计算表达式,执行语句。JShell也可以从文件中加载语句或将语句保存到文件中。并且JShell也可以是Tab键进行自动补全的特性。这就区别于main方法类,Test类。

总结就是:执行JShell则可以所见即所得,即时结果和反馈。

2. Javadoc 现在支持在 API 文档中的进行搜索

1. 让Java的SE程序更加容易轻量级部署

5Reactive Streams(响应式流)

 Java9 中有一个FlowAPI ,主要有以下几个重要的类:

Flow.Processor(处理器)

Flow.Publisher (发布者)

Flow.Subscriber(订阅者)

Flow.Subscription(订阅管理器)

Java 9 中也提供了实用类------SubmissionPublisher,一个发布者产生一个或者多个物品,这些物品由一个或者多个消费者来消耗,并且订阅者由订阅管理器管理,订阅管理器连接订阅者和发布者。

6Interfaces(接口差异)

JDK8中提出在接口中引入默认方法和静态方法,而在JDK9中实现了在接口中引入默认方法和静态方法。

  具体包含:可以共享接口中的私有方法,去除冗余,逻辑更加清晰。如果私有方法是静态的,那么这个方法就属于这个接口的,且没有静态的私有方法只能被在接口中的实例调用。