太原cms建站,学做网站好学吗,wordpress 判断文章页,无法运行电脑wordpressJava 23 来啦#xff01;和 Java 22 一样#xff0c;这也是一个非 LTS#xff08;长期支持#xff09;版本#xff0c;Oracle 仅提供六个月的支持。下一个长期支持版是 Java 25#xff0c;预计明年 9 月份发布。 Java 23 一共有 12 个新特性#xff01;
有同学表示和 Java 22 一样这也是一个非 LTS长期支持版本Oracle 仅提供六个月的支持。下一个长期支持版是 Java 25预计明年 9 月份发布。 Java 23 一共有 12 个新特性
有同学表示Java 8 还没学完呢又要学新特性人麻了啊。。。
别担心其实改动并不大
我抽时间认真看了一下新特性并对这些新特性做了详细的解读希望对你有帮助
本文内容概览 JEP 455: 模式中的原始类型、instanceof 和 switch预览
在 JEP 455 之前 instanceof 只支持引用类型switch 表达式和语句的 case 标签只能使用整数字面量、枚举常量和字符串字面量。
JEP 455 的预览特性中instanceof 和 switch 全面支持所有原始类型包括 byte, short, char, int, long, float, double, boolean。
// 传统写法
if (i -128 i 127) {byte b (byte)i;... b ...
}// 使用 instanceof 改进
if (i instanceof byte b) {... b ...
}long v ...;
// 传统写法
if (v 1L) {// ...
} else if (v 2L) {// ...
} else if (v 10_000_000_000L) {// ...
}// 使用 long 类型的 case 标签
switch (v) {case 1L:// ...break;case 2L:// ...break;case 10_000_000_000L:// ...break;default:// ...
}JEP 456: 类文件 API第二次预览
类文件 API 在 Java 22 进行了第一次预览由 JEP 457 提出。
类文件 API 的目标是提供一套标准化的 API用于解析、生成和转换 Java 类文件取代过去对第三方库如 ASM在类文件处理上的依赖。
// 创建一个 ClassFile 对象这是操作类文件的入口。
ClassFile cf ClassFile.of();
// 解析字节数组为 ClassModel
ClassModel classModel cf.parse(bytes);// 构建新的类文件移除以 debug 开头的所有方法
byte[] newBytes cf.build(classModel.thisClass().asSymbol(),classBuilder - {// 遍历所有类元素for (ClassElement ce : classModel) {// 判断是否为方法 且 方法名以 debug 开头if (!(ce instanceof MethodModel mm mm.methodName().stringValue().startsWith(debug))) {// 添加到新的类文件中classBuilder.with(ce);}}});JEP 467Markdown 文档注释
在 JavaDoc 文档注释中可以使用 Markdown 语法取代原本只能使用 HTML 和 JavaDoc 标签的方式。
Markdown 更简洁易读减少了手动编写 HTML 的繁琐同时保留了对 HTML 元素和 JavaDoc 标签的支持。这个增强旨在让 API 文档注释的编写和阅读变得更加轻松同时不会影响现有注释的解释。Markdown 提供了对常见文档元素如段落、列表、链接等的简化表达方式提升了文档注释的可维护性和开发者体验。 Markdown 文档注释
JEP 469向量 API第八次孵化
向量计算由对向量的一系列操作组成。向量 API 用来表达向量计算该计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令从而实现优于等效标量计算的性能。
向量 API 的目标是为用户提供简洁易用且与平台无关的表达范围广泛的向量计算。
这是对数组元素的简单标量计算
void scalarComputation(float[] a, float[] b, float[] c) {for (int i 0; i a.length; i) {c[i] (a[i] * a[i] b[i] * b[i]) * -1.0f;}
}这是使用 Vector API 进行的等效向量计算
static final VectorSpeciesFloat SPECIES FloatVector.SPECIES_PREFERRED;void vectorComputation(float[] a, float[] b, float[] c) {int i 0;int upperBound SPECIES.loopBound(a.length);for (; i upperBound; i SPECIES.length()) {// FloatVector va, vb, vc;var va FloatVector.fromArray(SPECIES, a, i);var vb FloatVector.fromArray(SPECIES, b, i);var vc va.mul(va).add(vb.mul(vb)).neg();vc.intoArray(c, i);}for (; i a.length; i) {c[i] (a[i] * a[i] b[i] * b[i]) * -1.0f;}
}JEP 473流收集器第二次预览
流收集器在 Java 22 进行了第一次预览由 JEP 461 提出。
这个改进使得 Stream API 可以支持自定义中间操作。
source.gather(a).gather(b).gather(c).collect(...)JEP 471弃用 sun.misc.Unsafe 中的内存访问方法
JEP 471 提议弃用 sun.misc.Unsafe 中的内存访问方法这些方法将来的版本中会被移除。
这些不安全的方法已有安全高效的替代方案 java.lang.invoke.VarHandle JDK 9 (JEP 193) 中引入提供了一种安全有效地操作堆内存的方法包括对象的字段、类的静态字段以及数组元素。 java.lang.foreign.MemorySegment JDK 22 (JEP 454) 中引入提供了一种安全有效地访问堆外内存的方法有时会与 VarHandle 协同工作。
这两个类是 Foreign Function Memory API 的核心组件分别用于管理和操作堆外内存。
Foreign Function Memory API 在 Java 22 中正式转正成为标准特性。
import jdk.incubator.foreign.*;
import java.lang.invoke.VarHandle;// 管理堆外整数数组的类
class OffHeapIntBuffer {// 用于访问整数元素的VarHandleprivate static final VarHandle ELEM_VH ValueLayout.JAVA_INT.arrayElementVarHandle();// 内存管理器private final Arena arena;// 堆外内存段private final MemorySegment buffer;// 构造函数分配指定数量的整数空间public OffHeapIntBuffer(long size) {this.arena Arena.ofShared();this.buffer arena.allocate(ValueLayout.JAVA_INT, size);}// 释放内存public void deallocate() {arena.close();}// 以volatile方式设置指定索引的值public void setVolatile(long index, int value) {ELEM_VH.setVolatile(buffer, 0L, index, value);}// 初始化指定范围的元素为0public void initialize(long start, long n) {buffer.asSlice(ValueLayout.JAVA_INT.byteSize() * start,ValueLayout.JAVA_INT.byteSize() * n).fill((byte) 0);}// 将指定范围的元素复制到新数组public int[] copyToNewArray(long start, int n) {return buffer.asSlice(ValueLayout.JAVA_INT.byteSize() * start,ValueLayout.JAVA_INT.byteSize() * n).toArray(ValueLayout.JAVA_INT);}
}JEP 474ZGC默认的分代模式
Z 垃圾回收器 (ZGC) 的默认模式切换为分代模式并弃用非分代模式计划在未来版本中移除。这是因为分代 ZGC 是大多数场景下的更优选择。
JEP 476模块导入声明 (预览)
模块导入声明允许在 Java 代码中简洁地导入整个模块的所有导出包而无需逐个声明包的导入。这一特性简化了模块化库的重用特别是在使用多个模块时避免了大量的包导入声明使得开发者可以更方便地访问第三方库和 Java 基本类。
此特性对初学者和原型开发尤为有用因为它无需开发者将自己的代码模块化同时保留了对传统导入方式的兼容性提升了开发效率和代码可读性。
// 导入整个 java.base 模块开发者可以直接访问 List、Map、Stream 等类而无需每次手动导入相关包
import module java.base;public class Example {public static void main(String[] args) {String[] fruits { apple, berry, citrus };MapString, String fruitMap Stream.of(fruits).collect(Collectors.toMap(s - s.toUpperCase().substring(0, 1),Function.identity()));System.out.println(fruitMap);}
}JEP 477未命名类和实例 main 方法 第三次预览
这个特性主要简化了 main 方法的的声明。对于 Java 初学者来说这个 main 方法的声明引入了太多的 Java 语法概念不利于初学者快速上手。
没有使用该特性之前定义一个 main 方法
public class HelloWorld {public static void main(String[] args) {System.out.println(Hello, World!);}
}使用该新特性之后定义一个 main 方法
class HelloWorld {void main() {System.out.println(Hello, World!);}
}进一步简化未命名的类允许我们省略类名
void main() {System.out.println(Hello, World!);
}JEP 480结构化并发 第三次预览
Java 19 引入了结构化并发一种多线程编程方法目的是为了通过结构化并发 API 来简化多线程编程并不是为了取代java.util.concurrent目前处于孵化器阶段。
结构化并发将不同线程中运行的多个任务视为单个工作单元从而简化错误处理、提高可靠性并增强可观察性。也就是说结构化并发保留了单线程代码的可读性、可维护性和可观察性。
结构化并发的基本 API 是StructuredTaskScope。StructuredTaskScope 支持将任务拆分为多个并发子任务在它们自己的线程中执行并且子任务必须在主任务继续之前完成。
StructuredTaskScope 的基本用法如下 try (var scope new StructuredTaskScopeObject()) {// 使用fork方法派生线程来执行子任务FutureInteger future1 scope.fork(task1);FutureString future2 scope.fork(task2);// 等待线程完成scope.join();// 结果的处理可能包括处理或重新抛出异常... process results/exceptions ...} // close结构化并发非常适合虚拟线程虚拟线程是 JDK 实现的轻量级线程。许多虚拟线程共享同一个操作系统线程从而允许非常多的虚拟线程。
JEP 481作用域值 第三次预览
作用域值Scoped Values可以在线程内和线程间共享不可变的数据优于线程局部变量尤其是在使用大量虚拟线程时。
final static ScopedValue... V new ScopedValue();// In some method
ScopedValue.where(V, value).run(() - { ... V.get() ... call methods ... });// In a method called directly or indirectly from the lambda expression
... V.get() ...作用域值允许在大型程序中的组件之间安全有效地共享数据而无需求助于方法参数。
JEP 482灵活的构造函数体第二次预览
在 JEP 482 之前Java 要求在构造函数中super(...) 或 this(...) 调用必须作为第一条语句出现。这意味着我们无法在调用父类构造函数之前在子类构造函数中直接初始化字段。
灵活的构造函数体解决了这一问题它允许在构造函数体内在调用 super(..) 或 this(..) 之前编写语句这些语句可以初始化字段但不能引用正在构造的实例。这样可以防止在父类构造函数中调用子类方法时子类的字段未被正确初始化增强了类构造的可靠性。
这一特性解决了之前 Java 语法限制了构造函数代码组织的问题让开发者能够更自由、更自然地表达构造函数的行为例如在构造函数中直接进行参数验证、准备和共享而无需依赖辅助方法或构造函数提高了代码的可读性和可维护性。
class Person {private final String name;private int age;public Person(String name, int age) {if (age 0) {throw new IllegalArgumentException(Age cannot be negative.);}this.name name; // 在调用父类构造函数之前初始化字段this.age age;// ... 其他初始化代码}
}class Employee extends Person {private final int employeeId;public Employee(String name, int age, int employeeId) {this.employeeId employeeId; // 在调用父类构造函数之前初始化字段super(name, age); // 调用父类构造函数// ... 其他初始化代码}
} 文章转载自: http://www.morning.lwmzp.cn.gov.cn.lwmzp.cn http://www.morning.cfnsn.cn.gov.cn.cfnsn.cn http://www.morning.jcbjy.cn.gov.cn.jcbjy.cn http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn http://www.morning.rczrq.cn.gov.cn.rczrq.cn http://www.morning.xgchm.cn.gov.cn.xgchm.cn http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn http://www.morning.wfbnp.cn.gov.cn.wfbnp.cn http://www.morning.tgfsr.cn.gov.cn.tgfsr.cn http://www.morning.cyyhy.cn.gov.cn.cyyhy.cn http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn http://www.morning.wpcfh.cn.gov.cn.wpcfh.cn http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn http://www.morning.yjfmj.cn.gov.cn.yjfmj.cn http://www.morning.kdrly.cn.gov.cn.kdrly.cn http://www.morning.ffksr.cn.gov.cn.ffksr.cn http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.bqpgq.cn.gov.cn.bqpgq.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.ktfbl.cn.gov.cn.ktfbl.cn http://www.morning.lmctj.cn.gov.cn.lmctj.cn http://www.morning.rgrz.cn.gov.cn.rgrz.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.gsdbg.cn.gov.cn.gsdbg.cn http://www.morning.qwgct.cn.gov.cn.qwgct.cn http://www.morning.ybgpk.cn.gov.cn.ybgpk.cn http://www.morning.fxpyt.cn.gov.cn.fxpyt.cn http://www.morning.rljr.cn.gov.cn.rljr.cn http://www.morning.yntsr.cn.gov.cn.yntsr.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.lcxdm.cn.gov.cn.lcxdm.cn http://www.morning.jnrry.cn.gov.cn.jnrry.cn http://www.morning.wyrsn.cn.gov.cn.wyrsn.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.mlycx.cn.gov.cn.mlycx.cn http://www.morning.qgfy.cn.gov.cn.qgfy.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.rqrxh.cn.gov.cn.rqrxh.cn http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn http://www.morning.rycd.cn.gov.cn.rycd.cn http://www.morning.ylph.cn.gov.cn.ylph.cn http://www.morning.grynb.cn.gov.cn.grynb.cn http://www.morning.thwhn.cn.gov.cn.thwhn.cn http://www.morning.liyixun.com.gov.cn.liyixun.com http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.kdfqx.cn.gov.cn.kdfqx.cn http://www.morning.zdsdn.cn.gov.cn.zdsdn.cn http://www.morning.yntsr.cn.gov.cn.yntsr.cn http://www.morning.ysbhj.cn.gov.cn.ysbhj.cn http://www.morning.fwkpp.cn.gov.cn.fwkpp.cn http://www.morning.xsjfk.cn.gov.cn.xsjfk.cn http://www.morning.rykn.cn.gov.cn.rykn.cn http://www.morning.jtmql.cn.gov.cn.jtmql.cn http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.mdwb.cn.gov.cn.mdwb.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.cwznh.cn.gov.cn.cwznh.cn http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com http://www.morning.tfwr.cn.gov.cn.tfwr.cn http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn http://www.morning.ysmw.cn.gov.cn.ysmw.cn http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.nmyrg.cn.gov.cn.nmyrg.cn http://www.morning.rqdx.cn.gov.cn.rqdx.cn http://www.morning.zztkt.cn.gov.cn.zztkt.cn http://www.morning.gczqt.cn.gov.cn.gczqt.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.nfqyk.cn.gov.cn.nfqyk.cn http://www.morning.rgyts.cn.gov.cn.rgyts.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn http://www.morning.hsxkq.cn.gov.cn.hsxkq.cn http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn