Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等。
Java 8 新特性 - 图1

新特性

Java8 新增了非常多的特性,我们主要讨论以下几个:

  • Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
  • 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  • 接口的默认方法与静态方法 − 默认方法就是一个在接口里面有了一个实现的方法。
  • 重复注解 - 相同的注解在同一地方也可以声明多次。
  • 扩展注解的支持 - 几乎可以为任何东西添加注解。
  • Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
  • Date/Time API (JSR 310) − 加强对日期与时间的处理。
  • Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
  • JavaScript 引擎 Nashorn − Java 8 提供了一个新的 Nashorn javascript 引擎,它允许我们在 JVM 上运行特定的 javascript 应用。
  • Base64 - Base64 编码成为了 Java 类库的标准。Base64 类同时还提供了对 URL、MIME 友好的编码器与解码器。

除了这十大新特性之外,还有另外的一些新特性:

  • 更好的类型推测机制:Java 8在类型推测方面有了很大的提高,这就使代码更整洁,不需要太多的强制类型转换了。
  • 编译器优化:Java 8将方法的参数名加入了字节码中,这样在运行时通过反射就能获取到参数名,只需要在编译时使用-parameters参数。
  • 并行(parallel)数组:支持对数组进行并行处理,主要是parallelSort()方法,它可以在多核机器上极大提高数组排序的速度。
  • 并发(Concurrency):在新增Stream机制与Lambda的基础之上,加入了一些新方法来支持聚集操作。
  • Nashorn引擎jjs:基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。
  • 类依赖分析器jdeps:可以显示Java类的包级别或类级别的依赖。
  • JVM的PermGen空间被移除:取代它的是Metaspace(JEP 122)。

更多的新特性可以参阅官网:What’s New in JDK 8

编程风格

Java8 希望有自己的编程风格,并与 Java7 区别开,以下实例展示了 Java7 和 Java8 的编程格式:

  1. public class Java8Tester {
  2. public static void main(String args[]){
  3. List<String> names1 = new ArrayList<String>();
  4. names1.add("Google ");
  5. names1.add("Runoob ");
  6. names1.add("Taobao ");
  7. names1.add("Baidu ");
  8. names1.add("Sina ");
  9. List<String> names2 = new ArrayList<String>();
  10. names2.add("Google ");
  11. names2.add("Runoob ");
  12. names2.add("Taobao ");
  13. names2.add("Baidu ");
  14. names2.add("Sina ");
  15. Java8Tester tester = new Java8Tester();
  16. System.out.println("使用 Java 7 语法: ");
  17. tester.sortUsingJava7(names1);
  18. System.out.println(names1);
  19. System.out.println("使用 Java 8 语法: ");
  20. tester.sortUsingJava8(names2);
  21. System.out.println(names2);
  22. }
  23. // 使用 java 7 排序
  24. private void sortUsingJava7(List<String> names){
  25. Collections.sort(names, new Comparator<String>() {
  26. @Override
  27. public int compare(String s1, String s2) {
  28. return s1.compareTo(s2);
  29. }
  30. });
  31. }
  32. // 使用 java 8 排序
  33. private void sortUsingJava8(List<String> names){
  34. Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
  35. }
  36. }

参考

https://www.runoob.com/java/java8-new-features.html
https://www.cnblogs.com/pkufork/p/java_8.html