Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >十七、Java8新特性——Lambda表达式【黑马JavaSE笔记】

十七、Java8新特性——Lambda表达式【黑马JavaSE笔记】

作者头像
啵啵鱼
发布于 2022-11-23 09:47:35
发布于 2022-11-23 09:47:35
25400
代码可运行
举报
运行总次数:0
代码可运行

文章目录

Lambda表达式

(一)体验Lambda表达式

需求:启动一个线程,在控制台输出一句话:多线程启动了

代码演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类改进
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("多线程程序启动了");
            }
        }).start();

        //lambda表达式改进
        new Thread(() -> {
            System.out.println("多线程程序启动了");
        }).start();
    }
}

(二)lambda表达式的标准格式


(三)Lambda表达式的练习

Lambda表达式的使用前提

  • 有一个接口
  • 接口中有且仅有一个抽象方法
练习一:抽象方法无参无返回值
  • 定义一个接口(Eatable),里面定义一个抽象方法:void eat();
  • 定义一个测试类(EatableDemo),在测试类中提供两个方法
  • 一个方法是:useEatable(Eatable e)
  • 一个方法是主方法,在主方法中调用useEatable方法

代码实现:

定义一个接口(Eatable)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package TEMP.TEMP30;

public interface Eatable {
    void eat();
}

定义接口的实现类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class EatableImpl implements Eatable {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}

定义测试类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class EatableDemo {
    public static void main(String[] args) {
        //在主方法中调用useEatable()方法
        Eatable e = new EatableImpl();
        useEatable(e);

        //匿名内部类改进
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("吃苹果");
            }
        });

        //lambda表达式改进
        useEatable(() -> {
            System.out.println("吃苹果");
        });
    }

    private static void useEatable(Eatable e) {
        e.eat();
    }
}

练习二:抽象方法带参无返回值

定义接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Flyable {
    void fly(String s);
}

定义接口实现类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FlyableImpl implements Flyable {
    @Override
    public void fly(String s) {
        System.out.println(s + "飞起来了");
    }
}

定义测试类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FlyableDemo {
    public static void main(String[] args) {
        //调用useFlyable方法
        Flyable f = new FlyableImpl();
        useFlyable(f, "狗");

        //匿名内部类
        useFlyable(new Flyable() {
            @Override
            public void fly(String s) {
                System.out.println(s + "飞起来了");
            }
        }, "猫");

        //lambda表达式改进
        useFlyable((String s) -> {
            System.out.println(s + "飞起来了");
        }, "鱼");
    }

    private static void useFlyable(Flyable f, String s) {
        f.fly(s);
    }
}

练习三:抽象方法带参带返回值

定义接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Addable {
    int add(int x,int y);
}

定义测试类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class AddableDemo {
    public static void main(String[] args) {
        //lambda方法
        useAddable((int x, int y) -> {
           return x + y;
        });
    }

    private static void useAddable(Addable a) {
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
}

(四)Lambda表达式的省略模式

省略规则:

  • 参数类型可以省略,但有多个参数的情况下不能只省略一个
  • 如果参数有且仅有一个,那么可以省略小括号
  • 如果代码块的语句只有一条,可以省略大括号和分号,如果这一条语句有return,想要省略的话return必须要省略掉

(五)Lambda表达式的注意事项

注意事项:

  • 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
  • 必须要有上下文环境,才能推导出Lambda对应的接口 ​ 根据局部变量的赋值得知Lambda对应的接口:Runnable r = () -> System.out.println(“Lambda表达式”); ​ 根据调用方法的参数得知Lambda对应的接口:new Thread(() -> System.out.println(“Lambda表达式”))

(六)Lambda表达式和匿名内部类的区别

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
体验Lambda表达式
通过上面的案例我们可以看到Lambda的便捷之处,而且我们可以看到Lambda其实对标于匿名类的特殊情况
秋落雨微凉
2022/10/25
1720
Java从入门到精通十四(Lambda表达式)
lambda是java8之后的一个新的特性。我当时学java的时候还没有见过这个表达式。主要是lambda简化了代码块,在某些方面,是比匿名内部类更加方便地。但是并不能完全替代匿名内部类。在使用地方面,还是有区别地,具体的,后面说。
兰舟千帆
2022/07/16
2910
Java从入门到精通十四(Lambda表达式)
【愚公系列】2021年12月 Java教学课程 38-Lambda表达式
定义一个接口(Flyable),里面定义一个抽象方法:void fly(String s);
愚公搬代码
2022/01/04
1650
Java学习笔记之Lamdba表达式 接口 方法引用
本文涉及Java知识点有Lambda表达式,接口的组成,接口中的默认方法,接口中的静态方法,接口中的私有方法,方法引用
Jetpropelledsnake21
2022/03/07
3380
内部类、Lambda表达式
内部类:就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,那么叫类B为内部类。
小炜同学
2022/08/20
1970
21天学习挑战赛之Java面向对象接口
Java 9中新增了带方法体的私有方法,这其实在Java 8中就埋下了伏笔:Java 8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是Java 9增加私有方法的必然性
楠羽
2022/11/18
3020
Java8新特性:Lambda表达式
下面举例演示java.util.Comparator<T> 接口的使用场景代码,其中的抽象方法定义为:
小熊学Java
2023/07/12
1620
Java8新特性:Lambda表达式
JAVA零基础小白入门上手教程之day22-JDK新特性
Lambda 表达式是 Java8 新增的重要特性,Lambda 使 Java 具有了类似函数式编程的风格,其实 Lambda 表达式也是一个 “语法糖”,其实质也是由编译器根据表达式推断最终生成原始语法的字节码方式。
张哥编程
2024/12/13
820
JAVA零基础小白入门上手教程之day22-JDK新特性
Java之Lambda表达式详解
实例如下,用匿名内部类和Lambda表达式分别启动一个线程,相对于匿名内部类,我们会发现 Lambda 表达式更简洁
全栈程序员站长
2022/09/08
1.3K0
Java之Lambda表达式详解
Lambda表达式学习笔记
匿名内部类语法冗余,体验了Lambda表达式后,发现Lambda表达式是简化匿名内部类的一种方式。
Java鱼头
2022/10/10
2621
Java中Lambda表达式详解
在数学中,函数就是输入量、输出量的一套计算方案,也就是“拿什么东西,做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式编程则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。
訾博ZiBo
2025/01/06
1600
Lambda表达式
从2014年java8发布到现在已经有几个年头了,现在java11都发布了。公司最近把服务器环境重新搭建了一遍,jdk版本也从7换成了8,终于可以在代码里面写Lambda表达式了。作为一名java开发人员,java8的一些新东西也是必须要掌握的,今天就说说这Lambda表达式的使用。
用户4283147
2022/10/08
5490
Lambda表达式
Java新特性:Lambda表达式
Lambda 表达式(Lambda expression),也可称为闭包(Closure),是 Java(SE)8 中一个重要的新特性。
栗筝i
2023/10/16
3470
Java新特性:Lambda表达式
【JDK8 新特性1】JDK 8 Lambda表达式
当需要启动一个线程去完成任务时,通常会通过 Runnable 接口来定义任务内容,并使用 Thread 类来启动该线程。
叫我阿杰好了
2022/11/07
3840
【JDK8 新特性1】JDK 8 Lambda表达式
【Java8新特性】Lambda表达式基础语法,都在这儿了!!
Lambda表达式在Java语言中引入了 “->” 操作符, “->” 操作符被称为Lambda表达式的操作符或者箭头操作符,它将Lambda表达式分为两部分:
冰河
2020/10/29
3900
【Java8新特性】Lambda表达式基础语法,都在这儿了!!
java之Lambda表达式
上面的一段代码和之前的除了参数传递方式不同,其他都一样,第一段代码用匿名内部类的方式实现参数传递,第二段代码用Lambda表达式实现参数传递。
说故事的五公子
2019/09/11
5730
Lambda表达式
当需要启动一个线程去完成任务时,通常会通过 java.lang.Runnable 接口来定义任务内容,并使用java.lang.Thread 类来启动该线程。代码如下:
咕咕星
2020/08/19
5340
Lambda表达式
1 什么是Lambda表达式
Lambda表达式的语法是非常简洁的,但是Lambda表达式不是随便使用的,使用时有几个条件要特别注 意
用户7630333
2023/12/07
1690
Lambda表达式 & Stream 流 & Java8 新特性
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
收心
2022/01/17
3140
Java8新特性----Lambda表达式详细探讨
​ Lambda是一个匿名函数,可以理解为一段可以传递的代码(将代码像数据一样传递);可以写出更简洁、更灵活的代码;作为一种更紧凑的代码风格,是Java语言表达能力得到提升
大忽悠爱学习
2021/11/15
3060
相关推荐
体验Lambda表达式
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验