Java SE 15 新增特性
发布时间:2023-04-15 11:21:40 所属栏目:教程 来源:
导读:Java SE 11 JEP 333将 ZGC 垃圾收集器作为一项实验性功能引入。
这个 JEP 377 修复了一些错误,增加了一些功能和改进,现在支持 Linux/x86_64 、Linux/aarch64、Windows 和 macOS 等主要平台。
这个JEP 377还将
这个 JEP 377 修复了一些错误,增加了一些功能和改进,现在支持 Linux/x86_64 、Linux/aarch64、Windows 和 macOS 等主要平台。
这个JEP 377还将
|
Java SE 11 JEP 333将 ZGC 垃圾收集器作为一项实验性功能引入。 这个 JEP 377 修复了一些错误,增加了一些功能和改进,现在支持 Linux/x86_64 、Linux/aarch64、Windows 和 macOS 等主要平台。 这个JEP 377还将 ZGC 从一个实验性功能变为一个产品功能。然而,默认的垃圾收集器仍然是 G1。 下面的命令启用了 ZGC 垃圾收集器 java -XX:+UseZGC className 文本块正式启用 多行字符串或文本块经历了 Java 12 JEP 326 Raw String Literals Java 13 JEP 355: Text Blocks (Preview) Java 14 JEP 368: Text Blocks (Second Preview) 是 Java SE 15 中的一个正式启用的功能,见JEP 378: Text Blocks 示例代码如下 package git.snippets.jdk15; /** * text block正式启用 * @author <a href="mailto:">Grey</a> * @date 2021/11/29 * @since 15 */ public class BlockTestInJava15 { public static void main(String[] args) { String content = """ { "hello": 1,\ "world": 2, "hello world": "1\s2", } """; System.out.println(content); String java15 = """ <html> <body> <p>Hello, World</p> </body> </html> """; System.out.println(java15); } } 运行结果 { "hello": 1, "world": 2, "hello world": "1 2", } <html> <body> <p>Hello, World</p> </body> </html> Sealed Classes 目前,Java 没有提供对继承的细粒度控制。访问修饰符,如public、protected、private,以及默认的package-private,提供了非常粗略的控制。 Sealed Classes 的目标是允许单个类声明哪些类型可以作为子类型使用。这也适用于接口和确定哪些类型可以实现它们, 其中 sealed -- 意味着它们必须使用 permits 关键字定义哪些类允许继承自它。 non-sealed -- 允许任何类能够继承于它。 密封类涉及两个新的关键字 -- sealed 和 permits,如下示例 package git.snippets.jdk15; /** * @author <a href="mailto:">Grey</a> * @date 2022/8/21 * @since 15 */ public abstract sealed class Person permits Employee, Manager { //... } final class Employee extends Person { } non-sealed class Manager extends Person { } 我们已经声明了一个名为 Person 的抽象类。我们还规定,能够扩展它的类只有 Employee 和 Manager。 任何继承密封类的类本身必须被声明为final、non-sealed的或sealed的。这可以确保类的层次结构保持在有限的范围内被编译器识别。 这种有限的、详尽的层次结构是使用密封类的一大好处。让我们看看这个例子的实际应用。如下代码 if (person instanceof Employee) { return ((Employee) person).getEmployeeId(); } else if (person instanceof Manager) { return ((Manager) person).getSupervisorId(); } 如果没有一个密封的类,编译器就不能合理地确定所有可能的子类都被我们的 if-else 语句所覆盖。如果末尾没有 else 子句,编译器可能会发出警告,表明我们的逻辑没有涵盖所有的情况。 Sealed Classes 在 Java SE 15 中是预览功能,到 Java SE 17 中正式启用。 创建隐藏类 Java SE 15中引入的一个新特性被称为隐藏类。虽然大多数开发者不会发现它们的直接好处,但任何使用动态字节码或 JVM 语言的人都可能会发现它们很有用。 隐藏类的目标是允许在运行时创建不能被发现的类。这意味着它们不能被其他类链接,也不能通过反射被发现。像这样的类通常有一个很短的生命周期,因此,隐藏类被设计成在加载和卸载时都很高效。 请注意,当前版本的 Java 确实允许创建类似于隐藏类的匿名类。然而,它们依赖于不安全的API。隐藏类则没有这种依赖性。 详见:JEP 371: Hidden Classes instanceof 类型匹配 (二次预览) instanceof 类型匹配功能在 Java SE 14 中进行了预览,Java SE 15 旨在继续其预览状态,没有新的增强功能。 该功能的目标是删除大量通常由 instanceof 操作符带来的模板代码。 在 Java SE 14 之前 // Before Java 14: if (obj instanceof H) { H jd1 = (H) obj; jd1.setId(1); } 在 Java SE 14 中,可以简化为 // Java 14+ if (obj instanceof H jd2) { jd2.setId(1); } (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
