Java8新特性




注:JDK 8中,对接口的设计做了非常重要的变更:
1.使接口支持“默认方法”(Default Method),即可以在接口上声明和实现方法(需要声明为default),这样可以简化类的多个接口扩展的复杂度,潜在淡化JAVA有关多继承的缺陷,此外默认方法在lamda表达式使用方面非常便利。 此后,我们可能需要改变有些认知,比如“接口中不能有方法实现”等。
默认方法可以被接口的实现者直接调用,也可以被继承它的子接口或者实现类重写,甚至实现接口的抽象类可以将default方法变更为抽象方法以便强制子类必须实现。
接口的实现类中,无论是否重写默认方法,都可以通过类似于“接口名.super.默认方法名()”的方式访问父接口的默认方法实现。同时,如果一个类,实现了多个接口,且这些接口中有重名的默认方法,仍然可以通过上述方式访问相应接口的默认方法。由此可见,如果你在设计时发现,接口的子类具有某种共同的行为,你可以将其设计为“默认方法”,此后你则不需要设计抽象类来完成此要求,特别是此接口被多种不同的类实现时,可以避免在多个抽象类重复实现。
2、使接口支持静态方法
在此前,static方法需要声明在类或者抽象类中,接口是不支持的,尽管接口中可以声明public static类型的属性。在接口中支持静态方法,跟“默认方法”一样,我们则不需要在像以前那样使用单独的类或者抽象类来调用此方法,可以直接“接口名.静态方法名”进行调用了,在一定程度上简化了程序设计。
其他重要新特性
一:Lambda表达式(一般格式: ( ) -> { } )
Lambda表达式的本质是函数式接口的实例,其使用条件是接口必须为函数式接口,即接口中只有一个抽象方法!我们可以在一个接口上使用@FunctionalInterface注解,可以检查一个接口是否是函数式接口。




例:如常规Comparator比较器写法

利用Lambda表达式或方法引用可以进行简化


二:方法引用与构造器引用


三:Stream API




(1)创建Stream方式一:通过集合

创建Stream方式二:通过数组


创建Stream方式三:通过Stream的of()

(2)Stream中间操作 :

举例:



举例:将list所有值变为大写


(3)Stream终止操作: 注意:Stream一旦执行完终止操作就不可复用,需要重新生成。(上述举例中的foreach就是终止操作的一种)


例:



四:Optional类


参考:https://www.bilibili.com/video/BV1Kb411W75N?
浙公网安备 33010602011771号