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

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的一个主要版本更新&#xff0c;引入了许多新功能和改进。以下是一些Java 10的新增特性&#xff1a; 局部变量类型推断&#xff1a;Java 10引入了局部变量类型推断&#xff0c;允许开发者使用关键字"var"来声明局部变量&#xff0c;而无需指定…...

Hive 知识点八股文记录 ——(一)特性

Hive通俗的特性 结构化数据文件变为数据库表sql查询功能sql语句转化为MR运行建立在hadoop的数据仓库基础架构使用hadoop的HDFS存储文件实时性较差&#xff08;应用于海量数据&#xff09;存储、计算能力容易拓展&#xff08;源于Hadoop&#xff09; 支持这些特性的架构 CLI&…...

如何使用PHP替换回车为br

1、使用PHP内置的nl2br()函数 nl2br()函数是PHP内置的函数&#xff0c;可以将任何字符串中的回车符&#xff08;\n&#xff09;替换为HTML中的换行符&#xff08;br&#xff09;。具体使用方法如下&#xff1a; $string "这里有一个\n换行符"; $string nl2br($str…...

Unity 场景优化策略

Unity 场景优化策略 GPU instancing 使用GPU Instancing可以将多个网格相同、材质相同、材质属性可以不同的物体合并为一个批次&#xff0c;从而减少Draw Calls的次数。这可以提高性能和渲染效率。 GPU instancing可用于绘制在场景中多次出现的几何体&#xff0c;例如树木或…...

Wireshark在Windows上安装后报错怎么办?

Wireshark是一个非常好的网络抓包分析工具&#xff0c;有了他可以轻松解决网络问题&#xff0c;大家有没有使用过呢&#xff1f; 在生产环境使用过的朋友是否各种windows系统安装时遇到各种问题&#xff1f;比如说缺少某某文件&#xff0c;我们经常的做法是找个DLL放在System32…...

【Proteus仿真】【51单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能&#xff1a; 系统运行后&…...

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在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;9.9拿走&#xff01; 基于javawebmysql的ssm校园快递物流管理系统(javajspssmjavabeanmysqltomcat) 运行环境&#xff1a; Java≥8、MySQL≥5.7、Tomcat≥8 开发工具&#xff1a; eclipse/idea/myeclipse/s…...

C++:this指针和构造与析构的运用

目录 一&#xff0c;this指针 二&#xff0c;构造函数 三&#xff0c;析构函数 四&#xff0c;析构与构造的调用 一&#xff0c;this指针 首先&#xff0c;我们先观察以下类&#xff1a; #include <iostream> using namespace std; class Date { public: void In…...

通用工作站设计方案 :807-ORI-S3R500 -多路PCIe3.0的单CPU通用工作站

ORI-S3R500 -多路PCIe3.0的单CPU通用工作站 (研华工业计算机IPC-610&#xff0c;IPC940 升级款) 一、机箱功能和技术指标&#xff1a; 系统 系统型号 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#学习系列之事件 前言事件发布者和订阅者事件触发和注册事件声明事件订阅事件触发使用 总结 前言 基础学习。 事件 发布者和订阅者 发布者&#xff1a;通知某件事情发生的。 订阅者&#xff1a;对某件事情关注的。 事件触发和注册 触发&#xff1a;事件发生就通知所有关…...

list部分接口模拟实现(c++)

List list简介list基本框架list构造函数list_node结构体的默认构造list类的默认构造 push_back()iteartor迭代器迭代器里面的其他接口const迭代器通过模板参数实现复用operator->() insert()erase()clear()析构函数迭代器区间构造拷贝构造operator() list简介 - list可以在…...

数据结构(C语言) 实验-栈与字符串

删除子串 字符串采用带头结点的链表存储&#xff0c;设计算法函数void delstring(linkstring s, int i,int len) 在字符串s中删除从第i个位置开始&#xff0c;长度为len的子串。 void delstring(linkstring s, int i, int len) {linkstring p,q,r;int cnt 1;p s->next;wh…...

xLua Lua访问C#注意事项(七)

调用成员方法 注意:调用成员方法&#xff0c;第一个参数需要传该对象&#xff0c;建议用冒号语法 loacl camera CS.UnityEngine.GameObject.Find("Main Camera") --冒号语法 camera:GetComponent("Camera") --点语法 camera.GetComponent(camera,"…...

vue3+antv2.x的画布

报错信息&#xff1a; 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镜像库地址&#xff1a;https://hub.docker.com/_/ubuntu/tags?page1&ordering-name 拉取镜像&#xff08;默认为最新版本&#xff09;&#xff1a; docker pull ubuntu或&#xff0c;拉取指定版本镜像&#xff1a; docker pull…...

mac 卸载第三方输入法

输入法设置里的移除&#xff0c;并不是真的卸载&#xff0c;点击还是能添加回来 在活动监视器里强制退出此输入法在访达界面使用快捷键 ShiftcommandG在弹出的对话框内输入以下路径&#xff08;/资源库/Input Methods&#xff09;&#xff0c;再点击下面的前往找到你要卸载的输…...

可观察性在软件测试中的重要性

当今应用生态系统的需求和加速的数字化转型使可观察性成为人们关注的焦点。可观察性提供了对应用程序行为和技术生态系统的深入可见性&#xff0c;并支持更快、更明智的决策。由于缺乏可观察性&#xff0c;软件开发团队倾向于对生产系统行为、潜在性能瓶颈或未来故障场景做出假…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...