JDK新特性(1)

1996 JDK1.0

2004 JDK5.0 里程碑式的版本

2014 JDK8.0 --->LTS

2017.9 JDK9.0

2018.9 JDK11 --->LTS

2021.9 JDK17 --->LTS

学习新特性 角度1:新的语法规则

自动装箱、自动拆箱、注解、enum、Lamda表达式、方法引用、switch表达式、try-catch变化、record等

角度2:增加、过时。删除api

StringBuilder、ArrayList、新的日期时间API、Optional等

角度3:JVM参数的调整、SC的变化、内存结构

JDK8新特性:

1、Lamda表达式

@Test
public void test2(){
    //常规写法:重写Comparator接口的compare方法,调用run方法
    Comparator<Integer> com1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return Integer.compare(01,02);
        }
    };

    int compare1 = com1.compare(18,1024);
    System.out.println(compare1);

    System.out.println("--------------");

    //lambda表达式的写法
    //保留等号前的定义,已经确定的类型(如Integer)删去不写,保留形参,指向方法体内容(大括号也可删去)

    Comparator<Integer> com2 = ( o1,  o2) -> Integer.compare(01,02);
    int compare2 = com2.compare(18, 1024);
    System.out.println(compare2);

}

(1)Lambda表达式的使用举例:

 ( o1,  o2) -> Integer.compare(01,02);

(2)lambda操作符:

->

Lambda形参列表(重写后的抽象方法中的形参列表) -> lambda体(重写后的方法体)

(3)lambda表达式的本质:

一方面,lambda表达式作为接口的实现类的对象--->万事万物皆对象

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

(4)函数式接口

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

只有给函数式接口提供实现类对象时,我们才能使用lambda表达式。

(5)API中函数式接口所在的包

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

(6)常见的函数接口

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

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

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

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

(7)lambda

语法格式一:无参,无返回值

无参则保留小括号,无返回值则重写输出语句

Runnable r2 = () -> {
    System.out.println("……又在仗着我会对你心软,说一些骗我的思念吗。");
};

语法格式二:Lambda 需要一个参数,但是没有返回值。

Consumer<String> con2 = (String str)-> System.out.println(str);

语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”

Comparator<Integer> com2 = ( o1,  o2) -> Integer.compare(01,02);

语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略

Consumer<String> CON2 = s -> {System.out.println(s);};

语法格式五:Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值

Comparator<Integer> com4 = ( o1,  o2) -> {
    System.out.println(o1);
    System.out.println(o2);
    return o1.compareTo(o2);
};
System.out.println(com4.compare(18,1024));

语法格式六:当 Lambda 体只有一条语句时,return 与大括号若有,都可以省略

Consumer<String> con2 = (String str)-> System.out.println(str);

方法引用:

1、举例:

Interger :: compare

2、说明:

可以使用方法引用的前提:必须能够使用lambda表达式

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

3、方法引用的本质:

方法引用作为了函数接口的实现   --->万事万物皆对象

4、格式

类(或对象) :: 方法名

5、具体情况

情况1  对象::实例方法

原形式:

Person per1 = new Person("Qum");

Supplier<String> supplier = new Supplier<String>() {
    @Override
    public String get() {
        return per1.getName();
    }
};
System.out.println(supplier.get());

方法引用;

//方法引用  格式  对象::方法
Supplier<String> supplier2 = per3::getName;
System.out.println(supplier2.get());

函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b  形参列表和返回值类型都相同时,此时可以考虑使用方法b对方法a进行替换

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

情况2  类::静态方法

函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b  形参列表和返回值类型都相同时,此时可以考虑使用方法b对方法a进行替换

此方法b为静态方法,不需对象调用。

@Test
public void test4(){
    Function<Double,Long> fun1  = new Function<Double, Long>() {
        @Override
        public Long apply(Double aDouble) {
            return Math.round(aDouble);
        }
    };

    Function<Double,Long> fun2 = Math::round;//因为没有对象存在,静态方法由类发起,写作Math::round
}

情况3  类::实例方法

函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b  返回值类型都相同,且,抽象方法a中有n个参数,且抽象方法a的第一个参数为方法b的调用者,抽象方法a的后n-1个参数与方法b的n-1个参数相同:

此时可以考虑使用方法b对方法a进行替换

@Test
//类::实例方法
public void test5(){
    Comparator<String> com1 = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }
    };

    System.out.println(com1.compare("Dit","Qum"));
    //引用方法
    Comparator<String>comparator = String::compareTo;
}

构造器引用

1、格式:

Supplier<Employee> sup1 = Employee::new;

System.out.println(sup2.get());

2、说明

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

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

数组引用

1、格式:

数组名[] ::new

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955978.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第 5 场 算法季度赛

题目&#xff1a; 5.精准难度【算法赛】 - 蓝桥云课 问题描述 小蓝&#xff0c;蓝桥杯命题组的核心人物。今年的他出题灵感爆发&#xff0c;一口气出了 N 道题目&#xff0c;难度系数分别为 A1​,A2​,…,AN​。 只是&#xff0c;这些题目的难度参差不齐&#xff0c;让组委…

对话 TDengine 解决方案中心总经理陈肃:构建技术与市场的桥梁

TD 小T导读 他是大数据领域的杰出专家&#xff0c;拥有超过十项一作发明专利&#xff0c;是中国通信行业标准《大数据 消息中间件技术要求与测试方法》的重要编写者&#xff0c;并凭借数据中间件领域的突出成就荣获 2019 年“CJK OSS Award”。他是腾讯云 TVP 专家和 TGO 鲲鹏会…

rabbitmq安装延迟队列

在RabbitMQ中&#xff0c;延迟队列是一种特殊的队列类型。当消息被发送到此类队列后&#xff0c;不会立即投递给消费者&#xff0c;而是会等待预设的一段时间&#xff0c;待延迟期满后才进行投递。这种队列在多种场景下都极具价值&#xff0c;比如可用于处理需要在特定时间触发…

GitLab集成Jira

GitLab与Jira集成的两种方式 GitLab 提供了两种 Jira 集成&#xff0c;即Jira议题集成和Jira开发面板集成&#xff0c;可以配置一个或者两个都配置。 具体集成步骤可以参考官方文档Jira 议题集成&#xff08;极狐GitLab文档&#xff09;和Jira 开发面板集成&#xff08;极狐G…

【正则表达式】从0开始学习正则表达式

正则表达式&#xff08;英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09; 一、推荐学习网站 正则表达式 – 语法 | 菜鸟教程 正则表达式30分钟入门教程 | 菜鸟教程 编程胶囊-打造学习编程的最好系统 二、必知必记 2.1 元字符…

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…

HackMyVM-Klim靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 CVE-2008-0166 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.159.127) 靶 机&#xff1a;debian(192.168.159.27) 注意事…

Hexo + NexT + Github搭建个人博客

文章目录 一、 安装二、配置相关项NexT config更新主题主题样式本地实时预览常用命令 三、主题设置1.侧边栏2.页脚3.帖子发布字数统计 4.自定义自定义页面Hexo 的默认页面自定义 404 页自定义样式 5.杂项搜索服务 四、第三方插件NexT 自带插件评论系统阅读和访问人数统计 五、部…

CamemBERT:一款出色的法语语言模型

摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功&#xff0c;但大多数可用模型要么是在英语数据上训练的&#xff0c;要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…

基于PyQt - 6的医疗多模态大模型医疗研究系统中的创新构建与应用(上 .文章部分)

一、引言 1.1 研究背景与意义 在当今数智化时代,医疗行业正经历着深刻的变革,对智能化、高效化的需求日益迫切。传统的医疗模式在面对海量的医疗数据、复杂的诊断流程以及个性化的治疗需求时,逐渐显露出局限性。随着人工智能技术的飞速发展,多模态大模型作为一种前沿技术…

(一)afsim第三方库编译

注意&#xff1a;防止奇怪的问题&#xff0c;源码编译的路径最好不要有中文&#xff0c;请先检查各文件夹名 AFSIM版本 Version&#xff1a; 2.9 Plugin API Version&#xff1a; 11 软件环境 操作系统&#xff1a; Kylin V10 SP1 项目构建工具: cmake-3.26.0-linux-aarch6…

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language&#xff08;PSL&#xff09; 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

细说STM32F407单片机电源低功耗SleepMode模式及应用示例

目录 一、STM32F4的低功耗模式 1、睡眠(Sleep)模式 2、停止(Stop)模式 3、待机(Standby)模式 二、睡眠模式 1、进入睡眠模式 2、睡眠模式的状态 3、退出睡眠模式 4、SysTick的影响 三、应用示例 1、工程配置 &#xff08;1&#xff09; 时钟、DEBUG、GPIO、CodeGen…

YOLOv11改进,YOLOv11检测头融合RepConv卷积,并添加小目标检测层(四头检测),适合目标检测、分割等任务

摘要 作者提出了一种简单而强大的卷积神经网络架构,其推理阶段采用与 VGG 类似的网络体结构,仅由一堆 3x3 卷积和 ReLU 组成,而训练阶段的模型具有多分支拓扑。这种训练阶段和推理阶段架构的解耦通过结构重参数化技术实现,因此我们将该模型命名为 RepVGG。 # 理论介绍 Re…

ScratchLLMStepByStep:训练自己的Tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件&#xff0c;但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要组件&#xff1a; Tokenizer: 分词器的核心组件&#xff0c;定…

Linux 操作二:文件映射与文件状态

Linux 操作二&#xff1a;文件映射与文件状态查询 文件映射 ​ mmap是一种内存映射文件的方法&#xff0c;即将一个文件或者其它对象映射到进程的地址空间&#xff0c;实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff0c;进程…

网络编程-TCP套接字

文章目录 初始TCP套接字TCP的Socket APISocketServerSocket 使用TCP模拟通信服务器端客户端 上述测试代码的问题分析IO的输入缓冲区的问题关于TCP协议中的粘包的问题不能进行多线程通信的问题 处理问题之后的完整代码启动多个实例完整代码测试结果 关于IO多路复用机制的引入 初…

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈 开发背景 可能大家听过过蓝湖可以转ui设计图为vue.js&#xff0c;react native代码&#xff0c;那么请问听说过将figma的设计图转换为flutter源代码吗?本文优雅草央千澈带…

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊&#xff0c;屡战屡败&#xff0c;最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder&#xff0c;跟matlab最像&#xff0c;也最容易入手。 从VScode上搞python&#xff0c;最后安装到appdata上&#xff0c;安装插…

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

音乐流派分类 – 自动化分类不同音乐风格 在本教程中,我们将开发一个深度学习项目,用于自动化地从音频文件中分类不同的音乐流派。我们将使用音频文件的频率域和时间域低级特征来分类这些音频文件。 对于这个项目,我们需要一个具有相似大小和相似频率范围的音频曲目数据集…