HelenLi的博客

温故而知新

Java SE 8.0 新增特性

Java SE 8.0 新增特性


Java SE 7.0于2011年7月28日发布,Java SE 8.0于2014年3月18日发布,二者属于Java平台标准版的不同版本,下面根据骨文官方网站
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html,2016
提供的内容,就以下几方面对它们之间的差别进行详细说明。

  • 程序语言
  • Collections
  • 安全性
  • JavaFX
  • 工具
  • 国际化
  • 并行控制
  • 其他变化

程序语言

与Java SE 7.0相比,Java SE 8.0在程序语言方面有以下七个改进:

  1. Java SE 8.0引入了Lambda表达式作为新的语言特性,它可为Java提供匿名函数类型,使得用户可以将函数作为一个方法的参数,或将代码作为数据,这种Lambda表达式能够使表达单一方法接口的实例更紧凑;
  2. 新增方法引用为已有名字的方法提供了一个易读的Lamda表达式;
  3. 引进默认的方法使得新的函数能够被添加到库接口且同时保证对旧版本接口代码的兼容性。由于Java SE 7.0的集合框架没有foreach方法,通常只能在JDK里给相关的接口添加新的方法及实现,对于已经发布的版本,无法在给接口添加新方法的同时不影响已有的实现。所以新增的默认方法解决了接口的修改与现有的实现不兼容的问题。
  4. 完善重复注释功能,即可以在同一申明类型(类,属性,或方法)中多次使用同一个注解,相比于于Java SE 7.0,Java SE 8.0的做法更适合常规的思维,可读性更强;
  5. 改进了类型注解,使其可以应用在任何地方,不仅仅是在声明处使用。且与可插入的类型系统配合使用,使代码的类型检查更加完善;
  6. 改进了泛型类型推断。Java SE 7.0在创建泛型实例时的类型推断是有限制的:只有构造器的参数化类型在上下文中被显著的声明,才能使用类型推断,否则不行。而Java SE 8.0支持通过方法上下文推断泛型目标类型,也支持在方法调用链路当中,泛型类型推断传递到最后一个方法;
  7. 新增方法参数反射。可以将方法参数的元信息存储到编译完的class文件中,使程序可以在运行时通过反射来获取参数的元信息。

Collections

Java SE 7.0和Java SE 8.0在Collections(集合)方面也有两点变化。

首先,在新的java.util.stream包里的类提供了一个Stream API来支持元素流的函数式操作,这个Stream API合成了Collecetions API。Java SE 8.0 中的 Stream 是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或大批量数据操作。Stream API 借助于同样新出现的 Lambda 表达式,极大地提高了编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错,但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。其次,新版平台还改进了有关键碰撞的hashmap。

安全性

Java SE 8.0默认包含客户端TLS1.2,且新的AccessController.doPrivileged使编码能够维护特权子集,不用阻止全部的堆的横断来检查许可,在加密算法上也更强,同时SSL/TLS的SNI扩展支持到JSSE服务器,支持AEAD算法,关键存储也加强了。其他安全性方面的改进还有:新增SHA-224消息整理;更好地支持大熵值的随机数生成;为X.509 certificates的配置撤回检查新增java.security.cert.PKIXRevocationChecker ;为Windows新增64位PKCS11。
在Kerberos5安全认证系统方面,Java SE 8.0新增了缓存类型,支持Kerberos5安全认证系统的协议转换和约束代表,并为GSS接口和Kerberos5机制提供无约束的简单认证和安全层(SASL)。
除此之外,新版还为多个主机名提供SASL服务,在Mac系统上为本地JGSS提供JNI桥,在SunJSSE供应商处提供更强的短暂DH密匙,支持JSSE偏好定制的服务端密码。

JavaFX

JavaFX主要致力于客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio、video、graphics、animation、3D等,同时采用现代化的css方式支持界面设计。同时又采用XUI方式以XML方式设计UI界面,达到显示与逻辑的分离。

在Java SE 8.0中用新的Modena主题来替换原来的Caspian主题,也可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。另外提供了3D图像处理API,包括Shape3D (Box、Cylinder、MeshView、Sphere子类)、SubScene、Material、PickResult、LightBase (AmbientLight 和PointLight子类)、ceneAntialiasing等,Camera类也得到了更新。
此外与旧版相比,Java SE 8.0从JavaDoc中可以找到更多信息,强化了富文本的支持,增加日期控件DatePicker、用于 CSS 结构的公共 API和TreeTableView。同时增强了WebView功能,新增了可视化工具JavaFX Scene Builder 2.0,加速JavaFX图形界面的开发。
另外值得一提的是新增的 ScheduledService类允许自动重启服务,且JavaFX 8对ARM平台也可用。

工具

Java SE 8.0主要在两大类工具上有变化——javac工具和javadoc工具,其主要变化如下:

  1. 增加了jss命令,用于调用 Nashorn engine ;
  2. java命令可以启动JavaFX applications ;
  3. jdeps命令行工具用于分析类文件 ;
  4. 针对javac tool增加了一些参数和功能 ;
  5. 针对javadoc tool增加了新的功能,如DocTree。

国际化

Java SE 8.0与国际更加接轨,其表现在:

  1. 针对统一码的增强,包括支持Unicode6.2.0 ;
  2. 采用统一码CLDR数据和java.locale.providers系统属性;
  3. 新的日历和地点接口;
  4. 能够安装自定义资源包进行扩展。

并行控制

在新增Stream与lambda的基础上,在java.util.concurrent.ConcurrentHashMap中加入了一些新方法来支持聚集操作。同时也在java.util.concurrent.ForkJoinPool类中加入了一些新方法来支持共有资源池。
新增的java.util.concurrent.locks.StampedLock类提供一直基于容量的锁,这种锁有三个模型来控制读写操作,被认为是不太有名的java.util.concurrent.locks.ReadWriteLock类的替代者。
在java.util.concurrent.atomic包中还增加了DoubleAccumulator类、DoubleAdder类、LongAccumulator类和LongAdder类。

其他变化

除以上列举的几大类变化之外,Java SE 8.0与Java SE 7.0还存在很多其他的小变化,以下列举其中一部分。

  1. 在封装文件上,Java SE 8.0包含了预先定义的Java SE平台的子集,使不需要整个平台的应用可以被部署,并在小的设备上运行;
  2. JDK 8包含了Java任务控制5.3;
  3. 丰富了网络应用内容;
  4. 在输入/输出方面也有所改进;
  5. java.lang and java.util Packages增加平行数组分类和标准编解码,支持无符号算法;
  6. 取消了JDBC-ODBC 桥,引进了一些新的JDBC性质;
  7. 在网络方面新增java.net.URLPermission,
    建立安全管理时,调用java.net.HttpURLConnection来打开链接许可。
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012928324/article/details/60975827
个人分类: Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭