1.默认方法
1.1.接口中定义的包含方法体的方法,方法名有default关键字做前缀
1.1.1.在任何接口中,无论函数接口还是非函数接口,都可以使用该方法
1.2.Collection接口
1.2.1.stream方法
1.3.Iterable接口
1.3.1.forEach方法
1.4.虚方法
1.5.类中重写的方法优先级高于接口中定义的默认方法
1.5.1.能简化很多继承问题
1.5.2.任何时候,一旦与类中定义的方法产生冲突,都要优先选择类中定义的方法
1.5.3.如果类中重写的方法没有默认方法的优先级高,那么就会破坏已有的实现
1.5.4.为了在接口上向后兼容
2.接口的静态方法
2.1.Stream.of
2.2.Stream.range
2.3.Stream.iterate
3.改变了人们认识类库的方式,接口中的方法也可以包含代码体
4.函数接口的方法
4.1.使用Predicate,调用test方法
4.2.使用Function,调用apply方法
5.基本类型
5.1.int
5.2.内建在语言和运行环境中
5.3.基本的程序构建模块
6.装箱类型
6.1.Integer
6.2.普通的Java类
6.3.对基本类型的一种封装
7.在最坏的情况下,同样大小的数组,Integer[]要比int[]多占用6倍内存
8.装箱
8.1.将基本类型转换为装箱类型
9.拆箱
9.1.将装箱类型转换为基本类型
10.Stream类特殊处理的基本类型
10.1.IntStream
10.2.DoubleStream
10.3.LongStream
10.4.summaryStatistics方法
10.4.1.min
10.4.2.max
10.4.3.average
10.4.4.sum
11.BinaryOperator
11.1.一种特殊的BiFunction类型
11.2.参数的类型和返回值的类型相同
12.目标类型推导规则
12.1.如果只有一个可能的目标类型,由相应函数接口里的参数类型推导得出
12.2.如果有多个可能的目标类型,由最具体的类型推导得出
12.3.如果有多个可能的目标类型且最具体的类型不明确,则需人为指定类型
13.@FunctionalInterface
13.1.每个用作函数接口的接口都应该添加这个注释
13.2.Java中有一些接口,虽然只含一个方法,但并不是为了使用Lambda表达式来实现的
13.3.关闭资源是更改状态的另一种形式
13.4.该注释添加给一个枚举类型、类或另一个注释,或者接口包含不止一个抽象方法,javac就会报错
13.4.1.重构代码时,使用它能很容易发现问题
14.多重继承
14.1.使用super关键字是指向父类
14.2.InterfaceName.super这样的语法指的是继承自父接口的方法
15.三定律
15.1.类胜于接口。如果在继承链中有方法体或抽象的方法声明,那么就可以忽略接口中定义的方法
15.1.1.为了让代码向后兼容
15.2.子类胜于父类。如果一个接口继承了另一个接口,且两个接口都定义了一个默认方法,那么子类中定义的方法胜出
15.3.如果上面两条规则不适用,子类要么需要实现该方法,要么将该方法声明为抽象方法
16.接口和抽象类的区别
16.1.接口允许多重继承,却没有成员变量
16.2.抽象类可以继承成员变量,却不能多重继承
17.Optional
17.1.在一个值可能为空的建模情况下,使用Optional对象能替代使用null值
17.2.为核心类库新设计的一个数据类型,用来替换null值
17.2.1.使用null代表值不存在的最大问题在于NullPointerException
17.3.Optional对象鼓励程序员适时检查变量是否为空,以避免代码缺陷
17.4.它将一个类的API中可能为空的值文档化,这比阅读实现代码要简单很多
17.5.方法
17.5.1.get
17.5.2.orElse
17.5.2.1.当Optional对象为空时,该方法提供了一个备选值
17.5.3.orElseGet
17.5.3.1.接受一个Supplier对象,只有在Optional对象真正为空时才会调用
17.5.4.empty
17.5.5.ofNullable
17.5.5.1.将一个空值转换成Optional对象
17.5.6.isPresent
17.5.6.1.一个Optional对象里是否有值