了解java8新特性

版权声明:版权有就有吧。 https://blog.csdn.net/m0_38044453/article/details/83242840

1.接口的默认方法

1.1 传统的方法

在java8 之前java中接口里面的方法默认都是public abstact 修饰的抽象方法并且没有方法体。

1.2 static方法

1.使用static修饰接口中的方法并且必须有主体;

2.接口的static方法只能被接口本身调用:接口名.方法名。

3.接口的static方法不能够被子接口继承;

4.接口的static方法不能够被实现类覆写及直接调用;

1.3 default方法

1.使用default修饰接口中的方法并且必须有主体;

2.接口的default方法能够被子类继承

3.接口的default方法能够被实现覆写及直接调用。

4.接口的default方法不仅仅能够被接口本身调用。

扫描二维码关注公众号,回复: 3760787 查看本文章

2. 函数式接口

2.1 什么是函数式接口

函数式接口 就是一个有且仅有一个抽象方法。但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为lambda表达式。

2.2 函数式接口API

JDK1.8 之前已有函数式接口:

Java.lang.Runnable

Java.util.concurent.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 此包中包含了很多类,用来支持java的函数式编程

3. Lambda表达式

3.1 什么是lambda表达式

简单来说:可以看成是对匿名内部类的简写,使用lambda表达式时,接口必须是函数式接口。

3.2 Lambda表达式格式

4. lambda表达式的作用域

在lambda表达式中访问外层作用域和老版本的匿名对象中的方式相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。但如果访问局部变量,要求局部变量必须是final修饰的。

注意:上面代码中一旦匿名内部类中使用了age,age会被自动编辑为final的,lambda表达式和上面一样的。Age因为为final,所以不能被重新赋值。

5. 方法引用

5.1 构造方法引用

准备一个一个Person类,提供一个两个参数的构造方法

准备一个创建Person对象的工厂函数式接口,提供一个获得Person对象的抽象方法。

使用匿名内部类的方式创建一个工厂的实例。

 

5.2 静态方法引用

5.3 实例方法引用

了解java1.8提供了一个函数式接口function

小结:我们看到java8提供的function函数式接口其实通用性非常强大。

猜你喜欢

转载自blog.csdn.net/m0_38044453/article/details/83242840