Java 17的一些新特性介绍
作者:?sofia? 发布时间:2022-04-11 15:33:15
前言
Java17将是一个长期支持的LTS版本。
Java采用了6个月的发布周期。也就是说,它将每6个月发布一个新版本的Java。每隔3年,LTS版本就会发布一次。目前,Java 11是LTS版本,于2018年9月发布。但在Java17发布后,它将是最新的LTS支持。
许多组织依赖LTS版本,所以他们使用的是Java11。但在Java17发布后,他们将使用Java17(可能)。
自从将Java9发布到Java16之后,Java添加了许多Java开发人员渴望的特性和改进。看看它,我们可以说Java正在缓慢而稳定地追赶其他编程语言。它让Java开发人员感到高兴,因为我们已经听腻了“Java已死”。
Java 17中的Sealed 密封类
sealed class 密封类允许描述哪个类或接口可以扩展或实现这个类或接口。简而言之,我们可以限制谁可以使用这个类或接口。假设我们有一个学生抽象类,如果我们将其设为一个密封类,并且只允许ScienceStudent
和CommerceSudent
扩展该类,那么只有这些类才能扩展该Student
,而其他类如果试图扩展该类,则会出错。
public abstract sealed class Student permits ScienceStudent , CommerceStudent { ... }
这提供了一种比访问修饰符更具声明性的方法来限制超类的使用。
Java 17提供了更好的随机生成器
Java 17为伪随机数生成器(PRNG)提供了新的接口类型和实现。它引入了一个名为RandomGenerator
的新接口。该接口的目标是为所有现有和新的PRNG提供统一的API。
RandomGenerator
提供名为ints、longs、doubles、nextBoolean、nextInt、nextLong、nextDouble和nextFloat
的方法,以及它们当前的所有参数变化。以下是提供的四个新的专用随机发生器接口:
SplittableRandomGenerator
JumpableRandomGenerator
LeapableRandomGenerator
ArbitrarilyJumpableRandomGenerator
所有这些接口都扩展了接口。
此功能的目标是:
使各种PRNG算法更容易在应用中互换使用。
通过提供PRNG对象流,更好地支持基于流的编程。
消除现有PRNG类中的代码重复。
小心地保留
java.util.Random
Java对增强安全性的关注
通过JEP403,Java对JDK内部进行了强封装。这意味着,它将限制用户直接使用Java的内部内容,并鼓励用户使用标准API。使用内部构件的原因可能会导致问题,尤其是在安全方面。此功能的目标是:
继续改进JDK的安全性和可维护性,这是Jigsaw项目的主要目标之一。
鼓励开发人员从使用内部元素迁移到使用标准API,这样他们和他们的用户都可以升级到未来的Java版本,而无需大惊小怪
另一个安全更新是JEP 411:不推荐删除安全管理器。嗯,这不完全是一个更新,而是朝着删除一个功能迈出的一步。安全管理器可以追溯到Java 1.0。多年来,它一直不是保护客户端Java代码的主要手段,也很少用于保护服务器端代码。因此,在即将发布的Java版本中,它将完全从Java中删除。
Pattern Matching For Switch预览
此功能是一个预览功能,不会在标准软件包中提供。
在Java16中,我们获得了“instanceOf的模式匹配”功能。类似地,这种切换模式匹配功能将改进普通旧的单equals类型的切换表达式。下面是一个开关表达式的代码简介。
Object o = 123L;
String formatted = switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();
};
你可以在JEP 406上看到更多关于此功能的示例和详细说明。
来源:https://javakk.com/2596.html
猜你喜欢
- 在jdk1.4中提出的技术,非阻塞IO,采用的是基于事件处理方式。传统的io技术为阻塞的,比如读一个文件,惹read方法是阻塞的,直到有数据
- 引言备忘录模式经常可以遇到,譬如下面这些场景:浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭头回退
- 一、创建项目1.File->new->project;2.选择“Spring Initializr”,点击next;(jdk1.
- 前言:项目是使用Java swing开发,可实现基础数据维护用户登录、系统首页酒店信息管理、主要模块是开房管理、退房管理、房间信息管理、顾客
- 概念尽量使用合成/聚合,而不是使用继承实现复用。所谓的合成/聚合是指一个对象里持有另外一个类的对象,通过调用这些对象的方法得到复用已有功能的
- 一、简介CyclicBarrier 字面意思回环栅栏(循环屏障),它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是
- 前言:最近终于用上了高性能的测试机(54C96G * 3),相较之前的单机性能提升了三倍,数量提升了三倍,更关键的宽带提单机升了30倍不止,
- 前言首先,我们要讲的是JVM的垃圾回收机制,我默认准备阅读本篇的人都知道以下两点:JVM是做什么的Java堆是什么因为我们即将要讲的就是发生
- package com.yao;import java.util.concurrent.ExecutorService;import jav
- springboot URL带有斜杠的转义字符百分之2F导致的400错误今天项目上出现一个问题,是前端的GET请求url中带有路径参数,这个
- 本文实例讲述了java之swing表格实现方法。分享给大家供大家参考。具体如下:import java.awt.*;import java.
- 一、背景有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,一般我们检
- 本文实例讲述了JFreeChart插件实现的折线图效果。分享给大家供大家参考,具体如下:package com.lei.jfreechart
- 效果展示在实际项目当中我们经常看到如下各种剪裁形状的效果,Flutter 为我们提供了非常方便的 Widget 很轻松就可以实现,下面我们来
- 一、运算符运算符包括下面几种:算术运算符赋值运算符比较运算符逻辑运算符位运算符三目运算符最不常用的是位运算符,但也是最接近计算机底层的。1、
- 本文实例为大家分享了Java代码对HDFS进行增删改查操作的具体代码,供大家参考,具体内容如下import java.io.File;imp
- 前言在原生的 Android 或 iOS 中,都提供了基本的键值对存储方式,Android 是 SharedPreferences,iOS
- 前言:在纯 Java 代码里 我们一般都会用class.getResource(String name) 或者 class.getClass
- Mybatis 复杂对象resultMap数据对象含有普通属性,一对一对象,一对多对象(2种情况:单一主键和复合主键)下面是resultMa
- 概述背景函数式编程的理论基础是阿隆佐·丘奇(Alonzo Church)于 1930 年代提出的 &lambd