1.lambda表达式
Lambda 表达式的语法基本结构
(arguments) -> body
有如下几种情况:
参数类型可推导时,不需要指定类型,如
(a) -> System.out.println(a)
只有一个参数且类型可推导时,不强制写 (), 如
a -> System.out.println(a)
参数指定类型时,必须有括号,如 (int a) -> System.out.println(a)
参数可以为空,如 () -> System.out.println(“hello”)
body 需要用 {} 包含语句,当只有一条语句时 {} 可省略
2.Java 8 包 java.util.function包含常用的函数式接口:
Function<T, R> - 函数:输入 T 输出 R
BiFunction<T, U, R> - 函数:输入 T 和 U 输出 R 对象
Predicate<T> - 断言/判断:输入 T 输出 boolean
BiPredicate<T, U> - 断言/判断:输入 T 和 U 输出 boolean
Supplier<T> - 生产者:无输入,输出 T
Consumer<T> - 消费者:输入 T,无输出
BiConsumer<T, U> - 消费者:输入 T 和 U 无输出
UnaryOperator<T> - 单元运算:输入 T 输出 T
BinaryOperator<T> - 二元运算:输入 T 和 T 输出 T
3.内部类
内部类(inner class)是定义在另一个类内部的类。
外层的类成为外部类(outer class).
内部类主要用于事件处理。
使用内部类的原因有以下三个:
内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
内部类能够隐藏起来,不为同一包中的其他类所见。
想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
内部类的声明格式如下:
[修饰符] class outerClass{
…
[修饰符] class innerClass{
…
}
…
}
内部类可以直接访问外部类的成员,包括private成员,但是内部类的成员却不能被外部类直接访问。
在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,如果在该方法和内部类中都未定义过这个变量,内部类中对变量的引用会被传递给外部类对象的引用。