Java 17 如何改变你的编程方式

Java 17 如何改变你的编程方式

Java 17 是一个长期支持版本 (LTS),于 2021 年发布,包含多个新特性和改进。以下是一些关键的新特性及其示例说明:

测试代码结构图

Java 17 如何改变你的编程方式

1. Pattern Matching for switch (Preview)

Java 17 引入了对 switch 语句的模式匹配功能(作为预览功能)。通过这种方式,switch 语句可以根据对象的类型来执行匹配,从而避免传统的类型转换和显式判断。

示例:

/**
* 功能描述:
*switch 语句可以作为表达式使用,并且返回一个值。
* @author Songxianyang
* @date 2024-10-15 11:04
*/
public class SwitchExpression {
public static void main(String[] args) {
int i=2;
String name= switch (i) {
case 1 -> "my-1";
case 2 -> "my-2";
case 3 -> "my-3";
default -> "my";
};
System.out.println(name);
}
}

输出:

Java 17 如何改变你的编程方式

2. Sealed Classes

密封类允许类或接口明确控制哪些其他类可以扩展它。它有助于设计更稳定和安全的类层次结构。

示例:

/**
* 功能描述:密封类
* 家禽
* 语法:
* public abstract sealed class 父类
* permits 指定的子类 ,Duck
* Poultry家禽
* Chicken ,Duck 鸡鸭
* @author Songxianyang
* @date 2024-10-15 10:35
*/
public abstract sealed class Poultry permits Chicken ,Duck {
abstract void eat();
}
/**
* 功能描述:
* 鸭
* @author Songxianyang
* @date 2024-10-15 10:39
*/
public final class Duck extends Poultry{
@Override
void eat() {
System.out.println("小鸭吃");
}
}
/**
* 功能描述:
* 鸡
* @author Songxianyang
* @date 2024-10-15 10:38
*/
public final class Chicken extends Poultry{
@Override
void eat() {
System.out.println("小鸡吃");
}
}

在这个示例中,Shape 是一个密封类,只允许 Chicken和 Duck 扩展它,限制了继承范围,增强了代码的安全性。

然而 Goose (鹅)  就提示 继承范围

Java 17 如何改变你的编程方式

3. Records Enhancements

Java 17 对 Record 进一步增强,允许在记录类中定义嵌套记录类,并改进了序列化的处理。

示例:

/**
* 记录类是不可变数据类的简洁表示方式,适用于仅包含字段、构造函数、equals、hashCode 和 toString 方法的类
*/
public record UserRecord(String name,String sex) {
}

public class Test {
public static void main(String[] args) {
UserRecord userRecord = new UserRecord("song", "nan");
System.out.println(userRecord.sex());
System.out.println(userRecord.name());
}
}

输出:

Java 17 如何改变你的编程方式

4. Foreign Function and Memory API (Incubator)

Java 17 引入了外部函数和内存访问 API (作为孵化器项目),允许 Java 程序更安全、有效地与非 Java 代码和内存进行交互。这提供了一种与本地代码(例如 C 库)交互的机制。

示例:
使用 MemorySegmentMemoryAddress 来管理本机内存:

import jdk.incubator.foreign.*;

public class MemoryExample {
public static void main(String[] args) {
try (var scope = ResourceScope.newConfinedScope()) {
MemorySegment segment = MemorySegment.allocateNative(100, scope);
MemoryAddress address = segment.address();
System.out.println("Allocated memory address: " + address);
}
}
}

5. Strong Encapsulation by Default in JDK Internals

Java 17 加强了对 JDK 内部 API 的封装,除非显式开启,程序无法直接访问 JDK 内部的类或方法。用户需要使用 --add-opens 参数解封特定的模块或包。

示例:

--add-opens java.base/java.lang=ALL-UNNAMED

6. Deprecating the Applet API for Removal

Java 17 标记了 Applet API 为废弃,未来版本将完全移除。尽管 Applet 在早期被用于 Web 浏览器中的嵌入式应用程序,但它已过时并且不再使用。

7. New macOS Rendering Pipeline

Java 17 在 macOS 上引入了一个全新的渲染管道,使用 Apple 的 Metal API 取代了以前的 OpenGL。这提高了 macOS 上 GUI 应用的性能和可扩展性。

8. Enhanced Pseudorandom Number Generators (JEP 356)

Java 17 改进了伪随机数生成器 API,增加了更多种类的随机数生成算法,并使其更加灵活和易于使用。

示例:

/**
* 功能描述:
* RandomGeneratorFactory 可以创建各种随机数生成器。
* @author Songxianyang
* @date 2024-10-15 11:08
*/
public class RandomGeneratorMain {
public static void main(String[] args) {
RandomGeneratorFactory.all().forEach(ss-> System.out.println(ss.name()));
System.out.println("-------------------");
RandomGenerator gen = RandomGeneratorFactory.of("Xoshiro256PlusPlus").create();
System.out.println(gen.nextInt(50));// 输出 0 到 50 之间的随机数
}
}

输出

Java 17 如何改变你的编程方式

9. Text Blocks Enhancements

虽然 Text Blocks 是 Java 13 引入的,但在 Java 17 中对其做了更多的改进,支持更好的格式化功能,减少了与传统字符串的编码问题。

示例:

/**
* 功能描述:
* 文本块 """ 提供了一个方便的方式定义多行字符串
* 而无需每行添加 + 或 n
* @author Songxianyang
* @date 2024-10-15 10:55
*/
public class StringText {
public static void main(String[] args) {
String json= """
{
"id": "1840575190483111937",
"name":"Java17"
}
""";
System.out.println(json);

}
}

输出

Java 17 如何改变你的编程方式

10.  Pattern Matching for ****instanceof**

instanceof 语句得到了增强,不再需要显式进行类型转换。

示例:

/**
* 功能描述:
*instanceof 语句得到了增强,不再需要显式进行类型转换。
* @author Songxianyang
* @date 2024-10-15 10:44
*/
public class InstanceofMain {
public static void main(String[] args) {
Object obj = "song";
if (obj instanceof String) {
System.out.println("String-toUpperCase"+((String) obj).toUpperCase());
}
}
}

输出:

Java 17 如何改变你的编程方式

总结:

Java 17 在类型匹配、类结构控制、性能改进和安全性上都做了重大改进,尤其是引入了模式匹配、密封类、增强的随机数生成器 API,以及对本地代码的更好支持,使得代码开发更加高效、安全和简洁。


原文始发于微信公众号(SteveCode):Java 17 如何改变你的编程方式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/305511.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!