07.内部类
1.内部类介绍:
-
内部类就是定义在一个类里面的类
public class Outer{ //内部类 public class Inner }
-
内部类可以访问外部类的私有成员
-
创建内部类对象的格式:
外部类名.内部类名 对象名 = new 外部类对象.new 内部类对象 Outer.Inner oi = new Outer().new Inner()
2.内部类分类
-
静态内部类 :
有static修饰,属于外部类本身,它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已。
创建静态内部类对象的格式是: 外部类名.内部类名 对象名 = new 外部类名.内部类名()
-
匿名内部类 :
匿名内部类本质上是一个特殊的局部内部类(定义在方法内部)
前提:需要存在一个接口或类
public class LambdaTest5 {
public static void main(String[] args) {
useCompare((a, b) -> a==b);
}
public static void useCompare(Compare compare){
boolean result = compare.compare(20,30);
System.out.println(result);
}
08.Lambda表达式
1.Lambda表达式的简介:
-
Lambda表达式介绍:
Lambda表达式是 JDK8 开始后的一种新语法形式。
作用:简化匿名内部类的代码写法public static void main(String[] args) { useCalculator(new Calculator() { @Override public int calc(int a, int b) { return a+b; } }); System.out.println("----------------"); useCalculator((int a,int b)->{return a-b;}); } public static void useCalculator(Calculator calculator) { int result = calculator.calc(10, 20); System.out.println(result); } } interface Calculator { int calc(int a, int b);
2.Lambda表达式的细节:
-
注意 : Lambda 只能操作函数式接口
-
函数式接口 : 有, 且仅有一个抽象方法的接口(可以有多个方法)
可以使用 @FunctionalInterface 注解, 来检查是否是函数式接口
-
Lambda表达式并不是匿名内部类的语法糖,因为匿名内部类会生成新的字节码文件,但是Lambda表达式不会生成新的字节码文件
-
Lambda表达式的省略规则
1.如果 Lambda 表达式中的参数只有一个,可以省略参数小括号 2如果 Lambda 表达式体中只有一条语句,那么可以省略 return,大括号和分号