Java10新增特性

news2025/1/14 1:00:50

版本介绍

Java 10 的发布时间是2018年3月20日。这是在Java 9之后,采用了基于时间发布的策略,每6个月一个版本。这是采用新的发布策略之后的第一个版本。

Java 10 是Java版本历史上最快的一个版本。它打破了Java缓慢增长和进化的概念。它是一个具有许多未来变化的版本,虽然其范围和影响可能并不明显,但却具有深远的影响。

特性列表

Java 10是Java的一个主要版本更新,引入了许多新功能和改进。以下是一些Java 10的新增特性:

  • 局部变量类型推断 :Java 10引入了局部变量类型推断,允许开发者使用关键字"var"来声明局部变量,而无需指定类型。例如:var number = 10;

  • 改进的switch表达式 :Java 10对switch表达式进行了改进,允许在switch语句中使用字符串、枚举和字符串模板,以及在switch表达式中使用字符串插值。

  • 重复注解 :Java 10引入了重复注解,允许在同一个元素上使用多个注解。这对于在编译时检查注解的正确性非常有用。

  • 接口默认方法和静态方法 :Java 10允许在接口中定义默认方法和静态方法。这些方法可以包含实现代码,并且可以在接口实例上直接调用。

  • 改进的局部变量声明 :Java 10允许在for循环和try-catch块中声明变量。这意味着可以在这些上下文中使用局部变量声明,而无需显式地指定变量类型。

  • 并行流改进 :Java 10对并行流进行了改进,引入了默认并行流和静态方法Stream.of()和Stream.concat()。这些改进使得创建和使用并行流更加容易。

  • 新的日期和时间API :Java 10引入了新的日期和时间API,其中包括新的日期和时间类、时间间隔和时区支持等。这个新的API使得处理日期和时间更加简单和一致。

  • 改进的G1垃圾收集器 :Java 10对G1垃圾收集器进行了改进,通过增加并发标记和并行清理阶段的性能,提高了吞吐量和延迟性能。

  • ZGC垃圾收集器 :Java 10还引入了ZGC垃圾收集器,这是一种新的垃圾收集器,支持任意内存访问和并发垃圾收集。ZGC的目标是提供低延迟和高吞吐量。

  • JDK移除弃用的API :Java 10移除了JDK中一些过时的和弃用的API,包括javax.imageio、javax.sound.sampled和javax.print等包中的一些类和方法。这有助于减少JDK的大小并提高性能。

  • 新的集合改进 :Java 10对集合框架进行了改进,引入了新的接口List.of()和Set.of(),以及新的类Stream.of()。这些新的接口和类使得创建和操作集合更加简单和方便。

  • 改进的HashMap :Java 10对HashMap进行了改进,引入了红黑树来提高性能。这个改进使得HashMap在处理大量数据时更加高效。

  • 改进的异常处理 :Java 10引入了新的异常处理机制,包括新的异常类型java.lang.invoke.MethodHandleException和java.lang.invoke.MethodHandles.LookupException。这些新的异常类型使得异常处理更加清晰和准确。

  • 支持Unicode 10 :Java 10支持Unicode 10,引入了更多的字符集和表情符号。这个改进使得Java在处理国际化文本和表情符号时更加全面和准确。

  • 支持HTTP/2 :Java 10支持HTTP/2协议,使得在处理网络请求时更加高效和快速。

  • JMX改进 :Java 10引入了新的JMX MBean接口java.lang.management.ThreadMXBean,使得开发者可以更加方便地获取线程相关的信息。

  • 支持ARM64架构 :Java 10还支持ARM64架构,使得在ARM64设备上运行Java程序更加高效。
    这些新特性都进一步提升了Java 10的性能、易用性和开发效率。

  • 线程本地握手(JEP 312) :Java 10将引入一种在线程上执行回调的新方法,这使得停止单个线程而不是停止全部线程或者一个都不停变得更加方便。

  • 备用内存设备上的堆分配(JEP 316) :Java 10允许在备用内存设备上分配Java对象堆内存,这为特定类型的内存分配提供了更大的灵活性。

  • 其他Unicode语言-标记扩展(JEP 314) :Java 10增强了java.util.Locale及其相关的API,以支持语言标记语法的其他Unicode扩展(BCP 47)。

  • 合并JDK多个代码仓库到一个单独的储存库中 :在Java 10中,多个JDK代码仓库将被合并为一个,使得跨相互依赖的变更集的存储库运行atomic commit(原子提交)成为可能。

  • 新增API :Java 10中增加了三个新的接口(List、Map、Set),并为其添加了一个新的静态方法copyOf(Collection),以简化集合的操作。
    这些新特性进一步提高了Java的性能、易用性和开发效率。

在这里插入图片描述

代码示例

一些Java 10新特性的代码示例。

局部变量类型推断:

var number = 10; // 自动推断为int类型
var name = "John"; // 自动推断为String类型

JShell交互式编程环境:

首先,你需要在命令行中输入jshell来启动JShell。然后你可以输入Java代码并立即执行它:

jshell> int x = 10; // 定义一个int类型的变量x,并赋值为10
jshell> System.out.println(x); // 打印变量x的值
10

新的集合改进:

List<String> list = List.of("apple", "banana", "orange"); // 创建List集合
Set<String> set = Set.of("apple", "banana", "orange"); // 创建Set集合

改进的HashMap:

HashMap<String, Integer> map = new HashMap<>(); // 创建HashMap集合
map.put("apple", 10); // 添加键值对
map.put("banana", 20);
System.out.println(map.get("apple")); // 打印键为"apple"的值,输出10

新的时间API:


import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDateTime now = LocalDateTime.now(); // 获取当前时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 定义日期格式
String formattedDate = now.format(formatter); // 将当前时间格式化为指定格式的字符串
System.out.println(formattedDate); // 输出格式化后的日期字符串

GC改进和内存管理:


System.gc(); // 建议JVM进行垃圾收集

线程本地握手(JEP 312):

Thread.stop(new Thread() { // 停止一个线程的执行
public void run() {
System.out.println("Thread stopped");
}
});

备用内存设备上的堆分配(JEP 316):

这个特性在Java中没有直接的代码示例,因为它涉及到底层的内存管理和垃圾收集机制。但是,它可以通过配置JVM参数来控制,例如设置-XX:+UseConcMarkSweepGC参数来使用CMS垃圾收集器。

新的Unicode语言-标记扩展(JEP 314):

这个特性在Java中没有直接的代码示例,因为它涉及到底层的Unicode支持和语言标记语法。但是,你可以在Java中使用java.util.Locale类和相关的API来处理语言标记,例如:


import java.util.Locale;
Locale locale = new Locale.Builder().setLanguage("en").setRegion("US").build(); // 创建一个Locale对象,表示美国英语
System.out.println(locale.getLanguage()); // 输出语言代码(en)
System.out.println(locale.getRegion()); // 输出地区代码(US)

合并JDK多个代码仓库到一个单独的储存库中:

这个特性在Java中没有直接的代码示例,因为它涉及到底层的代码仓库管理和构建工具的使用。但是,你可以通过使用Maven或Gradle等构建工具来管理你的Java项目,并从单个存储库中获取所有的依赖项和代码模块。例如,你可以使用Maven的pom.xml文件来配置你的项目和依赖项,并使用Maven的命令行工具来构建和打包你的项目。

GC改进:

Java 10引入了新的垃圾收集器G1的改进,以提高吞吐量和延迟性能。你可以通过配置JVM参数来选择使用G1垃圾收集器,例如设置-XX:+UseG1GC参数。

线程安全改进:

Java 10引入了新的原子类AtomicLong和AtomicInteger,以提供更高效的线程安全操作。你可以使用这些类来替代java.util.concurrent.atomic包中的原子类,例如:

import java.util.concurrent.atomic.AtomicLong;
AtomicLong counter = new AtomicLong(0); // 创建一个AtomicLong对象,初始值为0
counter.incrementAndGet(); // 增加计数器的值,并获取更新后的值
System.out.println(counter.get()); // 输出更新后的值

拓展

Java9新增特性
Java对象深拷贝
Java中Deque接口方法解析
ArrayDeque详解-Deque接口数组实现方案

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

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

相关文章

【树与二叉树的转换,哈夫曼树的基本概念】

文章目录 树与二叉树的转换将二叉树转化为树森林与二叉树的转化&#xff08;二叉树与多棵树之间的关系&#xff09;二叉树转换为森林森林的先序遍历1&#xff09;先序遍历2&#xff09;后序遍历 哈夫曼树的基本概念森林转换成二叉树&#xff08;二叉树与多棵树的关系&#xff0…

Sensor 点亮出图后,颜色偏红或者偏绿是为什么?

这是因为 sensor balck level 的值配置的不正确导致&#xff0c;black level 的值一般在效果参数的 calibration 参数里面。 在驱动调试阶段&#xff0c;我们一般都是复用其他已调试好的&#xff0c;sensor 的驱动文件及效果文件&#xff0c; 而不同 sensor 的 balck level 的…

YOLOv8-Seg改进:分割注意力系列篇 | 高效的通道先验卷积注意力(CPCA) | 中科院 2023.6

🚀🚀🚀本文改进:高效的通道先验卷积注意力(CPCA)方法,支持注意力权重在通道和空间维度上的动态分布; 🚀🚀🚀CPCA 小目标分割检测&复杂场景首选,实现涨点 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新…

奇舞周刊第510期:浏览器和图形引擎渲染对比

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 浏览器和图形引擎渲染对比 本文从介绍浏览器渲染引擎开始&#xff0c;逐渐引出和图形引擎的比较&#xff0c;尝试从图形视角探索和理解浏览器的渲染原理。 Next.js的崛起&#xff…

消息队列使用场景

&#x1f388;个人公众号:&#x1f388; :✨✨✨ 可为编程✨ &#x1f35f;&#x1f35f; &#x1f511;个人信条:&#x1f511; 知足知不足 有为有不为 为与不为皆为可为&#x1f335; &#x1f349;本篇简介:&#x1f349; 本篇记录消息队列使用场景&#xff0c;如有出入还望…

基于STC12C5A60S2系列1T 8051单片机串口通信信应用

基于STC12C5A60S2系列1T 8051单片机串口通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表基于STC12C5A60S2系列1T 8051单片…

力扣字符串--总结篇

前言 字符串学了三天&#xff0c;七道题。初窥kmp&#xff0c;已经感受到算法的博大精深了。 内容 对字符串的操作可以归结为以下几类&#xff1a; 字符串的比较、连接操作&#xff08;不同编程语言实现方式有所不同&#xff09;&#xff1b; 涉及子串的操作&#xff0c;比…

Sagemaker基础操作指南

简介 Amazon SageMaker是亚马逊AWS提供的一项托管式机器学习服务&#xff0c;旨在简化和加速机器学习开发的整个生命周期。它为机器学习工程师和数据科学家提供了一套完整的工具和功能&#xff0c;用于构建、训练、调优和部署机器学习模型。本文将会通过一个简单的例子&#x…

linux_day02

1、链接&#xff1a;LN 一个点表示当前工作目录&#xff0c;两个点表示上一层工作目录&#xff1b; 目录的本质&#xff1a;文件&#xff08;该文件储存目录项&#xff0c;以链表的形式链接&#xff0c;每个结点都是目录项&#xff0c;创建文件相当于把目录项添加到链表中&…

111111111111111

全局锁 就是对整个数据库进行加锁&#xff0c;加锁之后整个数据库就处于只读状态&#xff0c;后续的DML写语句&#xff0c;DDL语句&#xff0c;以及对更新事务的提交操作都会被阻塞&#xff0c;典型地使用场景就是做整个数据库的逻辑备份&#xff0c;对所有的表进行锁定&#x…

LIBGDX实时绘制字符、实时绘制中文

LIBGDX实时绘制字符、实时绘制中文 转自&#xff1a;https://lingkang.top/archives/libgdx-shi-shi-hui-zhi-zi-fu 注意&#xff0c;相比于贴图字体&#xff0c;实时绘制会有一定的失真、模糊 Maven项目依赖&#xff1a; <properties><maven.compiler.source>…

【Java 进阶篇】Java中的 JSP(JavaServer Pages)

JavaServer Pages&#xff08;JSP&#xff09;是一种用于开发动态Web页面的Java技术。它是在静态Web页面中嵌入Java代码的一种方式&#xff0c;使得开发者可以借助Java的强大功能来创建动态、交互性强的Web应用程序。在本文中&#xff0c;我们将深入探讨JSP的概念、原理和基本用…

算法:FloodFill算法

文章目录 算法原理图像渲染岛屿数量岛屿的最大面积被围绕的区域太平洋大西洋水流问题扫雷游戏衣橱整理 算法原理 FLoodFill算法通俗来讲&#xff0c;就是洪水给地势带来的变化&#xff0c;而实际上题目要求的就是一个连通块问题&#xff0c;那本质还是暴搜和DFS/BFS相结合&…

vue做的一个一点就转的转盘(音乐磁盘),点击停止时会在几秒内缓慢停止,再次点击按钮可以再次旋转,

先看效果&#xff1a; 代码&#xff1a;主要部分我会红线画出来 css:部分&#xff1a; 源码&#xff1a; vue部分&#xff1a; <template><div class"song-lyric"><div><div class"type"><div class"right">&l…

【Git】git常用命令大全

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Git》。&#x1f3af;&#x1f3af; &#x1f449…

实体店铺必看:如何申请低手续费或免手续费的收款码

在数字支付日益普及的今天&#xff0c;为实体店铺如餐饮店引入低成本甚至免手续费的收款解决方案变得尤为重要。本文将详细介绍实体店铺如何申请低手续费或免手续费的收款码&#xff0c;助您降低运营成本&#xff0c;提升业务效率。 一、了解不同支付平台的政策 首先&#xf…

性能测试之性能调优详解

性能测试是通过模拟实际使用场景&#xff0c;对系统进行压力测试和负载测试&#xff0c;以评估系统的性能指标&#xff0c;如响应时间、吞吐量和并发能力等。通过性能测试可以发现系统的瓶颈和性能问题&#xff0c;并针对性地进行优化。 监控工具可以实时监测系统的运行状态和…

gorm使用之各种表关系实例-主外键->struct

gorm使用之各种表关系实例-主外键->struct 一对多关系(用户与文章) 如: 老板与员工 女神和舔狗 老师和学生 班级与学生 用户与文章 ...以用户与文章举例 models应当如,注意&#xff01;&#xff01;&#xff1a;User表中的ID应当与Article中的UID一直&#xff0c;大小和…

搞怪python代码

微信消息重发代码&#xff1a; from pynput.keyboard import Key,Controller import time keyboard Controller()a input("请输入你需要循环输出的内容&#xff1a;") b eval(input(请输入你想要循环的次数&#xff1a;)) print("数据已接收&#xff01;请将…

基于51单片机的篮球比赛计分器积分器

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机篮球 获取完整源程序仿真源文件原理图文件论文报告等 基于51单片机的篮球计分器 由STC89C51单片机数码管显示模块按键模块电源模块构成 具体功能&#xff1a; &#xff08;1&#xff09;能记录单节比赛的比赛时间&am…