Java8的新特性
第一种是默认方法:在Java 8中,可以通过使用default关键字来添加默认的方法实现。 接口的实现类可以直接使用这些默认的方法,同时还可以重写默认的方法,这不是强制性的重写。
Java 8接口引入的第二种方法是静态方法。 这一点与类中的静态方法相似,可以在接口中使用static关键字定义静态方法。如果我们要调用接口定义的静态方法,只需使用接口名就可以访问这些静态方法。比如:
![](https://images2015.cnblogs.com/blog/37237/201511/37237-20151127224956702-11439368.png)
![](https://images2015.cnblogs.com/blog/37237/201511/37237-20151127225109093-1083866941.png)
从lambda表达式的一般语法可以看出来,还是挺符合上面给出的非精确版本的定义–“一段带有输入参数的可执行语句块”。
上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版。
1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:
2. 当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:
3. 当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为:
三、java.util.Optional类
Java 8在java.util包中新增了Optional类,Optional类是一个可以包含或不可以包含非空值的容器对象。
每一个Java项目,最主要的重复语句就是检查空指针异常NullPointerException。我们使用任何对象,都需要检查此对象是否为空,如果对象不为空我们才能执行处理语句。 Optional类像是一个容器,它保存一个类型为的值或是null值。通过使用Optional类的isPresent()方法,我们可以检查指定的对象是否为空
![](https://images2015.cnblogs.com/blog/37237/201511/37237-20151127225434046-1481175994.png)
四、日期时间API
Java 8使用了JSR 310规范,新增了java.time包。 在Java 8版之前,如果我们想格式化日期,必须使用SimpleDateFormat类,用它格式化输入的日期类。而Java 8引入了以下的新日期时间类:
LocalTime,LocalDate ,LocalDateTime ,OffsetDate ,OffsetTime ,OffsetDateTime
五、并行数组排序
在Java 7中已经有了Arrays.sort()方法可对对象进行排序,
而在Java 8中,引入了新的并行排序,它比前者的排序速度更快,且遵循了Java 7引入的Fork/Join框架,可以把排序任务分配给线程池中可用的多个线程。 Java 8在java.util.Arrays类中新增了并行排序功能,能够更充分地利用多线程机制。
JDK各版本引入的新特性可以参见:http://www.cnblogs.com/langtianya/p/3757993.html