劲爆!Java 18 正式发布,默认 UTF-8,finalize 被弃用。。别再乱用了!

简介: 劲爆!Java 18 正式发布,默认 UTF-8,finalize 被弃用。。别再乱用了!

JDK 18 正式发布

JDK 17 刚发布半年,JDK 18 又如期而至,JDK 版本号这算是成年了?

JDK 18 发布了,栈长继续为大家解读!


image.png

JDK 18 延续了 JDK 17 开创的免费策略,但,JDK 18~20 不是长期支持版本,注意不要用在生产。


最新 Oracle Java 支持路线图:

image.png


JDK 18 新特性一览

image.png


JDK 18 这个版本提供了 9 个增强功能,栈长接下来为大家一一解读。

关注公众号Java技术栈,持续分享最新、最主流的Java技术~


JDK 18 新特性详细介绍

1、400:UTF-8 by Default


默认 UTF-8


没错,将 UTF-8 指定为标准 Java API 的默认字符集。


在 JDK 17 及更早版本中,默认字符集是在 Java 虚拟机运行时才确定的,取决于不同的操作系统、区域设置等因素,因此存在潜在的风险。


从这个版本开始,依赖于默认字符集的 API 会在所有实现、操作系统、语言环境和配置中保持一致。


可以使用以下命令查看当前 JDK 的默认字符集:


java -XshowSettings:properties -version 2>&1 | grep file.encoding
    file.encoding = UTF-8
    file.encoding.pkg = sun.io

在 JDK 中通过下面 API 获取当前 JDK 的默认字符集:

Charset.defaultCharset()


我们都知道字符集一致的重要性,所有地方默认字符集保持一致真的非常有用。


2、408:Simple Web Server


简单 Web 服务器

提供一个命令行工具启动的迷你 Web 服务器:

$ jwebserver
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving /cwd and subdirectories on 127.0.0.1 port 8000
URL: http://127.0.0.1:8000/


只限于静态文件,类似于 Apache、Nginx 的静态服务器功能,不过它要更简单,功能极少,设置简单。


简单的、临时的测试用用我觉得还行,不用去额外下载和配置其他的服务器组件,以后用 Java 就能搞定了,有兴趣的可以研究试用下!


3、413:Code Snippets in Java API Documentation


Java API 文档中支持 Snippets 代码片段


增加了 @snippet 标签,简化 API 文档中包含示例源代码的情况。

使用语法:

{@snippet ...}


以前是这样写的:

/**
 * <pre>{@code
 *     String[] y = x.toArray(new String[0]);
 * }</pre>
 *
 */

JDK 18 中可以这样:

/**
 * The following code shows how to use {@code Optional.isPresent}:
 * {@snippet :
 * if (v.isPresent()) {
 *     System.out.println("v: " + v.get());
 * }
 * }
 */


4、416:Reimplement Core Reflection with Method Handles


重新实现反射核心机制(Method Handles)


JDK 18 使 Method Handles 作为反射的底层机制,重新实现了 java.lang.reflect.Method、Constructor、Field 组件,将大大降低反射 API 的维护和开发成本。


另外,最新最全的 Java 面试题整理好了,大家可以在Java面试库小程序在线刷题。


5、417:Vector API (Third Incubator)


矢量 API(三次孵化中)


Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算,矢量运算可以提供优于等效标量计算的性能,并且在机器学习、人工智能和密码学等领域非常普遍。


本次增强的 API 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算。


下个版本会转正吗?


相关文章
|
5月前
|
缓存 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
41 1
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
86 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
38 0
Java中 final、finally、finalize 有什么区别?
|
7月前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
4月前
|
Java
Java系列之:字符串UTF-8 编码格式转换位 UTF-32 【生僻字截取问题】
这篇文章讨论了在Java中处理包含生僻字的字符串时可能遇到的问题,并提供了一种解决方法:将字符串的编码格式从UTF-8转换为UTF-32,以确保每个字符都占用固定的字节数,从而避免在截取操作中破坏字符,示例代码展示了如何进行编码转换和字符串截取。
|
7月前
|
Java
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
面试官:“小伙子,用过final关键字吗?” 我:“必须用过呀” 面试官:“好,那来说一说你对这个关键字的理解吧,再说一说它与finally、finalize()的区别” 我:“好嘞!
45 1
|
7月前
|
JSON Java 数据格式
No converter for [class java.util.LinkedHashMap] with preset Content-Type 'text/json;charset=UTF-8']问题
【5月更文挑战第21天】No converter for [class java.util.LinkedHashMap] with preset Content-Type 'text/json;charset=UTF-8']问题
2270 0
|
7月前
|
JSON Java 数据格式
No converter for [class java.util.HashMap] with preset Content-Type 'text/json;charset=UTF-8'问题
【5月更文挑战第21天】No converter for [class java.util.HashMap] with preset Content-Type 'text/json;charset=UTF-8'问题
513 0
|
Java
【Java面试】说说你对finalize的理解
【Java面试】说说你对finalize的理解
66 0