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

  

猜你喜欢

转载自www.cnblogs.com/lizhangyong/p/8903444.html