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

Java18新增特性

前言

前面的文章,我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16、Java17 的特性进行了介绍,对应的文章如下

Java9新增特性

Java10新增特性

Java11新增特性

Java12新增特性

Java13新增特性

Java14新增特性

Java15新增特性

Java16新增特性

Java17新增特性

今天我们来一起看一下Java18这个版本的一些重要信息

版本介绍

Java 18 是Java的一个新版本,于2022年3月22日正式发布。这个版本带来了许多新功能,其中最重要的是默认UTF-8字符编码。在此版本之前,UTF-8编码需要显式指定,但现在,在不加任何指定的情况下,所有需要用到编码的JDK API都默认使用UTF-8编码。这样可以避免在不同系统、不同地区、不同环境之间因编码问题产生的困扰。

其他的新功能包括JEP 400,这是一个默认UTF-8字符编码的更新,它将UTF-8设置为默认编码。这个改变意味着在不加任何指定的情况下,所有需要用到编码的JDK API都默认使用UTF-8编码。
此外,Java 18还提供了一些其他的更新和改进,包括对现有特性的改进和新的APIs。这些新功能和改进可以帮助开发者更高效地进行开发,提高代码的质量和可维护性。

总的来说,Java 18是一个功能丰富、易于使用和高效的版本。虽然它可能不是长期支持版本,但它仍然是一个值得关注的版本,特别是对于那些需要处理大量文本或需要跨多个平台开发的开发者来说。

特性列表

  • 默认UTF-8字符编码 :Java 18将UTF-8设置为默认编码,这使得所有需要用到编码的JDK API都默认使用UTF-8编码,从而避免了在不同系统、不同地区、不同环境之间因编码问题产生的困扰。

  • 性能提升 :Java 18对性能进行了优化和提升,包括对代码的执行速度、内存使用和垃圾回收等方面的改进。

  • 安全性增强 :Java 18加强了安全性特性,包括对代码的安全性检查和加密算法的改进。

  • 更好的开发体验 :Java 18对开发工具和环境进行了改进,提供了更好的开发体验和易用性。例如,它对调试、代码分析和重构等方面进行了优化。

  • 更广泛的平台支持 :Java 18支持更多的操作系统和平台,包括Windows、Linux、macOS等。这使得开发者可以更方便地在不同的环境中开发和部署Java应用程序。

  • 改进的日志记录API :Java 18对日志记录API进行了改进,增加了新的日志级别,并提供了更强大的日志管理功能。

  • 支持Unicode 10 :Java 18支持Unicode 10标准,这使得开发者可以更加方便地处理和显示Unicode字符。

  • 改进的启动性能 :Java 18对启动性能进行了优化,使得Java应用程序的启动速度更快。

  • 支持新的HTTP/2特性 :Java 18支持新的HTTP/2协议特性,包括多路复用、头压缩和服务器推送等功能,这使得Java应用程序能够更好地利用网络资源。

  • 改进的NIO.2 API :Java 18对NIO.2 API进行了改进,增加了新的通道类型和缓冲区类型,并优化了通道的关闭机制,这使得开发者能够更加高效地处理和操作文件和网络资源。

  • 支持IPv6 :Java 18默认支持IPv6,这使得开发者能够更加方便地在网络中使用IPv6地址。

  • 改进的并发性能 :Java 18对并发性能进行了优化和改进,包括对线程池、任务调度、锁等功能的改进,这使得Java应用程序能够更好地处理并发操作。

  • 改进的JVM诊断工具 :Java 18改进了JVM诊断工具,包括jmap、jstack等命令行工具和JVisualVM等图形化工具,这使得开发者能够更加方便地诊断和解决JVM相关的问题。

  • 改进的日期和时间API :Java 18对日期和时间API进行了改进,增加了新的日期和时间类,并优化了现有的日期和时间类,这使得开发者能够更加方便地处理日期和时间相关的操作。

  • 支持Java平台模块系统(JPMS) :Java 18支持Java平台模块系统(JPMS),这使得开发者能够更加方便地构建和管理大型应用程序。

  • 改进的编译器 :Java 18对编译器进行了改进,增加了新的编译选项和优化编译器输出,这使得开发者能够更加方便地优化编译器的输出。

  • 改进的JMX(Java Management Extensions) :Java 18对JMX进行了改进,增加了新的MBean类和操作,并优化了现有的JMX API,这使得开发者能够更加方便地管理和监控Java应用程序。

  • 支持无限精度算术(Quadruple Precision Arithmetic) :Java 18支持无限精度算术,这使得开发者能够更加精确地进行数值计算。

  • 改进的XML处理API :Java 18对XML处理API进行了改进,增加了新的XML解析器和生成器,并优化了现有的XML处理API,这使得开发者能够更加方便地处理XML相关的操作。

代码示例

  • 默认UTF-8字符编码:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
public class DefaultUTF8EncodingExample {public static void main(String[] args) {try {String content = new String(Files.readAllBytes(Paths.get("example.txt")));System.out.println(content);} catch (IOException e) {e.printStackTrace();}}
}
  • 使用方法句柄重新实现反射核心功能:

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
public class MethodHandleExample {public static void main(String[] args) throws Throwable {Method method = String.class.getMethod("length");MethodHandle methodHandle = MethodHandles.lookup().findVirtual(String.class, "length", method.getReturnType());int length = (int) methodHandle.invoke("Hello, World!");System.out.println(length);}
}
  • 使用Vector API(三次孵化):

import java.util.Vector;
public class VectorExample {public static void main(String[] args) {Vector<String> vector = new Vector<>();vector.add("Hello");vector.add("World");System.out.println(vector);}
}
  • 使用互联网地址解析SPI:

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ServiceLoader;
public class InternetAddressResolutionSPIExample {public static void main(String[] args) {try {InetAddress address = InetAddress.getByName("www.example.com");System.out.println(address);} catch (UnknownHostException e) {e.printStackTrace();}}
}
  • 使用Foreign Function & Memory API (第二次孵化):

import jnr.ffi.Pointer;
import jnr.ffi.Runtime;
import jnr.ffi.types.size_t;
public class ForeignFunctionAndMemoryAPIExample {public static void main(String[] args) {Runtime runtime = Runtime.getRuntime();Pointer pointer = runtime.malloc(runtime.sizeOf(Integer.class));int value = 42;runtime.writeInt(pointer, 0, value);int readValue = runtime.readInt(pointer, 0);System.out.println(readValue);runtime.free(Pointer.to(pointer));}
}
  • 使用switch表达式(二次孵化):

public class SwitchExpressionExample {public static void main(String[] args) {int number = 2;String result = switch (number) {case 1 -> "One";case 2 -> "Two";default -> "Other";};System.out.println(result);}
}
  • 使用Sealed Classes(二次孵化):

public sealed class Animal {static class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Woof!");}}static class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Meow!");}}public abstract void makeSound();
}
  • 使用Pattern Matching for instanceof(二次孵化):

public class PatternMatchingForInstanceofExample {public static void main(String[] args) {Object obj1 = new Integer(42);Object obj2 = new Double(3.14);if (obj1 instanceof Integer) {System.out.println("obj1 is an Integer");} else if (obj1 instanceof Double) {System.out.println("obj1 is a Double");} else {System.out.println("obj1 is neither an Integer nor a Double");}if (obj2 instanceof Integer) {System.out.println("obj2 is an Integer");} else if (obj2 instanceof Double) {System.out.println("obj2 is a Double");} else {System.out.println("obj2 is neither an Integer nor a Double");}}
}

总结

需要注意的是,Java 18可能不是长期支持版本,但它仍然是一个值得关注的版本,特别是对于那些需要处理大量文本或需要跨多个平台开发的开发者来说。

拓展

SPI

SPI是Service Provider Interface的缩写,中文意思是服务提供者接口。SPI是一种服务发现机制,它允许第三方为应用程序提供插件式的扩展。
它定义了一个标准的接口,使得应用程序可以与提供的服务进行交互。SPI的实现通常包括以下组件:

  • Service Provider:服务提供者是一个实现了SPI接口的第三方应用程序。它提供了一些特定的服务,例如数据存储、消息传递、日志记录等。
  • Service Consumer:服务消费者是一个需要使用服务提供者所提供的服务的程序。它通过SPI接口与服务提供者进行交互。
  • SPI配置文件:SPI配置文件是一个标准的配置文件,用于描述服务提供者及其提供的服务。它包含了服务提供者的名称、版本号、依赖关系等信息。
  • 使用SPI机制,应用程序可以在运行时动态地发现和加载服务提供者,并使用它们提供的服务。这种机制使得第三方可以方便地为应用程序添加扩展功能,而不需要修改应用程序本身的代码。同时,由于SPI接口是标准化的,因此不同的服务提供者可以实现相互兼容,使得应用程序可以灵活地选择不同的服务提供者。

总之,SPI是一种非常灵活和可扩展的服务发现机制,它使得应用程序可以动态地加载和使用第三方提供的扩展功能。

在这里插入图片描述

相关文章:

Java18新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16、Java17 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 Java…...

springboot容器

1.主要指的是servlet容器 servlet组件由sevlet Filter Listener等 2.自动配置原理 通过ServletWebServerFactoryAutoConfiguration 配置这些内容 (自动配置类开始分析功能) conditionalOnclass开启条件 ServletRequest类 import导入嵌入式的tomcat Jetty等 这些是配置类&…...

Windows 10 下使用Visual Studio 2017 编译CEF SDK

1.下载CEF SDK 由于需要跑在32位的机器&#xff0c;所以选择下载32位的SDKCEF Automated Builds 选择 Current Stable Build (Preferred) &#xff0c;这是当前稳定版本&#xff0c;CEF版本118 下载成功解压 2.下载编译工具 CMake 下载地址&#xff1a;CMake 配置CMake指向…...

数字货币swap交易所逻辑系统开发分析方案

随着数字货币市场的快速发展&#xff0c; Swap交易所已成为一种重要的交易方式。本文将对数字货币Swap交易所逻辑系统开发进行分析&#xff0c;并探讨其优势、开发难点和解决方案。 一、数字货币Swap交易所逻辑系统开发的优势 数字货币Swap交易所是一种点对点的交易方式&#x…...

spring boot中使用Bean Validation做优雅的参数校验

一、Bean Validation简介 Bean Validation是Java定义的一套基于注解的数据校验规范&#xff0c;目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本&#xff0c;再到JSR 380的2.0版本&#xff08;2.0完成于2017.08&#xff09;&#xff0c;目前最新稳定版2.0.2&#xff08;201…...

搜索引擎项目

认识搜索引擎 1、有一个主页、有搜索框。在搜索框中输入的内容 称为“查询词” 2、还有搜索结果页&#xff0c;包含了若干条搜索结果 3、针对每一个搜索结果&#xff0c;都会包含查询词或者查询词的一部分或者和查询词具有一定的相关性 4、每个搜索结果包含好几个部分&…...

7.外部存储器,Cache,虚拟存储器

目录 一. 外部存储器 &#xff08;1&#xff09;磁盘存储器 1.磁盘的组成 2.磁盘的性能指标 3.磁盘地址 4.硬盘的工作过程 5.磁盘阵列 &#xff08;2&#xff09;固态硬盘&#xff08;SSD&#xff09; 二. Cache基本概念与原理 三. Cache和主存的映射方式 &#xff…...

UITableView的style是UITableViewStyleGrouped

一般情况下&#xff0c;UITableViewStylePlain和UITableViewStyleGrouped是UITableView常用到的style&#xff0c; 之前都是用到的时候&#xff0c;遇到问题直接用度娘&#xff0c;差不多就够用了&#xff0c;今天在修复UI提出的间隙问题&#xff0c;来回改&#xff0c;总觉得…...

Java17新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 Java16新增特…...

VR全景技术在城市园区发展中有哪些应用与帮助

引言&#xff1a; 在数字化时代的浪潮中&#xff0c;虚拟现实&#xff08;VR&#xff09;全景技术逐渐融入各个领域&#xff0c;也为城市园区展示带来了全新的可能性。 一&#xff0e;VR全景技术简介 虚拟现实全景技术是一种通过全景图像和视频模拟真实环境的技术。通过相关设…...

在 SQL 中,当复合主键成为外键时应该如何被其它表引用

文章目录 当研究一个问题慢慢深入时&#xff0c;一个看起来简单的问题也暗藏玄机。在 SQL 中&#xff0c;主键成为外键这是一个很平常的问题&#xff0c;乍一看没啥值得注意的。但如果这个主键是一种复合主键&#xff0c;而另一个表又引用这个键作为它的复合主键&#xff0c;问…...

Ps:通过显示大小了解图像的打印尺寸

在 Photoshop 中&#xff0c;如果想了解文档窗口中的图像打印出来之后的实质大小&#xff0c;只要知道两个数值即可。 第一个数值是图像分辨率&#xff08;也称“文档分辨率”&#xff09;的大小&#xff0c;可在Ps菜单&#xff1a;图像/图像大小 Image Size对话框中查询或设置…...

Linux - 驱动开发 - watchdog - SMP机制下多核确活

说明 理论上&#xff1a;不管IC是单核还是多核&#xff0c;只要watchdog有被循环feed&#xff0c;就不会触发超时重启&#xff0c;因此watchdog在SMP机制下的多核环境显得比较宽松&#xff0c;只要任意核存活&#xff08;喂狗&#xff09;就不会重启设备。 实际情况 有客户反…...

概念解析 | LoRA:低秩矩阵分解在神经网络微调中的魔力

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:基于低秩矩阵分解的神经网络微调方法LoRA LoRA:低秩矩阵分解在神经网络微调中的魔力 Low-Rank Adaptation of Large Language Models LoRA由如下论文提出,详细信息请参见论文原…...

量子计算和量子通信技术:引领潜力无限的未来

近年来&#xff0c;随着量子计算和量子通信技术的迅速发展&#xff0c;它们在各个领域的广泛应用前景引起了人们的极大兴趣。本文将深入探讨量子计算和量子通信技术的普遍应用&#xff0c;以及它们预示的未来&#xff0c;同时提出业内人士需要注意的事项。 介绍&#xff1a;量子…...

nodejs+vue+python+PHP+微信小程序-安卓- 电影在线订票系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

LightDB23.4支持mysql aes_encrypt/aes_decrypt/hex/unhex函数

背景介绍 为了兼容mysql数据库的功能&#xff0c;在LightDB23.4版本上支持hex/unhex/aes_encrypt/aes_decrypt函数。 函数原型如下&#xff1a; hex(data bytea) returns textunhex(data varchar) returns byteaaes_encrypt(data bytea, key bytea) returns byteaaes_encryp…...

uniapp——项目day04

购物车页面——商品列表区域 渲染购物车商品列表的标题区域 1. 定义如下的 UI 结构&#xff1a; 2.美化样式 渲染商品列表区域的基本结构 1. 通过 mapState 辅助函数&#xff0c;将 Store 中的 cart 数组映射到当前页面中使用&#xff1a; import badgeMix from /mixins/tab…...

7-爬虫-中间件和下载中间件(加代理,加请求头,加cookie)、scrapy集成selenium、源码去重规则(布隆过滤器)、分布式爬虫

0 持久化(pipelines.py)使用步骤 1 爬虫中间件和下载中间件 1.1 爬虫中间件(一般不用) 1.2 下载中间件&#xff08;代理&#xff0c;加请求头&#xff0c;加cookie&#xff09; 1.2.1 加请求头(加到请求对象中) 1.2.2 加cookie 1.2.3 加代理 2 scrapy集成selenium 3 源码去重…...

创建自己的nas服务,从远端拉取所需文件

一、前言 创建一个nas文件存储&#xff0c;然后需要的时候随时从远端或者其他终端拉取所需文件是不是一件很帅气的工作。 二、准备工作 一台服务器&#xff08;云的更好&#xff09;&#xff0c;没了。 首先安装docker和docker-compose 此处省略docker的安装(改天更新)&…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...