Java15新特性及代码示例

  |   0 评论   |   0 浏览

Java 15 于 2020 年 9 月 15 日发布。Java 15 继续支持以前 JDK 版本中的各种预览功能;并且还引入了一些新功能。在这篇文章中,我们将介绍 添加的一些特性以及一些代码示例。

Java15的主要更新内容如下:

  • 密封类和接口(预览版)
  • EdDSA 算法
  • 隐藏类
  • 其他

1. 密封类和接口(预览版)

在Java15之前,所有的类都可以没有限制地继承其他类--除非被继承类被声明为final类型,任何类都可以实现公共接口。

现在在Java15中,一个类或者接口可以使用修饰符sealed声明为密封类或者接口,来限制其继承类。

package cn.dayangshuo;

/**
 * 定义一个抽象密封类Pet,它的实现类只能是Dog, Cat这两个,其他的实现类均不允许
 * @author DAYANG
 */
public abstract sealed class Pet
    permits Dog, Cat {}

final class Dog extends Pet {
}

final class Cat extends Pet {
}

2. EdDSA 算法

EdDSA (Edwards-Curve Digital Signature Algorithm) 是在 Java 15 中通过JEP 339添加的另一种附加数字签名方案。与其他可用的签名方案相比,它提供了更好的性能和安全的签名。

package cn.dayangshuo.collectors;

import java.nio.charset.StandardCharsets;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import java.util.Base64;

/**
 * @author DAYANG
 */
public class EdDSATest {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");
        KeyPair kp = kpg.generateKeyPair();

        byte[] msg = "dayang".getBytes(StandardCharsets.UTF_8);

        Signature sig = Signature.getInstance("Ed25519");
        sig.initSign(kp.getPrivate());
        sig.update(msg);
        byte[] s = sig.sign();

        String encodedString = Base64.getEncoder().encodeToString(s);
        System.out.println(encodedString);
    }
}

3. 隐藏类

隐藏类不同于普通的 Java 类。它们不能被其他类的字节码直接使用。隐藏类旨在供在运行时生成类并通过反射间接使用它们的框架使用。

使用隐藏类,不是框架开发人员可以创建外部类看不到的不可发现的类;并且可以显式卸载,而不必担心来自其他类的可能引用。

JVM 支持主动卸载不可发现的类,因此框架可以灵活地定义任意数量的类。

4. 其他

从 Java 15 开始,ZGC (JEP 377) 和Shenandoah (JEP 379) 不再是实验性功能。默认的 GC 仍然是 G1

转自https://zhuanlan.zhihu.com/p/483771131


标题:Java15新特性及代码示例
作者:michael
地址:https://blog.junxworks.cn/articles/2022/12/02/1669972386974.html