JDK8的新特性
Posted 奔跑在梦想的道路上
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK8的新特性相关的知识,希望对你有一定的参考价值。
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 javascript 引擎,新的日期 API,新的Stream API 等。
应该说,相对于Java7,Java8 新增了很多特性,我们主要讨论以下几个:
1.Lambda表达式。
Lambda 表达式,也可以称为闭包,它允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。
package com.itszt.test2; import java.util.ArrayList; import java.util.List; /** * JDK8的新特性 */ public class Test { //测试数据 public static List<Integer> list = new ArrayList<>(); public static void main(String[] args) { int[] intArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (Integer i : intArr) { list.add(i); } Test test = new Test(); //测试Lambda表达式 test.testLambda(list); } public void testLambda(List list) { list.forEach(System.out::println); list.forEach(e -> System.out.println("方式二:" + e)); } }
2.方法引用。
方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
方法引用使用一对冒号 :: 。
比如,上述代码中就使用了方法引用。再比如:
public void testMethodReference() { //构造器引用。语法是Class::new,或者更一般的Class< T >::new, // 要求构造器方法是没有参数 final Car car = Car.create(Car::new); final List<Car> cars = Arrays.asList(car); //静态方法引用。语法是Class::static_method,要求接受一个Class类型的参数; cars.forEach(Car::collide); //任意对象的方法引用。它的语法是Class::method。无参,所有元素调用; cars.forEach(Car::repair); //特定对象的方法引用,它的语法是instance::method。有参,在某个对象上调用方法,将列表元素作为参数传入; final Car police = Car.create(Car::new); cars.forEach(police::follow); } public static class Car { public static Car create(final Supplier<Car> supplier) { return supplier.get(); } public static void collide(final Car car) { System.out.println("静态方法引用 " + car.toString()); } public void repair() { System.out.println("任意对象的方法引用 " + this.toString()); } public void follow(final Car car) { System.out.println("特定对象的方法引用 " + car.toString()); } }
3.函数式接口。
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为lambda表达式。
函数式接口可以现有的函数友好地支持 lambda。
JDK 1.8之前已有的函数式接口:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
JDK 1.8 新增加的函数接口:
- java.util.function
以上是关于JDK8的新特性的主要内容,如果未能解决你的问题,请参考以下文章