Java8新特性

接口的默认方法和静态方法

接口中允许有默认方法和静态方法

默认方法特点:

  • 所有的实现类都会自动继承接口中定义的默认方法

  • 接口中的默认方法可以被实现类重写

  • 在被调用时,实现类重写后的方法优先于默认方法

  • 和1.8之前一样,在接口中仍然不允许定义普通的实现方法,接口仍然会保持除这些新特性外的所有原有特性

静态方法特点:

  • 只能是静态方法所属的接口来调用(即使是子接口或者实现类都不行)

  • 必须有方法体,即使方法体中没有具体实现;区别于上面的普通方法必须不能有方法体

  • 子接口或者实现类不会继承接口中的静态方法。static不能和default同时使用在一个方法上

函数式接口

函数式接口的特点:

  • 有且仅有一个抽象方法
  • 允许定义默认方法
  • 允许定义静态方法
  • 允许定义java.lang.Object中的public方法
  • 该注解不是必须的,如果一个满足符合函数式接口定义,它会默认转换成函数式接口,加不加@FunctionalInterface都可以。但是,加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionalInterface,那么编译器会报错

Lambda表达式

使用前提:

  • 接口中有且仅有一个抽象方法

使用规则:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

  • 可选的返回关键字:如果主体只有一个表达式返回值,则编译器会自动返回值。

方法引用,构造器引用等

方法引用等是lambda表达式的另一种表现形式,其实也就是对lambda表达式的进一步简化

方法引用

方法引用前提:

1. 方法引用所引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致
2. 方法引用所引用的方法返回值要和函数式接口中的抽象方法的返回值一致

方法引用一般有三种格式:

  1. 实例对象名::实例方法名
  2. 类名::静态方法名
  3. 类名::实例方法名

备注:

1.当lambda表达式参数列表为两个参数,第一个参数为方法的调用者,第二个参数为方法的参数,那么可以使用类名::实例方法名

构造器引用

构造器引用前提:

构造器参数列表要与接口中抽象方法的参数列表一致

构造器引用的格式:

类名::new

类中存在多个构造器时,会用哪个构造器创建实例呢?

答: 使用与函数式接口中抽象方法参数列表对应的构造器创建实例

数组引用

数组引用和构造器引用相似

数组引用格式:

类型[]::new

参考链接:
https://juejin.im/post/6844903600301293581
https://blog.csdn.net/xinghuo0007/article/details/78607166

posted @ 2020-06-05 16:38  幻竹  阅读(173)  评论(0)    收藏  举报