Java8 新特性
1、Java 8
2014 年 3 月 18 日,Oracle 发布了 Java 8,为目前唯二的 LTS(长期支持)版本之一,另一个是 Java 11,目前最新的版本为 Java 15
- Java 8 为目前使用最多的发行版本
2、接口默认实现与静态方法
Java 8 之后可以为接口方法提供一个默认实现,用 default 修饰符来标记方法,这样就可以只关心需要的方法,而不用去实现不需要的方法
- 在 JVM 中,接口的默认实现是非常高效的,并且通过字节码指令为方法调用提供了支持
2.1 默认方法冲突
如果在一个接口中定义了一个默认方法,又在超类或另一个接口中定义了同样的方法,就会产生冲突
- 超类优先:如果超类提供了一个具体方法,同名且有相同参数类型的默认方法会被忽略
- 接口冲突:如果一个接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决冲突
2.2 接口中的静态方法
3、函数式接口
并不是所有的接口都可以使用 Lambda 表达式来实现,只有函数式接口才能写成 Lambda 表达式
- 函数式接口:要求接口中定义的必须要实现的抽象方法只能有一个
4、Lambda 表达式
Lambda 表达式是 Java 8 添加的一个新特性,可以认为 Lambda 是一个匿名函数(相似于匿名内部类),作用是返回一个实现了接口的对象
- Lambda 表达式是一个匿名函数,主要关注方法的参数列表和方法体
()
:描述参数列表{}
:描述方法体->
:Lambda 运算符,读作goes to
4.1 Lambda 表达式语法精简
4.1.1 参数类型的省略
由于在接口中已经定义了参数,所以在 Lambda 表达式中参数的类型可以省略
- 如果省略参数的类型,则所有的参数的类型都要省略
4.1.2 参数小括号的省略
如果参数列表中,参数的个数有且只有一个,那么小括号可以省略,且仍然可以省略参数的类型
4.1.3 方法体大括号的省略
如果方法体只有一条语句,那么此时大括号可以省略
4.1.4 return 的省略
如果方法体 只有一条语句,且是返回语句,可以省略 return,且必须要省略大括号
4.2 方法引用
方法引用是 Lambda 表达式一种简写的方式,提供了一种引用而不执行方法的方式,用来直接访问类或者实例的已经存在的方法或者构造方法。使用时方法引用会创建函数式接口的一个实例
- 返回值的类型和参数列表要与接口中定义的一致
4.2.1 构造方法的引用 类名::new
更多:Java-Lambda表达式和“方法引用”的对比和详解
5、扩展注解
Java 8 扩展了注解的上下文。现在几乎可以在任何地方添加注解
6、重复注解
Java 8 引入了重复注解机制,在之前使用相同的注解在同一位置只能声明一次,不能声明多次
- 重复注解机制本身必须用
@Repeatable
注解。其实底层原理并没有改变,更多的是编译器的技巧
7、Optional
Java 8 为了解决 Null 值判断问题,受到 Google Guava 的启发,引入了 Optional 类库,可以避免显式的 Null 值判断
- Optional 实际上是个容器,可以包裹 Null 或非 Null 的对象
7.1 创建 Optional 对象
7.2 常用方法
Optional: Optional[name=特朗普]
get: name=特朗普
isPresent: true
ifPresent: 特朗普
filter: Optional[name=特朗普]
map: Optional[hello 特朗普]
flatMap: Optional[特朗普]
orElse: name=特朗普
orElseGet: name=特朗普
8、Stream
Java 8 引入 Stream 流,让开发者能够以声明的方式处理数据源
-
Stream 操作分为中间操作或者最终操作两种
- 终端操作会返回一个结果
- 中间操作会返回一个 Stream 流
-
Stream 的数据源只能 Collection 的子类,List 或者 Set,不支持 Map
-
Stream 的操作可以串行执行(Stream)或者并行执行(parallelStream)
8.1 常用方法
8.2 并行流
Stream 流支持串行和并行的。串行流操作是单线程操作,并行流是多线程操作,能够充分利用物理机多核 CPU 的优势,同时处理速度更快
5000000
4849
5000000
2188
- 可以看出,并行流的效率比串行流快了一倍左右
9、Date API
新的 Date API 除了是不可变类,线程安全之外,还多了添加和优化了许多方法,但原有的时间处理方法已经能解决大部分问题,除非考虑线程安全的因素,原有的时间 API 已经足够使用了。另外新的 Date API 用法简单,使用时百度即可,不做赘述,附上一个写的不错的文章
__EOF__

本文链接:https://www.cnblogs.com/holyholic/p/13715421.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)