JDK 8 新特性学习(一) 概览
JAVA 8是一个重要的版本, 这篇文章总结了其中新增的特性和增强的地方。
- Java Programming Language
- Lambda表达式
Lambda表达式是一个新的语言特性。它能够让你把function当成方法的参数,把代码看成数据一样使用。Lambda表达式让你的单方法接口(也称为功能性接口)更加简洁 - Method reference 提供已有名字的method更加容易阅读的lambda表达方式
- 默认方法可以将新功能添加到库的接口,并确保与旧版本的这些接口编写的代码的二进制兼容性
- 重复注释使得可以将相同的注释类型多次应用于相同的声明或类型使用
- 对类型注解的支持,增强了通过静态分析工具发现错误的能力。原先只能在运行时发现的问题可以提前在编译的时候被排查出来。Java 8 本身虽然没有自带类型检测的框架,但可以通过使用 Checker Framework 这样的第三方工具,自动检查和确认软件的缺陷,提高生产效率。
- 增强类型推断。举的例子是:在8之前的很多地方是没有类型推断的,现在是已经可以了。
- 方法参数的反射. 可以获取具体parameter对象,然后获取name之类的.
- Lambda表达式
- 集合类
- 新增一个java.util.stream的包,提供流式的api来支持对集合元素的函数编程。 流程式的api整合到了集合类的api, 可以支持批量的集合操作, 像是次序或者并行map-reduce这样形式的转换。
- 为hashmap的key冲突提高性能
- 安全性方面
- 支持更强的基于密码的加密算法。
- 在客户端,TLS1.1 和 TLS1.2 被设为默认启动。并且可以通过新的系统属性包 jdk.tls.client.protocols 来对它进行配置。
- Keystore 的增强
- 支持安全的随机数发生器。
- JSSE(Java(TM) Secure Socket Extension)服务器端开始支持 SSL/TLS 服务器名字识别 SNI(Server Name Indication)扩展
- 安全性比较差的加密方法被默认禁用
- 国际化
- unicode增强,包括支持unicode 6.2
- 采用unicode CLDR Data和java.local.providers系统属性(其实不懂)
- 新的Calendar和Locale API
- 可以把自定义的resource设置成扩展resource
- 日期时间包
- 一个新的包可以提供比较强力的api(应该是joda-time)
- IO和NIO包
- 提供了基于Solaris的SelectorProvider接口实现。
- 减小jre/lib/charsets.jar包的大小
- 提高java.lang.String(byte[], *)这个构造函数和java.lang.String.getBytes()方法的性能
- java.lang包和java.util包
- 并行数组排序
- 标准的Base64加密解密
- 无符号算术支持
- JDBC
- jdbc-odbc的桥接功能已经移除
- jdbc4.2的新特性
- 网络
- 增加java.net.URLPermission
- 在java.net.HttpURLConnection中,如果安装了安全管理器,那么打开连接的时候回进行权限验证。
- 并发
- java.util.concurrent新增了class和interface
- java.util.concurrent.ConcurrentHashMap支持新的基于stream的api聚合和lambda表达式
- java.util.concurrent.atomic新增了一些类,支持可扩展更新的变量
- java.util.concurrent.ForkJoinPool新增了一些类,支持一个普通的线程池
- 新增java.util.concurrent.locks.StampedLock类,用来提供一个使用三种模型来控制读写的锁。