java 8 新特性的概要

来源:互联网 发布:软件系统调试 编辑:程序博客网 时间:2024/05/16 11:15
最近工作中用到了java 8的新版本,在使用的过程中体验到了java 8的一些新特性,网上关于这些有很多的博客介绍,我这里也不多细说,大概总结一下这些特性,然后在实战中体验这些特性带来的一些新的改变。

一、要点介绍:
1. 接口的默认方法
2. Lambda 表达式
3. 函数式接口
4. 方法与构造函数引用
5. Lambda 作用域
6. 访问局部变量
7. 访问对象字段与静态变量
8. 访问接口的默认方法
9. Annotation 注解
10. java 8定义的函数式接口
11. Date API

二、理论说明

  1. 接口的默认方法
    Java 8可以让我们在接口添加非抽象方法的实现,只需要给该方法添加default关键字即可,这个特征又叫做扩展方法。
    在java 8以前的版本,java的语法只允许在接口添加抽象方法,如果要添加实现,必须让具体实现类实现该接口。
  2. Lambda 表达式
    Lambda 表达式是Java8的最大的特点,并蕴含着函数式编程的风格,大致语法:parameter -> expression body,可以简单的理解,箭头前是要传入的函数参数param,箭头后面是要return的返回值(根据参数写成的一个表达式,计算后得出值返回),Lambda 表达式在某些情况下可以大大的简化代码。
  3. 函数式接口
    在java 8中,lambda表达式都对应的是接口类型,“函数式接口”则表示仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法,当然根据java 8的新特性,我们可以往这个接口里面添加带default关键字的默认方法,为了确保我们声明的接口是函数式接口,我们可以往这个接口增加注解@FunctionalInterface ,以表示它遵循函数式接口的规范,加上这个注解后,如果该接口出现超过一个的抽象方法时,编译器就会报错,函数式接口的设计其实也是为lambda表达式服务的。
  4. 方法与构造函数引用
    Java 8 可以使用 :: 关键字来引用方法或者构造函数,比如说有一个类是Test类,我们利用新特性去创建一个对象就这样写Test test=Test :: new,一般调用构造函数都用类名 :: new的方式调用该类的构造函数;调用方法则是用该类的对象名 :: 方法名,比如Test类有一个count方法,则调用就这样写 test :: count就可以调用该方法了,还有一个经典的写法就是我们的输出语句System.out :: println,这写法跟System.out.println的实现效果是一样的,但还有一些细微的区别在后面的实战中去体会吧。
  5. Lambda 作用域
    Lambda表达式可以直接访问外层的带final的局部变量,或者实例的字段以及静态变量
  6. 访问对象字段与静态变量
    lambda内部对于实例的字段以及静态变量是即可读又可写
  7. 访问接口的默认方法
    以下都是java 8的函数式接口,前面第3段有说明,函数式接口的特征是仅仅只带一个抽象函数,可以带几个有default关键字的默认函数。这些接口有Predicate接口、Function 接口、Supplier 接口、Consumer 接口、Comparator 接口、Optional 接口、Stream 接口、Filter 过滤、Sort 排序、Map 映射、Match 匹配、Count 计数、Reduce 归约、并行Streams、Map。
  8. Date API
    Java 8 在包java.time下包含了一组全新的时间日期API,主要包含了Clock 时钟、Timezones 时区、LocalTime 本地时间、LocalDateTime 本地日期时间
  9. Annotation 注解
    在Java 8中支持多重注解,相同的注解可以在同一个地方重复标注多次。
  10. java 8定义的函数式接口

    Predicate<T>——接收T对象并返回booleanConsumer<T>——接收T对象,不返回值Function<T, R>——接收T对象,返回R对象Supplier<T>——提供T对象(例如工厂),不接收值UnaryOperator<T>——接收T对象,返回T对象BinaryOperator<T>——接收两个T对象,返回T对象
0 0