一.Java中的编程范式
1.面向对象编程(java是纯面向对象的编程语言,除了基本的数据类型,其他的都是面向对象编程)
2.面向切面编程(AOP,jdk动态代理,cglib动态代理)
3.函数式编程(java 8 中JDK版本中最大变化的版本)
二.函数式接口
- 函数式接口概念:接口中,有且仅有一个没有实现方法,叫函数式接口。
/**
* @author chenjingbing
* 函数式接口,使用@FunctionInterface
* 注解可以标识改接口是函数式接口
*/
@FunctionalInterface
public interface ExampleInterface {
List<String> exampleMethod();
}
- java 8中接口新特性:接口中允许新的关键字 default,使用default关键字修饰的接口中的方法,该方法可以有具体的实现
/**
* @author chenjingbing
*
*/
public interface ExampleInterface {
/**
* 使用default关键字在接口中可以有具体的实现
* @return
*/
default List<String> defaultMethod(){
ArrayList<String> ret = Lists.newArrayList("test1", "test2", "test3");
return ret;
}
}
三.lambda表达式
- lambda表达式:字面上的意思就是一种表达式。这是表达式有一种特定的格式。
()->{}这就是一个简单的lambda表达式
- 函数式接口和lambda表达式之间的关系:
不着急我们一步一步的来分析不着急我们一步一步的来分析
首先思考一个让你通过runnable接口创建一个线程,你会怎么做
- 如果实现runnable接口的实现类中的代码量很少,你会如何的优化:使用匿名类
package com.cjb.center.java8.interfaces;
/**
* @author chenjingbing
用于函数式的接口的测试
*
*/
public class TestMain {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.printf("通过匿名类创建线程");
}
}).start();
}
}
- java 8隆重登场 :首先思考一下runnable是否符合函数式接口的标准
有且仅有一个没有实现的方法完全符合函数式接口的标准
package com.cjb.center.java8.interfaces;
/**
* @author chenjingbing
用于函数式的接口的测试
*
*/
public class TestMain {
public static void main(String[] args) {
Thread threadOne = new Thread(new Runnable() {
@Override
public void run() {
System.out.printf("通过匿名类创建线程");
}
});
// 通过lambda表达式创建runnable接口的实例
Thread threadTwo = new Thread(() -> {
System.out.printf("通过函数式创建的Runnable接口实例");
});
threadTwo.start();
}
}
5.函数式的含义:()
代表函数的参数列表(可以有多个参数)->
是函数特殊的个数{}
是函数具体的实现
6.函数式接口和函数式之间的关系:函数式接口可以使用lamdba表达式书写。
7.lambda表达式好处:简化代码的书写,后期会写到java 8中的流式编程也是依赖lambda表达式。