Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等。
新特性
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 的编程格式:
public class Java8Tester {
public static void main(String args[]){
List<String> names1 = new ArrayList<String>();
names1.add("Google ");
names1.add("Runoob ");
names1.add("Taobao ");
names1.add("Baidu ");
names1.add("Sina ");
List<String> names2 = new ArrayList<String>();
names2.add("Google ");
names2.add("Runoob ");
names2.add("Taobao ");
names2.add("Baidu ");
names2.add("Sina ");
Java8Tester tester = new Java8Tester();
System.out.println("使用 Java 7 语法: ");
tester.sortUsingJava7(names1);
System.out.println(names1);
System.out.println("使用 Java 8 语法: ");
tester.sortUsingJava8(names2);
System.out.println(names2);
}
// 使用 java 7 排序
private void sortUsingJava7(List<String> names){
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}
// 使用 java 8 排序
private void sortUsingJava8(List<String> names){
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
}
参考
https://www.runoob.com/java/java8-new-features.html
https://www.cnblogs.com/pkufork/p/java_8.html