Java10新增特性
特性列表
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接口数组实现方案
相关文章:
Java10新增特性
特性列表 Java 10是Java的一个主要版本更新,引入了许多新功能和改进。以下是一些Java 10的新增特性: 局部变量类型推断:Java 10引入了局部变量类型推断,允许开发者使用关键字"var"来声明局部变量,而无需指定…...
Hive 知识点八股文记录 ——(一)特性
Hive通俗的特性 结构化数据文件变为数据库表sql查询功能sql语句转化为MR运行建立在hadoop的数据仓库基础架构使用hadoop的HDFS存储文件实时性较差(应用于海量数据)存储、计算能力容易拓展(源于Hadoop) 支持这些特性的架构 CLI&…...
如何使用PHP替换回车为br
1、使用PHP内置的nl2br()函数 nl2br()函数是PHP内置的函数,可以将任何字符串中的回车符(\n)替换为HTML中的换行符(br)。具体使用方法如下: $string "这里有一个\n换行符"; $string nl2br($str…...
Unity 场景优化策略
Unity 场景优化策略 GPU instancing 使用GPU Instancing可以将多个网格相同、材质相同、材质属性可以不同的物体合并为一个批次,从而减少Draw Calls的次数。这可以提高性能和渲染效率。 GPU instancing可用于绘制在场景中多次出现的几何体,例如树木或…...
Wireshark在Windows上安装后报错怎么办?
Wireshark是一个非常好的网络抓包分析工具,有了他可以轻松解决网络问题,大家有没有使用过呢? 在生产环境使用过的朋友是否各种windows系统安装时遇到各种问题?比如说缺少某某文件,我们经常的做法是找个DLL放在System32…...
【Proteus仿真】【51单片机】水质监测报警系统设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能: 系统运行后&…...
TensorFlow2.0教程3-CNN
` 文章目录 基础CNN网络读取数据卷积层池化层全连接层模型配置模型训练CNN变体网络简单的深度网络添加了其它功能层的深度卷积NIN网络文本卷积基础CNN网络 读取数据 import numpy as np import tensorflow as tf import tensorflow.keras as keras import tensorflow.keras.la…...
flink1.18.0 sql-client报错
报错 Flink SQL> > > select * from t1; [ERROR] Could not execute SQL statement. Reason: java.lang.ClassNotFoundException: org.apache.kafka.clients.consumer.OffsetResetStrategy 解决 注意 一定要重启flink服务 否则还会报错: Flink SQL> select *…...
基于ssm的校园快递物流管理系统(java+jsp+ssm+javabean+mysql+tomcat)
博主24h在线,想要源码文档部署视频直接私聊,9.9拿走! 基于javawebmysql的ssm校园快递物流管理系统(javajspssmjavabeanmysqltomcat) 运行环境: Java≥8、MySQL≥5.7、Tomcat≥8 开发工具: eclipse/idea/myeclipse/s…...
C++:this指针和构造与析构的运用
目录 一,this指针 二,构造函数 三,析构函数 四,析构与构造的调用 一,this指针 首先,我们先观察以下类: #include <iostream> using namespace std; class Date { public: void In…...
通用工作站设计方案 :807-ORI-S3R500 -多路PCIe3.0的单CPU通用工作站
ORI-S3R500 -多路PCIe3.0的单CPU通用工作站 (研华工业计算机IPC-610,IPC940 升级款) 一、机箱功能和技术指标: 系统 系统型号 ORI-SR500 主板支持 EEB(12*13)/CEB(12*10.5)/ATX(12*9.6)/Mi cro ATX 前置硬盘 最大支持2个3.5寸1个2.5寸SATA …...
机器学习写代码时遇到的问题(23.11.9)
AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘ 导包的时候改一下 import matplotlib matplotlib.use(TkAgg) import matplotlib.pyplot as plt UserWarning: Glyph 27425 (\N{CJK UNIFIED IDEOGRAPH-6B21}) missing from current font. …...
C#学习系列之事件
C#学习系列之事件 前言事件发布者和订阅者事件触发和注册事件声明事件订阅事件触发使用 总结 前言 基础学习。 事件 发布者和订阅者 发布者:通知某件事情发生的。 订阅者:对某件事情关注的。 事件触发和注册 触发:事件发生就通知所有关…...
list部分接口模拟实现(c++)
List list简介list基本框架list构造函数list_node结构体的默认构造list类的默认构造 push_back()iteartor迭代器迭代器里面的其他接口const迭代器通过模板参数实现复用operator->() insert()erase()clear()析构函数迭代器区间构造拷贝构造operator() list简介 - list可以在…...
数据结构(C语言) 实验-栈与字符串
删除子串 字符串采用带头结点的链表存储,设计算法函数void delstring(linkstring s, int i,int len) 在字符串s中删除从第i个位置开始,长度为len的子串。 void delstring(linkstring s, int i, int len) {linkstring p,q,r;int cnt 1;p s->next;wh…...
xLua Lua访问C#注意事项(七)
调用成员方法 注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法 loacl camera CS.UnityEngine.GameObject.Find("Main Camera") --冒号语法 camera:GetComponent("Camera") --点语法 camera.GetComponent(camera,"…...
vue3+antv2.x的画布
报错信息: TypeError: Cannot destructure property component of registry_1.shapeMaps[node.shape] as it is undefined. at VueShapeView.renderVueComponent (http://192.168.10.35:9029/node_modules/.vite/deps/antv_x6-vue-shape.js?v49fbfab0:5569:19…...
Docker部署ubuntu1804镜像详细步骤
Docker部署ubuntu1804镜像详细步骤 ubuntu镜像库地址:https://hub.docker.com/_/ubuntu/tags?page1&ordering-name 拉取镜像(默认为最新版本): docker pull ubuntu或,拉取指定版本镜像: docker pull…...
mac 卸载第三方输入法
输入法设置里的移除,并不是真的卸载,点击还是能添加回来 在活动监视器里强制退出此输入法在访达界面使用快捷键 ShiftcommandG在弹出的对话框内输入以下路径(/资源库/Input Methods),再点击下面的前往找到你要卸载的输…...
可观察性在软件测试中的重要性
当今应用生态系统的需求和加速的数字化转型使可观察性成为人们关注的焦点。可观察性提供了对应用程序行为和技术生态系统的深入可见性,并支持更快、更明智的决策。由于缺乏可观察性,软件开发团队倾向于对生产系统行为、潜在性能瓶颈或未来故障场景做出假…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
