JDK8 — 17特性

简介: JDK8 — 17特性

我是南城余!阿里云开发者平台专家博士证书获得者!

欢迎关注我的博客!一同成长!

一名从事运维开发的worker,记录分享学习。

专注于AI,运维开发,windows Linux 系统领域的分享!


JDK认知

Java版本迭代概述

备注:LTS(Long-term Support)即长期支持

名词解释:Oracle JDK和Open JDK

如何学习新特性

对于新特性,我们应该从哪几个角度学习新特性呢?

  • 语法层面:
  • 比如JDK5中的自动拆箱、自动装箱、enum、泛型
  • 比如JDK8中的lambda表达式、接口中的默认方法、静态方法
  • 比如JDK10中局部变量的类型推断
  • 比如JDK12中的switch
  • 比如JDK13中的文本块
  • API层面:
  • 比如JDK8中的Stream、Optional、新的日期时间、HashMap的底层结构
  • 比如JDK9中String的底层结构
  • 新的 / 过时的 API
  • 底层优化
  • 比如JDK8中永久代被元空间替代、新的JS执行引擎
  • 比如新的垃圾回收器、GC参数、JVM的优化

Lambda表达式

使用场景

  • 在给函数式接口提供实例时,都可以使用lambda表达式
  1. Predicate<T>:用于输入一个参数,返回一个布尔值的情况。比如判断一个数字是否大于 10,可以通过 Predicate 实现。
  2. Consumer<T>:用于接收一个参数,但没有返回值的情况。比如对列表中的每个元素进行操作的场景。
  3. Function<T, R>:用于输入一个参数,并返回一个结果的情况。比如将字符串转为大写,可以用 Function 实现。
  4. Supplier<T>:用于不接收任何参数,而是提供一个返回值的情况。比如每次调用时返回一个新的随机数。

格式

->:Lambda 操作符或箭头操作符

->的左边:Lambda形参列表,对应着重要的接口中的抽象方法的形参列表

->的右边:Lambda体,对应着接口的实现类要重写的方法的方法体

本质

》一方面,Lambda表达式作为接口的实现类的对象。

》另一方面,Lambda表达式是一个匿名函数

函数式接口

》如果接口中只声明一个抽象方法,则此接口就称为函数式接口

》因为只有函数式接口提供实现类的对象时,我们才可以使用lambda表达式

API中函数式接口所在的包

jdk8中声明的函数式接口都在java.util.function包下

4个基本的函数式接口

接口 对应的抽象方法

消费类型接口 Consumer<T> void accept(T t)

供给类型接口 Supplier<T> T get()

函数类型接口 Function<T,R> R apply(T t)

判断类型接口 Predicate<T> boolean test(T t)

总结

->的左边:lambda形参列表,参数的类型都可以省略,如果形参只有一个,则()也可以省略

->的右边:lambda体,对应着重写的方法的方法体。如果方法体中只有一行执行语句,则一对{}可以省略

如果有return关键字,则必须一并省略。

方法引用

》方法引用,可以理解基于lambda表达式的进一步刻画

》当需要提供一个函数式接口的实例时,我们可以使用lambda表达式提供此实例

》当满足一定的条件的情况下,我们还可以使用方法引用或构造器引用替换lambda表达式

本质

方法引用作为类函数式接口的实例。

格式

类 (或对象) :: 方法名

》对象 :: 实例方法

要求:函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b的形参列表和返回值类型都相同(或一致)

此时,可以考虑使用方法b实现方法a的替换、覆盖。此替换或覆盖即为方法引用

》类 :: 静态方法

》类 :: 实例方法

构造器引用

格式

类名 :: new

说明

》调用了类名对应的类中的某一个确定的构造器

》具体调用的构造器取决于函数式接口的抽象方法的形参列表

数组引用

格式

数组名[] :: new

Stream API 与 集合框架

》Stream API 关注的是多个数据的计算(排序、查找、过滤、映射、遍历等),面向CPU的

》Stream API之于集合,类似于SQL之于数据库查询

使用说明

  1. Stream自己不会存储元素
  2. Stream不会改变源对象。相反,他们会返回一个特有结果的新Stream
  3. Stream操作是延迟执行的,这意味着他们会等到需要结果的时候才执行,即一旦执行终止
  4. Stream一旦执行了终止操作,就不能在调用其他中间件操作,或终止操作。

目录
相关文章
|
2月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
46 3
|
1月前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
19 0
|
2月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
3月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
3月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
3月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
3月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
3月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
131 0
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
2月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
14 0
|
3月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化