Jdk5 :注解、泛型、for-eanch、并发包出现
Jdk7 :switch中使用String
Jdk8 :推出了Lambda、函数编程等。
这里总结java8种新特性
接口变化
接口可以写普通方法 只需用 default 或者 static(不能被重写) 关键字修饰即可
函数接口的出现
什么是函数接口?
在接口中定义唯一一个抽象方法 或者 用 @Functionalinterface注解修饰的接口统称为函数接口 两者实现并不冲突 注解只是强制约束,只能存在一个抽象方法 唯一抽象方法可以存在static 和默认方法
例如java中已有的函数接口有
多线程中:Runnable 也是一个函数接口 只有一个run抽象方法
Java排序类 Comparator接口
为什么有函数接口的出现呢?
主要是为了Lambda的使用做铺垫
下面来代码简单的演示
新建User接口
@FunctionalInterface
public interface User {
void add(String name);
}
如果不用Lambda表达式方式执行add方法
User u= new User(){
//重新方法
@Override
public void add(String name) {
System.out.println(name);
}
};
u.add("lhl");
这里用Lambda表达式方式执行add方法
//因为接口里面只有一个唯一抽象方法 所以可以使用Lambda表达式
//就相当于默实重写里面的唯一抽象方法
//方式1
User u2= (name) -> {
System.out.println(name);
};
//方式2 可以这样写
//User u2= (name) -> System.out.println(name);
//方式3 使用方法引用方式 默认打印一个参数
//方法引用可以看作是调用特定方法的Lambda的一种快捷写法
//User u2= (System.out::println);
u2.add("lhl");
总结
Lambda表达式的主要作用是简化传统的匿名内部内的写法