【Java】Java18的新特性

人不走空

                                                                      

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

目录

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

Java 18 的关键新特性

1. UTF-8 默认字符集

2. 简化的 Java Doc 标注注释 (@snippet)

3. Simple Web Server API

4. Vector API (Third Incubator)

5. Foreign Function & Memory API (Second Incubator)

6. Code Snippets in Java API Documentation

7. Deprecate Finalization for Removal

8. JEP 413: Code Snippets in Java API Documentation

9. Pattern Matching for switch (Second Preview)

10. JEP 400: UTF-8 by Default

总结

作者其他作品:


Java 18 是 Java 的一个重要版本,于 2022 年 3 月发布,带来了许多新的特性和改进。这些新特性不仅提升了开发者的生产力,还增强了 Java 语言和平台的性能与安全性。本文将详细介绍 Java 18 的关键新特性及其应用场景。

Java 18 的关键新特性

1. UTF-8 默认字符集

在 Java 18 中,UTF-8 被设定为默认的字符集。以前,Java 默认的字符集是基于系统环境的,这在跨平台应用中可能导致字符编码的问题。采用 UTF-8 作为默认字符集,可以统一字符编码的处理方式,提高国际化应用的兼容性。

// Java 18 之前,默认字符集基于系统
String data = new String(bytes);// Java 18 之后,默认使用 UTF-8 编码
String data = new String(bytes, StandardCharsets.UTF_8);

2. 简化的 Java Doc 标注注释 (@snippet)

JavaDoc 现在支持使用 @snippet 标注注释,用于在文档中嵌入示例代码。这个功能简化了代码片段的嵌入和显示,特别是在展示 API 用法时非常有用。

 
/*** 这是一个示例方法* * @snippet :* if (a > b) {*     return a;* } else {*     return b;* }*/
public int max(int a, int b) {return a > b ? a : b;
}

3. Simple Web Server API

Java 18 引入了一个简单的 Web 服务器,主要用于开发和测试。这对于需要快速启动一个 HTTP 服务器的场景非常有用,尤其是开发静态内容或简单 Web 应用时。

 
# 启动一个简单的 HTTP 服务器,根目录为当前目录,端口号为8000
java -m jwebserver

4. Vector API (Third Incubator)

Java 18 中的 Vector API 进入第三次孵化阶段,进一步增强了对矢量计算的支持。矢量计算是一种并行计算方式,可以显著提高处理大规模数据时的性能。

 
import jdk.incubator.vector.*;public class VectorExample {public static void main(String[] args) {VectorSpecies<Integer> SPECIES = IntVector.SPECIES_256;int[] a = {1, 2, 3, 4, 5, 6, 7, 8};int[] b = {8, 7, 6, 5, 4, 3, 2, 1};int[] c = new int[8];IntVector va = IntVector.fromArray(SPECIES, a, 0);IntVector vb = IntVector.fromArray(SPECIES, b, 0);IntVector vc = va.add(vb);vc.intoArray(c, 0);System.out.println(Arrays.toString(c));}
}

5. Foreign Function & Memory API (Second Incubator)

Java 18 对外部函数和内存 API 进行了第二次孵化,这一功能允许 Java 程序调用非 Java 代码(如 C 函数)并直接操作内存。这个 API 为构建高性能应用提供了更多的灵活性和可能性。

 
import java.foreign.*;
import java.foreign.memory.*;
import java.foreign.function.*;public class ForeignFunctionExample {public static void main(String[] args) {LibraryLookup lookup = LibraryLookup.ofDefault();Symbol printf = lookup.lookup("printf").orElseThrow();MethodHandle handle = MethodHandle.ofFunction(printf, MemoryLayout.ofSequence(8, MemoryLayout.JAVA_BYTE));handle.invokeExact(MemoryAddress.NULL, "Hello, %s!\n", MemoryAddress.ofCString("world"));}
}

6. Code Snippets in Java API Documentation

Java 18 引入了 @snippet 标签,用于在 JavaDoc 中嵌入代码示例。这个功能让开发者可以更容易地编写和维护文档中的代码示例,并且支持代码的自动语法高亮和格式化。

/*** 这是一个示例方法* * @snippet :* if (a > b) {*     return a;* } else {*     return b;* }*/
public int max(int a, int b) {return a > b ? a : b;
}

7. Deprecate Finalization for Removal

在 Java 18 中,finalization 机制被标记为废弃,将在未来的版本中被移除。finalization 是一种在对象垃圾回收之前执行清理工作的机制,但由于其不可预测性和性能问题,已经不推荐使用。开发者应该使用 try-with-resourcesCleaner 机制来替代 finalization

 
// 使用 try-with-resources 代替 finalization
try (Resource resource = new Resource()) {// 使用资源
}

8. JEP 413: Code Snippets in Java API Documentation

JEP 413 是关于在 Java API 文档中引入代码片段的提案。这个特性使得开发者可以在 JavaDoc 中嵌入代码示例,并支持这些示例的语法高亮和格式化。

/*** 这是一个示例方法* * @snippet :* if (a > b) {*     return a;* } else {*     return b;* }*/
public int max(int a, int b) {return a > b ? a : b;
}

9. Pattern Matching for switch (Second Preview)

Java 18 继续预览了 switch 的模式匹配功能,这一功能扩展了 switch 语句,使其支持基于模式进行匹配。这个功能使得 switch 语句更加强大和灵活,特别是在处理复杂数据类型时。

public String format(Object obj) {return switch (obj) {case Integer i -> String.format("int %d", i);case Long l -> String.format("long %d", l);case Double d -> String.format("double %f", d);case String s -> String.format("String %s", s);default -> obj.toString();};
}

10. JEP 400: UTF-8 by Default

Java 18 确认 UTF-8 为默认字符集,旨在减少跨平台开发中与字符编码相关的问题。这个特性确保了在不同操作系统之间的一致性,并简化了国际化应用的开发。

// 在 Java 18 中,默认情况下使用 UTF-8 编码
String data = new String(bytes, StandardCharsets.UTF_8);

总结

Java 18 带来了许多令人兴奋的新特性和改进,进一步提升了 Java 作为现代开发语言的竞争力。无论是性能优化、开发效率还是跨平台兼容性,Java 18 都在这些方面做出了显著的增强。作为 Java 开发者,了解并善用这些新特性,将能更高效地构建和维护应用程序。

希望这篇文章能帮助您更好地理解和利用 Java 18 的新特性。在实际应用中,不妨尝试将这些新特性融入到您的项目中,享受 Java 18 带来的便利和性能提升。


作者其他作品:

【Java】Spring循环依赖:原因与解决方法

OpenAI Sora来了,视频生成领域的GPT-4时代来了

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

【Java】深入理解Java中的static关键字

[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读

了解 Java 中的 AtomicInteger 类

算法题 — 整数转二进制,查找其中1的数量

深入理解MySQL事务特性:保证数据完整性与一致性

Java企业应用软件系统架构演变史 

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

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

相关文章

【Docker】上海交通大学开源镜像站服务变更:Docker 用户需迅速行动

近日&#xff0c;上海交通大学开源镜像站宣布了一个重大变更&#xff0c;对国内Docker用户来说&#xff0c;这一消息无疑具有紧迫性。 镜像站服务的变更 上海交通大学开源镜像站一直是国内Docker用户的重要资源&#xff0c;它提供了快速下载DockerHub仓库镜像的服务。然而&a…

【代码随想录算法训练营第37期 第三十一天 | LeetCode455.分发饼干、376. 摆动序列、53. 最大子序和】

代码随想录算法训练营第37期 第三十一天 | LeetCode455.分发饼干、376. 摆动序列、53. 最大子序和 一、455.分发饼干 解题代码C&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end(…

react学习-高阶组件

1.简介 react高阶组件是一个函数&#xff0c;接收一个组件作为参数&#xff0c;返回一个新的组件&#xff0c;可以用来进行组件封装&#xff0c;将一些公共逻辑提取到高阶组件内部。 2.基本实现 以下案例为利用高阶组件来增强props import React, { Component } from "re…

浙江大学蒋明凯研究员《Nature》正刊最新成果!揭示生态系统磷循环响应大气二氧化碳浓度升高关键机制

随着大气二氧化碳浓度的升高&#xff0c;陆地生态系统固存额外碳汇的能力取决于土壤养分的可利用性。前期的研究证据表明&#xff0c;在土壤低磷环境下&#xff0c;大气二氧化碳浓度的升高可以提升成熟森林的光合速率&#xff0c;但是没有产生额外生物量固碳。热带和亚热带森林…

Http File Server 2.0(HFS)使用说明

Http File Server 2.0&#xff08;HFS&#xff09;是一个专为个人用户设计的HTTP文件服务器软件。以下是关于Http File Server 2.0的清晰介绍&#xff0c;包括其特点、安装和使用方法&#xff1a; 1. 软件特点 专为个人用户设计&#xff1a;提供方便的档案传输系统&#xff0…

国产Sora免费体验-快手旗下可灵大模型发布

自从OpenAI公布了Sora后&#xff0c;震爆了全世界&#xff0c;但由于其技术的不成熟和应用的局限性&#xff0c;未能大规模推广&#xff0c;只有零零散散的几个公布出来的一些视频。昨日&#xff0c;快手成立13周年&#xff0c;可灵&#xff08;Kling&#xff09;大模型发布&am…

11-Linux文件系统与日志分析

11.1深入理解Linux文件系统 在处理Liunx系统出现故障时&#xff0c;故障的症状是最易发现。数学LInux系统中常见的日志文件&#xff0c;可以帮助管理员快速定位故障点&#xff0c;并及时解决各种系统问题。 11.1.1 inode与block详解 文件系统通常会将这两部分内容分别存放在…

常见八大排序(纯C语言版)

目录 基本排序 一.冒泡排序 二.选择排序 三.插入排序 进阶排序&#xff08;递归实现&#xff09; 一.快排hoare排序 1.单趟排序 快排步凑 快排的优化 &#xff08;1&#xff09;三数取中 &#xff08;2&#xff09;小区间优化 二.前后指针法(递归实现) 三.快排的非…

[Java]读取Excel表,转为Json格式发送至Url,获取接口应答报文,失败记录输出至txt

&#x1f449;原文阅读 &#x1f4a1;阅前提示 “转为Json格式”是直接使用我自己定义的方法&#xff0c;强行转换为Json字符串的&#xff08;因为格式上有一些要求&#xff09; 由于需要获取请求网址的应答报文&#xff0c;代码使用第三方库Apache HttpClient向Url发送JSON数…

ch1计算机网络和因特网

*1.1 什么是因特网 因特网是一个世界范围的计算机网络,即一个互联了遍及全世界的数十亿计算设备的网络。 具体构成: 主机hosts或端系统end-systems:数以亿计的计算设备互连,例如 主机-PCs(计算机), workstations(工作站), servers(服务器)端系统-PDAs,phones(…

机器学习与数据挖掘知识点总结(一)

简介&#xff1a;随着人工智能&#xff08;AI&#xff09;蓬勃发展&#xff0c;也有越来越多的人涌入到这一行业。下面简单介绍一下机器学习的各大领域&#xff0c;机器学习包含深度学习以及强化学习&#xff0c;在本节的机器学习中主要阐述一下机器学习的线性回归逻辑回归&…

Python | Leetcode Python题解之第138题随机链表的复制

题目&#xff1a; 题解&#xff1a; class Solution:def copyRandomList(self, head: Optional[Node]) -> Optional[Node]:allNode[] # 用一个数组存储所有结点cur1headwhile cur1:allNode.append(cur1)cur1cur1.nextnlen(allNode)allRandom[-1]*n # 用一个数组存储所有节点…

超详解——识别None——小白篇

目录 1. 内建类型的布尔值 2. 对象身份的比较 3. 对象类型比较 4. 类型工厂函数 5. Python不支持的类型 总结&#xff1a; 1. 内建类型的布尔值 在Python中&#xff0c;布尔值的计算遵循如下规则&#xff1a; None、False、空序列&#xff08;如空列表 []&#xff0c;空…

github pages + jekyll个人网页

目录 找教程 第二又试了wsl安装ubuntu 部分资料&#xff1a; 主要步骤&#xff1a; 1.注册github账号&#xff1b; 2.创建仓库&#xff1b;访问自己的网页https://shililanka.github.io 静态html页面 3.使用jekyll&#xff0c;选择网页风格&#xff0c;编辑自己的网页 找教…

算法学习笔记(7.7)-贪心算法(Dijkstra算法-最短路径问题)

目录 1.最短路径问题 2.Dijkstra算法介绍 3.Dijkstra算法演示 4.Dijkstra算法的代码示例 1.最短路径问题 图论中的一个经典问题&#xff0c;通常是指在一个加权图中找到从一个起始顶点到目标顶点的最短路径。 单源最短路径问题&#xff1a;给定一个加权图和一个起始顶点&…

【传知代码】Noise2Noise图像去噪(论文复现)

前言&#xff1a;在数字时代&#xff0c;图像已成为我们记录生活、传达信息、探索世界的重要媒介。然而&#xff0c;随着摄影技术的飞速发展&#xff0c;图像噪声——这一影响图像质量的顽疾&#xff0c;始终困扰着我们。Noise2Noise图像去噪技术为我们提供了一种全新的解决方案…

第二十七章HTML.CSS综合案例

1.产品介绍 效果图如下&#xff1a; 代码部分如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

C++查看编译后的代码

C 模板函数是在编译时生成的。这种机制被称为“模板实例化”&#xff08;template instantiation&#xff09;。当你在代码中使用一个模板函数时&#xff0c;编译器会根据具体的模板参数&#xff08;例如类型或数值&#xff09;生成对应的函数实例。这个过程是在编译期间完成的…

Elastic Search (ES)Java 入门实操(1)下载安装、概念

实现数据查询代码&#xff1a;Elastic Search&#xff08;ES&#xff09;Java 入门实操&#xff08;2&#xff09;搜索代码-CSDN博客 Elastic Search&#xff08;ES&#xff09;Java 入门实操&#xff08;3&#xff09;数据同步-CSDN博客 Elastic Search 官方描述&#xff0c…

二叉树的最小深度-力扣

使用DFS&#xff0c;在取左右子树的最小值时&#xff0c;需要注意&#xff0c;当左右子树只存在一个时&#xff0c;此时有一个返回值为0&#xff0c;此时不能用0作为最小深度&#xff0c;而是另一颗不为0的子树的最下深度&#xff0c;才是需要的值。 class Solution { public:…