Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,添加了许多新特性
序号 | 特性 | 说明 |
---|---|---|
1 | Lambda表达式 | 允许函数作为参数传递给方法 |
2 | 默认方法 | 在接口里面实现方法 |
3 | 方法引用 | 简化代码 |
4 | 函数式接口 | 使Java支持真正的函数式编程 |
5 | Stream | 使Java支持真正的函数式编程 |
6 | Base64 | 提供Base64编码、解码方法 |
7 | Optional类 | 用来解决NullPointException |
8 | 新日期时间API | 使用方便程度不如joda-time |
9 | Nashorn JavaScript 引擎 | 新JS引擎,一般情况下用不上 |
Lambda表达式
|
|
默认方法
默认方法就是借口可以实现方法,其实现类可以不实现该方法。目的是为了解决接口的修改与现有的实现不兼容的问题。
- 默认接口方法:使用
default
关键字标识 - 默认静态方法:使用
static
关键字标识
|
|
方法引用
- 构造器引用:
Test::new
- 方法引用:
Test::test
函数式接口
函数式接口就是一个具有一个方法的普通接口,可以被隐式转换为lambda表达式
JDK 8 新增了许多函数式接口在java.util.function
中
Stream
Java 8 新增了一个概念称为流Stream,可以以一种声明的方式处理数据
生成流的方法:
- 串行流:stream()
- 并行流:parallelStream()
流的方法:
- 遍历:forEach()
- 映射每个元素对应的结果:map()
- 过滤出元素:filter()
- 指定获取数量:limit()
- 排序:sorted()
- 将流转换为集合:collect()
- 统计:summaryStatistics()
- 计算个数:count()
Base64
Java 8 内置了三种Base64编解码器
基本
输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/
编码器:Base64.getEncoder()
解码器:Base64.getDecoder()
URL
输出映射到一组字符A-Za-z0-9+_,输出是URL和文件
编码器:Base64.getUrlEncoder()
解码器:Base64.getUrlDecoder()
MIME
输出映射到MIME友好格式。输出每行不超过76字符,并且使用’\r’并跟随’\n’作为分割。编码输出最后没有行分割
编码器:Base64.getMimeEncoder()
解码器:Base64.getMimeDecoder()
Optional类
Optional类的引入很好的解决空指针异常
新日期时间API
旧的Java中日期时间API设计比较差(非线程安全、设计差、时区处理麻烦),所以提出了新的日期时间API
Java 8 在java.time
包下提供了许多新的日期时间API,主要有
java.time.LocalDate
java.time.LocalTime
java.time.LocalDateTime
java.time.ZonedDateTime
PS:个人觉得还是joda-time
使用方便
Nashorn JavaScript 引擎
一个JavaScript引擎,用来在Java中调用JavaScript或者在JavaScript中调用Java。与之前的Rhino实现相比,带来2到10倍的性能提升。一般开发不怎么用到。