当前位置: 首页 > news >正文

JDK 8 有哪些新特性?

JDK 8 引入了一系列新特性,主要包括:

1. 元空间替代了永久代

  • 解决了永久代的内存管理、性能问题。
  • 提高了类加载器的隔离性。
  • 增强了可扩展性和跨平台性。
  • 提升了与垃圾收集器的兼容性。

因为 JDK8 要把 JRockit 虚拟机和 Hotspot 虚拟机融合,而JRockit 没有永久代,所以把 Hotspot 永久代给去了(本质也是永久代回收效率太低)。

2. Lambda 表达式

  • 引入了匿名函数,简化代码编写。
// 传统方式
Runnable runnable1 = new Runnable() {@Overridepublic void run() {System.out.println("mianshiya.com");}
};// Lambda 表达式
Runnable runnable2 = () -> System.out.println("mianshiya.com");

Lambda 是Java8引入的一种匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。

3. 新日期类

  • 引入了新的不可变日期时间API。
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();

Java8引入了新的日期和时间 API(位于 java.time 包中),它们更加简洁和易于使用,解决了旧版日期时间 API 的许多问题。
例如 Date、calendar 都是可变类且线程不安全。而新的日期类都是不可变的,一旦创建就不能修改这样可以避免意外的修改,提升代码的安全性和可维护性。

Date本身不包含时区信息,必须使用 calendar 类来处理时区,但使用起来非常复杂且容易出错,
新 AP|提供了专门的时区类(如 zonedDateTime,offsetDateTime,zoneId 等),简化了时区处理,并且这些类的方法更加直观和易用。

4. 接口默认/静态方法

  • 接口可以包含默认方法和静态方法。
interface MyInterface {default void defaultMethod() {System.out.println("Default Method");}static void hello() { System.out.println("Hello, New Static Method Here"); } 
}

默认方法允许在接口中定义方法的默认实现,这样接口的实现类不需要再实现这些方法。之所以提供静态方法,是为了将相关的方法内聚在接口中,而不必创建新的对象。

5. Stream 流式接口

  • 提供了高效、易于使用的集合数据处理方式。
List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> result = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());

Stream AP!提供了一种高效且易于使用的方式来处理数据集合。"它文持链式操作、惰性求值和并行处理,

6. Optional 类

  • 避免了空指针异常,提供了更优雅的空值处理。
Optional<String> optional = Optional.of("mianshiya.com");
optional.ifPresent(System.out::println);

0ptional 类用来解决可能出现的 Nu11PointerException 问题,提供了一种优雅的方式来处理可能为空的值。

7. CompletableFuture 和 StampedLock

  • 引入了新的并发实现类。
CompletableFuture.supplyAsync(() -> "Hello").thenApply(s -> s + " World").thenAccept(System.out::println);

CompletableFuture 提供了一个新的异步编程模型,简化了异步任务的编写和管理。

相关文章:

JDK 8 有哪些新特性?

JDK 8 引入了一系列新特性&#xff0c;主要包括&#xff1a; 1. 元空间替代了永久代 解决了永久代的内存管理、性能问题。提高了类加载器的隔离性。增强了可扩展性和跨平台性。提升了与垃圾收集器的兼容性。 因为 JDK8 要把 JRockit 虚拟机和 Hotspot 虚拟机融合&#xff0c…...

C++ Win32API 贪吃蛇游戏

程序代码&#xff1a; #include <windows.h> #include <list> #include <ctime>// 定义游戏区域大小 const int width 20; const int height 20;// 定义贪吃蛇的方向 enum Direction { UP, DOWN, LEFT, RIGHT };// 定义贪吃蛇的节点 struct SnakeNode {in…...

【Python实现代码视频/视频转字符画/代码风格视频】

该程序改良自GitHub开源项目VideoCharDraw 在源程序CharDraw_thread.py 带压缩和多线程版本字符画的基础上使用Tkinter库添加了图形化的操作&#xff0c;使用户操作体验更方便。 什么是视频字符画&#xff1f; 视频转字符画是一种将视频中的每一帧图像转换为由字符组成的图…...

基于级联深度学习算法的前列腺病灶检测在双参数MRI中的评估| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Evaluation of a Cascaded Deep Learning–based Algorithm for Prostate Lesion Detection at Biparametric MRI 基于级联深度学习算法的前列腺病灶检测在双参数MRI中的评估 Background 背景 Multiparametric MRI (mpMRI) improves prostate cancer (PCa) de…...

基于STM32开发的智能门铃系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭门铃系统智能社区门禁管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门铃系统结合了传统门铃功能与现代技术&#xff0c;通过摄像头、麦克风、…...

【WebRTC指南】远程视频流

远程视频流使用入门 RTCPeerConnection 连接到远程对等设备后,就可以在它们之间流式传输音频和视频。此时,我们会将从 getUserMedia() 收到的数据流连接到 RTCPeerConnection。媒体流包含至少一个媒体轨道,当我们想将媒体传输到远程对等设备时,它们会分别添加到 RTCPeerCo…...

前端构建URL的几种方法比对,以及函数实现

当我们在前端开发中处理 URL 时&#xff0c;可能会用到字符串拼接、ES6 模板语法 (template literals) 或者使用 new URL() 构造函数。这三者各有优劣&#xff0c;适用于不同的场景。 1. 字符串拼接与 ES6 模板语法 字符串拼接 和 ES6 模板语法 都是将不同的字符串片段组合在…...

场外个股期权如何发出行权指令?

场外期权行权指令也就是平仓指令的意思&#xff0c;一般场外个股期权交易有三种方式开仓和行权平仓指令&#xff0c;分别是市价&#xff0c;限价和半小时询价&#xff0c;跟普通股票的买卖和交易方式类似&#xff0c;唯一区别是手动发出场外个股期权的行权指令&#xff0c;下文…...

AH8681锂电升压3.7升5V升12V 2A可支持QC2.0 3.0

135.3806.7573在探讨AH8681这款专为3.7V升压5V至12V&#xff0c;并具备2A输出能力&#xff0c;同时兼容QC2.0与QC3.0快充协议的升压芯片时&#xff0c;我们不得不深入其技术细节、应用场景、设计优势以及市场定位等多个维度&#xff0c;以全面理解其在现代电子设备中的重要作用…...

那些年我们一起遇到过的奇技淫巧

EVAL长度限制突破技巧 PHP Eval函数参数限制在16个字符的情况下 &#xff0c;如何拿到Webshell&#xff1f; 写一段限制长度在小于17位的字符&#xff0c;拿下webshell <?php highlight_file(__FILE__); $param $_REQUEST[param]; if (strlen($param) < 17 &&am…...

机器学习笔记:编码器与解码器

目录 介绍 组成结构 代码实现 编码器 解码器 合并编码器-解码器 思考 介绍 在机器翻译中&#xff0c;输入的序列与输出的序列经常是长度不相等的序列&#xff0c;此时&#xff0c;像自然语言处理这种直接使用循环神经网络或是门控循环单元的方法就行不通了。因此&#x…...

加密狗创新解决方案助力工业自动化

面临的挑战 早在1991年&#xff0c;COPA-DATA就认识到需要一个既能提供长期保护又能灵活应对的解决方案&#xff0c;以防止软件盗版并确保客户在各种复杂的工业环境下能够顺利使用其产品。这一解决方案不仅要兼容Windows系统&#xff0c;还必须在网络连接受限的情况下&#xff…...

浅谈文件缓冲区和翻译环境

文章目录 1、文件缓冲区2、程序环境A、翻译过程概述B、详解编译和链接a、编译b、链接 1、文件缓冲区 ANSIC 标准采用”文件缓冲系统“处理数据文件&#xff0c;即在文件的读写过程中会使用到文件缓冲区&#xff0c;而文件缓冲区分为输入缓冲区和输出缓冲区。 读写文件 写文件…...

《腾讯NCNN框架的模型转换x86/mips交叉编译推理》详细教程

NCNN的编译运行交叉编译 1.在Ubuntu上编译运行ncnn1&#xff09;编译ncnn x86 linux2&#xff09;测试ncnn x86 linux 2. 模型转换1&#xff09;onnx2&#xff09;pnnx 3.在x86上加载推理模型1)准备工作2)编写C推理代码3)编写Cmakelist编译 4.在MIPS上进行交叉编译推理1&#x…...

关于近期安卓开发书籍阅读观后感

概述 由于笔者是Java转Android&#xff0c;对于安卓相关知识欠缺&#xff0c;故找一些入门和进阶书籍观看。笔者搜到的相关的安卓推荐博客&#xff1a;【Android – 学习】学习资料汇总_android书籍强烈推荐-CSDN博客相对来说比较全面。 阅读历程 笔者先阅读的是郭霖老师的…...

Servlet——个人笔记

Servlet——个人笔记 文章目录 [toc]Servlet简介Servlet命名Servlet由来实现过程 Servlet 相对 CGI 的优势简要说说什么是CGI Servlet 在IDEA中开发流程Servlet注解方式配置WebServlet注解源码WebServlet注解使用 Servlet常见容器Servlet 生命周期简介测试 Servlet 方法init()…...

富格林:戳穿虚假交易保证安全

富格林指出&#xff0c;虚假交易亏损骗局一直以来都是投资者的诟病。不少投资者来到这个赛道的目的铁定是为了安全盈利增值财富&#xff0c;因此如何去杜绝虚假交易便成了当务之急。实际上&#xff0c;有不少投资技巧可以为保障我们的交易安全带来一些庇护。下面富格林就给大家…...

Linux学习——文本处理工具与正则表达式

目录 一&#xff0c;grep 1&#xff0c;grep介绍 2&#xff0c;grep的常用选项 3&#xff0c;grep使用演示 1&#xff0c;基本使用 直接查找字符串&#xff1a; 使用选项 2&#xff0c;使用正则表达式进行匹配 1&#xff0c;正则表达式介绍 2&#xff0c;使用范例 二&…...

大厂进阶四:React源码Fiber架构解析

本文主要内容&#xff1a; 1、React Concurrent 2、React15架构 3、React16架构 4、Fiber架构 5、任务调度循环和fiber构造循环区别 一、React Concurrent React在解决CPU卡顿是会用到React Concurrent的概念&#xff0c;它是React中的一个重要特性和模块&#xff0c;主要的…...

MongoDB的WiredTiger存储引擎

作者&#xff1a;太阳 从MongoDB 3.2 开始&#xff0c;MongoDB实例默认的存储引擎为WiredTiger&#xff0c;WiredTiger存储引擎具体以下几大优点&#xff1a; 文档级并发 将数据持久化到磁盘 快照和checkpoint 数据压缩 本地数据加密 一、文档级别并发 1、WiredTiger使…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...