·
如果你使过几年Java,你就知道针对集合类,最常见的操作就是进行迭代,并将业务逻辑应用于各个元素,例如处理订单、交易和事件的列表。由于Java是命令式语言,Java 8之前的所有循环代码都是顺序的,即可以对其元素进行并行化处理。如果你想做并行过滤,就需要自己写代码,这并不是那么容易。通过引入lambda表达式和默认方法,将做什么和怎么做的问题分开了,这意味着Java集合现在知道怎样做迭代,并可以在API层面对集合元素进行并行处理。下面的例子里,我将介绍如何在使用lambda或不使用lambda表达式的情况下迭代列表。你可以看到列表现在有了一个 forEach() 方法,它可以迭代所有对象,并将你的lambda代码应用在其中。
列表循环的最后一个例子展示了如何在Java 8中使用方法引用(method reference)。你可以看到C++里面的双冒号、范围解析操作符现在在Java 8中用来表示方法引用。
Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
· 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
· 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
· 新工具 − 新的编译工具,如:Nashorn引擎 jjs、类依赖分析器jdeps。
· Stream API −新添加的Stream API(java.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模块;
③甚至开发者还可以创建自己的模块来简化代码;
④内部的API(com.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
4、JShell--Java9 REPL:是一种快速运行语句的命令行工具
在Java 9 中JShell可以在没有创建类的情况下直接声明变量,计算表达式,执行语句。JShell也可以从文件中加载语句或将语句保存到文件中。并且JShell也可以是Tab键进行自动补全的特性。这就区别于main方法类,Test类。
总结就是:执行JShell则可以所见即所得,即时结果和反馈。
2. Javadoc 现在支持在 API 文档中的进行搜索
1. 让Java的SE程序更加容易轻量级部署
5、Reactive Streams(响应式流)
Java9 中有一个FlowAPI ,主要有以下几个重要的类:
①Flow.Processor(处理器)
②Flow.Publisher (发布者)
③Flow.Subscriber(订阅者)
④Flow.Subscription(订阅管理器)
Java 9 中也提供了实用类------SubmissionPublisher,一个发布者产生一个或者多个物品,这些物品由一个或者多个消费者来消耗,并且订阅者由订阅管理器管理,订阅管理器连接订阅者和发布者。
6、Interfaces(接口差异)
在JDK8中提出在接口中引入默认方法和静态方法,而在JDK9中实现了在接口中引入默认方法和静态方法。
具体包含:可以共享接口中的私有方法,去除冗余,逻辑更加清晰。如果私有方法是静态的,那么这个方法就属于这个接口的,且没有静态的私有方法只能被在接口中的实例调用。