jdk8学习笔记

JDK8 

全部特性:

1.允许在接口中有默认方法实现
2.Lambda表达式
3.函数式接口
4.方法和构造函数引用
5.Lambda的范围
6.内置函数式接口
7.Streams
8.Parallel Streams
9.Map
10.时间日期API

11.Annotations


Java 8 允许我们使用default关键字,为接口声明添加非抽象的方法实现。这个特性又被称为扩展方法。

于是接口可以这么写……


public interface testInterface {


double addSomething(int a);

default double addSomething(int a,int b){
return a+ b;
}

}


这意味着……接口就是半个抽象类……每个接口可以自带一个实现方法……
以前各种教材里写的接口全部都是非实现方法的定义需要修改了……


Lambda更像是用来简写匿名内部类,匿名方法等等。第一个特性完全就是为了配合lambda语法……


public class LambdaNames {
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); 
public void myFunction(){
Collections.sort(names, new Comparator<String>() { 
@Override 
public int compare(String a, String b) { 
return b.compareTo(a); 

}); 
}

等同于如下代码

public void myLambdaFunction(){
Collections.sort(names,(String a,String b)->{
return b.compareTo(a);
});
}


/**
* 只要一行代码,包含了方法体。你甚至可以连大括号对{}和return关键字都省略不要
*/
public void myLambdaFunction2(){
Collections.sort(names,(String a,String b) -> b.compareTo(a));
}

/*
*Java编译器能够自动识别参数的类型,所以你就可以省略掉类型不写
*/
public void myLambdaFunction3(){
Collections.sort(names,(a,b)->b.compareTo(a));
}


说明:
1、每一个lambda都能够通过一个特定的接口,与一个给定的类型进行匹配。
2、一个所谓的函数式接口必须要有且仅有一个抽象方法声明。
3、每个与之对应的lambda表达式必须要与抽象方法的声明相匹配。
*4、由于默认方法不是抽象的,因此你可以在你的函数式接口里任意添加默认方法。 


5、 任意只包含一个抽象方法的接口,我们都可以用来做成lambda表达式。
6、 为了让你定义的接口满足要求,你应当在接口前加上@FunctionalInterface 标注。
7、编译器会注意到这个标注,如果你的接口中定义了第二个抽象方法的话,编译器会抛出异常。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔avaj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值