lambda表达式和接口组成与更新

Lambda表达式

使用前提和标准格式
  • Lambda表达式的使用前提
    • 有一个接口
    • 接口中有且仅有一个抽象方法(单接口)
  • 格式:
    (形式参数) -> {代码块}
    • 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
    • ->:由英文中画线和大于符号组成,固定写法。代表指向动作
    • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容
  • 组成Lambda表达式的三要素:
    • 形式参数箭头代码块
public class example_2 {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我是用了内部类");
            }
        }).start();
        new Thread(() -> {
            System.out.println("我是用了lambda表达式");
        }).start();
    }
}

省略模式
  • 省略的规则
    • 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
    • 如果参数有且仅有一个,那么小括号可以省略
    • 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
注意事项
  • 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
  • 必须有上下文环境,才能推导出Lambda对应的接口
    • 根据局部变量的赋值得知Lambda对应的接口
      Runnable r = () -> System.out.println(“Lambda表达式”);
    • 根据调用方法的参数得知Lambda对应的接口
      new Thread(() -> System.out.println(“Lambda表达式”)).start();
表达式和匿名内部类的区别
  • 所需类型不同
    • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
    • Lambda表达式:只能是接口
  • 使用限制不同
    • 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
    • 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
  • 实现原理不同
    • 匿名内部类:编译之后,产生一个单独的.class字节码文件
    • Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

接口组成与更新

接口中默认方法

Java8开始允许接口有默认方法

  • 格式:
    • public default 返回值类型 方法名(参数列表){ }
interface myInterface {
    int show(int x, int y);

    default void pose() {
        System.out.println("我是默认方法");
    }
}
  • 注意事项
    • 默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
    • public可以省略,default不能省略
接口中的静态方法

同样Java8也允许接口有静态方法

  • 格式:
    • public static 返回值类型 方法名(参数列表) { }
interface myInterface {
    int show(int x, int y);

    static void pose() {
        System.out.println("我是默认方法");
    }
}
  • 注意事项
    • 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
    • public可以省略,static不能省略
接口中的私有方法
  • 私有方法产生原因
    Java 9中新增了带方法体的私有方法:Java 8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是Java 9增加私有方法的必然性

  • 格式1:

    • private 返回值类型 方法名(参数列表) { }
  • 格式2:

    • private static 返回值类型 方法名(参数列表) { }
interface myInterface {
    int show(int x, int y);

    default void pose() {
        System.out.println("我是默认方法");
        method();
    }

    private static void method(){
        System.out.println("我是多余的");
    }
}
  • 注意事项
    • 默认方法可以调用私有的静态方法和非静态方法
    • 静态方法只能调用私有的静态方法

CET4P231

  • intimate
  • concede
  • creature
  • sequence
  • probable
  • nucleus
  • optional
  • financial
  • fuss
  • bacon
  • defeat
  • defeat
  • wax
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值