JDK各版本重要变革

news2024/12/27 12:37:07
各版本更新详情

JDK8(LTS)--2014/3

语法层面

lambda表达式(重要特色之一)

  • 一种特殊的匿名内部类,语法更加简洁
  • 允许把函数作为一个方法的参数,将代码象数据一样传递,即将函数作为方法参数传递
  • 基本语法: <函数式接口> <变量名> = (参数...) -> { 方法体}
    • 函数式接口: 接口中只有一个抽象方法
    • @FuntionalInterface:标志接口,保证该接口只能声明一个抽象方法
    • (参数...): 抽象方法的参数
    • ->: 分隔符
    • {}: 抽象方法的实现
    • 如果(参数...)参数为空,只需保留()
    • 如果(参数...)参数只有一个,()可以省略,只需要参数名称即可
    • 如果方法体中执行语句只有一句,且无返回值则可省略{};若有返回值且要省略{},则必须保证执行语句只有一句且省略return
  • Lambda表达式使用的限制条件
    • 方法参数或者局部变量类型必须为接口
    • 接口中只有一个抽象方法
  • Lambda表达式和匿名内部类区别
    • Lambda表达式是针对接口使用的,且接口中只有一个方法;而匿名内部类的类型可以是类、接口等,且接口方法数量是一个或多个
    • Lambda表达式是程序运行过程中生成的类,而匿名内部类则是在编译期生成class文件
       

接口增强

增加了默认方法和静态方法,都是为了接口扩展
默认方法default

  • 在增加该默认方法前一旦在接口中新增方法,则实现该接口的所有类必须实现该方法,不利于接口扩展
  • 有了默认方法,子类就不需要必须重写接口中的方法,需要使用默认方法时,可以通过实现类实例直接调用或者实现类重写后调用

静态方法

  • 接口中的静态方法不能被子类重写,只能通过接口名称调用

函数式接口

Lambda表达式的前提是需要有函数式接口。而Lambda使用时不关心接口名,抽象方法名,只关心抽 象方法的参数列表和返回值类型;java.util.function包下提供了很多函数式接口,如Consumer<T>、Supplier<T>、Function<T,R>、Predicated<T>

方法引用

双冒号::表示引用,方法引用也是为了解决lambda表达式冗余问题;即适合于当lambda表达式中的方法体中引用已经存在的方法

API层面

Stream流(常用)

  • Stream流是Java8中处理集合的关键抽象概念,它可以比较高效对集合进行非常复杂的查找、过滤、筛选等操作
  • Stream流不是一种数据结构,不会存储数据,而是对数据进行加工处理后返回

Stream流对象获取

Stream流中项目常用的API 

Optional类

空指针异常是导致Java应用程序失败的最常见原因。而Java8类库引入的Optional类就是来检查空值防止代码污染,再不用显式进行空值检测,同时代码看起来简洁优雅.常见Optional类API如下:

  • 创建Optional类对象的方法
    • Optional.of(T t) : 创建一个 Optional 实例,t必须非空
    • Optional.empty() : 创建一个空的 Optional 实例
    • Optional.ofNullable(T t):t可以为null
  • 判断Optional容器中是否包含对象
    • boolean isPresent() : 判断是否包含对象
    • void ifPresent(Consumer<? super T> consumer) :如果有值,就执行Consumer接口的实现代码,并且该值会作为参数传给它
  • 获取Optional容器的对象:
    • T get(): 如果调用对象包含值,返回该值,否则抛异常
    • T orElse(T other) :如果有值则将其返回,否则返回指定的other对象
    • T orElseGet(Supplier<? extends T> other) :如果有值则将其返回,否则返回由Supplier接口实现提供的对象
    • T orElseThrow(Supplier<? extends X> exceptionSupplier) :如果有值则将其返回,否则抛出由Supplier接口实现提供的异常

日期时间类

  • JDK8前日期类存在的问题
    • 旧日期时间设计混乱: Date日期在util和sql包下都存在,时间转换相关方法又在text包下
    • 线程不安全
  • 新增日期相关类
    • LocalDate: 表示日期类。yyyy-MM-dd
    • LocalTime: 表示时间类。 HH:mm:ss
    • LocalDateTime: 表示日期时间类 yyyy-MM-dd t HH:mm:ss sss
    • DatetimeFormatter:日期时间格式转换类
    • Instant: 时间戳类
    • Duration: 用于计算两个日期类

GC层面

  • JDK8前的永久代被元空间取代,内存改变为本地直接内存
  • JDK8中默认开启的是ParallelGC,即新生代采用Parallel Scavenge,老年代采用parallel Old GC
  • 在JDK9中,将CMS GC标识为废弃,取而代之默认的GC是G1

JDK11(LTS)--2018/9

  • 在JDK9中,将CMS GC标识为废弃,取而代之默认的GC是G1
  • ZGC:可伸缩低延迟垃圾收集器。ZGC 可以看作是 G1 之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化。在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为“Stop the world”。只有当整理完成后,线程逻辑才可以继续运行。(并行回收)
  • Flight Recorder(飞行记录器),基于 OS、JVM 和 JDK 的事件产生的数据收集框架
  • 对Stream、Optional、集合 API 进行增强

JDK17(LTS)--2021/9

  • 在JDK14中,删除 CMS 垃圾回收器
  • Spring 6 和 SpringBoot 3 的最低依赖就是JDK17
  • 正式引入密封类 sealed class,限制抽象类的实现
  • 统一日志异步刷新,先将日志写入缓存,然后再异步刷新

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迷你主机中的战斗机 Intel NUC 12 Serpent Canyon拆解

千呼万唤始出来&#xff0c;新一代游戏和创作者性能怪兽 mini主机 NUC 12 Serpent Canyon&#xff08;巨蛇峡谷终于发售了&#xff0c;以超紧凑的 2.5 升尺寸提供用户所需的所有性能和创新功能。NUC 12 Enthusiast 还首次将 Intel Deep Link 引入桌面&#xff0c;使 CPU 和 GPU…

类的继承和super关键字的使用(JAVA)

继承 所有的OOP语言都会有三个特征&#xff1a; 封装&#xff08;点击可跳转&#xff09;&#xff1b;继承&#xff1b;多态 为什么会有继承呢&#xff1f;可以先看下面的例子&#xff1a; 上面这两个类中的代码很相似因为它们只有最后一个方法不同其它的都相同&#xff0c;这样…

DbVisualizer Pro Crack

DbVisualizer Pro Crack DbVisualizer是适用于开发人员、DBA和分析师的通用数据库工具。它是最终的解决方案&#xff0c;因为相同的工具可以在访问各种数据库的所有主要操作系统上使用。支持的数据库Amazon Redshift、DB2 LUW、Exasol、H2、Informix、JavaDB/Derby、Microsoft …

【项目 进程10】2.21 alarm函数 2.22setitimer定时器函数

2.21 alarm函数 #include <unistd.h> unsigned int alarm(unsigned int seconds);功能&#xff1a;设置定时器&#xff08;闹钟&#xff09;。函数调用&#xff0c;开始倒计时&#xff0c;当倒计时为0的时候&#xff0c; 函数会给当前的进程发送一个信号&#xff1a;SIG…

C++中内存的动态管理

我们在C语言中了解到可以在栈区动态开辟空间&#xff0c;并且用完要进行释放&#xff0c;防止内存泄漏。 引入 C中也有可以进行动态开辟空间和释放空间的操作符new 、delete&#xff0c;虽然C中也可以用malloc、calloc、realloc、free函数&#xff0c;但是C中引入了类&#x…

宋浩概率论笔记(二)随机变量

本章节内容较多&#xff0c;是概率论与数理统计中最为重要的章节&#xff0c;对于概率密度和分布函数的理解与计算要牢牢掌握&#xff0c;才能在后期的学习中更得心应手。

小研究 - 微服务系统服务依赖发现技术综述(一)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…

【Azure上云项目实战】 合规性的身份验证与访问控制:在 Azure 中实现符合 PCI DSS 要求的架构设计

文章目录 一、开篇写在前面二、项目背景及介绍三、Azure PCI DSS 项目架构及组件四、身份验证、访问控制4.1 三层防御控制4.2 三层部署结构 五、跳板机六、与 PCI DSS 要求的关系七、该篇总结&#xff08;重要&#xff09;写在文末 一、开篇写在前面 各位博客阅读者们以及对云…

【A200】Ubuntu18.04 + ROS-Melodic + 比业电子VISIOSCAN雷达 评测

大家好&#xff0c;我是虎哥&#xff0c;朋友介绍&#xff0c;有一款单线激光雷达&#xff0c;25米的检测距离&#xff0c;有80HZ的扫描频率&#xff0c;而且角度分辨率最高可以到0.1&#xff0c;这个参数我确实没有见过&#xff0c;所以立刻着手从厂家那申请到了VISIOSCAN雷达…

Android的Handler消息通信详解

目录 背景 1. Handler基本使用 2. Handler的Looper源码分析 3. Handler的Message以及消息池、MessageQueue 4. Handler的Native实现 4.1 MessageQueue 4.2 Native结构体和类 4.2.1 Message结构体 4.2.2 消息处理类 4.2.3 回调类 4.2.5 ALooper类 5. 总结&…

轻量级目标检测模型NanoDet-Plus微调、部署(保姆级教学)

前言 NanoDet-Plus是超快速、高精度的轻量级无锚物体检测模型&#xff0c;github项目文件。可以在移动设备上实时检测。其主要特点是 超轻量&#xff1a;模型文件仅980KB(INT8)、1.8MB(FP16)超快&#xff1a;移动ARM CPU上97fps&#xff08;10.23ms&#xff09;高精度&#xf…

C++内存管理(动态内存开辟)

我们在C语言当中想要使用堆区的空间的时候就需要使用malloc函数进行手动的申请&#xff0c;但是我们在申请的时候需要手动进行计算&#xff0c;经过计算之后还需要进行判空操作&#xff0c;并且还不能进行任意值的初始化。这一切看起来在学习完C当中的动态开辟之前显得很正常&a…

最新版本mac版Idea 激活Jerbel实现热部署

1.环境准备 1.安装docker desktop 客户端创建本地服务 2.创建guid 3.随便准备一个正确格式的邮箱 2.具体操作 1.通过提供的镜像直接搭建本地服务 docker pull qierkang/golang-reverseproxy docker run -d -p 8888:8888 qierkang/golang-reverseproxy2.guid 通过如下网址直…

小C说历史(人物介绍第一篇):传奇人物Linus Torvalds 缔造Linux和Git

传奇人物Linus Torvalds 缔造Linux和Git Linus Torvalds&#xff0c;1969年12月28日出生于芬兰的赫尔辛基&#xff0c;Linux核心的创作者。当Linus十岁时&#xff0c;他的祖父&#xff0c;赫尔辛基大学的一位统计教授&#xff0c;购买了一台Commodore VIC-20计算机。Linus帮助他…

Mybatis-Plus面向实用知识点——结合SpringBoot

目录 环境配置基本流程各类中的方法BaseMapperIServiceCOUNTGETQueryListPageRemoveSaveUpdate 环境配置 参考java项目各框架环境配置 基本流程 创建Mapper Mapper public interface MyMapper extends BaseMapper<Entity>{}创建Service public interface MyService …

【娱乐圈明星知识图谱2】信息抽取

目录 1. 项目介绍 2. 信息抽取介绍 3. ChatGPT 信息抽取代码实战 4. 信息抽取主逻辑 5. 项目源码 1. 项目介绍 利用爬虫项目中爬取的大量信息 【娱乐圈明星知识图谱1】百科爬虫_Encarta1993的博客-CSDN博客娱乐圈明星知识图谱百度百科爬虫百度百科爬虫百度百科爬虫百度百…

【vue】 vue2 监听滚动条滚动事件

代码 直接上代码&#xff0c;vue单文件 index.vue <template><div class"content" scroll"onScroll"><p>内容</p><p>内容</p><p>内容</p><p>内容</p><p>内容</p><p>内容…

java 定时任务不按照规定时间执行

这里写目录标题 使用异步启动可能出现的问题排查代码中添加的定时任务步骤是否正确排查是否任务阻塞&#xff0c;如果定时任务出现异常阻塞后&#xff0c;将不会在次执行java中多个Scheduled定时器不执行为了让Scheduled效率更高&#xff0c;我们可以通过两种方法将定时任务变成…

springboot 整合代码块实现访问

一 springboot整个代码块实 2.访问

补充JDK源码-IDEA集成工具

在阅读JDK8源码的时候发现&#xff0c;只有一小部分常用包是存在源码及其注释的&#xff0c;而很多内部包是没有源码&#xff0c;class文件在阅读的时候对阅读者十分不友好。在网上搜集了很多资料都没有解决问题。 解决问题办法&#xff1a;参考文档。本文主要是根据这篇文章记…