Java教程

Java8 新特性

Oracle在2014年3月18日发布了Java的新版本Java8。它是软件开发平台Java的革命性版本。它包括对Java编程,JVM,工具和库的各种升级。

Java 8编程语言增强功能

Java 8为Java编程提供了以下功能:

Lambda表达式

Lambda表达式可帮助我们以函数样式编写代码。它提供了一种使用表达式来实现SAM接口(单一抽象方法)的简洁明了方法。在集合库中它非常有用,在该库中它有助于迭代,过滤和提取数据。
有关更多信息和示例: 单击此处

方法引用

Java 8方法参考用于参考功能接口的方法。它是lambda表达式的紧凑和简单形式。每次使用lambda表达式仅引用方法时,都可以用方法引用替换您的lambda表达式。
有关更多信息和示例: 单击此处

功能接口

仅包含一种抽象方法的接口称为功能接口。它可以具有任意数量的默认方法和静态方法。它也可以声明对象类的方法。
功能接口也称为单一抽象方法接口(SAM接口)。
有关更多信息和示例,请参见: 点击此处

Optional

Java在Java 8中引入了一个新类Optional。它是一个公共的最终类,用于处理Java应用程序中的NullPointerException。我们必须导入 java.util 包才能使用此类。它提供了检查特定变量的值是否存在的方法。
有关更多信息和示例: 单击此处。

forEach

Java提供了一种新的forEach()方法来迭代元素。它在Iterable和Stream接口中定义。
它是Iterable接口中定义的默认方法。扩展Iterable接口的集合类可以使用forEach()方法来迭代元素。
此方法采用单个参数,即功能接口。因此,您可以将lambda表达式作为参数传递。
有关更多信息和示例: 单击此处

日期/时间API

自Java 8以来,Java引入了新的日期和时间API。java.time包中包含Java 8日期和时间类。
有关更多信息和示例: 单击此处

默认方法

Java提供了一种在界面内部创建默认方法的功能。在接口内部定义并用default关键字标记的方法称为default方法。这些方法是非抽象方法,并且可以具有方法主体。
有关更多信息和示例: 单击此处

Nashorn JavaScript引擎

Nashorn是JavaScript引擎。它用于在JVM(Java虚拟机)上动态执行JavaScript代码。 Java提供了用于执行JavaScript代码的命令行工具 jjs
您可以通过两种方式执行JavaScript代码:
使用jjs命令行工具和 通过嵌入Java源代码。
有关更多信息和示例: 单击此处

StringJoiner

Java在java.util包中添加了新的最终类StringJoiner。它用于构造由定界符分隔的字符序列。现在,您可以通过传递分隔符(例如逗号、、连字符(-)等)来创建字符串。
有关更多信息和示例: 单击此处

Collectors

Collectors是扩展Object类的最终类。它提供了归约操作,例如将元素累积到集合中,根据各种标准对元素进行汇总等。
有关更多信息和示例: 单击此处

Stream API

Java 8 java.util.stream软件包由类,接口和枚举组成,以允许对元素进行功能风格的操作。它执行延迟计算。因此,它仅在需要时执行。
有关更多信息和示例: 单击此处

Stream filter()

Java流提供了一个方法filter(),用于在给定谓词的基础上过滤流元素。假设您只想获取列表中的偶数元素,则可以在filter()方法的帮助下轻松地做到这一点。
该方法将谓词作为参数并返回结果元素流。
更多信息和示例: 单击此处

Java Base64编码和解码

Java提供了一个Base64类来处理加密和解密。您需要在源文件中导入java.util.Base64类以使用其方法。
此类提供了三种不同的编码器和解码器来加密每个级别的信息。
有关更多信息信息和示例: 单击此处

Java并行数组排序

Java在Arrays类中提供了一项新的附加功能,该功能用于对数组元素进行并行排序。 parallelSort()方法已添加到java.util.Arrays类,该类使用JSR 166 Fork/Join并行公共池提供数组排序。这是一个重载的方法。
有关更多信息和示例: 单击此处

Java 8安全性增强功能

(1)Java安全套接字扩展(JSSE)提供程序默认在服务器上启用协议传输层安全性(TLS)1.1和TLS 1.2。
(2)添加了一种改进的方法AccessController.doPrivileged,该方法使代码可以声明其特权的子集,而不会阻止整个遍历堆栈以检查其他权限。
(3)SunJCE提供程序中已添加了高级加密标准(AES)和基于密码的加密(PBE)算法,例如PBEWithSHA256AndAES_128和PBEWithSHA512AndAES_256。
(4)Java安全套接字扩展(SunJSSE)在JDK 7中默认情况下已为客户端应用程序启用了服务器名称指示(SNI)扩展,并且JDK 8支持服务器应用程序的SNI扩展。 SNI扩展是一项功能,它扩展了SSL/TLS协议,以指示客户端在握手期间尝试连接的服务器名称。
(5)SunJSSE进行了增强,以支持带有关联数据的身份验证加密(AEAD) )算法。增强了Java密码术扩展(SunJCE)提供程序,以支持AES/GCM/NoPadding密码实现以及Galois/Counter Mode(GCM)算法参数。
(6)新命令标志-importpassword被添加到keytool实用程序。它用于接受密码并将其作为秘密密钥安全地存储。添加了诸如java.security.DomainLoadStoreParameter和java.security.PKCS12Attribute之类的类以支持DKS密钥库类型。
(7)在JDK 8中,SHA-的SHA-224变体增强了加密算法。 2个消息摘要实现系列。
(8)对NSA Suite B密码术的增强支持,包括:
NSA Suite B加密算法的OID注册 支持2048位DSA密钥对生成,并支持2048位DSA密钥的附加签名算法,例如SHA224withDSA和SHA256withDSA。 Diffie-Hellman(DH)算法将密钥大小限制从1024提升到2048。
(9)SecureRandom类提供了加密强随机数的生成,该随机数用于私钥或公钥,密码和签名消息。 JDK 8中引入了getInstanceStrong()方法,该方法返回最强的SecureRandom的实例。当您需要创建RSA私钥和公钥时,应使用它。 SecureRandom包括以下其他更改:
为UNIX平台引入了两个新的实现,它们提供了阻塞和非阻塞行为。
(10)包括一个新的PKIXRevocationChecker类,该类使用PKIX算法检查证书的吊销状态。它支持尽力而为检查,终端实体证书检查以及特定于机制的选项。
(11)公钥密码标准11(PKCS)已扩展为包括对Windows的64位支持。
(12)Kerberos 5中添加了两个新的rcache类型。 none表示完全没有rcache,类型dfl表示基于DFL样式的基于文件的rcache。此外,现在支持接受者请求的子项。使用sun.security.krb5.r配置它们缓存和sun.security.krb5.acceptor.subkey系统属性。
(13)在JDK 8中,同一领域内支持Kerberos 5协议转换和约束委派。
(14)Java 8默认禁用了弱加密。默认情况下不支持与DES相关的Kerberos 5加密类型。可以通过在krb5.conf文件中添加allow_weak_crypto = true来启用这些加密类型。
(15)您可以将服务器名称设置为null来表示未绑定的服务器。这意味着客户端可以使用任何服务器名称请求服务。建立上下文后,服务器可以使用密钥名称SASL.BOUND_SERVER_NAME来检索该名称作为协商的属性。
(16)到本机Java通用安全服务(JGSS)的Java本机接口(JNI)桥是现在已在Mac OS X上受支持。您可以将系统属性sun.security.jgss.native设置为true来启用它。
(17)定义了一个新的系统属性jdk.tls.ephemeralDHKeySize来自定义临时属性DH密钥大小。除可导出的密码套件或传统模式(jdk.tls.ephemeralDHKeySize = legacy)外,可接受的DH密钥的最小大小为1024位。
(18)Java安全套接字扩展(JSSE)提供程序认可客户端的密码套件。默认情况下为首选项。但是,可以通过在服务器上调用SSLParameters.setUseCipherSuitesOrder(true)来更改行为,以遵守服务器的密码套件首选项。

Java 8工具增强功能

(1)引入了jjs命令,该命令以交互shell模式或解释脚本文件的方式调用Nashorn引擎。
(2)只要正确包装了JavaFX应用程序,java命令就可以启动JavaFX应用程序。
(3)Java命令手册页(包括nroff和HTML)已被完全重做。现在,根据高级选项的影响范围,将其分为运行时,编译器,垃圾回收和可维护性。现在介绍几个以前缺少的选项。自上一发行版起,还有一个选项节可供选择。
(4)新的jdeps命令行工具使开发人员可以分析类文件来确定包级或类级依赖项。
(5)您可以远程访问诊断命令,以前只能通过jcmd工具在本地访问这些命令。使用Java管理扩展(JMX)提供了远程访问,因此诊断命令将向注册到平台MBean服务器的平台MBean公开。 MBean是com.sun.management.DiagnosticCommandMBean接口。
(6)jarsigner工具中包含一个新选项-tsapolicyid,使您可以从时间戳记权威机构请求签名的时间戳记并附加它
(7)包含一个新方法java.lang.reflect.Executable.getParameters,它使您可以访问任何方法或构造函数的形式参数的名称。但是,.class文件默认情况下不存储形式参数名称。要将形式参数名称存储在特定的.class文件中,从而使Reflection API能够检索形式参数名称,请使用javac编译器的-parameters选项编译源文件。
(8)类型规则Java语言规范(JLS)第15.21节中用于二进制比较的内容现在将由javac正确执行。
(9)在此版本中,apt工具及其相关的API包含在com.sun.mirror包中

Javadoc增强功能

在Java SE 8中,以下新API已添加到Javadoc工具中。
新的DocTree API引入了一个扫描程序,使您可以遍历由抽象语法树表示的源代码。这扩展了Compiler Tree API,以提供对javadoc注释内容的结构化访问。 javax.tools软件包包含一些类和接口,这些类和接口使您可以直接从Java应用程序调用Javadoc工具,而无需执行新过程。 所生成的类或接口文档的"方法摘要"部分已重新构建。本节中的方法描述按类型分组。默认情况下,列出所有方法。您可以单击一个选项卡以查看特定类型的方法(静态,实例,抽象,具体或不推荐使用的方法,如果它们存在于类或接口中)。 javadoc工具现在支持检查javadoc注释的内容中是否存在由javadoc生成的文件中可能导致各种问题的问题,例如无效的HTML或可访问性问题。该功能默认情况下处于启用状态,也可以通过新的-Xdoclint选项进行控制。

Pack200增强功能

由于JSR 292支持Java平台上的动态类型语言,因此Java类文件格式已更新。
Pack200引擎已更新,以确保有效压缩Java SE 8类文件。现在,它可以识别常量池条目和JSR 292引入的新字节码。因此,使用此版本的pack200工具创建的压缩文件将与较早版本的unpack200工具不兼容。

Java 8 I/O增强功能

在Java 8中,对java.nio.charset.Charset和扩展的charset实现进行了一些改进。它包括以下内容:
新的SelectorProvider,可以提高服务器的性能或可伸缩性。/dev/poll SelectorProvider仍然是默认值。要使用Solaris事件端口机制,请在系统属性java.nio.channels.spi.Selector设置为值sun.nio.ch.EventPortSelectorProvider的情况下运行。 <JDK_HOME>/jre/lib/charsets.jar文件的大小已减小。 java.lang.String(byte [],∗)构造函数和java.lang.String.getBytes()方法的性能得到了改善。

Java 8网络增强功能

(1)已添加新类java.net.URLPermission。
(2)已添加软件包jdk.net,其中包含平台特定的套接字选项以及在所有标准套接字上设置这些选项的机制类型。套接字选项在jdk.net.ExtendedSocketOptions中定义。
(3)在HttpURLConnection类中,如果安装了安全管理器,并且如果调用了导致尝试打开连接的方法,则调用方必须具有到目标URL的主机/端口组合的" connect" SocketPermission或允许该请求的URLPermission。
如果启用了自动重定向,并且此请求被重定向到另一个目标,则调用者还必须具有连接到重定向的主机/URL的权限。

Java 8并发性增强功能

java.util.concurrent软件包添加了两个新接口和四个新类。

Java.util.concurrent接口

接口 说明
public static interface CompletableFuture.AsynchronousCompletionTask 这是一个标记接口,用于标识由异步方法产生的异步任务。对于监视,调试和跟踪异步活动可能很有用。
public interface CompletionStage<T> 它创建一个可能异步计算的阶段,该阶段在另一个CompletionStage完成时执行一个动作或计算一个值。

Java.util.concurrent类

说明
public class CompletableFuture<T> extends Object implements Future<T>, CompletionStage<T> 这是一个可以明确完成的未来,可以用作CompletionStage,支持在完成时触发的相关功能和动作。
public static class ConcurrentHashMap.KeySetView<K,V> extends Object implements Set<K>, Serializable 它是作为一组键的ConcurrentHashMap的视图,其中可以选择通过映射到公共值来启用添加。
public abstract class CountedCompleter<T> extends ForkJoinTask<T> 一个ForkJoinTask,在触发时执行完成操作,并且没有剩余的未决操作。
public class CompletionException extends RuntimeException 在完成结果或任务的过程中遇到错误或其他异常时,它将引发异常。

java.util.concurrent.ConcurrentHashMap类中的新方法

ConcurrentHashMap类在其最新版本中引入了一些新方法。它包括各种forEach方法(forEach,forEachKey,forEachValue和forEachEntry),搜索方法(search,searchKeys,searchValues和searchEntries)以及大量的归约方法(reduce,reduceToDouble,reduceToLong等)。
java.util.concurrent.atomic中的新类
最新版本引入了可扩展,可更新,通过少量新类DoubleAccumulator,DoubleAdder,LongAccumulator和LongAdder提供变量支持。它内部使用竞争减少技术,与原子变量相比,可提供巨大的吞吐量改进。
公共类DoubleAccumulator扩展Number工具实现可序列化
说明
public class DoubleAccumulator extends Number implements Serializable 用于一个或多个变量,这些变量一起维护使用提供的函数更新的运行中double值。
public class DoubleAdder extends Number implements Serializable 它用于一个或多个变量,这些变量一起保持初始为零的双和。
public class LongAccumulator extends Number implements Serializable 它用于一个或多个变量,这些变量一起维护使用提供的函数更新的运行时long值。
public class LongAdder extends Number implements Serializable 用于一个或多个变量,这些变量共同保持初始为零的长和。

java.util.concurrent.ForkJoinPool类中的新方法

该类添加了两个新方法getCommonPoolParallelism()和commonPool(),它们返回目标并行度公用池或公用池实例。
方法 说明
public static ForkJoinPool commonPool() 它返回公共池实例。
Public static int getCommonPoolParallelism() 它返回公共池的目标并行度。

新类java.util.concurrent.locks.StampedLock

添加了新类StampedLock,该类用于添加具有三种控制模式的基于功能的锁读/写访问(写,阅读和乐观阅读)。此类还支持有条件地在三种模式之间提供转换的方法。
说明
public class StampedLock extends Object implements Serializable 此类表示基于功能的锁,具有用于控制读/写访问的三种模式。

用于XML处理(JAXP)1.6的Java API增强

在Java 8中,添加了用于XML处理(JAXP)1.6的Java API。它需要使用由java.util.ServiceLoader定义的服务提供程序加载程序工具来从服务配置文件中加载服务。
这样做的理由是允许Java SE平台将来进行模块化。可以通过JAR文件以外的其他方式来部署服务提供商,也可以不使用服务配置文件来进行部署。

Java虚拟机增强功能

已加强了对invokespecial指令的验证,因此只能调用当前类或其直接超类中的实例初始化方法。

Java Mission Control 5.3包含在Java 8中

Java Mission Control(JMC)是一组高级工具,可进行高效,详细的数据分析并提供高级,不干扰Java的监视和管理。 JMC提供了一些常用分析领域的部分,例如代码性能,内存和延迟。
日语和简体中文的Babel语言包现在默认包含在JDK 8中的Java Mission Control中。

采用Unicode CLDR数据和java.locale.providers系统属性

Unicode联盟发布了通用语言环境数据存储库(CLDR)项目,以"支持世界上的语言,并拥有最大和最广泛的标准语言环境数据存储库。" CLDR正在成为语言环境数据的实际标准。 JDK 8版本将CLDR基于XML的语言环境数据并入,但默认情况下已禁用。
语言环境数据有四个不同的来源:
CLDR表示Unicode CLDR项目提供的语言环境数据。 HOST表示当前用户对基础操作系统设置的自定义。它仅适用于用户的默认语言环境,并且可自定义的设置可能会因操作系统而异,但主要支持日期,时间,数字和货币格式。 SPI表示在已安装的SPI提供程序中实现的对语言环境敏感的服务。 JRE表示与先前的JRE版本兼容的语言环境数据。
要选择所需的语言环境数据源,请使用java.locale.providers系统属性。以首选顺序列出数据源。例如: java.locale.providers = HOST,SPI,CLDR,JRE默认行为等效于以下设置: java.locale.providers = JRE,SPI

Java 8的新Calendar和Locale API

JDK 8包括两个新类,几个新方法以及一个现有静态方法的新返回值。
在java.util.spi包中添加了两个新的服务提供者抽象类。
说明
public abstract class CalendarDataProvider extends LocaleServiceProvider 这是服务提供商的抽象类,提供了与语言环境有关的Calendar参数。
public abstract class CalendarNameProvider extends LocaleServiceProvider 这是服务提供商的抽象类,它们提供Calendar字段值的本地化字符串表示形式(显示名称)。
静态方法现在可以识别编号系统的Locale.UNICODE_LOCALE_EXTENSION。
方法 说明
public static final DecimalFormatSymbols getInstance(Locale locale) 它用于获取指定语言环境的DecimalFormatSymbols实例。此方法提供对Java运行时本身支持的语言环境以及安装的DecimalFormatSymbolsProvider实现所支持的语言环境的DecimalFormatSymbols实例的访问。如果locale为null,则抛出NullPointerException。
在日历API中添加了新方法:
中定义
方法 说明
public boolean isSupportedLocale(Locale locale) 如果该语言环境服务提供商支持给定的语言环境,则返回true。给定的语言环境可能包含在确定支持时应考虑的扩展名。它在java.util.spi.LocaleServiceProvider类
public String getCalendarType() 它返回此日历的日历类型。日历类型由Unicode区域设置数据标记语言(LDML)规范定义。它在java.util.Calendar类中定义。
为Calendar.getDisplayName和Calendar.getDisplayNames方法添加了新的样式说明符,以确定日历名称的格式。

说明符 说明
public static final int SHORT_FORMAT 它是getDisplayName和getDisplayNames的样式说明符,指示用于格式的短名称。
public static final int LONG_FORMAT 它是getDisplayName和getDisplayNames的样式说明符,指示用于格式的长名称。
public static final int SHORT_STANDALONE 它是getDisplayName和getDisplayNames的样式说明符,用于指示独立使用的短名称,例如月份缩写作为日历标题。
public static final int LONG_STANDALONE 这是getDisplayName和getDisplayNames的样式说明符,用于指示独立使用的长名称,例如月份名称作为日历标题。
用于处理语言环境(可选)扩展的两种新的语言环境方法。
方法 说明
public boolean hasExtensions() 如果此语言环境具有任何扩展名,则返回true。
public Locale stripExtensions() 它返回此语言环境的副本,不带扩展名。如果此语言环境没有扩展名,则此语言环境将自行返回。
两个新的Locale.filter方法返回一个符合RFC 4647定义的指定条件的Locale实例列表:
方法 说明
public static List filter(List priorityList,Collection locales) 它使用RFC 4647中定义的过滤机制返回匹配的Locale实例的列表。当mode为Locale时,它等效于filter(List,Collection,FilteringMode)。模式。AUTOSELECT_FILTERING。
public static List filter(List priorityList,Collection locales, Locale.FilteringMode mode) 它使用RFC 4647中定义的过滤机制返回匹配的Locale实例的列表。
两个新的Locale.filterTags方法返回一个符合RFC 4647定义的指定条件的语言标签列表。
方法 说明
public static List filterTags(List priorityList, Collection tags) 它使用RFC 4647中定义的基本过滤机制返回匹配语言标签的列表。当模式为Locale.FilteringMode.AUTOSELECT_FILTERING时,这等效于filterTags(List,Collection,FilteringMode)。
public static List filterTags(List priorityList, Collection tags, Locale.FilteringMode mode) 它使用RFC 4647中定义的基本过滤机制返回匹配语言标签的列表。
两种新的查找方法使用RFC 4647中定义的查找机制返回最匹配的语言环境或语言标​​签。
方法 说明
public static Locale lookup(List priorityList, Collection locales) 它使用RFC 4647中定义的查找机制为最匹配的语言标签返回Locale实例。
Public static String lookupTag(List priorityList,Collection tags) 它使用RFC 4647中定义的查找机制返回最匹配的语言标记。

其他Java 8版本增强功能

JDK 8u5中的增强功能

1)显示安全提示的频率应用程序已减少。

JDK 8u11中的增强功能

1)Java控制面板的"高级"选项卡中提供了在安装或更新JRE时禁止赞助者报价的选项。
2)可以在JAR文件清单中包含Entry-Point属性,以将一个或多个类标识为RIA(富Internet应用程序)的有效入口点。

JDK 8u20中的增强功能

1)javafxpackager工具已重命名为javapackager。该工具已通过自包含应用程序捆绑程序的新参数进行了增强。
以下增强功能与java工具有关:
已添加与受限交易内存(RTM)相关的实验性JIT编译器选项。 添加了与字符串重复数据删除相关的几个选项。 添加了与高级加密标准(AES)内在函数相关的几个选项。 不推荐使用垃圾收集选项的组合。
2)已将垃圾收集优化指南添加到Java HotSpot虚拟机中。它描述了Java HotSpot VM附带的垃圾收集器,并帮助您确定哪个垃圾收集器可以最好地优化应用程序的性能,尤其是当它处理大量数据(数GB),具有许多线程并且具有高事务处理率时

JDK 8u31中的增强功能

1)在此版本中,SSLv3协议已从" Java控制面板"的"高级"选项中删除。

JDK 8u40中的增强功能

Java工具

1)已添加-XX: + CheckEndorsedAndExtDirs,因为-标准覆盖机制(JDK-8065675)和扩展机制(JDK-8065702)已弃用。该选项有助于识别这些机制的任何现有用法,并且在JDK 7u80和JDK 8u40中受支持。
2)Java Flight Recorder(JFR)提供了多种方法来解锁商业功能并在运行时启用JFR一个应用程序。
它在Java Mission Control中包括Java命令行选项,例如jcmd诊断命令和图形用户界面(GUI)控件。这种灵活性使您可以在启动时提供适当的选项,或者以后与JFR交互。
3)选项-XX: StartFlightRecording = parameter = value具有新参数dumponexit = {true | false},它指定当JVM以受控方式终止时是否应生成JFR数据的转储文件。
4)与"受限事务内存"(RTM)相关的选项不再具有实验性。这些选项包括-XX: RTMAbortRatio = abort_ratio,-XX: RTMRetryCount = number_of_retries,-XX: + UseRTMDeopt和-XX: + UseRTMLocking。
5)在Java 8中,应用程序类数据共享(AppCDS)已经介绍了。 AppCDS扩展了CDS(类数据共享),以允许将标准扩展目录中的类和应用程序类路径放置在共享档案中。
6)已添加新选项-XX: + ResourceManagement和-XX: ResourceManagementSampleInterval = value。
7)其他信息关于大页面已被添加。大页面(也称为大页面)是显着大于标准内存页面大小的内存页面。大页面优化了处理器平移后备缓冲区。 Linux选项-XX: + UseHugeTLBFS,-XX: + UseSHM和-XX: + UseTransparentHugePages已记录。
8)选项-XX: ObjectAlignmentInBytes = alignment已记录。

JJS工具

1)已添加选项--optimistic-types = [true | false]。它通过取消优化重新编译来启用或禁用乐观类型假设。
2)选项--language = [es5]已添加到jjs工具中。它指定了ECMAScript语言版本。

Javapackager工具

1)OS X捆绑程序提供了新参数。 mac.CFBundleVersion参数标识要使用的内部版本号。
2)mac.dmg.simple参数指示是否跳过了依赖于执行AppleScript代码的DMG定制步骤。

Jcmd工具

Jcmd工具用于与Java Flight Recorder(JFR)动态交互。您可以使用它来解锁商业功能,启用/开始/停止飞行记录并从系统获取各种状态消息。

Jstat工具

jstat工具已更新有关压缩类空间的信息,该信息是元空间的特殊部分。

虚拟机

可扩展本机内存跟踪Hotspot VM功能有助于诊断VM内存泄漏并在VM中没有内存泄漏时澄清用户。 Native Memory Tracker可以在大型系统上运行而无需自动关闭,也不会造成严重的性能影响,超出了小型程序可以接受的范围。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4