Java8 教程

Java8 的新特性

Java平台,标准版 8 是一个主要功能版本。本文档概述了 Java SE 8 和 JDK 8(Oracle Java SE 8 的实现)中的功能和增强特性。 单击组件名称可获得有关该组件增强特性的更详细说明。

Java 编程语言

  • 本版本中引入了新的语言特性 —— Lambda 表达式。Lambda 表达式使您能够将功能视为方法参数,或将代码视为数据。通过 Lambda 表达式,您可以更简洁地表达单方法接口(称为功能接口)的实例。

  • 方法引用为已有名称的方法提供了易于阅读的 lambda 表达式。

  • 通过默认方法,可以在库的接口中添加新功能,并确保与为旧版本接口编写的代码二进制兼容。

  • 重复注解提供了在同一声明或类型使用中多次应用同一注解类型的能力。

  • 类型注解提供了在任何使用类型的地方应用注解的功能,而不仅仅是在声明中应用注解。该功能与可插拔类型系统一起使用,可以改进代码的类型检查。

  • 改进类型推断

  • 方法参数反射。

集合

  • 新的 java.util.stream 包中的类提供了一个 Stream API,以支持对元素流进行函数式操作。流应用程序接口集成到了集合应用程序接口(Collections API)中,从而实现了对集合的批量操作,如顺序或并行 map-reduce 转换。

  • 提高存在 Key 碰撞的哈希映射的性能

Compact Profiles 包含 Java SE 平台的预定义子集,可在小型设备上部署和运行不需要整个平台的应用程序。

安全

  • 默认启用客户端 TLS 1.2

  • AccessController.doPrivileged 的新变体可使代码断言其权限的子集,而不会阻止全面遍历堆栈以检查其他权限

  • 更强的密码加密算法

  • 在 JSSE 服务器中支持 SSL/TLS 服务器名称指示 (SNI) 扩展

  • 支持 AEAD 算法: 增强 SunJCE 提供程序,以支持 AES/GCM/NoPadding 密码实现和 GCM 算法参数。此外,还增强了 SunJSSE 提供程序,以支持基于 AEAD 模式的密码套件。请参见 Oracle 提供程序文档,JEP 115。

  • 增强了密钥存储功能,包括新的域密钥存储类型 java.security.DomainLoadStoreParameter,以及 keytool 实用程序的新命令选项 -importpassword

  • SHA-224 消息摘要

  • 增强了对 NSA B 套加密技术的支持

  • 更好地支持高熵随机数生成

  • 新增用于配置 X.509 证书撤销检查的 java.security.cert.PKIXRevocationChecker 类

  • 适用于 Windows 的 64 位 PKCS11

  • Kerberos 5 Replay 缓存中的新 rcache 类型

  • 支持 Kerberos 5 协议转换和受限委托

  • 默认禁用 Kerberos 5 弱加密类型

  • 针对 GSS-API/Kerberos 5 机制的无约束 SASL

  • 为多个主机名提供 SASL 服务

  • 在 Mac OS X 上实现与本地 JGSS 的 JNI 桥接

  • 在 SunJSSE 提供商中支持强度更高的短暂 DH 密钥

  • 在 JSSE 中支持服务器端密码套件偏好自定义

JavaFX

  • 本版本采用了新的 Modena 主题。有关详细信息,请参见 fxexperience.com 上的博客。

  • 新的 SwingNode 类使开发人员能够将 Swing 内容嵌入 JavaFX 应用程序。请参见 SwingNode javadoc 和在 JavaFX 应用程序中嵌入 Swing 内容

  • 新的 UI 控件包括 DatePickerTreeTableView 控件。

  • javafx.print 包提供了 JavaFX 打印 API 的公共类。有关详细信息,请参阅 javadoc。

  • 三维图形功能现在包括三维形状、摄像头、灯光、子场景、材质、拾取和抗锯齿。JavaFX 3D 图形库中添加了新的 Shape3D(方框、圆柱、MeshView 和球体子类)、SubScene、Material、PickResult、LightBase(AmbientLight 和 PointLight 子类)和 SceneAntialiasing API 类。本版本还更新了 Camera API 类。请参阅 javafx.scene.shape.Shape3D、javafx.scene.SubScene、javafx.scene.paint.Material、javafx.scene.input.PickResult、javafx.scene.SceneAntialiasing 的相应类 javadoc,以及 JavaFX 三维图形入门文档。

  • WebView 类提供了新功能和改进。查看 HTML5 支持的功能,了解有关 Web Sockets、Web Worker 和 Web 字体等 HTML5 其他功能的更多信息。

  • 增强了文本支持,包括控件中的双向文本和复杂文本脚本(如泰语和印地语),以及文本节点中的多行、多风格文本。

  • 本版本新增了对高分辨率显示器的支持。

  • CSS Styleable* 类已成为公共 API。有关详细信息,请参阅 javafx.css javadoc。

  • 新的 ScheduledService 类允许自动重启服务。

  • JavaFX 现在可用于 ARM 平台。JDK for ARM 包括 JavaFX 的基础、图形和控件组件。

Java 工具

  • jjs 命令用于调用 Nashorn 引擎。

  • java 命令可启动 JavaFX 应用程序。

  • 重新制作了 java man 页面。

  • 提供了用于分析类文件的 jdeps 命令行工具。

  • Java 管理扩展 (JMX) 提供对诊断命令的远程访问。

  • jarsigner 工具有一个选项,用于请求时间戳管理机构 (TSA) 提供已签名的时间戳。

  • javac 工具:

    •  javac 命令的 -parameters 选项可用于存储正式参数名,并使 Reflection API 能够检索正式参数名。

    •  javac 命令现在可以正确执行《Java 语言规范》(JLS)第 15.21 节中的相等运算符类型规则。

    •  javac 工具现在支持检查 javadoc 注释的内容是否存在问题,这些问题可能导致运行 javadoc 时生成的文件中出现各种问题,如无效的 HTML 或可访问性问题。该功能通过新的 -Xdoclint 选项启用。有关详细信息,请参阅运行 "javac -X "后的输出结果。该功能在 javadoc 工具中也有提供,默认情况下已启用。

    • javac 工具现在可以根据需要生成本地头文件。这样就不需要在构建管道中作为单独步骤运行 javah 工具了。使用新的 -h 选项可在 javac 中启用该功能,该选项用于指定编写头文件的目录。只要类中有本地方法或使用 java.lang.annotation.Native 类型的新注解注释的常量字段,就会生成头文件。

  • Javadoc 工具:

    • javadoc 工具支持新的 DocTree API,使您能够以抽象语法树的形式遍历 Javadoc 注

    • javadoc 工具支持新的 Javadoc Access API,使您能够直接从 Java 应用程序调用 Javadoc 工具,而无需执行新进程。有关详细信息,请参阅 javadoc 新功能页面。

    • javadoc 工具现在支持检查 javadoc 注释的内容,以发现运行 javadoc 时生成的文件中可能导致各种问题(如无效 HTML 或可访问性问题)的问题。该功能默认已启用,也可通过新的 -Xdoclint 选项进行控制。有关详细信息,请参阅运行 "javadoc -X "后的输出结果。该功能在 javac 工具中也有提供,但默认情况下并未启用。

国际化

  • 增强了 Unicode 功能,包括支持 Unicode 6.2.0

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

  • 新的 Calend 和 Locale API

  • 可将自定义资源包作为扩展程序安装

部署

  • 对于沙盒小程序和 Java Web Start 应用程序,现在使用 URLPermission 允许连接回启动它们的服务器。不再授予 SocketPermission。

  • 在所有安全级别下,主 JAR 文件的 JAR 文件清单中都需要 Permissions 属性。

Date-Time Package - 是一套提供综合日期-时间模型的新软件包。

脚本

  • Rhino Javascript 引擎已被 Nashorn Javascript 引擎取代

Pack200

  • Pack200 支持由 JSR 292 引入的常量池条目和新字节码

  • JDK8 支持 JSR-292、JSR-308 和 JSR-335 规定的类文件变更

IO 和 NIO

  • 基于 Solaris 事件端口机制的 Solaris 新 SelectorProvider 实现。使用时,请将系统属性 java.nio.channels.spi.Selector 设置为 sun.nio.ch.EventPortSelectorProvider 值。

  • 减小 <JDK_HOME>/jre/lib/charsets.jar 文件的大小

  • 提高了 java.lang.String(byte[], *) 构造函数和 java.lang.String.getBytes() 方法的性能。

java.lang 和 java.util 包

  • 并行数组排序

  • 标准编码和解码 Base64

  • 支持无符号算法

JDBC

  • 删除了 JDBC-ODBC 桥。

  • JDBC 4.2 引入了新功能。

Java DB

  • JDK 8 包括 Java DB 10.10。

网络

  • 添加了 java.net.URLPermission 类。

  • 在 java.net.HttpURLConnection 类中,如果安装了安全管理器,则请求打开连接的调用需要权限。

并发

  • 在 java.util.concurrent 包中添加了类和接口。

  • 在 java.util.concurrent.ConcurrentHashMap 类中添加了方法,以支持基于新添加的流设施和 lambda 表达式的聚合操作。

  • 在 java.util.concurrent.atomic 包中添加了类,以支持可扩展的可更新变量。

  • 在 java.util.concurrent.ForkJoinPool 类中添加了方法,以支持公共池。

  • 添加了 java.util.concurrent.locks.StampedLock 类,提供基于能力的锁,有三种模式可控制读/写访问。

HotSpot

  • 为使用高级加密标准(AES)添加了硬件内核。使用 UseAES 和 UseAESIntrinsics 标志,可以为英特尔硬件启用基于硬件的 AES 内核。硬件必须是 2010 或更新的 Westmere 硬件。注意:AES 内核仅受服务器虚拟机支持。

例如,要启用硬件 AES,请使用以下标记: -XX:+UseAES -XX:+UseAESIntrinsics

要禁用硬件 AES,请使用以下标记: -XX:-UseAES -XX:-UseAESIntrinsics

  • 删除 PermGen。

  • 通过方法调用的字节码指令支持 Java 编程语言中的默认方法。

Java Mission Control 5.3 发行说明

  • JDK 8 包括 Java Mission Control 5.3。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号