JDK8-17的新特性

1. JDK新特性的概述

  • 几个重要的版本
    • jdk5.0/jdk8.0:里程碑式的版本
    • jdk9.0 开始每六个月发布一个新的版本
    • LTS:jdk8、jdk11、jdk17
  • 如何学习新特性

角度一:新的语法规则(多关注)
自动装箱、自动拆箱、注解、enum、Lambda表达式、方法引用、switch表达式、try-catch变化、记录record等

角度二:增加、过时、删除API
StringBuilder、ArrayList、新的日期时间的API、Optional等

角度三:底层的优化、JVM参数的调整、GC的变化、内存结构的变化(永久代—>元空间)

2. JDK8:lambda表达式

2.1 什么情况下可以使用lambda表达式

  • 在给函数式接口提供实例时,都可以考虑使用lambda表达式
  • 基本的语法使用(重要)
Lambda表达式的语法规则总结

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

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

2.2 函数式接口

  • 常见的函数式接口 Comparator\ Runnable\ java.util.function下定义的丰富的函数式接口
            接口              对应的抽象方法
消费型接口:Consumer<T>      void accept(T t)
供给型接口:Supplier<T>         T get()
函数型的接口:Function<T,R>  R apply(T t)
判断型接口:Predicate<T>     boolean test(T t)

2.3 方法引用、构造器引用、数组引用

  • 方法引用、构造器引用、数组引用:看做是lambda表达式的进一步刻画、表达
  • (掌握)方法引用、构造器引用、数组引用的使用场景
  • 方法引用

1. 举例:
Integer :: compare;

2. 方法引用的理解
> 方法引用,可以看做是基于lambda表达式的进一步刻画
> 当需要提供函数式接口的实例时,我们可以使用lambda表达式提供此实例
    >当满足一定的条件的情况下,我们还可以使用方法引用或构造器引用去替换lambda表达式



3. 方法引用的本质:
方法引用作为了函数式接口的实例 ------>"万事万物皆对象"


4. 格式:
类(或对象) :: 方法名


5. 具体使用情况说明:
情况一: 对象 :: 实例方法

要求:函数式接口中的抽象方法a与其内实现时调用的对象的某个方法b的形参列表和返回值类型都相同
此时,可以考虑使用方法b实现对方法a的替换或覆盖,此替换或覆盖即为方法引用

注意:此方法b是非静态方法,需要对象调用


情况二::: 静态方法

要求:函数式接口中的抽象方法a与其内实现时调用的类的某个静态方法b的形参列表和返回值类型都相同
此时,可以考虑使用方法b实现对方法a的替换或覆盖,此替换或覆盖即为方法引用

注意:此方法b是静态方法,需要类调用

情况三::: 实例方法

要求:函数式接口中的抽象方法a与其内实现时调用的对象的某个方法b的返回值类型相同
     同时,抽象方法a中有n个参数,方法b中有n-1个参数,且抽象方法a的第一个参数作为方法b的调用者,且抽象方法a
     的后n-1个参数与方法b的n-1个参数的类型相同(或一致),则可以考虑使用方法b实现对方法a的替换或覆盖,此替换或覆盖即为方法引用

注意点:此方法b是非静态方法,需要对象调用,但是形式上,写成对象a所属的类

  • 构造器、数组引用

1. 构造器引用
1.1 格式:
类名::new

1.2 说明:
>调用了类名对应的类中的某一个确定的构造器
>具体调用的是类中的那一个构造器?取决于函数式接口的抽象方法的形参列表!


2. 数组引用
格式:数组名[] :: new


3. JDK8:Stream API的使用

  • Stream关注于内存中的多个数据的运算。
  • 使用步骤:①Stream API 的实例化 ② 一系列的中间操作 ③ 终止操作

4. JDK8之后的新特性:语法层面

  • JShell工具
  • try-catch结构变化 try(…){ }
  • 局部变量的类型推断: var
  • instanceof的模式匹配
  • switch表达式、switch的模式匹配
  • 文本块的使用: “”文本块“”
  • 新的引用数据类型:record(记录)
  • 密封类:sealed class

5. JDK8之后的新特性:其他

  • Optional类的使用
  • 其他:了解
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

死磕java的孤行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值