JDK8中新增的功能(七大类功能更新与改进)
Java 平台标准版本8是一个重大的特性发布。本文总结了JavaSE8和JDK8中的特性和增强,及Oracle对JavaSE8的实现。
Java编程语言
Lambda表达式,一个新的语言特性,已经引入这个版本中。它们让你可以把函数看做方法的参数,或把代码看做数据。Lambda表达式允许更简洁地表示单方法接口(称为函数式接口)的实例。
方法引用为已经拥有名字的方法提供了易于阅读的lambda表达式。
默认方法允许将新函数添加到类库的接口中,并为这些接口旧版本编写的代码保证二进制兼容性。
重复注解提供了将一个注解类型多次用到相同的声明或类型使用的能力。
类型注解提供了不仅仅在声明上,还可以在任何使用了类型的地方应用注解的能力。与可扩展的类型系统一起使用时,这个特性可以改进你的代码的类型检查。
改进类型推断
方法参数反射
集合
新推出的java.util.stream包中的类提供了一个Stream API,以支持在元素流中进行函数式风格的操作。Stream API 集成到了Collections API中,它支持对集合批量操作,例如串行或并行 map-reduce 转换。
对Key冲突的HashMap性能优化
简化配置文件包括Java SE 平台和预定义子集,使不需要整个平台的应用程序能在小型设备上部署和运行。
安全
客户端默认使用 TLS 1.2
AccessController.doPrivileged 的新变体使代码能断言其权限的子集,为了检查其他权限没有阻止完全遍历堆栈
更强的基于密码的加密算法
在JSSE服务器中支持SSL/TLS 服务器名称指示(SNI)扩展
对AEAD算法的支持:SunJCE提供程序被增强了以支持AES/GCM/NoPadding密码实现以及GCM算法参数。SunJSSE提供程序被增强支持基于AEAD模式的密码套件。见 Oracle文档,JEP 115。
KeyStore增强,包括新的域KeyStore类型
java.security.DomainLoadStoreParameter
,以及keytool实用程序新的命令参数 -importpassword。
SHA-224 消息摘要
增强对NSA套件B加密支持
更好的支持高熵随机数生成
为了配置取消X.509证书检查,新增了
java.security.cert.PKIXRevocationChecke
类64位 Windows PKCS11
Kerberos认证协议5 重放缓存中的新rcache类型
支持Kerberos5协议转换和约束委托
默认禁用Kerberos5弱加密类型
GSS-API/Kerberos5机构解绑SASL
用于多主机名的SASL服务
JNI桥接到Mac OS X上的本地JGSS
在SunJSSE提供程序中支持更强强度临时DH 密钥
在JSSE中支持服务端密码套件偏好自定义
JavaFX
新的深紫色主题在这次发布中已经实现了。更多信息,参阅fxexperience.com博客。
新的SwingNode类允许开发者将Swing内容嵌入到JavaFX应用中。参阅SwingNode Java文档和在JavaFX程序中嵌入Swing内容。
新添加的UI控件包括DatePicker(日期选择期)和TreeTableView(树表视图)控件。
javafx.print包为JavaFX 打印 API提供了公共类,更多信息参阅Java文档。
3D图形特性现在包括3D形状,相机,灯光,子场景,材质,拾取和抗锯齿。Shape3D(Box、Cylinder、MeshView和Sphere子类)、SubScene、Material、PickResult、LightBase(AmbientLight(环境光)和PointLight(点光源)子类)和SceneAntialiasing(场景抗锯齿) API类已经添加到JavaFX 3D图形库。Camera API类也在这次发布中进行了更新。参阅javafx.scene.shape.Shape3D, javafx.scene.SubScene, javafx.scene.paint.Material, javafx.scene.input.PickResult, javafx.scene.SceneAntialiasing对应类的Java文档,和JavaFX 3D图形新手入门文档。
WebView类提供了新功能和改进。查看HTML5支持的特性,以了解关于附加的HTML5特性的更多信息包括Web Sockets, Web Workers和Web字体。
增强文本支持包括双向文本和复杂文本脚本,例如控件中有Thai和Bindi,文本节点中有多行、多样式文本。
这次发布增加了对Hi-DPI显示器的支持
CSS的Styleable*类成为公共API,参阅javafx.cssJava文档已了解更多信息。
新添加的ScheduleService类允许自动重启服务。
JavaFX现在可用于ARM平台。面向ARM的JDK包括JavaFX基础、图形和控件组件。
工具
已经提供jjs命令来调用Nashorn(一个js引擎)引擎。
java 命令启动JavaFX应用程序。
java 手册页已经重做
提供了jdeps命令行工具用来分析类文件
Java管理扩展(JMX)提供对诊断命令的远程访问
jarsigner工具有一个用来从一个时间戳机构(TSA)请求一个签名时间戳的选项
javac 工具
javac命令的 -parameters 选项可以用于存储正式的参数名,并使反射API能检索正式参数名。
在JLS(Java语言规范第15.21节)中相等操作符的类型规则现在可以正确地被javac命令执行。
javac工具现在已经支持检查javadoc注释的内容,以防止运行javadoc时生成的文件出现各种问题,例如HTML无效或可访问性问题。这个特性是通过新的-Xdoclint选项启用的。更多详情,参阅运行 javac -X的输出。这个特性在javadoc 工具里也是可用的,并且是默认启用。
javac 工具现在提供了根据需要成本地“头”的能力。这样就不需要运行javah工具作为独立步骤在构建管线中。使用javac的新选项-h就可以启用这个特性。该选项指定头文件应该写入的目录。任何拥有任意本地方法或使用了新的java.lang.annotation.Native类型注解标注的常量字段的类将会生成头文件。
javadoc 工具
javadoc工具支持新DocTree API ,让你将 javadoc 注释作为抽象语法树遍历。
javadoc 工具支持新的Javadoc 访问 API ,这使你可以从Java应用中直接调用 javadoc工具,无需执行一个新进程。参阅javadoc新特性页面获取更多信息。
javadoc工具现在支持检查javadoc注释内容中可能导致各种问题的问题,例如在javadoc运行时生成文件中出现无效的HTML或可见性问题。这个特性默认启用,并且也能被新的-Xdoclint选项控制。对于更多细节,参阅运行javadoc -X命令的输出。这个特性在javac tool也可以使用的,虽然javac tool没有默认启用。
国际化
Unicode增强,支持包括Unicode 6.2.0
采用Unicode CLDR数据和java.locale.provider系统属性
新日历和本地化 API。
安装自定义资源包作为扩展的能力
部署
对于沙箱小程序和Java Web Start应用程序,现在使用URLPermission来允许与启动它们的服务器建立连接。SocketPermission不再被允许。
在所有安全等级下,主JAR文件的JAR文件清单中必须包含Permissions属性。
日期时间包
一组新的包,提供全面的日期时间模型。
脚本
Rhino(犀牛) javascript引擎已经替换为Nashorn(犀牛战车) javasript引擎
Pack200
由JSR292引入的常量池条目和新字节码的Pack200支持
JDK8支持由JSR292、JSR308和JSR335规定的类文件变更
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桥接已经被移除
JDBC4.2引入新特性
JavaDB
JDK8包括JavaDB 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类,用以提供基于能力的3种模式的锁,控制读写访问。
HotSpot
添加了硬件内嵌函数以使用高级加密标准(AES)。可以使用UseAES和UseAESIntrinsices标志,用以启用针对英特尔硬件的基于硬件的AES内嵌函数。硬件必须2010年或之后的Westmere硬件。注意:AES内嵌函数仅受服务器虚拟机支持。案例,启用硬件AES,使用以下标志:-XX:+UseAES -XX:+UseAESIntrinsics;禁用硬件AES使用如下标志:-XX:-UseAES -XX:-UseAESIntrinsics。
移除永久区
java编程语言中的默认方法,由方法调用的字节码指令支持。
Java调度中心5.3发行说明
JDK8包含了 Java调度中心 5.3
译者:cyber御风
内容首发微信公众号:cyber御风
原文地址:https://www.oracle.com/java/technologies/javase/8-whats-new.html