Java最高

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>看看这个课程

1.介绍

Java 15于2020年9月达到了一般可用性,是JDK平台的下一个短期发布。它在早期版本的几个功能上构建,并提供了一些新的增强功能。

在这篇文章中,我们将查看Java 15的一些新功能,以及Java开发人员感兴趣的其他更改。

2.中记录(384)

记录是Java中的一种新类型的类,可以轻松创建不可变数据对象。

最初引入在Java 14的早期预览中,Java 15的目标是改进几个方面在成为正式产品特性之前。

让我们来看看使用当前Java的示例以及它如何使用记录更改

2.1。没有记录

在记录之前,我们将创建一个不可变数据传输对象(DTO),如:

公共班人{私人最终字符串名称;私人决赛int年龄;公共人员(字符串名称,int年龄){this.name = name;这是=年龄;public string getName(){返回名称;} public int getage(){返回年龄;}}

注意这里有很多代码用来创建一个只保存状态的不可变对象。我们的所有字段都显式定义为使用最终的,我们有一个全参数构造函数,每个字段都有一个访问器方法。在某些情况下,我们甚至可以将类本身声明为最终的防止任何子类化。

在许多情况下,我们还会更进一步,覆盖toString.方法提供有意义的日志输出。我们可能还想重写=hashCode方法,以避免比较这些对象的两个实例时出现意外后果。

2.2。记录

使用新的记录类,我们可以以更紧凑的方式定义相同的不可变数据对象:

public record Person(String name, int age) {}

这里发生了一些事情。首先,也是最重要的,类定义有一个特定于的新语法记录S.。此标题是我们提供有关记录内部字段的详细信息。金宝搏官网188be

使用这个头文件,编译器可以推断出内部字段。这意味着我们不需要定义特定的成员变量和访问器,因为它们是默认提供的。我们也不必提供构造函数。

类的合理实现toString.=,hashCode方法。

记录S消除了大量的样板代码,他们确实允许我们覆盖一些默认行为。例如,我们可以定义一个验证的规范构造函数:

公共录制人(字符串名称,int年龄){公共人员{如果(年龄<0){投掷新的IllegalArgumentException(“年龄不能为负”);}}}

这一点值得一提记录S确实有一些限制。除此之外,它们一直都是最终的,它们不能被申报摘要,他们不能使用本地方法

3.密封课程(9月360)

目前,Java没有提供对继承的细粒度控制。访问修饰符如公共保护私人的以及默认包私有,提供非常粗糙的控制。

为此,我们的目标是密封班级是允许单个类声明哪些类型可以用作子类型。这也适用于接口和确定哪些类型可以实现它们。

密封类涉及两个新关键字 -密封许可证

public abstract sealed class{//…}

在这个例子中,我们宣布了一个摘要类命名的人。我们还指定了唯一可以扩展它的类员工经理。扩展密封类就像今天在Java中一样,使用延伸关键词:

public final class Employee extends Person {} public final class Employee extends Person {}

重要的是要注意扩展密封类本身必须被声明密封非密封, 或者最终的。这确保类层次结构是有限的,并且编译器知道。

这种有限且详尽的层次结构是使用它的最大好处之一密封班级。让我们看看这个例子是:

if(person instanceof雇员){return((雇员)人).getemployeeid();}否则if(person instanceof manager){return((manager)person).getsupervisorid();}

没有一个封闭的班级,编译器无法合理地确定所有可能的子类都被覆盖与我们的if - else陈述。没有A.其他的子句结束时,编译器可能会发出警告,表明我们的逻辑没有覆盖所有情况。

4.隐藏类(jep371)

Java 15中引入的一个新特性被称为隐藏的课程。虽然大多数开发人员无法从中找到直接的受益,但任何与动态字节码或JVM语言一起使用的人都可能发现它们有用。

隐藏类的目标是允许运行时创建不可发现的类。这意味着它们不能被其他类链接,也不能通过反射。诸如这些通常具有短生命周期的类,因此,隐藏的类旨在通过加载和卸载来高效。

请注意,当前版本的Java确实允许创建类似于隐藏类的匿名类。然而,他们依赖于unsAPI。隐藏的课程没有这样的依赖。

5.模式匹配类型检查(jep375)

模式匹配功能是在Java 14中预览的,而Java 15的目标是继续它的预览状态,没有新的增强。

作为审查,此功能的目标是删除大量的样板代码,通常伴随着运算符接线员:

if (person instanceof Employee){雇员雇员=(雇员)人;Date hireDate = employee.getHireDate();/ /……}

这是Java中非常常见的模式。无论何时我们检查一个变量是否是某种类型,我们几乎总是在它后面对它进行类型强制转换。

模式匹配功能通过介绍一个新的功能简化了这一点绑定变量

if (person instanceof Employee Employee) {Date hireDate = Employee . gethiredate ();/ /……}

注意我们是如何提供一个新的变量名的,员工,作为类型检查的一部分。如果类型检查是真正的, 然后JVM会自动为我们投射变量,并将结果分配给新的绑定变量

我们还可以将新的绑定变量与条件语句结合使用:

if(person instanceof employee employee&employee.getyearsofservice()> 5){// ...}

在未来的Java版本中,目标是将模式匹配与其他语言特征(如)展开开关陈述。

6.外部内存API (JEP 383)

外国内存访问已经是Java 14的孵化特征。在Java 15中,目标是在添加几个新功能时继续孵化状态:

  • 一个新的varhandle.API,自定义内存访问var句柄
  • 支持并行处理的内存段使用Spliterator接口
  • 加强支持映射内存段
  • 能够操纵和解引用来自本机调用之类的地址

异物记忆一般是指在托管JVM堆之外的内存。因此,它不受垃圾收集的影响,通常可以处理令人难以置信的大存储段。

虽然这些新api可能不会直接影响大多数开发人员,但它们将为处理外部内存的第三方库提供很多价值。这包括分布式缓存、非规范化文档存储、大的任意字节缓冲区、内存映射文件等等。

7.垃圾收集器

在Java 15中,两者都是ZGC.(977年)和雪兰多(JEP 379)将不再是实验性的。两者都将被支持配置团队可以选择使用的配置,而G1收集器将保持默认值。

这两种功能之前都使用了实验特性标志。这种方法允许开发人员测试新的垃圾收集器并提交反馈,而无需下载单独的JDK或附加组件。

一个注意谢南多厄河谷:它没有从所有供应商JDKS获得 - 最值得注意的是,Oracle JDK不包括它。

8.其他改变

Java 15有几个其他值得注意的变化。

在Java 13和14中的多轮预览之后,文本块将成为Java 15中完全支持的产品特性。

有用的空指针异常,最初是在JEP 358下的Java 14中交付的,现在默认启用。

遗留DatagramSocketAPI已经重写。这是在Java 14重写的后续插座API。虽然它不会影响大多数开发人员,但它很有趣,因为它是一个先决条件项目织机

另外,Java 15包括对Edwards-Curve数字签名算法的加密支持。EDDSA是一种现代椭圆曲线签名方案,具有与JDK中现有签名方案的若干优势。

最后,有一些东西在Java 15中已经被弃用了。偏置锁定、Solaris/SPARC端口和RMI激活都将在未来的版本中删除或计划删除。

值得注意的是,最初在Java 8中引入的Nashorn JavaScript引擎现在被删除了。随着最近GraalVM和其他VM技术的引入,很明显Nashorn在JDK生态系统中不再有一席之地。

9.结论

Java 15构建在过去版本的一些特性之上,包括记录、文本块、新的垃圾收集算法等。它还添加了新的预览功能,包括密封类和隐藏类

由于Java 15不是长期支持的版本,我们可以预期支持它于2021年3月结束。当时,我们可以期待Java 16,随后在新的长期支持版之后不久之后。Java 17。

Java底部

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!